[automerger] Refactor business logic out of SpeedBumpView. am: c60dac8f26

Change-Id: I7e6f2dcc2ad8d52a5b25e69711a1b4dd70c4e91a
diff --git a/.idea/.name b/.idea/.name
index ea3e61b..ca48adf 100644
--- a/.idea/.name
+++ b/.idea/.name
@@ -1 +1 @@
-support (jetpack)
\ No newline at end of file
+support (master)
\ No newline at end of file
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 7b2174e..7dc4050 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -46,6 +46,8 @@
 
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android-support-v*)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/support.aidl)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android-support-customtabs_intermediates/src/)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/android-support-annotations_intermediates)
 
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/OWNERS b/OWNERS
index 0de3634..3126105 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,6 +1,7 @@
 adamp@google.com
 alanv@google.com
 aurimas@google.com
+chet@google.com
 ccraik@google.com
 clarabayarri@google.com
 ilake@google.com
diff --git a/README.md b/README.md
index d34ea7e..f6cdb65 100644
--- a/README.md
+++ b/README.md
@@ -29,12 +29,19 @@
 
 If you see any warnings (red underlines) run `Build > Clean Project`.
 
-## Optional - Full Build
+## Builds
+### Full Build (Optional)
 You can do most of your work from Android Studio, however you can also build the full support library from command line:
 
     cd path/to/checkout/frameworks/support/
     ./gradlew createArchive
 
+### Building Support Library as part of your App build
+If you intend to repeatedly make changes to Support Library and to wish to see
+the results in your app, and you don't want to have to repeatedly build them as
+separate Gradle projects, you can
+[configure your app build to build Support Library too](adding-support-library-as-included-build.md)
+
 ## Running Tests
 
 ### Single Test Class or Method
diff --git a/adding-support-library-as-included-build.md b/adding-support-library-as-included-build.md
new file mode 100644
index 0000000..136929f
--- /dev/null
+++ b/adding-support-library-as-included-build.md
@@ -0,0 +1,32 @@
+# Adding the Support Library Build Within Another Build
+
+Would you like to make a change in Support Library and have it be propagated to
+your downstream Gradle build (generally an app) without having to separately
+build Support Library and then build your application?
+
+## To build Support Library as part of your existing Gradle build
+*   To add the Support Library build
+    *   Add `apply(from: '<support-lib-repo-root>/frameworks/support/include-support-library.gradle')`
+        to your settings.gradle
+        *   See [include-support-library.gradle](include-support-library.gradle)
+            for more information
+*   If your project is an Android app, also update some dependencies:
+    *   Open your local.properties file and update the value of `sdk.dir` .
+        *   It should point to `<support-lib-repo-root>/prebuilts/fullsdk-<platform>` .
+        *   For example, `~/support-library/prebuilts/fullsdk-linux` .
+    *   In your build.gradle, update any versions that refer to previous versions of
+        Support Library.
+        *   To determine the correct version, find the SDK with the highest
+            number among SDKs in the Support Library repo.
+
+                echo <support-lib-repo-root>/prebuilts/fullsdk-linux/platforms/android* | xargs -n 1 echo | sed 's/.*android-//' | tail -n 1
+
+            This should output, for example, "28"
+
+        *   Update dependency versions
+            *   For example, you may want to replace
+                `com.android.support:app-compat-v7:26.0.2` with
+                `com.android.support:app-compat-v7:28.0.2`
+        *   Update configuration given to the Android Gradle plugin
+            *   Check `compileSdkVersion` and make sure its version is correct
+
diff --git a/annotations/Android.mk b/annotations/Android.mk
deleted file mode 100644
index 684a77a..0000000
--- a/annotations/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2013 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android-support-annotations
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/app-toolkit/.idea/.name b/app-toolkit/.idea/.name
index 47bffed..3a1feaa 100644
--- a/app-toolkit/.idea/.name
+++ b/app-toolkit/.idea/.name
@@ -1 +1 @@
-app-toolkit (jetpack)
\ No newline at end of file
+app-toolkit (master)
\ No newline at end of file
diff --git a/app-toolkit/settings.gradle b/app-toolkit/settings.gradle
index 43237a4..18176de 100644
--- a/app-toolkit/settings.gradle
+++ b/app-toolkit/settings.gradle
@@ -113,10 +113,5 @@
 // External
 //
 /////////////////////////////
-if (inAppToolkitProject) {
-    File externalRoot = new File(supportRoot, '../../external')
 
-    includeBuild new File(externalRoot, 'doclava')
-
-    includeBuild new File(externalRoot, 'jdiff')
-}
+apply(from: new File(supportRoot, 'include-composite-deps.gradle'))
diff --git a/build.gradle b/build.gradle
index 84753dd..0307507 100644
--- a/build.gradle
+++ b/build.gradle
@@ -49,6 +49,8 @@
 
 init.setupRelease()
 
+apply from: 'buildSrc/jetify.gradle'
+
 init.enableDoclavaAndJDiff(this, new DacOptions("android/support", "SUPPORT_DATA"))
 
 ///// FLATFOOT START
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index f693884..73cdf37 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -16,7 +16,7 @@
 
 def build_versions = [:]
 
-build_versions.kotlin = '1.2.0'
+build_versions.kotlin = '1.2.20'
 
 rootProject.ext['build_versions'] = build_versions
 
diff --git a/buildSrc/dependencies.gradle b/buildSrc/dependencies.gradle
index fe664e0..baf1ba0 100644
--- a/buildSrc/dependencies.gradle
+++ b/buildSrc/dependencies.gradle
@@ -17,12 +17,7 @@
 def libs = [:]
 
 libs.exclude_annotations_transitive = {
-    exclude module: 'support-annotations'
-    transitive = true
-}
-
-libs.exclude_annotations_transitive = {
-    exclude module: 'support-annotations'
+    exclude group: 'com.android.support'
     transitive = true
 }
 
diff --git a/buildSrc/jetify.gradle b/buildSrc/jetify.gradle
new file mode 100644
index 0000000..6fdc5eb
--- /dev/null
+++ b/buildSrc/jetify.gradle
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+def standaloneProject = project(":jetifier-standalone")
+def jetifierBin = file("${standaloneProject.buildDir}/install/jetifier-standalone/bin/jetifier-standalone")
+
+task jetifyArchive(type: Exec) {
+    description "Produces a zip of jetified artifacts by running Jetifier against top-of-tree*.zip" +
+            " This task only exists to enable dejetifyArchive to have a realistic archive to test " +
+            " with. This task should be deleted once Jetpack exists."
+
+    dependsOn tasks['createArchive']
+    dependsOn ':jetifier-standalone:installDist'
+    inputs.file project.tasks['createArchive'].archivePath
+
+    outputs.file "${buildDir}/top-of-tree-m2-repository-jetified-${project.ext.buildNumber}.zip"
+
+    commandLine ("bash", "-c",
+        "if ${jetifierBin} -s -outputfile ${outputs.files.singleFile} -i ${inputs.files.singleFile}; then\n" +
+        "  echo success;\n" +
+        "else\n" +
+        "  echo jetifyArchive was not expected to work anyway. Ask jeffrygaston@ or pavlis@ to make it work.\n" +
+        "  exit 1\n" +
+        "fi")
+}
+
+task dejetifyArchive(type: Exec) {
+    description "Produces a zip of dejetified artifacts by running Dejetifier against jetified" +
+            " artifacts, for temporary usage by external clients that haven't upgraded to Jetpack" +
+            " yet."
+
+    dependsOn tasks['jetifyArchive']
+    inputs.file project.tasks['jetifyArchive'].outputs.files.singleFile
+
+    outputs.file "${buildDir}/top-of-tree-m2-repository-dejetified-${project.ext.buildNumber}.zip"
+
+
+    commandLine ("${jetifierBin}", "-s", "-outputfile", "${outputs.files.singleFile}",  "-i", "${inputs.files.singleFile}")
+}
+
diff --git a/buildSrc/src/main/kotlin/android/support/LibraryGroups.kt b/buildSrc/src/main/kotlin/android/support/LibraryGroups.kt
index 9c983bb..170462d 100644
--- a/buildSrc/src/main/kotlin/android/support/LibraryGroups.kt
+++ b/buildSrc/src/main/kotlin/android/support/LibraryGroups.kt
@@ -27,4 +27,6 @@
     const val ARCH_CORE = "android.arch.core"
     const val PAGING = "android.arch.paging"
     const val NAVIGATION = "android.arch.navigation"
+    const val SLICES = "androidx.app.slice"
+    const val JETIFIER = "com.android.support.jetifier"
 }
diff --git a/buildSrc/src/main/kotlin/android/support/LibraryVersions.kt b/buildSrc/src/main/kotlin/android/support/LibraryVersions.kt
index a7dd4c4..1d091e1 100644
--- a/buildSrc/src/main/kotlin/android/support/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/android/support/LibraryVersions.kt
@@ -23,7 +23,7 @@
     /**
      * Version code of the support library components.
      */
-    val SUPPORT_LIBRARY = Version("27.1.0-SNAPSHOT")
+    val SUPPORT_LIBRARY = Version("28.0.0-SNAPSHOT")
 
     /**
      * Version code for Room
@@ -76,4 +76,9 @@
      * Version code for shared testing code of flatfoot
      */
     val ARCH_CORE_TESTING = ARCH_CORE
+
+    /**
+     * Version code for Jetifier
+     */
+    val JETIFIER = Version("0.2.0")
 }
diff --git a/buildSrc/src/main/kotlin/android/support/SupportConfig.kt b/buildSrc/src/main/kotlin/android/support/SupportConfig.kt
index b3f0bb0..42b298c 100644
--- a/buildSrc/src/main/kotlin/android/support/SupportConfig.kt
+++ b/buildSrc/src/main/kotlin/android/support/SupportConfig.kt
@@ -24,7 +24,7 @@
     const val DEFAULT_MIN_SDK_VERSION = 14
     const val INSTRUMENTATION_RUNNER = "android.support.test.runner.AndroidJUnitRunner"
     const val BUILD_TOOLS_VERSION = "27.0.3"
-    const val CURRENT_SDK_VERSION = 27
+    const val CURRENT_SDK_VERSION = 28
 
     fun getKeystore(project: Project): File {
         val supportRoot = (project.rootProject.property("ext") as ExtraPropertiesExtension)
diff --git a/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
index ea9edf9..76a1e7f 100644
--- a/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
@@ -30,7 +30,8 @@
 const val JAVAPOET = "com.squareup:javapoet:1.8.0"
 const val JSR250 = "javax.annotation:javax.annotation-api:1.2"
 const val JUNIT = "junit:junit:4.12"
-const val KOTLIN_STDLIB = "org.jetbrains.kotlin:kotlin-stdlib:1.2.0"
+const val KOTLIN_STDLIB = "org.jetbrains.kotlin:kotlin-stdlib:1.2.20"
+const val KOTLIN_METADATA = "me.eugeniomarletti:kotlin-metadata:1.2.1"
 const val LINT = "com.android.tools.lint:lint:26.0.0"
 const val MOCKITO_CORE = "org.mockito:mockito-core:2.7.6"
 const val MULTIDEX = "com.android.support:multidex:1.0.1"
diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/SupportKotlinLibraryPlugin.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/SupportKotlinLibraryPlugin.properties
new file mode 100644
index 0000000..d93c20a
--- /dev/null
+++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/SupportKotlinLibraryPlugin.properties
@@ -0,0 +1 @@
+implementation-class=android.support.SupportKotlinLibraryPlugin
diff --git a/car/Android.mk b/car/Android.mk
index d96733d..6e9eb05 100644
--- a/car/Android.mk
+++ b/car/Android.mk
@@ -18,12 +18,7 @@
 # Applications that use this library must specify
 #
 #   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-car\
-#       android-support-design \
-#       android-support-v4 \
-#       android-support-v7-appcompat \
-#       android-support-v7-cardview \
-#       android-support-v7-recyclerview
+#       $(ANDROID_SUPPORT_CAR_TARGETS)
 #
 # in their makefiles to include the resources and their dependencies in their package.
 include $(CLEAR_VARS)
@@ -34,13 +29,11 @@
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
 LOCAL_JAVA_LIBRARIES := \
-        android-support-annotations
+    android-support-annotations
 LOCAL_SHARED_ANDROID_LIBRARIES := \
-        android-support-design \
-        android-support-v4 \
-        android-support-v7-appcompat \
-        android-support-v7-cardview \
-        android-support-v7-recyclerview
+    $(ANDROID_SUPPORT_DESIGN_TARGETS) \
+    android-support-media-compat \
+    android-support-v7-cardview
 LOCAL_JAR_EXCLUDE_FILES := none
 LOCAL_JAVA_LANGUAGE_VERSION := 1.8
 LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
diff --git a/car/build.gradle b/car/build.gradle
index 90d68f9..163300d 100644
--- a/car/build.gradle
+++ b/car/build.gradle
@@ -9,7 +9,7 @@
 dependencies {
     api project(':appcompat-v7')
     api project(':cardview-v7')
-    api project(':design')
+    api("com.android.support:design:28.0.0-SNAPSHOT", { transitive = false })
     api project(':support-annotations')
     api project(':support-v4')
     api project(':recyclerview-v7')
diff --git a/car/res/drawable/car_card_ripple_background.xml b/car/res/drawable/car_card_ripple_background.xml
index 6d3ad3e..ca20e0f 100644
--- a/car/res/drawable/car_card_ripple_background.xml
+++ b/car/res/drawable/car_card_ripple_background.xml
@@ -16,4 +16,8 @@
   -->
 <ripple
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/car_card_ripple_background" />
\ No newline at end of file
+    android:color="@color/car_card_ripple_background">
+    <item
+        android:id="@android:id/mask"
+        android:drawable="@android:color/white" />
+</ripple>
diff --git a/car/res/drawable/car_card_ripple_background_day.xml b/car/res/drawable/car_card_ripple_background_day.xml
index a4370e9..880ff7a 100644
--- a/car/res/drawable/car_card_ripple_background_day.xml
+++ b/car/res/drawable/car_card_ripple_background_day.xml
@@ -16,4 +16,8 @@
   -->
 <ripple
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/car_card_ripple_background_dark" />
\ No newline at end of file
+    android:color="@color/car_card_ripple_background_dark">
+    <item
+        android:id="@android:id/mask"
+        android:drawable="@android:color/white" />
+</ripple>
diff --git a/car/res/drawable/car_card_ripple_background_inverse.xml b/car/res/drawable/car_card_ripple_background_inverse.xml
index 3c07ecf..e063e2c 100644
--- a/car/res/drawable/car_card_ripple_background_inverse.xml
+++ b/car/res/drawable/car_card_ripple_background_inverse.xml
@@ -16,4 +16,8 @@
   -->
 <ripple
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/car_card_ripple_background_inverse" />
\ No newline at end of file
+    android:color="@color/car_card_ripple_background_inverse" >
+    <item
+        android:id="@android:id/mask"
+        android:drawable="@android:color/white" />
+</ripple>
diff --git a/car/res/drawable/car_card_ripple_background_night.xml b/car/res/drawable/car_card_ripple_background_night.xml
index c1b03c1..5d4f2c6 100644
--- a/car/res/drawable/car_card_ripple_background_night.xml
+++ b/car/res/drawable/car_card_ripple_background_night.xml
@@ -16,4 +16,8 @@
   -->
 <ripple
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/car_card_ripple_background_light" />
\ No newline at end of file
+    android:color="@color/car_card_ripple_background_light">
+    <item
+        android:id="@android:id/mask"
+        android:drawable="@android:color/white" />
+</ripple>
diff --git a/car/res/layout/car_alert_dialog.xml b/car/res/layout/car_alert_dialog.xml
new file mode 100644
index 0000000..63dc70c
--- /dev/null
+++ b/car/res/layout/car_alert_dialog.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+
+<!-- Note: the width is 0dp because ColumnCardView will automatically set a width based
+     on the number of columns it should take up. See ColumnCardView for more details. -->
+<androidx.car.widget.ColumnCardView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_gravity="center"
+    android:layout_width="0dp"
+    android:layout_height="wrap_content"
+    android:elevation="@dimen/car_dialog_elevation"
+    app:cardBackgroundColor="@color/car_card"
+    app:cardCornerRadius="@dimen/car_radius_3">
+
+    <LinearLayout
+        android:id="@+id/content_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/car_keyline_1"
+        android:layout_marginEnd="@dimen/car_keyline_1"
+        android:paddingTop="@dimen/car_padding_4"
+        android:paddingBottom="@dimen/car_padding_4"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/car_dialog_header_height"
+            android:textAppearance="@style/CarTitle2"
+            android:gravity="center_vertical|start"
+            android:maxLines="1"
+            android:ellipsize="end"
+            android:visibility="gone" />
+
+        <TextView
+            android:id="@+id/body"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="@style/CarBody2"
+            android:visibility="gone" />
+
+        <LinearLayout
+            android:id="@+id/button_panel"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/car_dialog_action_bar_height"
+            android:layout_marginTop="@dimen/car_padding_2"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:visibility="gone">
+
+            <Button
+                android:id="@+id/positive_button"
+                android:layout_marginEnd="@dimen/car_padding_4"
+                android:layout_width="wrap_content"
+                android:minWidth="0dp"
+                android:padding="0dp"
+                android:textColor="@color/car_accent"
+                android:visibility="gone"
+                style="@style/Widget.Car.Button.Borderless.Colored" />
+
+            <Button
+                android:id="@+id/negative_button"
+                android:layout_width="wrap_content"
+                android:minWidth="0dp"
+                android:padding="0dp"
+                android:textColor="@color/car_accent"
+                android:visibility="gone"
+                style="@style/Widget.Car.Button.Borderless.Colored" />
+        </LinearLayout>
+    </LinearLayout>
+</androidx.car.widget.ColumnCardView>
diff --git a/car/res/layout/car_list_item_text_content.xml b/car/res/layout/car_list_item_text_content.xml
index 943c489..d560ffe 100644
--- a/car/res/layout/car_list_item_text_content.xml
+++ b/car/res/layout/car_list_item_text_content.xml
@@ -19,7 +19,7 @@
     android:id="@+id/container"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
-    android:foreground="@drawable/car_card_ripple_background">
+    android:background="@drawable/car_card_ripple_background">
     <!-- Primary Action. -->
     <ImageView
         android:id="@+id/primary_icon"
diff --git a/car/res/values/dimens.xml b/car/res/values/dimens.xml
index d397df0..389bed9 100644
--- a/car/res/values/dimens.xml
+++ b/car/res/values/dimens.xml
@@ -103,6 +103,7 @@
     <!-- Dialogs -->
     <dimen name="car_dialog_header_height">@dimen/car_card_header_height</dimen>
     <dimen name="car_dialog_action_bar_height">@dimen/car_card_action_bar_height</dimen>
+    <dimen name="car_dialog_elevation">16dp</dimen>
 
     <!-- Slide Up Menu -->
     <dimen name="car_slide_up_menu_initial_height">76dp</dimen>
diff --git a/car/src/androidTest/java/androidx/car/widget/PagedListViewTest.java b/car/src/androidTest/java/androidx/car/widget/PagedListViewTest.java
index fe56a71..cbb1e1b 100644
--- a/car/src/androidTest/java/androidx/car/widget/PagedListViewTest.java
+++ b/car/src/androidTest/java/androidx/car/widget/PagedListViewTest.java
@@ -89,11 +89,14 @@
 
     private PagedListViewTestActivity mActivity;
     private PagedListView mPagedListView;
+    private ViewGroup.MarginLayoutParams mRecyclerViewLayoutParams;
 
     @Before
     public void setUp() {
         mActivity = mActivityRule.getActivity();
         mPagedListView = mActivity.findViewById(R.id.paged_list_view);
+        mRecyclerViewLayoutParams =
+                (ViewGroup.MarginLayoutParams) mPagedListView.getRecyclerView().getLayoutParams();
 
         // Using deprecated Espresso methods instead of calling it on the IdlingRegistry because
         // the latter does not seem to work as reliably. Specifically, on the latter, it does
@@ -382,6 +385,23 @@
     }
 
     @Test
+    public void testSwipingScrollbarDoesNotScrollList() {
+        if (!isAutoDevice()) {
+            return;
+        }
+
+        // Just need enough items to ensure the scroll bar is showing.
+        setUpPagedListView(ITEMS_PER_PAGE * 10);
+
+        // Swipe on the filler instead of the whole scrollbar because buttons at top/bottom set
+        // OnLongClickListener and thus eat the motion event.
+        onView(withId(R.id.filler)).perform(swipeUp());
+        assertThat(((LinearLayoutManager) mPagedListView.getRecyclerView().getLayoutManager())
+                        .findFirstCompletelyVisibleItemPosition(),
+                is(equalTo(0)));
+    }
+
+    @Test
     public void testSetGutterNone() {
         if (!isAutoDevice()) {
             return;
@@ -392,8 +412,8 @@
 
         mPagedListView.setGutter(PagedListView.Gutter.NONE);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(0)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(0)));
     }
 
     @Test
@@ -410,8 +430,8 @@
         Resources res = InstrumentationRegistry.getContext().getResources();
         int gutterSize = res.getDimensionPixelSize(R.dimen.car_margin);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(gutterSize)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(0)));
     }
 
     @Test
@@ -428,8 +448,8 @@
         Resources res = InstrumentationRegistry.getContext().getResources();
         int gutterSize = res.getDimensionPixelSize(R.dimen.car_margin);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(0)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(gutterSize)));
     }
 
     @Test
@@ -446,8 +466,8 @@
         Resources res = InstrumentationRegistry.getContext().getResources();
         int gutterSize = res.getDimensionPixelSize(R.dimen.car_margin);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(gutterSize)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(gutterSize)));
     }
 
     @Test
@@ -462,8 +482,8 @@
         mPagedListView.setGutter(PagedListView.Gutter.NONE);
         mPagedListView.setGutterSize(120);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(0)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(0)));
     }
 
     @Test
@@ -480,8 +500,8 @@
         int gutterSize = 120;
         mPagedListView.setGutterSize(gutterSize);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(gutterSize)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(0)));
     }
 
     @Test
@@ -498,8 +518,8 @@
         int gutterSize = 120;
         mPagedListView.setGutterSize(gutterSize);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(0)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(0)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(gutterSize)));
     }
 
     @Test
@@ -516,8 +536,8 @@
         int gutterSize = 120;
         mPagedListView.setGutterSize(gutterSize);
 
-        assertThat(mPagedListView.getRecyclerView().getPaddingStart(), is(equalTo(gutterSize)));
-        assertThat(mPagedListView.getRecyclerView().getPaddingEnd(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginStart(), is(equalTo(gutterSize)));
+        assertThat(mRecyclerViewLayoutParams.getMarginEnd(), is(equalTo(gutterSize)));
     }
 
     @Test
diff --git a/car/src/main/java/androidx/car/app/CarAlertDialog.java b/car/src/main/java/androidx/car/app/CarAlertDialog.java
new file mode 100644
index 0000000..6a85546
--- /dev/null
+++ b/car/src/main/java/androidx/car/app/CarAlertDialog.java
@@ -0,0 +1,546 @@
+/*
+ * Copyright (C) 2018 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 androidx.car.app;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+import android.text.TextUtils;
+import android.view.MotionEvent;
+import android.view.TouchDelegate;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.TextView;
+
+import androidx.car.R;
+
+/**
+ * A subclass of {@link Dialog} that is tailored for the car environment. This dialog can display a
+ * title text, body text, and up to two buttons -- a positive and negative button. There is no
+ * affordance for displaying a custom view or list of content, differentiating it from a regular
+ * {@code AlertDialog}.
+ */
+public class CarAlertDialog extends Dialog {
+    private final DialogData mData;
+
+    private final int mTopPadding;
+    private final int mBottomPadding;
+    private final int mButtonMinWidth;
+    private final int mButtonSpacing;
+
+    private View mContentView;
+    private TextView mTitleView;
+    private TextView mBodyView;
+
+    private View mButtonPanel;
+    private Button mPositiveButton;
+    private Button mNegativeButton;
+    private ButtonPanelTouchDelegate mButtonPanelTouchDelegate;
+
+    private CarAlertDialog(Context context, DialogData data) {
+        super(context);
+        mData = data;
+
+        Resources res = context.getResources();
+        mTopPadding = res.getDimensionPixelSize(R.dimen.car_padding_4);
+        mBottomPadding = res.getDimensionPixelSize(R.dimen.car_padding_4);
+        mButtonMinWidth = res.getDimensionPixelSize(R.dimen.car_button_min_width);
+        mButtonSpacing = res.getDimensionPixelSize(R.dimen.car_padding_4);
+    }
+
+    @Override
+    public void setTitle(CharSequence title) {
+        // Ideally this method should be private; the dialog should only be modifiable through the
+        // Builder. Unfortunately, this method is defined with the Dialog itself and is public.
+        // So, throw an error if this method is ever called. setTitleInternal() should be used
+        // to set the title within this class.
+        throw new UnsupportedOperationException("Title should only be set from the Builder");
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        Window window = getWindow();
+        window.setContentView(R.layout.car_alert_dialog);
+
+        // By default, the decor background is white. Set this to be transparent so that
+        // the dialog can have rounded corners and will show the background.
+        window.getDecorView().setBackgroundColor(Color.TRANSPARENT);
+
+        initializeViews();
+        initializeDialogWithData();
+    }
+
+    private void setTitleInternal(CharSequence title) {
+        boolean hasTitle = !TextUtils.isEmpty(title);
+
+        mTitleView.setText(title);
+        mTitleView.setVisibility(hasTitle ? View.VISIBLE : View.GONE);
+
+        // If there's a title, then remove the padding at the top of the content view.
+        int topPadding = hasTitle ? 0 : mTopPadding;
+        mContentView.setPaddingRelative(
+                mContentView.getPaddingStart(),
+                topPadding,
+                mContentView.getPaddingEnd(),
+                mContentView.getPaddingBottom());
+    }
+
+    private void setBody(CharSequence body) {
+        mBodyView.setText(body);
+        mBodyView.setVisibility(TextUtils.isEmpty(body) ? View.GONE : View.VISIBLE);
+    }
+
+    private void setPositiveButton(CharSequence text) {
+        boolean showButton = !TextUtils.isEmpty(text);
+
+        mPositiveButton.setText(text);
+        mPositiveButton.setVisibility(showButton ? View.VISIBLE : View.GONE);
+
+        updateTargetTargetForButton(mPositiveButton);
+        updateButtonPanelVisibility();
+        updateButtonSpacing();
+    }
+
+    private void setNegativeButton(CharSequence text) {
+        mNegativeButton.setText(text);
+        mNegativeButton.setVisibility(TextUtils.isEmpty(text) ? View.GONE : View.VISIBLE);
+
+        updateTargetTargetForButton(mNegativeButton);
+        updateButtonPanelVisibility();
+        updateButtonSpacing();
+    }
+
+    /**
+     * Checks if the given view that represents a positive or negative button currently meets the
+     * minimum touch target size that is dictated by {@link #mButtonMinWidth}. If it does not, then
+     * this method will utilize a {@link TouchDelegate} to expand the touch target size of that
+     * button.
+     *
+     * @param button One of {@link #mPositiveButton} or {@link #mNegativeButton}.
+     */
+    private void updateTargetTargetForButton(View button) {
+        if (button != mPositiveButton && button != mNegativeButton) {
+            throw new IllegalArgumentException("Method must be passed one of mPositiveButton or "
+                    + "mNegativeButton");
+        }
+
+        if (button.getVisibility() != View.VISIBLE) {
+            return;
+        }
+
+        // The TouchDelegate needs to be set after the panel has been laid out in order to get the
+        // hit Rect.
+        mButtonPanel.post(() -> {
+            Rect rect = new Rect();
+            button.getHitRect(rect);
+
+            int hitWidth = Math.abs(rect.right - rect.left);
+
+            TouchDelegate touchDelegate = null;
+
+            // If the button does not meet the minimum requirements for touch target size, then
+            // expand its hit area with a TouchDelegate.
+            if (hitWidth < mButtonMinWidth) {
+                int amountToIncrease = (mButtonMinWidth - hitWidth) / 2;
+                rect.left -= amountToIncrease;
+                rect.right += amountToIncrease;
+
+                touchDelegate = new TouchDelegate(rect, button);
+            }
+
+            if (button == mPositiveButton) {
+                mButtonPanelTouchDelegate.setPositiveButtonDelegate(touchDelegate);
+            } else {
+                mButtonPanelTouchDelegate.setNegativeButtonDelegate(touchDelegate);
+            }
+        });
+    }
+
+    /**
+     * Checks if spacing should be added between the positive and negative button. The spacing is
+     * only needed if both buttons are visible.
+     */
+    private void updateButtonSpacing() {
+        int marginEnd;
+
+        // If both buttons are visible, then there needs to be spacing between them.
+        if ((mPositiveButton.getVisibility() == View.VISIBLE
+                && mNegativeButton.getVisibility() == View.VISIBLE)) {
+            marginEnd = mButtonSpacing;
+        } else {
+            marginEnd = 0;
+        }
+
+        ViewGroup.MarginLayoutParams layoutParams =
+                (ViewGroup.MarginLayoutParams) mPositiveButton.getLayoutParams();
+        layoutParams.setMarginEnd(marginEnd);
+        mPositiveButton.requestLayout();
+    }
+
+    /**
+     * Toggles whether or not the panel containing the action buttons are visible depending on if
+     * a button should be shown.
+     */
+    private void updateButtonPanelVisibility() {
+        boolean hasButtons = mPositiveButton.getVisibility() == View.VISIBLE
+                || mNegativeButton.getVisibility() == View.VISIBLE;
+
+        int visibility = hasButtons ? View.VISIBLE : View.GONE;
+
+        // Visibility is already correct, so nothing further needs to be done.
+        if (mButtonPanel.getVisibility() == visibility) {
+            return;
+        }
+
+        mButtonPanel.setVisibility(visibility);
+
+        // If there are buttons, then remove the padding at the bottom of the content view.
+        int buttonPadding = hasButtons ? 0 : mBottomPadding;
+        mContentView.setPaddingRelative(
+                mContentView.getPaddingStart(),
+                mContentView.getPaddingTop(),
+                mContentView.getPaddingEnd(),
+                buttonPadding);
+    }
+
+    /**
+     * Looks through the {@link DialogData} that was passed to this dialog and initialize its
+     * contents based on what data is present.
+     */
+    private void initializeDialogWithData() {
+        setTitleInternal(mData.mTitle);
+        setBody(mData.mBody);
+        setPositiveButton(mData.mPositiveButtonText);
+        setNegativeButton(mData.mNegativeButtonText);
+    }
+
+    /**
+     * Initializes the views within the dialog that are modifiable based on the data that has been
+     * set on it. Also responsible for hooking up listeners for button clicks.
+     */
+    private void initializeViews() {
+        Window window = getWindow();
+
+        mContentView = window.findViewById(R.id.content_view);
+        mTitleView = window.findViewById(R.id.title);
+        mBodyView = window.findViewById(R.id.body);
+
+        mButtonPanel = window.findViewById(R.id.button_panel);
+        mButtonPanelTouchDelegate = new ButtonPanelTouchDelegate(mButtonPanel);
+        mButtonPanel.setTouchDelegate(mButtonPanelTouchDelegate);
+
+        mPositiveButton = window.findViewById(R.id.positive_button);
+        mNegativeButton = window.findViewById(R.id.negative_button);
+
+        mPositiveButton.setOnClickListener(v -> onPositiveButtonClick());
+        mNegativeButton.setOnClickListener(v -> onNegativeButtonClick());
+    }
+
+    /** Delegates to a listener on the positive button if it exists or dismisses the dialog. */
+    private void onPositiveButtonClick() {
+        if (mData.mPositiveButtonListener != null) {
+            mData.mPositiveButtonListener.onClick(this /* dialog */, BUTTON_POSITIVE);
+        } else {
+            dismiss();
+        }
+    }
+
+    /** Delegates to a listener on the negative button if it exists or dismisses the dialog. */
+    private void onNegativeButtonClick() {
+        if (mData.mNegativeButtonListener != null) {
+            mData.mNegativeButtonListener.onClick(this /* dialog */, BUTTON_NEGATIVE);
+        } else {
+            dismiss();
+        }
+    }
+
+    /**
+     * A composite {@link TouchDelegate} for a button panel that has two buttons. It can hold
+     * multiple {@code TouchDelegate}s and will delegate out touch events to each.
+     */
+    private static final class ButtonPanelTouchDelegate extends TouchDelegate {
+        @Nullable private TouchDelegate mPositiveButtonDelegate;
+        @Nullable private TouchDelegate mNegativeButtonDelegate;
+
+        ButtonPanelTouchDelegate(View view) {
+            super(new Rect(), view);
+        }
+
+        public void setPositiveButtonDelegate(@Nullable TouchDelegate delegate) {
+            mPositiveButtonDelegate = delegate;
+        }
+
+        public void setNegativeButtonDelegate(@Nullable TouchDelegate delegate) {
+            mNegativeButtonDelegate = delegate;
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent event) {
+            boolean result = false;
+            float x = event.getX();
+            float y = event.getY();
+            event.setLocation(x, y);
+
+            if (mPositiveButtonDelegate != null) {
+                result = mPositiveButtonDelegate.onTouchEvent(event);
+            }
+
+            if (mNegativeButtonDelegate != null) {
+                result |= mNegativeButtonDelegate.onTouchEvent(event);
+            }
+
+            return result;
+        }
+    }
+
+    /**
+     * A class that holds the data that is settable by the {@link Builder} and should be displayed
+     * in the {@link CarAlertDialog}.
+     */
+    private static class DialogData {
+        private CharSequence mTitle;
+        private CharSequence mBody;
+        private CharSequence mPositiveButtonText;
+        private OnClickListener mPositiveButtonListener;
+        private CharSequence mNegativeButtonText;
+        private OnClickListener mNegativeButtonListener;
+    }
+
+    /**
+     * Builder class that can be used to create a {@link CarAlertDialog} by configuring the options
+     * for what shows up in the resulting dialog.
+     */
+    public static class Builder {
+        private final Context mContext;
+        private final DialogData mDialogData;
+
+        private boolean mCancelable = true;
+        private OnCancelListener mOnCancelListener;
+        private OnDismissListener mOnDismissListener;
+
+        /**
+         * Creates a new instance of the {@code Builder}.
+         *
+         * @param context The {@code Context} that the dialog is to be created in.
+         */
+        public Builder(Context context) {
+            mContext = context;
+            mDialogData = new DialogData();
+        }
+
+        /**
+         * Sets the main title of the dialog to be the given string resource.
+         *
+         * @param titleId The resource id of the string to be used as the title.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setTitle(@StringRes int titleId) {
+            mDialogData.mTitle = mContext.getString(titleId);
+            return this;
+        }
+
+        /**
+         * Sets the main title of the dialog for be the given string.
+         *
+         * @param title The string to be used as the title.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setTitle(CharSequence title) {
+            mDialogData.mTitle = title;
+            return this;
+        }
+
+        /**
+         * Sets the body text of the dialog to be the given string resource.
+         *
+         * @param bodyId The resource id of the string to be used as the body text.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setBody(@StringRes int bodyId) {
+            mDialogData.mBody = mContext.getString(bodyId);
+            return this;
+        }
+
+        /**
+         * Sets the body text of the dialog to be the given string.
+         *
+         * @param body The string to be used as the body text.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setBody(CharSequence body) {
+            mDialogData.mBody = body;
+            return this;
+        }
+
+        /**
+         * Sets the text of the positive button and the listener that will be invoked when the
+         * button is pressed. If a listener is not provided, then the dialog will dismiss itself
+         * when the positive button is clicked.
+         *
+         * <p>The positive button should be used to accept and continue with the action (e.g.
+         * an "OK" action).
+         *
+         * @param textId The resource id of the string to be used for the positive button text.
+         * @param listener A {@link OnClickListener} to be invoked when the button is clicked. Can
+         *                 be {@code null} to represent no listener.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setPositiveButton(@StringRes int textId,
+                @Nullable OnClickListener listener) {
+            mDialogData.mPositiveButtonText = mContext.getString(textId);
+            mDialogData.mPositiveButtonListener = listener;
+            return this;
+        }
+
+        /**
+         * Sets the text of the positive button and the listener that will be invoked when the
+         * button is pressed. If a listener is not provided, then the dialog will dismiss itself
+         * when the positive button is clicked.
+         *
+         * <p>The positive button should be used to accept and continue with the action (e.g.
+         * an "OK" action).
+         *
+         * @param text The string to be used for the positive button text.
+         * @param listener A {@link OnClickListener} to be invoked when the button is clicked. Can
+         *                 be {@code null} to represent no listener.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setPositiveButton(CharSequence text, @Nullable OnClickListener listener) {
+            mDialogData.mPositiveButtonText = text;
+            mDialogData.mPositiveButtonListener = listener;
+            return this;
+        }
+
+        /**
+         * Sets the text of the negative button and the listener that will be invoked when the
+         * button is pressed. If a listener is not provided, then the dialog will dismiss itself
+         * when the negative button is clicked.
+         *
+         * <p>The negative button should be used to cancel any actions the dialog represents.
+         *
+         * @param textId The resource id of the string to be used for the negative button text.
+         * @param listener A {@link OnClickListener} to be invoked when the button is clicked. Can
+         *                 be {@code null} to represent no listener.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setNegativeButton(@StringRes int textId,
+                @Nullable OnClickListener listener) {
+            mDialogData.mNegativeButtonText = mContext.getString(textId);
+            mDialogData.mNegativeButtonListener = listener;
+            return this;
+        }
+
+        /**
+         * Sets the text of the negative button and the listener that will be invoked when the
+         * button is pressed. If a listener is not provided, then the dialog will dismiss itself
+         * when the negative button is clicked.
+         *
+         * <p>The negative button should be used to cancel any actions the dialog represents.
+         *
+         * @param text The string to be used for the negative button text.
+         * @param listener A {@link OnClickListener} to be invoked when the button is clicked. Can
+         *                 be {@code null} to represent no listener.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setNegativeButton(CharSequence text, @Nullable OnClickListener listener) {
+            mDialogData.mNegativeButtonText = text;
+            mDialogData.mNegativeButtonListener = listener;
+            return this;
+        }
+
+        /**
+         * Sets whether the dialog is cancelable or not. Default is {@code true}.
+         *
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setCancelable(boolean cancelable) {
+            mCancelable = cancelable;
+            return this;
+        }
+
+        /**
+         * Sets the callback that will be called if the dialog is canceled.
+         *
+         * <p>Even in a cancelable dialog, the dialog may be dismissed for reasons other than
+         * being canceled or one of the supplied choices being selected.
+         * If you are interested in listening for all cases where the dialog is dismissed
+         * and not just when it is canceled, see {@link #setOnDismissListener(OnDismissListener)}.
+         *
+         * @param onCancelListener The listener to be invoked when this dialog is canceled.
+         * @return This {@code Builder} object to allow for chaining of calls.
+         *
+         * @see #setCancelable(boolean)
+         * @see #setOnDismissListener(OnDismissListener)
+         */
+        public Builder setOnCancelListener(OnCancelListener onCancelListener) {
+            mOnCancelListener = onCancelListener;
+            return this;
+        }
+
+        /**
+         * Sets the callback that will be called when the dialog is dismissed for any reason.
+         *
+         * @return This {@code Builder} object to allow for chaining of calls.
+         */
+        public Builder setOnDismissListener(OnDismissListener onDismissListener) {
+            mOnDismissListener = onDismissListener;
+            return this;
+        }
+
+        /**
+         * Creates an {@link CarAlertDialog} with the arguments supplied to this {@code Builder}.
+         *
+         * <p>Calling this method does not display the dialog. If no additional processing is
+         * needed, {@link #show()} may be called instead to both create and display the dialog.
+         */
+        public CarAlertDialog create() {
+            CarAlertDialog dialog = new CarAlertDialog(mContext, mDialogData);
+
+            dialog.setCancelable(mCancelable);
+            dialog.setCanceledOnTouchOutside(mCancelable);
+            dialog.setOnCancelListener(mOnCancelListener);
+            dialog.setOnDismissListener(mOnDismissListener);
+
+            return dialog;
+        }
+
+        /**
+         * Creates an {@link CarAlertDialog} with the arguments supplied to this {@code Builder}
+         * and immediately displays the dialog.
+         *
+         * <p>Calling this method is functionally identical to:
+         * <pre>
+         *     CarAlertDialog dialog = new CarAlertDialog.Builder().create();
+         *     dialog.show();
+         * </pre>
+         */
+        public CarAlertDialog show() {
+            CarAlertDialog dialog = create();
+            dialog.show();
+            return dialog;
+        }
+    }
+}
diff --git a/car/src/main/java/androidx/car/widget/PagedListView.java b/car/src/main/java/androidx/car/widget/PagedListView.java
index 654cba9..1f0f9df 100644
--- a/car/src/main/java/androidx/car/widget/PagedListView.java
+++ b/car/src/main/java/androidx/car/widget/PagedListView.java
@@ -296,12 +296,6 @@
             mRecyclerView.addItemDecoration(new TopOffsetDecoration(listContentTopMargin));
         }
 
-        // Set this to true so that this view consumes clicks events and views underneath
-        // don't receive this click event. Without this it's possible to click places in the
-        // view that don't capture the event, and as a result, elements visually hidden consume
-        // the event.
-        setClickable(true);
-
         // Set focusable false explicitly to handle the behavior change in Android O where
         // clickable view becomes focusable by default.
         setFocusable(false);
@@ -391,19 +385,24 @@
     public void setGutter(@Gutter int gutter) {
         mGutter = gutter;
 
-        int startPadding = 0;
-        int endPadding = 0;
+        int startMargin = 0;
+        int endMargin = 0;
         if ((mGutter & Gutter.START) != 0) {
-            startPadding = mGutterSize;
+            startMargin = mGutterSize;
         }
         if ((mGutter & Gutter.END) != 0) {
-            endPadding = mGutterSize;
+            endMargin = mGutterSize;
         }
-        mRecyclerView.setPaddingRelative(startPadding, 0, endPadding, 0);
+        MarginLayoutParams layoutParams = (MarginLayoutParams) mRecyclerView.getLayoutParams();
+        layoutParams.setMarginStart(startMargin);
+        layoutParams.setMarginEnd(endMargin);
+        // requestLayout() isn't sufficient because we also need to resolveLayoutParams().
+        mRecyclerView.setLayoutParams(layoutParams);
 
         // If there's a gutter, set ClipToPadding to false so that CardView's shadow will still
         // appear outside of the padding.
-        mRecyclerView.setClipToPadding(startPadding == 0 && endPadding == 0);
+        mRecyclerView.setClipToPadding(startMargin == 0 && endMargin == 0);
+
     }
 
     /**
diff --git a/compat/Android.mk b/compat/Android.mk
deleted file mode 100644
index 720a1eb..0000000
--- a/compat/Android.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-# 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)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-compat
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-compat
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src/main/java
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,src/main/java) \
-    $(call all-Iaidl-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    apptoolkit-arch-core-common \
-    apptoolkit-lifecycle-common \
-    apptoolkit-lifecycle-runtime
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/compat/api/27.1.0.txt b/compat/api/27.1.0.txt
new file mode 100644
index 0000000..81a85b8
--- /dev/null
+++ b/compat/api/27.1.0.txt
@@ -0,0 +1,2421 @@
+package android.support.v13.view {
+
+  public final class DragAndDropPermissionsCompat {
+    method public void release();
+  }
+
+  public class DragStartHelper {
+    ctor public DragStartHelper(android.view.View, android.support.v13.view.DragStartHelper.OnDragStartListener);
+    method public void attach();
+    method public void detach();
+    method public void getTouchPosition(android.graphics.Point);
+    method public boolean onLongClick(android.view.View);
+    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+  }
+
+  public static abstract interface DragStartHelper.OnDragStartListener {
+    method public abstract boolean onDragStart(android.view.View, android.support.v13.view.DragStartHelper);
+  }
+
+}
+
+package android.support.v13.view.inputmethod {
+
+  public final class EditorInfoCompat {
+    ctor public EditorInfoCompat();
+    method public static java.lang.String[] getContentMimeTypes(android.view.inputmethod.EditorInfo);
+    method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, java.lang.String[]);
+    field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+    field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+  }
+
+  public final class InputConnectionCompat {
+    ctor public InputConnectionCompat();
+    method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+    method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, android.support.v13.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+    field public static int INPUT_CONTENT_GRANT_READ_URI_PERMISSION;
+  }
+
+  public static abstract interface InputConnectionCompat.OnCommitContentListener {
+    method public abstract boolean onCommitContent(android.support.v13.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle);
+  }
+
+  public final class InputContentInfoCompat {
+    ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri);
+    method public android.net.Uri getContentUri();
+    method public android.content.ClipDescription getDescription();
+    method public android.net.Uri getLinkUri();
+    method public void releasePermission();
+    method public void requestPermission();
+    method public java.lang.Object unwrap();
+    method public static android.support.v13.view.inputmethod.InputContentInfoCompat wrap(java.lang.Object);
+  }
+
+}
+
+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 int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+    method public static java.lang.String loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
+    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 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 protected ActivityCompat();
+    method public static void finishAffinity(android.app.Activity);
+    method public static void finishAfterTransition(android.app.Activity);
+    method public static android.net.Uri getReferrer(android.app.Activity);
+    method public static deprecated boolean invalidateOptionsMenu(android.app.Activity);
+    method public static void postponeEnterTransition(android.app.Activity);
+    method public static android.support.v13.view.DragAndDropPermissionsCompat requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
+    method public static void requestPermissions(android.app.Activity, java.lang.String[], int);
+    method public static <T extends android.view.View> T requireViewById(android.app.Activity, 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 void setPermissionCompatDelegate(android.support.v4.app.ActivityCompat.PermissionCompatDelegate);
+    method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String);
+    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 static abstract interface ActivityCompat.PermissionCompatDelegate {
+    method public abstract boolean onActivityResult(android.app.Activity, int, int, android.content.Intent);
+    method public abstract boolean requestPermissions(android.app.Activity, java.lang.String[], int);
+  }
+
+  public final class ActivityManagerCompat {
+    method public static boolean isLowRamDevice(android.app.ActivityManager);
+  }
+
+  public class ActivityOptionsCompat {
+    ctor protected ActivityOptionsCompat();
+    method public android.graphics.Rect getLaunchBounds();
+    method public static android.support.v4.app.ActivityOptionsCompat makeBasic();
+    method public static android.support.v4.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+    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 makeTaskLaunchBehind();
+    method public static android.support.v4.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+    method public void requestUsageTimeReport(android.app.PendingIntent);
+    method public android.support.v4.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect);
+    method public android.os.Bundle toBundle();
+    method public void update(android.support.v4.app.ActivityOptionsCompat);
+    field public static final java.lang.String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+    field public static final java.lang.String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+  }
+
+  public final class AlarmManagerCompat {
+    method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
+    method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+    method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
+    method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
+  }
+
+  public final class AppOpsManagerCompat {
+    method public static int noteOp(android.content.Context, java.lang.String, int, java.lang.String);
+    method public static int noteOpNoThrow(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 int noteProxyOpNoThrow(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_ERRORED = 2; // 0x2
+    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 abstract class JobIntentService extends android.app.Service {
+    ctor public JobIntentService();
+    method public static void enqueueWork(android.content.Context, java.lang.Class, int, android.content.Intent);
+    method public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
+    method public boolean isStopped();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method protected abstract void onHandleWork(android.content.Intent);
+    method public boolean onStopCurrentWork();
+    method public void setInterruptIfStopped(boolean);
+  }
+
+  public class NotificationCompat {
+    ctor public NotificationCompat();
+    method public static android.support.v4.app.NotificationCompat.Action getAction(android.app.Notification, int);
+    method public static int getActionCount(android.app.Notification);
+    method public static int getBadgeIconType(android.app.Notification);
+    method public static java.lang.String getCategory(android.app.Notification);
+    method public static java.lang.String getChannelId(android.app.Notification);
+    method public static android.os.Bundle getExtras(android.app.Notification);
+    method public static java.lang.String getGroup(android.app.Notification);
+    method public static int getGroupAlertBehavior(android.app.Notification);
+    method public static boolean getLocalOnly(android.app.Notification);
+    method public static java.lang.String getShortcutId(android.app.Notification);
+    method public static java.lang.String getSortKey(android.app.Notification);
+    method public static long getTimeoutAfter(android.app.Notification);
+    method public static boolean isGroupSummary(android.app.Notification);
+    field public static final int BADGE_ICON_LARGE = 2; // 0x2
+    field public static final int BADGE_ICON_NONE = 0; // 0x0
+    field public static final int BADGE_ICON_SMALL = 1; // 0x1
+    field public static final java.lang.String CATEGORY_ALARM = "alarm";
+    field public static final java.lang.String CATEGORY_CALL = "call";
+    field public static final java.lang.String CATEGORY_EMAIL = "email";
+    field public static final java.lang.String CATEGORY_ERROR = "err";
+    field public static final java.lang.String CATEGORY_EVENT = "event";
+    field public static final java.lang.String CATEGORY_MESSAGE = "msg";
+    field public static final java.lang.String CATEGORY_PROGRESS = "progress";
+    field public static final java.lang.String CATEGORY_PROMO = "promo";
+    field public static final java.lang.String CATEGORY_RECOMMENDATION = "recommendation";
+    field public static final java.lang.String CATEGORY_REMINDER = "reminder";
+    field public static final java.lang.String CATEGORY_SERVICE = "service";
+    field public static final java.lang.String CATEGORY_SOCIAL = "social";
+    field public static final java.lang.String CATEGORY_STATUS = "status";
+    field public static final java.lang.String CATEGORY_SYSTEM = "sys";
+    field public static final java.lang.String CATEGORY_TRANSPORT = "transport";
+    field public static final int COLOR_DEFAULT = 0; // 0x0
+    field public static final int DEFAULT_ALL = -1; // 0xffffffff
+    field public static final int DEFAULT_LIGHTS = 4; // 0x4
+    field public static final int DEFAULT_SOUND = 1; // 0x1
+    field public static final int DEFAULT_VIBRATE = 2; // 0x2
+    field public static final java.lang.String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+    field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+    field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
+    field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+    field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+    field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
+    field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon";
+    field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+    field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession";
+    field public static final java.lang.String EXTRA_MESSAGES = "android.messages";
+    field public static final java.lang.String EXTRA_PEOPLE = "android.people";
+    field public static final java.lang.String EXTRA_PICTURE = "android.picture";
+    field public static final java.lang.String EXTRA_PROGRESS = "android.progress";
+    field public static final java.lang.String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+    field public static final java.lang.String EXTRA_PROGRESS_MAX = "android.progressMax";
+    field public static final java.lang.String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+    field public static final java.lang.String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+    field public static final java.lang.String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+    field public static final java.lang.String EXTRA_SHOW_WHEN = "android.showWhen";
+    field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon";
+    field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText";
+    field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText";
+    field public static final java.lang.String EXTRA_TEMPLATE = "android.template";
+    field public static final java.lang.String EXTRA_TEXT = "android.text";
+    field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines";
+    field public static final java.lang.String EXTRA_TITLE = "android.title";
+    field public static final java.lang.String EXTRA_TITLE_BIG = "android.title.big";
+    field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+    field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+    field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+    field public static final deprecated int FLAG_HIGH_PRIORITY = 128; // 0x80
+    field public static final int FLAG_INSISTENT = 4; // 0x4
+    field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+    field public static final int FLAG_NO_CLEAR = 32; // 0x20
+    field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+    field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+    field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+    field public static final int GROUP_ALERT_ALL = 0; // 0x0
+    field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+    field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+    field public static final int PRIORITY_DEFAULT = 0; // 0x0
+    field public static final int PRIORITY_HIGH = 1; // 0x1
+    field public static final int PRIORITY_LOW = -1; // 0xffffffff
+    field public static final int PRIORITY_MAX = 2; // 0x2
+    field public static final int PRIORITY_MIN = -2; // 0xfffffffe
+    field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+    field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+    field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+    field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+  }
+
+  public static class NotificationCompat.Action {
+    ctor public NotificationCompat.Action(int, java.lang.CharSequence, android.app.PendingIntent);
+    method public android.app.PendingIntent getActionIntent();
+    method public boolean getAllowGeneratedReplies();
+    method public android.support.v4.app.RemoteInput[] getDataOnlyRemoteInputs();
+    method public android.os.Bundle getExtras();
+    method public int getIcon();
+    method public android.support.v4.app.RemoteInput[] getRemoteInputs();
+    method public java.lang.CharSequence getTitle();
+    field public android.app.PendingIntent actionIntent;
+    field public int icon;
+    field public java.lang.CharSequence title;
+  }
+
+  public static final class NotificationCompat.Action.Builder {
+    ctor public NotificationCompat.Action.Builder(int, java.lang.CharSequence, android.app.PendingIntent);
+    ctor public NotificationCompat.Action.Builder(android.support.v4.app.NotificationCompat.Action);
+    method public android.support.v4.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle);
+    method public android.support.v4.app.NotificationCompat.Action.Builder addRemoteInput(android.support.v4.app.RemoteInput);
+    method public android.support.v4.app.NotificationCompat.Action build();
+    method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Extender);
+    method public android.os.Bundle getExtras();
+    method public android.support.v4.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+  }
+
+  public static abstract interface NotificationCompat.Action.Extender {
+    method public abstract android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+  }
+
+  public static final class NotificationCompat.Action.WearableExtender implements android.support.v4.app.NotificationCompat.Action.Extender {
+    ctor public NotificationCompat.Action.WearableExtender();
+    ctor public NotificationCompat.Action.WearableExtender(android.support.v4.app.NotificationCompat.Action);
+    method public android.support.v4.app.NotificationCompat.Action.WearableExtender clone();
+    method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
+    method public java.lang.CharSequence getCancelLabel();
+    method public java.lang.CharSequence getConfirmLabel();
+    method public boolean getHintDisplayActionInline();
+    method public boolean getHintLaunchesActivity();
+    method public java.lang.CharSequence getInProgressLabel();
+    method public boolean isAvailableOffline();
+    method public android.support.v4.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
+    method public android.support.v4.app.NotificationCompat.Action.WearableExtender setCancelLabel(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Action.WearableExtender setConfirmLabel(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
+    method public android.support.v4.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
+    method public android.support.v4.app.NotificationCompat.Action.WearableExtender setInProgressLabel(java.lang.CharSequence);
+  }
+
+  public static class NotificationCompat.BigPictureStyle extends android.support.v4.app.NotificationCompat.Style {
+    ctor public NotificationCompat.BigPictureStyle();
+    ctor public NotificationCompat.BigPictureStyle(android.support.v4.app.NotificationCompat.Builder);
+    method public android.support.v4.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap);
+    method public android.support.v4.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap);
+    method public android.support.v4.app.NotificationCompat.BigPictureStyle setBigContentTitle(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.BigPictureStyle setSummaryText(java.lang.CharSequence);
+  }
+
+  public static class NotificationCompat.BigTextStyle extends android.support.v4.app.NotificationCompat.Style {
+    ctor public NotificationCompat.BigTextStyle();
+    ctor public NotificationCompat.BigTextStyle(android.support.v4.app.NotificationCompat.Builder);
+    method public android.support.v4.app.NotificationCompat.BigTextStyle bigText(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.BigTextStyle setBigContentTitle(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.BigTextStyle setSummaryText(java.lang.CharSequence);
+  }
+
+  public static class NotificationCompat.Builder {
+    ctor public NotificationCompat.Builder(android.content.Context, java.lang.String);
+    ctor public deprecated NotificationCompat.Builder(android.content.Context);
+    method public android.support.v4.app.NotificationCompat.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
+    method public android.support.v4.app.NotificationCompat.Builder addAction(android.support.v4.app.NotificationCompat.Action);
+    method public android.support.v4.app.NotificationCompat.Builder addExtras(android.os.Bundle);
+    method public android.support.v4.app.NotificationCompat.Builder addPerson(java.lang.String);
+    method public android.app.Notification build();
+    method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Extender);
+    method public android.os.Bundle getExtras();
+    method public deprecated android.app.Notification getNotification();
+    method protected static java.lang.CharSequence limitCharSequenceLength(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Builder setAutoCancel(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setBadgeIconType(int);
+    method public android.support.v4.app.NotificationCompat.Builder setCategory(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.Builder setChannelId(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.Builder setColor(int);
+    method public android.support.v4.app.NotificationCompat.Builder setColorized(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setContent(android.widget.RemoteViews);
+    method public android.support.v4.app.NotificationCompat.Builder setContentInfo(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent);
+    method public android.support.v4.app.NotificationCompat.Builder setContentText(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Builder setContentTitle(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews);
+    method public android.support.v4.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews);
+    method public android.support.v4.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+    method public android.support.v4.app.NotificationCompat.Builder setDefaults(int);
+    method public android.support.v4.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent);
+    method public android.support.v4.app.NotificationCompat.Builder setExtras(android.os.Bundle);
+    method public android.support.v4.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setGroup(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.Builder setGroupAlertBehavior(int);
+    method public android.support.v4.app.NotificationCompat.Builder setGroupSummary(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap);
+    method public android.support.v4.app.NotificationCompat.Builder setLights(int, int, int);
+    method public android.support.v4.app.NotificationCompat.Builder setLocalOnly(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setNumber(int);
+    method public android.support.v4.app.NotificationCompat.Builder setOngoing(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setPriority(int);
+    method public android.support.v4.app.NotificationCompat.Builder setProgress(int, int, boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setPublicVersion(android.app.Notification);
+    method public android.support.v4.app.NotificationCompat.Builder setRemoteInputHistory(java.lang.CharSequence[]);
+    method public android.support.v4.app.NotificationCompat.Builder setShortcutId(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.Builder setShowWhen(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int);
+    method public android.support.v4.app.NotificationCompat.Builder setSmallIcon(int, int);
+    method public android.support.v4.app.NotificationCompat.Builder setSortKey(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri);
+    method public android.support.v4.app.NotificationCompat.Builder setSound(android.net.Uri, int);
+    method public android.support.v4.app.NotificationCompat.Builder setStyle(android.support.v4.app.NotificationCompat.Style);
+    method public android.support.v4.app.NotificationCompat.Builder setSubText(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
+    method public android.support.v4.app.NotificationCompat.Builder setTimeoutAfter(long);
+    method public android.support.v4.app.NotificationCompat.Builder setUsesChronometer(boolean);
+    method public android.support.v4.app.NotificationCompat.Builder setVibrate(long[]);
+    method public android.support.v4.app.NotificationCompat.Builder setVisibility(int);
+    method public android.support.v4.app.NotificationCompat.Builder setWhen(long);
+    field public deprecated java.util.ArrayList<java.lang.String> mPeople;
+  }
+
+  public static final class NotificationCompat.CarExtender implements android.support.v4.app.NotificationCompat.Extender {
+    ctor public NotificationCompat.CarExtender();
+    ctor public NotificationCompat.CarExtender(android.app.Notification);
+    method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+    method public int getColor();
+    method public android.graphics.Bitmap getLargeIcon();
+    method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation getUnreadConversation();
+    method public android.support.v4.app.NotificationCompat.CarExtender setColor(int);
+    method public android.support.v4.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap);
+    method public android.support.v4.app.NotificationCompat.CarExtender setUnreadConversation(android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation);
+  }
+
+  public static class NotificationCompat.CarExtender.UnreadConversation {
+    method public long getLatestTimestamp();
+    method public java.lang.String[] getMessages();
+    method public java.lang.String getParticipant();
+    method public java.lang.String[] getParticipants();
+    method public android.app.PendingIntent getReadPendingIntent();
+    method public android.support.v4.app.RemoteInput getRemoteInput();
+    method public android.app.PendingIntent getReplyPendingIntent();
+  }
+
+  public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+    ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation build();
+    method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
+    method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent);
+    method public android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent, android.support.v4.app.RemoteInput);
+  }
+
+  public static class NotificationCompat.DecoratedCustomViewStyle extends android.support.v4.app.NotificationCompat.Style {
+    ctor public NotificationCompat.DecoratedCustomViewStyle();
+  }
+
+  public static abstract interface NotificationCompat.Extender {
+    method public abstract android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+  }
+
+  public static class NotificationCompat.InboxStyle extends android.support.v4.app.NotificationCompat.Style {
+    ctor public NotificationCompat.InboxStyle();
+    ctor public NotificationCompat.InboxStyle(android.support.v4.app.NotificationCompat.Builder);
+    method public android.support.v4.app.NotificationCompat.InboxStyle addLine(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.InboxStyle setBigContentTitle(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.InboxStyle setSummaryText(java.lang.CharSequence);
+  }
+
+  public static class NotificationCompat.MessagingStyle extends android.support.v4.app.NotificationCompat.Style {
+    ctor public NotificationCompat.MessagingStyle(java.lang.CharSequence);
+    method public void addCompatExtras(android.os.Bundle);
+    method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(java.lang.CharSequence, long, java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.MessagingStyle addMessage(android.support.v4.app.NotificationCompat.MessagingStyle.Message);
+    method public static android.support.v4.app.NotificationCompat.MessagingStyle extractMessagingStyleFromNotification(android.app.Notification);
+    method public java.lang.CharSequence getConversationTitle();
+    method public java.util.List<android.support.v4.app.NotificationCompat.MessagingStyle.Message> getMessages();
+    method public java.lang.CharSequence getUserDisplayName();
+    method public android.support.v4.app.NotificationCompat.MessagingStyle setConversationTitle(java.lang.CharSequence);
+    field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+  }
+
+  public static final class NotificationCompat.MessagingStyle.Message {
+    ctor public NotificationCompat.MessagingStyle.Message(java.lang.CharSequence, long, java.lang.CharSequence);
+    method public java.lang.String getDataMimeType();
+    method public android.net.Uri getDataUri();
+    method public android.os.Bundle getExtras();
+    method public java.lang.CharSequence getSender();
+    method public java.lang.CharSequence getText();
+    method public long getTimestamp();
+    method public android.support.v4.app.NotificationCompat.MessagingStyle.Message setData(java.lang.String, android.net.Uri);
+  }
+
+  public static abstract class NotificationCompat.Style {
+    ctor public NotificationCompat.Style();
+    method public android.app.Notification build();
+    method public void setBuilder(android.support.v4.app.NotificationCompat.Builder);
+  }
+
+  public static final class NotificationCompat.WearableExtender implements android.support.v4.app.NotificationCompat.Extender {
+    ctor public NotificationCompat.WearableExtender();
+    ctor public NotificationCompat.WearableExtender(android.app.Notification);
+    method public android.support.v4.app.NotificationCompat.WearableExtender addAction(android.support.v4.app.NotificationCompat.Action);
+    method public android.support.v4.app.NotificationCompat.WearableExtender addActions(java.util.List<android.support.v4.app.NotificationCompat.Action>);
+    method public android.support.v4.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
+    method public android.support.v4.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification>);
+    method public android.support.v4.app.NotificationCompat.WearableExtender clearActions();
+    method public android.support.v4.app.NotificationCompat.WearableExtender clearPages();
+    method public android.support.v4.app.NotificationCompat.WearableExtender clone();
+    method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Builder);
+    method public java.util.List<android.support.v4.app.NotificationCompat.Action> getActions();
+    method public android.graphics.Bitmap getBackground();
+    method public java.lang.String getBridgeTag();
+    method public int getContentAction();
+    method public int getContentIcon();
+    method public int getContentIconGravity();
+    method public boolean getContentIntentAvailableOffline();
+    method public int getCustomContentHeight();
+    method public int getCustomSizePreset();
+    method public java.lang.String getDismissalId();
+    method public android.app.PendingIntent getDisplayIntent();
+    method public int getGravity();
+    method public boolean getHintAmbientBigPicture();
+    method public boolean getHintAvoidBackgroundClipping();
+    method public boolean getHintContentIntentLaunchesActivity();
+    method public boolean getHintHideIcon();
+    method public int getHintScreenTimeout();
+    method public boolean getHintShowBackgroundOnly();
+    method public java.util.List<android.app.Notification> getPages();
+    method public boolean getStartScrollBottom();
+    method public android.support.v4.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setBridgeTag(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setContentAction(int);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setContentIcon(int);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setContentIconGravity(int);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setDismissalId(java.lang.String);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setGravity(int);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
+    method public android.support.v4.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
+    field public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+    field public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+    field public static final int SIZE_DEFAULT = 0; // 0x0
+    field public static final int SIZE_FULL_SCREEN = 5; // 0x5
+    field public static final int SIZE_LARGE = 4; // 0x4
+    field public static final int SIZE_MEDIUM = 3; // 0x3
+    field public static final int SIZE_SMALL = 2; // 0x2
+    field public static final int SIZE_XSMALL = 1; // 0x1
+    field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+  }
+
+  public final class NotificationCompatExtras {
+    field public static final java.lang.String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+    field public static final java.lang.String EXTRA_GROUP_KEY = "android.support.groupKey";
+    field public static final java.lang.String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+    field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+    field public static final java.lang.String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+    field public static final java.lang.String EXTRA_SORT_KEY = "android.support.sortKey";
+  }
+
+  public abstract class NotificationCompatSideChannelService extends android.app.Service {
+    ctor public NotificationCompatSideChannelService();
+    method public abstract void cancel(java.lang.String, int, java.lang.String);
+    method public abstract void cancelAll(java.lang.String);
+    method public abstract void notify(java.lang.String, int, java.lang.String, android.app.Notification);
+    method public android.os.IBinder onBind(android.content.Intent);
+  }
+
+  public final class NotificationManagerCompat {
+    method public boolean areNotificationsEnabled();
+    method public void cancel(int);
+    method public void cancel(java.lang.String, int);
+    method public void cancelAll();
+    method public static android.support.v4.app.NotificationManagerCompat from(android.content.Context);
+    method public static java.util.Set<java.lang.String> getEnabledListenerPackages(android.content.Context);
+    method public int getImportance();
+    method public void notify(int, android.app.Notification);
+    method public void notify(java.lang.String, int, android.app.Notification);
+    field public static final java.lang.String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+    field public static final java.lang.String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
+    field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+    field public static final int IMPORTANCE_HIGH = 4; // 0x4
+    field public static final int IMPORTANCE_LOW = 2; // 0x2
+    field public static final int IMPORTANCE_MAX = 5; // 0x5
+    field public static final int IMPORTANCE_MIN = 1; // 0x1
+    field public static final int IMPORTANCE_NONE = 0; // 0x0
+    field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+  }
+
+  public final class RemoteInput {
+    method public static void addDataResultToIntent(android.support.v4.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String, android.net.Uri>);
+    method public static void addResultsToIntent(android.support.v4.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+    method public boolean getAllowFreeFormInput();
+    method public java.util.Set<java.lang.String> getAllowedDataTypes();
+    method public java.lang.CharSequence[] getChoices();
+    method public static java.util.Map<java.lang.String, android.net.Uri> getDataResultsFromIntent(android.content.Intent, java.lang.String);
+    method public android.os.Bundle getExtras();
+    method public java.lang.CharSequence getLabel();
+    method public java.lang.String getResultKey();
+    method public static android.os.Bundle getResultsFromIntent(android.content.Intent);
+    method public boolean isDataOnly();
+    field public static final java.lang.String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+    field public static final java.lang.String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+  }
+
+  public static final class RemoteInput.Builder {
+    ctor public RemoteInput.Builder(java.lang.String);
+    method public android.support.v4.app.RemoteInput.Builder addExtras(android.os.Bundle);
+    method public android.support.v4.app.RemoteInput build();
+    method public android.os.Bundle getExtras();
+    method public android.support.v4.app.RemoteInput.Builder setAllowDataType(java.lang.String, boolean);
+    method public android.support.v4.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+    method public android.support.v4.app.RemoteInput.Builder setChoices(java.lang.CharSequence[]);
+    method public android.support.v4.app.RemoteInput.Builder setLabel(java.lang.CharSequence);
+  }
+
+  public final class ServiceCompat {
+    method public static void stopForeground(android.app.Service, int);
+    field public static final int START_STICKY = 1; // 0x1
+    field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+    field public static final int STOP_FOREGROUND_REMOVE = 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>);
+    method public void onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener);
+  }
+
+  public static abstract interface SharedElementCallback.OnSharedElementsReadyListener {
+    method public abstract void onSharedElementsReady();
+  }
+
+}
+
+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 protected 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 int getColor(android.content.Context, int);
+    method public static android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+    method public static java.io.File getDataDir(android.content.Context);
+    method public static 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 static 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);
+    method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
+    method public static void startForegroundService(android.content.Context, android.content.Intent);
+  }
+
+  public final class IntentCompat {
+    method public static android.content.Intent makeMainSelectorActivity(java.lang.String, java.lang.String);
+    field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+    field public static final java.lang.String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+    field public static final java.lang.String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+  }
+
+  public final deprecated class SharedPreferencesCompat {
+  }
+
+  public static final deprecated class SharedPreferencesCompat.EditorCompat {
+    method public deprecated void apply(android.content.SharedPreferences.Editor);
+    method public static deprecated android.support.v4.content.SharedPreferencesCompat.EditorCompat getInstance();
+  }
+
+}
+
+package android.support.v4.content.pm {
+
+  public final deprecated class ActivityInfoCompat {
+    field public static final deprecated int CONFIG_UI_MODE = 512; // 0x200
+  }
+
+  public class ShortcutInfoCompat {
+    method public android.content.ComponentName getActivity();
+    method public java.lang.CharSequence getDisabledMessage();
+    method public java.lang.String getId();
+    method public android.content.Intent getIntent();
+    method public android.content.Intent[] getIntents();
+    method public java.lang.CharSequence getLongLabel();
+    method public java.lang.CharSequence getShortLabel();
+    method public android.content.pm.ShortcutInfo toShortcutInfo();
+  }
+
+  public static class ShortcutInfoCompat.Builder {
+    ctor public ShortcutInfoCompat.Builder(android.content.Context, java.lang.String);
+    method public android.support.v4.content.pm.ShortcutInfoCompat build();
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(java.lang.CharSequence);
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIcon(android.support.v4.graphics.drawable.IconCompat);
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent[]);
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setLongLabel(java.lang.CharSequence);
+    method public android.support.v4.content.pm.ShortcutInfoCompat.Builder setShortLabel(java.lang.CharSequence);
+  }
+
+  public class ShortcutManagerCompat {
+    method public static android.content.Intent createShortcutResultIntent(android.content.Context, android.support.v4.content.pm.ShortcutInfoCompat);
+    method public static boolean isRequestPinShortcutSupported(android.content.Context);
+    method public static boolean requestPinShortcut(android.content.Context, android.support.v4.content.pm.ShortcutInfoCompat, android.content.IntentSender);
+  }
+
+}
+
+package android.support.v4.content.res {
+
+  public final class ConfigurationHelper {
+    method public static int getDensityDpi(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;
+    method public static android.graphics.Typeface getFont(android.content.Context, int) throws android.content.res.Resources.NotFoundException;
+    method public static void getFont(android.content.Context, int, android.support.v4.content.res.ResourcesCompat.FontCallback, android.os.Handler) throws android.content.res.Resources.NotFoundException;
+  }
+
+  public static abstract class ResourcesCompat.FontCallback {
+    ctor public ResourcesCompat.FontCallback();
+    method public abstract void onFontRetrievalFailed(int);
+    method public abstract void onFontRetrieved(android.graphics.Typeface);
+  }
+
+}
+
+package android.support.v4.database {
+
+  public final deprecated class DatabaseUtilsCompat {
+    method public static deprecated java.lang.String[] appendSelectionArgs(java.lang.String[], java.lang.String[]);
+    method public static deprecated 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);
+  }
+
+  public final class PaintCompat {
+    method public static boolean hasGlyph(android.graphics.Paint, java.lang.String);
+  }
+
+}
+
+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 void clearColorFilter(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 deprecated 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 extends android.graphics.drawable.Drawable> T unwrap(android.graphics.drawable.Drawable);
+    method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
+  }
+
+  public class IconCompat {
+    method public static android.support.v4.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
+    method public static android.support.v4.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
+    method public static android.support.v4.graphics.drawable.IconCompat createWithContentUri(java.lang.String);
+    method public static android.support.v4.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
+    method public static android.support.v4.graphics.drawable.IconCompat createWithData(byte[], int, int);
+    method public static android.support.v4.graphics.drawable.IconCompat createWithResource(android.content.Context, int);
+    method public android.graphics.drawable.Icon toIcon();
+  }
+
+}
+
+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 int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+    method public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
+    field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+    field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+    field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+  }
+
+  public final class TrafficStatsCompat {
+    method public static deprecated void clearThreadStatsTag();
+    method public static deprecated int getThreadStatsTag();
+    method public static deprecated void incrementOperationCount(int);
+    method public static deprecated void incrementOperationCount(int, int);
+    method public static deprecated void setThreadStatsTag(int);
+    method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static deprecated void tagSocket(java.net.Socket) throws java.net.SocketException;
+    method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static deprecated void untagSocket(java.net.Socket) throws java.net.SocketException;
+  }
+
+}
+
+package android.support.v4.os {
+
+  public class BuildCompat {
+    method public static deprecated boolean isAtLeastN();
+    method public static deprecated boolean isAtLeastNMR1();
+    method public static deprecated boolean isAtLeastO();
+    method public static deprecated boolean isAtLeastOMR1();
+    method public static boolean isAtLeastP();
+  }
+
+  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 ConfigurationCompat {
+    method public static android.support.v4.os.LocaleListCompat getLocales(android.content.res.Configuration);
+  }
+
+  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 final class LocaleListCompat {
+    method public static android.support.v4.os.LocaleListCompat create(java.util.Locale...);
+    method public static android.support.v4.os.LocaleListCompat forLanguageTags(java.lang.String);
+    method public java.util.Locale get(int);
+    method public static android.support.v4.os.LocaleListCompat getAdjustedDefault();
+    method public static android.support.v4.os.LocaleListCompat getDefault();
+    method public static android.support.v4.os.LocaleListCompat getEmptyLocaleList();
+    method public java.util.Locale getFirstMatch(java.lang.String[]);
+    method public int indexOf(java.util.Locale);
+    method public boolean isEmpty();
+    method public int size();
+    method public java.lang.String toLanguageTags();
+    method public java.lang.Object unwrap();
+    method public static android.support.v4.os.LocaleListCompat wrap(java.lang.Object);
+  }
+
+  public class OperationCanceledException extends java.lang.RuntimeException {
+    ctor public OperationCanceledException();
+    ctor public OperationCanceledException(java.lang.String);
+  }
+
+  public final deprecated class ParcelableCompat {
+    method public static deprecated <T> android.os.Parcelable.Creator<T> newCreator(android.support.v4.os.ParcelableCompatCreatorCallbacks<T>);
+  }
+
+  public abstract deprecated interface ParcelableCompatCreatorCallbacks<T> {
+    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.provider {
+
+  public final class FontRequest {
+    ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, java.util.List<java.util.List<byte[]>>);
+    ctor public FontRequest(java.lang.String, java.lang.String, java.lang.String, int);
+    method public java.util.List<java.util.List<byte[]>> getCertificates();
+    method public int getCertificatesArrayResId();
+    method public java.lang.String getProviderAuthority();
+    method public java.lang.String getProviderPackage();
+    method public java.lang.String getQuery();
+  }
+
+  public class FontsContractCompat {
+    method public static android.graphics.Typeface buildTypeface(android.content.Context, android.os.CancellationSignal, android.support.v4.provider.FontsContractCompat.FontInfo[]);
+    method public static android.support.v4.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal, android.support.v4.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static void requestFont(android.content.Context, android.support.v4.provider.FontRequest, android.support.v4.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+  }
+
+  public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+    ctor public FontsContractCompat.Columns();
+    field public static final java.lang.String FILE_ID = "file_id";
+    field public static final java.lang.String ITALIC = "font_italic";
+    field public static final java.lang.String RESULT_CODE = "result_code";
+    field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+    field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+    field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+    field public static final int RESULT_CODE_OK = 0; // 0x0
+    field public static final java.lang.String TTC_INDEX = "font_ttc_index";
+    field public static final java.lang.String VARIATION_SETTINGS = "font_variation_settings";
+    field public static final java.lang.String WEIGHT = "font_weight";
+  }
+
+  public static class FontsContractCompat.FontFamilyResult {
+    method public android.support.v4.provider.FontsContractCompat.FontInfo[] getFonts();
+    method public int getStatusCode();
+    field public static final int STATUS_OK = 0; // 0x0
+    field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+    field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+  }
+
+  public static class FontsContractCompat.FontInfo {
+    method public int getResultCode();
+    method public int getTtcIndex();
+    method public android.net.Uri getUri();
+    method public int getWeight();
+    method public boolean isItalic();
+  }
+
+  public static class FontsContractCompat.FontRequestCallback {
+    ctor public FontsContractCompat.FontRequestCallback();
+    method public void onTypefaceRequestFailed(int);
+    method public void onTypefaceRetrieved(android.graphics.Typeface);
+    field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+    field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+    field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+    field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+    field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+    field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
+    field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+  }
+
+}
+
+package android.support.v4.text {
+
+  public final class BidiFormatter {
+    method public static android.support.v4.text.BidiFormatter getInstance();
+    method public static android.support.v4.text.BidiFormatter getInstance(boolean);
+    method public static android.support.v4.text.BidiFormatter getInstance(java.util.Locale);
+    method public boolean getStereoReset();
+    method public boolean isRtl(java.lang.String);
+    method public boolean isRtl(java.lang.CharSequence);
+    method public boolean isRtlContext();
+    method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat, boolean);
+    method public java.lang.String unicodeWrap(java.lang.String, android.support.v4.text.TextDirectionHeuristicCompat);
+    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, android.support.v4.text.TextDirectionHeuristicCompat);
+    method public java.lang.String unicodeWrap(java.lang.String, boolean);
+    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence, boolean);
+    method public java.lang.String unicodeWrap(java.lang.String);
+    method public java.lang.CharSequence unicodeWrap(java.lang.CharSequence);
+  }
+
+  public static final class BidiFormatter.Builder {
+    ctor public BidiFormatter.Builder();
+    ctor public BidiFormatter.Builder(boolean);
+    ctor public BidiFormatter.Builder(java.util.Locale);
+    method public android.support.v4.text.BidiFormatter build();
+    method public android.support.v4.text.BidiFormatter.Builder setTextDirectionHeuristic(android.support.v4.text.TextDirectionHeuristicCompat);
+    method public android.support.v4.text.BidiFormatter.Builder stereoReset(boolean);
+  }
+
+  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);
+  }
+
+}
+
+package android.support.v4.text.util {
+
+  public final class LinkifyCompat {
+    method public static boolean addLinks(android.text.Spannable, int);
+    method public static boolean addLinks(android.widget.TextView, int);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
+  }
+
+}
+
+package android.support.v4.util {
+
+  public class ArrayMap<K, V> 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 final class ArraySet<E> implements java.util.Collection java.util.Set {
+    ctor public ArraySet();
+    ctor public ArraySet(int);
+    ctor public ArraySet(android.support.v4.util.ArraySet<E>);
+    ctor public ArraySet(java.util.Collection<E>);
+    method public boolean add(E);
+    method public void addAll(android.support.v4.util.ArraySet<? extends E>);
+    method public boolean addAll(java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(java.lang.Object);
+    method public boolean containsAll(java.util.Collection<?>);
+    method public void ensureCapacity(int);
+    method public int indexOf(java.lang.Object);
+    method public boolean isEmpty();
+    method public java.util.Iterator<E> iterator();
+    method public boolean remove(java.lang.Object);
+    method public boolean removeAll(android.support.v4.util.ArraySet<? extends E>);
+    method public boolean removeAll(java.util.Collection<?>);
+    method public E removeAt(int);
+    method public boolean retainAll(java.util.Collection<?>);
+    method public int size();
+    method public java.lang.Object[] toArray();
+    method public <T> T[] toArray(T[]);
+    method public E valueAt(int);
+  }
+
+  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<E> {
+    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<E> implements java.lang.Cloneable {
+    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<K, V> {
+    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 ObjectsCompat {
+    method public static boolean equals(java.lang.Object, java.lang.Object);
+    method public static int hash(java.lang.Object...);
+    method public static int hashCode(java.lang.Object);
+  }
+
+  public class Pair<F, S> {
+    ctor public Pair(F, S);
+    method public static <A, B> android.support.v4.util.Pair<A, B> create(A, B);
+    field public final F first;
+    field public final S second;
+  }
+
+  public final class PatternsCompat {
+    field public static final java.util.regex.Pattern DOMAIN_NAME;
+    field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+    field public static final java.util.regex.Pattern IP_ADDRESS;
+    field public static final java.util.regex.Pattern WEB_URL;
+  }
+
+  public final class Pools {
+  }
+
+  public static abstract interface Pools.Pool<T> {
+    method public abstract T acquire();
+    method public abstract boolean release(T);
+  }
+
+  public static class Pools.SimplePool<T> 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<T> extends android.support.v4.util.Pools.SimplePool {
+    ctor public Pools.SynchronizedPool(int);
+  }
+
+  public class SimpleArrayMap<K, V> {
+    ctor public SimpleArrayMap();
+    ctor public SimpleArrayMap(int);
+    ctor public SimpleArrayMap(android.support.v4.util.SimpleArrayMap<K, V>);
+    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<E> implements java.lang.Cloneable {
+    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_ROTARY_ENCODER = 4194304; // 0x400000
+    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 LayoutInflaterCompat {
+    method public static deprecated android.support.v4.view.LayoutInflaterFactory getFactory(android.view.LayoutInflater);
+    method public static deprecated void setFactory(android.view.LayoutInflater, android.support.v4.view.LayoutInflaterFactory);
+    method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+  }
+
+  public abstract deprecated 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 deprecated boolean collapseActionView(android.view.MenuItem);
+    method public static deprecated boolean expandActionView(android.view.MenuItem);
+    method public static android.support.v4.view.ActionProvider getActionProvider(android.view.MenuItem);
+    method public static deprecated android.view.View getActionView(android.view.MenuItem);
+    method public static int getAlphabeticModifiers(android.view.MenuItem);
+    method public static java.lang.CharSequence getContentDescription(android.view.MenuItem);
+    method public static android.content.res.ColorStateList getIconTintList(android.view.MenuItem);
+    method public static android.graphics.PorterDuff.Mode getIconTintMode(android.view.MenuItem);
+    method public static int getNumericModifiers(android.view.MenuItem);
+    method public static java.lang.CharSequence getTooltipText(android.view.MenuItem);
+    method public static deprecated boolean isActionViewExpanded(android.view.MenuItem);
+    method public static android.view.MenuItem setActionProvider(android.view.MenuItem, android.support.v4.view.ActionProvider);
+    method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, android.view.View);
+    method public static deprecated android.view.MenuItem setActionView(android.view.MenuItem, int);
+    method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
+    method public static void setContentDescription(android.view.MenuItem, java.lang.CharSequence);
+    method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList);
+    method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode);
+    method public static void setNumericShortcut(android.view.MenuItem, char, int);
+    method public static deprecated android.view.MenuItem setOnActionExpandListener(android.view.MenuItem, android.support.v4.view.MenuItemCompat.OnActionExpandListener);
+    method public static void setShortcut(android.view.MenuItem, char, char, int, int);
+    method public static deprecated void setShowAsAction(android.view.MenuItem, int);
+    method public static void setTooltipText(android.view.MenuItem, java.lang.CharSequence);
+    field public static final deprecated int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+    field public static final deprecated int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+    field public static final deprecated int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+    field public static final deprecated int SHOW_AS_ACTION_NEVER = 0; // 0x0
+    field public static final deprecated int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+  }
+
+  public static abstract deprecated 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 deprecated int findPointerIndex(android.view.MotionEvent, int);
+    method public static deprecated int getActionIndex(android.view.MotionEvent);
+    method public static deprecated int getActionMasked(android.view.MotionEvent);
+    method public static deprecated float getAxisValue(android.view.MotionEvent, int);
+    method public static deprecated float getAxisValue(android.view.MotionEvent, int, int);
+    method public static deprecated int getButtonState(android.view.MotionEvent);
+    method public static deprecated int getPointerCount(android.view.MotionEvent);
+    method public static deprecated int getPointerId(android.view.MotionEvent, int);
+    method public static deprecated int getSource(android.view.MotionEvent);
+    method public static deprecated float getX(android.view.MotionEvent, int);
+    method public static deprecated float getY(android.view.MotionEvent, int);
+    method public static boolean isFromSource(android.view.MotionEvent, int);
+    field public static final deprecated int ACTION_HOVER_ENTER = 9; // 0x9
+    field public static final deprecated int ACTION_HOVER_EXIT = 10; // 0xa
+    field public static final deprecated int ACTION_HOVER_MOVE = 7; // 0x7
+    field public static final deprecated int ACTION_MASK = 255; // 0xff
+    field public static final deprecated int ACTION_POINTER_DOWN = 5; // 0x5
+    field public static final deprecated int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+    field public static final deprecated int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+    field public static final deprecated int ACTION_POINTER_UP = 6; // 0x6
+    field public static final deprecated int ACTION_SCROLL = 8; // 0x8
+    field public static final deprecated int AXIS_BRAKE = 23; // 0x17
+    field public static final deprecated int AXIS_DISTANCE = 24; // 0x18
+    field public static final deprecated int AXIS_GAS = 22; // 0x16
+    field public static final deprecated int AXIS_GENERIC_1 = 32; // 0x20
+    field public static final deprecated int AXIS_GENERIC_10 = 41; // 0x29
+    field public static final deprecated int AXIS_GENERIC_11 = 42; // 0x2a
+    field public static final deprecated int AXIS_GENERIC_12 = 43; // 0x2b
+    field public static final deprecated int AXIS_GENERIC_13 = 44; // 0x2c
+    field public static final deprecated int AXIS_GENERIC_14 = 45; // 0x2d
+    field public static final deprecated int AXIS_GENERIC_15 = 46; // 0x2e
+    field public static final deprecated int AXIS_GENERIC_16 = 47; // 0x2f
+    field public static final deprecated int AXIS_GENERIC_2 = 33; // 0x21
+    field public static final deprecated int AXIS_GENERIC_3 = 34; // 0x22
+    field public static final deprecated int AXIS_GENERIC_4 = 35; // 0x23
+    field public static final deprecated int AXIS_GENERIC_5 = 36; // 0x24
+    field public static final deprecated int AXIS_GENERIC_6 = 37; // 0x25
+    field public static final deprecated int AXIS_GENERIC_7 = 38; // 0x26
+    field public static final deprecated int AXIS_GENERIC_8 = 39; // 0x27
+    field public static final deprecated int AXIS_GENERIC_9 = 40; // 0x28
+    field public static final deprecated int AXIS_HAT_X = 15; // 0xf
+    field public static final deprecated int AXIS_HAT_Y = 16; // 0x10
+    field public static final deprecated int AXIS_HSCROLL = 10; // 0xa
+    field public static final deprecated int AXIS_LTRIGGER = 17; // 0x11
+    field public static final deprecated int AXIS_ORIENTATION = 8; // 0x8
+    field public static final deprecated 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 deprecated int AXIS_RTRIGGER = 18; // 0x12
+    field public static final deprecated int AXIS_RUDDER = 20; // 0x14
+    field public static final deprecated int AXIS_RX = 12; // 0xc
+    field public static final deprecated int AXIS_RY = 13; // 0xd
+    field public static final deprecated int AXIS_RZ = 14; // 0xe
+    field public static final int AXIS_SCROLL = 26; // 0x1a
+    field public static final deprecated int AXIS_SIZE = 3; // 0x3
+    field public static final deprecated int AXIS_THROTTLE = 19; // 0x13
+    field public static final deprecated int AXIS_TILT = 25; // 0x19
+    field public static final deprecated int AXIS_TOOL_MAJOR = 6; // 0x6
+    field public static final deprecated int AXIS_TOOL_MINOR = 7; // 0x7
+    field public static final deprecated int AXIS_TOUCH_MAJOR = 4; // 0x4
+    field public static final deprecated int AXIS_TOUCH_MINOR = 5; // 0x5
+    field public static final deprecated int AXIS_VSCROLL = 9; // 0x9
+    field public static final deprecated int AXIS_WHEEL = 21; // 0x15
+    field public static final deprecated int AXIS_X = 0; // 0x0
+    field public static final deprecated int AXIS_Y = 1; // 0x1
+    field public static final deprecated int AXIS_Z = 11; // 0xb
+    field public static final deprecated 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 NestedScrollingChild2 implements android.support.v4.view.NestedScrollingChild {
+    method public abstract boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+    method public abstract boolean dispatchNestedScroll(int, int, int, int, int[], int);
+    method public abstract boolean hasNestedScrollingParent(int);
+    method public abstract boolean startNestedScroll(int, int);
+    method public abstract void stopNestedScroll(int);
+  }
+
+  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 NestedScrollingParent2 implements android.support.v4.view.NestedScrollingParent {
+    method public abstract void onNestedPreScroll(android.view.View, int, int, int[], int);
+    method public abstract void onNestedScroll(android.view.View, int, int, int, int, int);
+    method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+    method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+    method public abstract void onStopNestedScroll(android.view.View, int);
+  }
+
+  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 create(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 load(android.content.res.Resources, int);
+    field public static final int TYPE_ALIAS = 1010; // 0x3f2
+    field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+    field public static final int TYPE_ARROW = 1000; // 0x3e8
+    field public static final int TYPE_CELL = 1006; // 0x3ee
+    field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+    field public static final int TYPE_COPY = 1011; // 0x3f3
+    field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+    field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+    field public static final int TYPE_GRAB = 1020; // 0x3fc
+    field public static final int TYPE_GRABBING = 1021; // 0x3fd
+    field public static final int TYPE_HAND = 1002; // 0x3ea
+    field public static final int TYPE_HELP = 1003; // 0x3eb
+    field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+    field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_TEXT = 1008; // 0x3f0
+    field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+    field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+    field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+    field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+    field public static final int TYPE_WAIT = 1004; // 0x3ec
+    field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+    field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+  }
+
+  public final class ScaleGestureDetectorCompat {
+    method public static deprecated boolean isQuickScaleEnabled(java.lang.Object);
+    method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
+    method public static deprecated void setQuickScaleEnabled(java.lang.Object, boolean);
+    method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, 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 deprecated class VelocityTrackerCompat {
+    method public static deprecated float getXVelocity(android.view.VelocityTracker, int);
+    method public static deprecated float getYVelocity(android.view.VelocityTracker, int);
+  }
+
+  public class ViewCompat {
+    ctor protected ViewCompat();
+    method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View>, int);
+    method public static android.support.v4.view.ViewPropertyAnimatorCompat animate(android.view.View);
+    method public static deprecated boolean canScrollHorizontally(android.view.View, int);
+    method public static deprecated boolean canScrollVertically(android.view.View, int);
+    method public static void cancelDragAndDrop(android.view.View);
+    method public static deprecated 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 dispatchNestedPreScroll(android.view.View, int, int, int[], int[], int);
+    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]);
+    method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[], int);
+    method public static void dispatchStartTemporaryDetach(android.view.View);
+    method public static int generateViewId();
+    method public static int getAccessibilityLiveRegion(android.view.View);
+    method public static android.support.v4.view.accessibility.AccessibilityNodeProviderCompat getAccessibilityNodeProvider(android.view.View);
+    method public static deprecated 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 android.view.Display getDisplay(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 getImportantForAutofill(android.view.View);
+    method public static int getLabelFor(android.view.View);
+    method public static deprecated int getLayerType(android.view.View);
+    method public static int getLayoutDirection(android.view.View);
+    method public static deprecated android.graphics.Matrix getMatrix(android.view.View);
+    method public static deprecated int getMeasuredHeightAndState(android.view.View);
+    method public static deprecated int getMeasuredState(android.view.View);
+    method public static deprecated 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 getNextClusterForwardId(android.view.View);
+    method public static deprecated 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 deprecated float getPivotX(android.view.View);
+    method public static deprecated float getPivotY(android.view.View);
+    method public static deprecated float getRotation(android.view.View);
+    method public static deprecated float getRotationX(android.view.View);
+    method public static deprecated float getRotationY(android.view.View);
+    method public static deprecated float getScaleX(android.view.View);
+    method public static deprecated 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 deprecated float getTranslationX(android.view.View);
+    method public static deprecated float getTranslationY(android.view.View);
+    method public static float getTranslationZ(android.view.View);
+    method public static int getWindowSystemUiVisibility(android.view.View);
+    method public static deprecated float getX(android.view.View);
+    method public static deprecated 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 hasExplicitFocusable(android.view.View);
+    method public static boolean hasNestedScrollingParent(android.view.View);
+    method public static boolean hasNestedScrollingParent(android.view.View, int);
+    method public static boolean hasOnClickListeners(android.view.View);
+    method public static boolean hasOverlappingRendering(android.view.View);
+    method public static boolean hasTransientState(android.view.View);
+    method public static boolean isAttachedToWindow(android.view.View);
+    method public static boolean isFocusedByDefault(android.view.View);
+    method public static boolean isImportantForAccessibility(android.view.View);
+    method public static boolean isImportantForAutofill(android.view.View);
+    method public static boolean isInLayout(android.view.View);
+    method public static boolean isKeyboardNavigationCluster(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 deprecated boolean isOpaque(android.view.View);
+    method public static boolean isPaddingRelative(android.view.View);
+    method public static deprecated void jumpDrawablesToCurrentState(android.view.View);
+    method public static android.view.View keyboardNavigationClusterSearch(android.view.View, android.view.View, int);
+    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 deprecated 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 deprecated 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 requestApplyInsets(android.view.View);
+    method public static <T extends android.view.View> T requireViewById(android.view.View, int);
+    method public static deprecated int resolveSizeAndState(int, int, int);
+    method public static boolean restoreDefaultFocus(android.view.View);
+    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 deprecated void setActivated(android.view.View, boolean);
+    method public static deprecated void setAlpha(android.view.View, float);
+    method public static void setAutofillHints(android.view.View, java.lang.String...);
+    method public static void setBackground(android.view.View, android.graphics.drawable.Drawable);
+    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 deprecated 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 deprecated void setFitsSystemWindows(android.view.View, boolean);
+    method public static void setFocusedByDefault(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 setImportantForAutofill(android.view.View, int);
+    method public static void setKeyboardNavigationCluster(android.view.View, boolean);
+    method public static void setLabelFor(android.view.View, int);
+    method public static void setLayerPaint(android.view.View, android.graphics.Paint);
+    method public static deprecated 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 setNextClusterForwardId(android.view.View, int);
+    method public static void setOnApplyWindowInsetsListener(android.view.View, android.support.v4.view.OnApplyWindowInsetsListener);
+    method public static deprecated void setOverScrollMode(android.view.View, int);
+    method public static void setPaddingRelative(android.view.View, int, int, int, int);
+    method public static deprecated void setPivotX(android.view.View, float);
+    method public static deprecated void setPivotY(android.view.View, float);
+    method public static void setPointerIcon(android.view.View, android.support.v4.view.PointerIconCompat);
+    method public static deprecated void setRotation(android.view.View, float);
+    method public static deprecated void setRotationX(android.view.View, float);
+    method public static deprecated void setRotationY(android.view.View, float);
+    method public static deprecated void setSaveFromParentEnabled(android.view.View, boolean);
+    method public static deprecated void setScaleX(android.view.View, float);
+    method public static deprecated 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 setTooltipText(android.view.View, java.lang.CharSequence);
+    method public static void setTransitionName(android.view.View, java.lang.String);
+    method public static deprecated void setTranslationX(android.view.View, float);
+    method public static deprecated void setTranslationY(android.view.View, float);
+    method public static void setTranslationZ(android.view.View, float);
+    method public static deprecated void setX(android.view.View, float);
+    method public static deprecated void setY(android.view.View, float);
+    method public static void setZ(android.view.View, float);
+    method public static boolean startDragAndDrop(android.view.View, android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+    method public static boolean startNestedScroll(android.view.View, int);
+    method public static boolean startNestedScroll(android.view.View, int, int);
+    method public static void stopNestedScroll(android.view.View);
+    method public static void stopNestedScroll(android.view.View, int);
+    method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
+    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 deprecated int LAYER_TYPE_HARDWARE = 2; // 0x2
+    field public static final deprecated int LAYER_TYPE_NONE = 0; // 0x0
+    field public static final deprecated 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 deprecated int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+    field public static final deprecated int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+    field public static final deprecated int MEASURED_STATE_MASK = -16777216; // 0xff000000
+    field public static final deprecated int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+    field public static final deprecated int OVER_SCROLL_ALWAYS = 0; // 0x0
+    field public static final deprecated int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+    field public static final deprecated 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
+    field public static final int TYPE_NON_TOUCH = 1; // 0x1
+    field public static final int TYPE_TOUCH = 0; // 0x0
+  }
+
+  public final class ViewConfigurationCompat {
+    method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+    method public static deprecated int getScaledPagingTouchSlop(android.view.ViewConfiguration);
+    method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+    method public static deprecated 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 deprecated boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public static void setLayoutMode(android.view.ViewGroup, int);
+    method public static deprecated 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 onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
+    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
+    method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
+    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
+    method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
+    method public static boolean onStartNestedScroll(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, int);
+    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
+    method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
+    method public static deprecated 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 {
+    method public static <T extends android.view.View> T requireViewById(android.view.Window, int);
+    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 {
+    ctor public WindowInsetsCompat(android.support.v4.view.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 deprecated void appendRecord(android.view.accessibility.AccessibilityEvent, android.support.v4.view.accessibility.AccessibilityRecordCompat);
+    method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat asRecord(android.view.accessibility.AccessibilityEvent);
+    method public static int getAction(android.view.accessibility.AccessibilityEvent);
+    method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
+    method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
+    method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat getRecord(android.view.accessibility.AccessibilityEvent, int);
+    method public static deprecated int getRecordCount(android.view.accessibility.AccessibilityEvent);
+    method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
+    method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
+    method public static void setMovementGranularity(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_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+    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 deprecated int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+    field public static final deprecated 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_CONTEXT_CLICKED = 8388608; // 0x800000
+    field public static final deprecated int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+    field public static final deprecated int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+    field public static final deprecated int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+    field public static final deprecated 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_WINDOWS_CHANGED = 4194304; // 0x400000
+    field public static final deprecated int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+  }
+
+  public final class AccessibilityManagerCompat {
+    method public static deprecated boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+    method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+    method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager, int);
+    method public static deprecated java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager);
+    method public static deprecated boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager);
+    method public static deprecated boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener);
+    method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
+  }
+
+  public static abstract deprecated interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+    method public abstract deprecated void onAccessibilityStateChanged(boolean);
+  }
+
+  public static abstract deprecated class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+    ctor public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+  }
+
+  public static abstract interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+    method public abstract void onTouchExplorationStateChanged(boolean);
+  }
+
+  public class AccessibilityNodeInfoCompat {
+    ctor public deprecated 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 int getDrawingOrder();
+    method public java.lang.CharSequence getError();
+    method public android.os.Bundle getExtras();
+    method public deprecated 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 isAccessibilityFocused();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isClickable();
+    method public boolean isContentInvalid();
+    method public boolean isContextClickable();
+    method public boolean isDismissable();
+    method public boolean isEditable();
+    method public boolean isEnabled();
+    method public boolean isFocusable();
+    method public boolean isFocused();
+    method public boolean isImportantForAccessibility();
+    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 setContextClickable(boolean);
+    method public void setDismissable(boolean);
+    method public void setDrawingOrder(int);
+    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 setImportantForAccessibility(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);
+    method public android.view.accessibility.AccessibilityNodeInfo unwrap();
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat wrap(android.view.accessibility.AccessibilityNodeInfo);
+    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+    field public static final java.lang.String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+    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_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+    field public static final java.lang.String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_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_CONTEXT_CLICK;
+    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_DOWN;
+    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_SCROLL_LEFT;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_RIGHT;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_TO_POSITION;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SCROLL_UP;
+    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_PROGRESS;
+    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;
+    field public static final android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_SHOW_ON_SCREEN;
+  }
+
+  public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+    method public int getColumnCount();
+    method public int getRowCount();
+    method public int getSelectionMode();
+    method public boolean isHierarchical();
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean, int);
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat obtain(int, int, boolean);
+    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);
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat obtain(int, int, int, int, boolean);
+  }
+
+  public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
+    method public float getCurrent();
+    method public float getMax();
+    method public float getMin();
+    method public int getType();
+    method public static android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat obtain(int, float, float, float);
+    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);
+    field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+  }
+
+  public class AccessibilityRecordCompat {
+    ctor public deprecated AccessibilityRecordCompat(java.lang.Object);
+    method public deprecated boolean equals(java.lang.Object);
+    method public deprecated int getAddedCount();
+    method public deprecated java.lang.CharSequence getBeforeText();
+    method public deprecated java.lang.CharSequence getClassName();
+    method public deprecated java.lang.CharSequence getContentDescription();
+    method public deprecated int getCurrentItemIndex();
+    method public deprecated int getFromIndex();
+    method public deprecated java.lang.Object getImpl();
+    method public deprecated int getItemCount();
+    method public deprecated int getMaxScrollX();
+    method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
+    method public deprecated int getMaxScrollY();
+    method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
+    method public deprecated android.os.Parcelable getParcelableData();
+    method public deprecated int getRemovedCount();
+    method public deprecated int getScrollX();
+    method public deprecated int getScrollY();
+    method public deprecated android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getSource();
+    method public deprecated java.util.List<java.lang.CharSequence> getText();
+    method public deprecated int getToIndex();
+    method public deprecated int getWindowId();
+    method public deprecated int hashCode();
+    method public deprecated boolean isChecked();
+    method public deprecated boolean isEnabled();
+    method public deprecated boolean isFullScreen();
+    method public deprecated boolean isPassword();
+    method public deprecated boolean isScrollable();
+    method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat obtain(android.support.v4.view.accessibility.AccessibilityRecordCompat);
+    method public static deprecated android.support.v4.view.accessibility.AccessibilityRecordCompat obtain();
+    method public deprecated void recycle();
+    method public deprecated void setAddedCount(int);
+    method public deprecated void setBeforeText(java.lang.CharSequence);
+    method public deprecated void setChecked(boolean);
+    method public deprecated void setClassName(java.lang.CharSequence);
+    method public deprecated void setContentDescription(java.lang.CharSequence);
+    method public deprecated void setCurrentItemIndex(int);
+    method public deprecated void setEnabled(boolean);
+    method public deprecated void setFromIndex(int);
+    method public deprecated void setFullScreen(boolean);
+    method public deprecated void setItemCount(int);
+    method public deprecated void setMaxScrollX(int);
+    method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
+    method public deprecated void setMaxScrollY(int);
+    method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
+    method public deprecated void setParcelableData(android.os.Parcelable);
+    method public deprecated void setPassword(boolean);
+    method public deprecated void setRemovedCount(int);
+    method public deprecated void setScrollX(int);
+    method public deprecated void setScrollY(int);
+    method public deprecated void setScrollable(boolean);
+    method public deprecated void setSource(android.view.View);
+    method public deprecated void setSource(android.view.View, int);
+    method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View, int);
+    method public deprecated void setToIndex(int);
+  }
+
+  public class AccessibilityWindowInfoCompat {
+    method public android.support.v4.view.accessibility.AccessibilityNodeInfoCompat getAnchor();
+    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 java.lang.CharSequence getTitle();
+    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_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+    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 deprecated EdgeEffectCompat(android.content.Context);
+    method public deprecated boolean draw(android.graphics.Canvas);
+    method public deprecated void finish();
+    method public deprecated boolean isFinished();
+    method public deprecated boolean onAbsorb(int);
+    method public deprecated boolean onPull(float);
+    method public deprecated boolean onPull(float, float);
+    method public static void onPull(android.widget.EdgeEffect, float, float);
+    method public deprecated boolean onRelease();
+    method public deprecated void setSize(int, int);
+  }
+
+  public class ImageViewCompat {
+    method public static android.content.res.ColorStateList getImageTintList(android.widget.ImageView);
+    method public static android.graphics.PorterDuff.Mode getImageTintMode(android.widget.ImageView);
+    method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList);
+    method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode);
+  }
+
+  public final class ListPopupWindowCompat {
+    method public static deprecated android.view.View.OnTouchListener createDragToOpenListener(java.lang.Object, android.view.View);
+    method public static android.view.View.OnTouchListener createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+  }
+
+  public final class ListViewCompat {
+    method public static boolean canScrollList(android.widget.ListView, int);
+    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 deprecated class ScrollerCompat {
+    method public deprecated void abortAnimation();
+    method public deprecated boolean computeScrollOffset();
+    method public static deprecated android.support.v4.widget.ScrollerCompat create(android.content.Context);
+    method public static deprecated android.support.v4.widget.ScrollerCompat create(android.content.Context, android.view.animation.Interpolator);
+    method public deprecated void fling(int, int, int, int, int, int, int, int);
+    method public deprecated void fling(int, int, int, int, int, int, int, int, int, int);
+    method public deprecated float getCurrVelocity();
+    method public deprecated int getCurrX();
+    method public deprecated int getCurrY();
+    method public deprecated int getFinalX();
+    method public deprecated int getFinalY();
+    method public deprecated boolean isFinished();
+    method public deprecated boolean isOverScrolled();
+    method public deprecated void notifyHorizontalEdgeReached(int, int, int);
+    method public deprecated void notifyVerticalEdgeReached(int, int, int);
+    method public deprecated boolean springBack(int, int, int, int, int, int);
+    method public deprecated void startScroll(int, int, int, int);
+    method public deprecated void startScroll(int, int, int, int, int);
+  }
+
+  public final class TextViewCompat {
+    method public static int getAutoSizeMaxTextSize(android.widget.TextView);
+    method public static int getAutoSizeMinTextSize(android.widget.TextView);
+    method public static int getAutoSizeStepGranularity(android.widget.TextView);
+    method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
+    method public static int getAutoSizeTextType(android.widget.TextView);
+    method public static android.graphics.drawable.Drawable[] getCompoundDrawablesRelative(android.widget.TextView);
+    method public static int getMaxLines(android.widget.TextView);
+    method public static int getMinLines(android.widget.TextView);
+    method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
+    method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
+    method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
+    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 setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+    method public static void setTextAppearance(android.widget.TextView, int);
+    field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+    field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+  }
+
+  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/current.txt b/compat/api/current.txt
index 81a85b8..e97db8c 100644
--- a/compat/api/current.txt
+++ b/compat/api/current.txt
@@ -174,6 +174,7 @@
     method public static android.os.Bundle getExtras(android.app.Notification);
     method public static java.lang.String getGroup(android.app.Notification);
     method public static int getGroupAlertBehavior(android.app.Notification);
+    method public static java.util.List<android.support.v4.app.NotificationCompat.Action> getInvisibleActions(android.app.Notification);
     method public static boolean getLocalOnly(android.app.Notification);
     method public static java.lang.String getShortcutId(android.app.Notification);
     method public static java.lang.String getSortKey(android.app.Notification);
@@ -208,6 +209,7 @@
     field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
     field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
     field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
+    field public static final java.lang.String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
     field public static final java.lang.String EXTRA_LARGE_ICON = "android.largeIcon";
     field public static final java.lang.String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
     field public static final java.lang.String EXTRA_MEDIA_SESSION = "android.mediaSession";
@@ -261,7 +263,19 @@
     method public android.os.Bundle getExtras();
     method public int getIcon();
     method public android.support.v4.app.RemoteInput[] getRemoteInputs();
+    method public int getSemanticAction();
+    method public boolean getShowsUserInterface();
     method public java.lang.CharSequence getTitle();
+    field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+    field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+    field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+    field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+    field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+    field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+    field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+    field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+    field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+    field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
     field public android.app.PendingIntent actionIntent;
     field public int icon;
     field public java.lang.CharSequence title;
@@ -276,12 +290,17 @@
     method public android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Extender);
     method public android.os.Bundle getExtras();
     method public android.support.v4.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
+    method public android.support.v4.app.NotificationCompat.Action.Builder setSemanticAction(int);
+    method public android.support.v4.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
   }
 
   public static abstract interface NotificationCompat.Action.Extender {
     method public abstract android.support.v4.app.NotificationCompat.Action.Builder extend(android.support.v4.app.NotificationCompat.Action.Builder);
   }
 
+  public static abstract class NotificationCompat.Action.SemanticAction implements java.lang.annotation.Annotation {
+  }
+
   public static final class NotificationCompat.Action.WearableExtender implements android.support.v4.app.NotificationCompat.Action.Extender {
     ctor public NotificationCompat.Action.WearableExtender();
     ctor public NotificationCompat.Action.WearableExtender(android.support.v4.app.NotificationCompat.Action);
@@ -324,6 +343,8 @@
     method public android.support.v4.app.NotificationCompat.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
     method public android.support.v4.app.NotificationCompat.Builder addAction(android.support.v4.app.NotificationCompat.Action);
     method public android.support.v4.app.NotificationCompat.Builder addExtras(android.os.Bundle);
+    method public android.support.v4.app.NotificationCompat.Builder addInvisibleAction(int, java.lang.CharSequence, android.app.PendingIntent);
+    method public android.support.v4.app.NotificationCompat.Builder addInvisibleAction(android.support.v4.app.NotificationCompat.Action);
     method public android.support.v4.app.NotificationCompat.Builder addPerson(java.lang.String);
     method public android.app.Notification build();
     method public android.support.v4.app.NotificationCompat.Builder extend(android.support.v4.app.NotificationCompat.Extender);
@@ -436,7 +457,9 @@
     method public java.lang.CharSequence getConversationTitle();
     method public java.util.List<android.support.v4.app.NotificationCompat.MessagingStyle.Message> getMessages();
     method public java.lang.CharSequence getUserDisplayName();
+    method public boolean isGroupConversation();
     method public android.support.v4.app.NotificationCompat.MessagingStyle setConversationTitle(java.lang.CharSequence);
+    method public android.support.v4.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
     field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
   }
 
@@ -1195,6 +1218,7 @@
     method public E get(long, E);
     method public int indexOfKey(long);
     method public int indexOfValue(E);
+    method public boolean isEmpty();
     method public long keyAt(int);
     method public void put(long, E);
     method public void remove(long);
@@ -1296,6 +1320,7 @@
     method public E get(int, E);
     method public int indexOfKey(int);
     method public int indexOfValue(E);
+    method public boolean isEmpty();
     method public int keyAt(int);
     method public void put(int, E);
     method public void remove(int);
@@ -1797,6 +1822,7 @@
 
   public final class ViewConfigurationCompat {
     method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+    method public static int getScaledHoverSlop(android.view.ViewConfiguration);
     method public static deprecated int getScaledPagingTouchSlop(android.view.ViewConfiguration);
     method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
     method public static deprecated boolean hasPermanentMenuKey(android.view.ViewConfiguration);
diff --git a/compat/res-public/values/public_attrs.xml b/compat/res-public/values/public_attrs.xml
index e45f8c2..38d858e 100644
--- a/compat/res-public/values/public_attrs.xml
+++ b/compat/res-public/values/public_attrs.xml
@@ -26,4 +26,6 @@
      <public type="attr" name="fontStyle"/>
      <public type="attr" name="font"/>
      <public type="attr" name="fontWeight"/>
+     <public type="attr" name="fontVariationSettings"/>
+     <public type="attr" name="ttcIndex"/>
 </resources>
diff --git a/compat/res/values/attrs.xml b/compat/res/values/attrs.xml
index 04d7690..1a721a8 100644
--- a/compat/res/values/attrs.xml
+++ b/compat/res/values/attrs.xml
@@ -79,10 +79,19 @@
          common values are 400 for regular weight and 700 for bold weight. If unspecified, the value
          in the font's header tables will be used. -->
         <attr name="fontWeight" format="integer" />
-
+        <!-- The variation settings to be applied to the font. The string should be in the following
+         format: "'tag1' value1, 'tag2' value2, ...". If the default variation settings should be
+         used, or the font used does not support variation settings, this attribute needs not be
+         specified. -->
+        <attr name="fontVariationSettings" format="string" />
+        <!-- The index of the font in the tcc font file. If the font file referenced is not in the
+        tcc format, this attribute needs not be specified. -->
+        <attr name="ttcIndex" format="integer" />
         <!-- References to the framework attrs -->
         <attr name="android:fontStyle" />
         <attr name="android:font" />
         <attr name="android:fontWeight" />
+        <attr name="android:fontVariationSettings" />
+        <attr name="android:ttcIndex" />
     </declare-styleable>
 </resources>
diff --git a/compat/src/main/java/android/support/v4/app/NotificationCompat.java b/compat/src/main/java/android/support/v4/app/NotificationCompat.java
index b3f0d32..1e2f317 100644
--- a/compat/src/main/java/android/support/v4/app/NotificationCompat.java
+++ b/compat/src/main/java/android/support/v4/app/NotificationCompat.java
@@ -17,7 +17,6 @@
 package android.support.v4.app;
 
 import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
 import android.app.Activity;
@@ -404,6 +403,12 @@
     public static final String EXTRA_MESSAGES = "android.messages";
 
     /**
+     * Notification key: whether the {@link NotificationCompat.MessagingStyle} notification
+     * represents a group conversation.
+     */
+    public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+
+    /**
      * Keys into the {@link #getExtras} Bundle: the audio contents of this notification.
      *
      * This is for use when rendering the notification on an audio-focused interface;
@@ -651,6 +656,11 @@
         @RestrictTo(LIBRARY_GROUP)
         public ArrayList<Action> mActions = new ArrayList<>();
 
+        // Invisible actions are stored in the CarExtender bundle without actually being owned by
+        // CarExtender. This is to comply with an optimization of the Android OS which removes
+        // Actions from the Notification if there are no listeners for those Actions.
+        ArrayList<Action> mInvisibleActions = new ArrayList<>();
+
         CharSequence mContentTitle;
         CharSequence mContentText;
         PendingIntent mContentIntent;
@@ -1325,6 +1335,35 @@
         }
 
         /**
+         * Add an invisible action to this notification. Invisible actions are never displayed by
+         * the system, but can be retrieved and used by other application listening to
+         * system notifications. Invisible actions are supported from Android 4.4.4 (API 20) and can
+         * be retrieved using {@link NotificationCompat#getInvisibleActions(Notification)}.
+         *
+         * @param icon Resource ID of a drawable that represents the action.
+         * @param title Text describing the action.
+         * @param intent {@link android.app.PendingIntent} to be fired when the action is invoked.
+         */
+        @RequiresApi(21)
+        public Builder addInvisibleAction(int icon, CharSequence title, PendingIntent intent) {
+            return addInvisibleAction(new Action(icon, title, intent));
+        }
+
+        /**
+         * Add an invisible action to this notification. Invisible actions are never displayed by
+         * the system, but can be retrieved and used by other application listening to
+         * system notifications. Invisible actions are supported from Android 4.4.4 (API 20) and can
+         * be retrieved using {@link NotificationCompat#getInvisibleActions(Notification)}.
+         *
+         * @param action The action to add.
+         */
+        @RequiresApi(21)
+        public Builder addInvisibleAction(Action action) {
+            mInvisibleActions.add(action);
+            return this;
+        }
+
+        /**
          * Add a rich notification style to be applied at build time.
          * <br>
          * If the platform does not provide rich notification styles, this method has no effect. The
@@ -2083,8 +2122,9 @@
         public static final int MAXIMUM_RETAINED_MESSAGES = 25;
 
         CharSequence mUserDisplayName;
-        CharSequence mConversationTitle;
+        @Nullable CharSequence mConversationTitle;
         List<Message> mMessages = new ArrayList<>();
+        boolean mIsGroupConversation;
 
         MessagingStyle() {
         }
@@ -2107,20 +2147,27 @@
         }
 
         /**
-         * Sets the title to be displayed on this conversation. This should only be used for
-         * group messaging and left unset for one-on-one conversations.
-         * @param conversationTitle Title displayed for this conversation.
-         * @return this object for method chaining.
+         * Sets the title to be displayed on this conversation. May be set to {@code null}.
+         *
+         * <p>This API's behavior was changed in SDK version {@link Build.VERSION_CODES#P}. If your
+         * application's target version is less than {@link Build.VERSION_CODES#P}, setting a
+         * conversation title to a non-null value will make {@link #isGroupConversation()} return
+         * {@code true} and passing {@code null} will make it return {@code false}. In
+         * {@link Build.VERSION_CODES#P} and beyond, use {@link #setGroupConversation(boolean)}
+         * to set group conversation status.
+         *
+         * @param conversationTitle Title displayed for this conversation
+         * @return this object for method chaining
          */
-        public MessagingStyle setConversationTitle(CharSequence conversationTitle) {
+        public MessagingStyle setConversationTitle(@Nullable CharSequence conversationTitle) {
             mConversationTitle = conversationTitle;
             return this;
         }
 
         /**
-         * Return the title to be displayed on this conversation. Can be <code>null</code> and
-         * should be for one-on-one conversations
+         * Return the title to be displayed on this conversation. Can be {@code null}.
          */
+        @Nullable
         public CharSequence getConversationTitle() {
             return mConversationTitle;
         }
@@ -2169,6 +2216,42 @@
         }
 
         /**
+         * Sets whether this conversation notification represents a group.
+         * @param isGroupConversation {@code true} if the conversation represents a group,
+         * {@code false} otherwise.
+         * @return this object for method chaining
+         */
+        public MessagingStyle setGroupConversation(boolean isGroupConversation) {
+            mIsGroupConversation = isGroupConversation;
+            return this;
+        }
+
+        /**
+         * Returns {@code true} if this notification represents a group conversation, otherwise
+         * {@code false}.
+         *
+         * <p> If the application that generated this {@link MessagingStyle} targets an SDK version
+         * less than {@link Build.VERSION_CODES#P}, this method becomes dependent on whether or
+         * not the conversation title is set; returning {@code true} if the conversation title is
+         * a non-null value, or {@code false} otherwise. From {@link Build.VERSION_CODES#P} forward,
+         * this method returns what's set by {@link #setGroupConversation(boolean)} allowing for
+         * named, non-group conversations.
+         *
+         * @see #setConversationTitle(CharSequence)
+         */
+        public boolean isGroupConversation() {
+            // When target SDK version is < P, a non-null conversation title dictates if this is
+            // as group conversation.
+            if (mBuilder != null
+                    && mBuilder.mContext.getApplicationInfo().targetSdkVersion
+                    < Build.VERSION_CODES.P) {
+                return mConversationTitle != null;
+            }
+
+            return mIsGroupConversation;
+        }
+
+        /**
          * Retrieves a {@link MessagingStyle} from a {@link Notification}, enabling an application
          * that has set a {@link MessagingStyle} using {@link NotificationCompat} or
          * {@link android.app.Notification.Builder} to send messaging information to another
@@ -2316,6 +2399,7 @@
             if (!mMessages.isEmpty()) { extras.putParcelableArray(EXTRA_MESSAGES,
                     Message.getBundleArrayForMessages(mMessages));
             }
+            extras.putBoolean(EXTRA_IS_GROUP_CONVERSATION, mIsGroupConversation);
         }
 
         /**
@@ -2331,6 +2415,7 @@
             if (parcelables != null) {
                 mMessages = Message.getMessagesFromBundleArray(parcelables);
             }
+            mIsGroupConversation = extras.getBoolean(EXTRA_IS_GROUP_CONVERSATION);
         }
 
         public static final class Message {
@@ -2744,6 +2829,66 @@
      * to attach actions.
      */
     public static class Action {
+        /**
+         * {@link SemanticAction}: No semantic action defined.
+         */
+        public static final int SEMANTIC_ACTION_NONE = 0;
+
+        /**
+         * {@link SemanticAction}: Reply to a conversation, chat, group, or wherever replies
+         * may be appropriate.
+         */
+        public static final int SEMANTIC_ACTION_REPLY = 1;
+
+        /**
+         * {@link SemanticAction}: Mark content as read.
+         */
+        public static final int SEMANTIC_ACTION_MARK_AS_READ = 2;
+
+        /**
+         * {@link SemanticAction}: Mark content as unread.
+         */
+        public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3;
+
+        /**
+         * {@link SemanticAction}: Delete the content associated with the notification. This
+         * could mean deleting an email, message, etc.
+         */
+        public static final int SEMANTIC_ACTION_DELETE = 4;
+
+        /**
+         * {@link SemanticAction}: Archive the content associated with the notification. This
+         * could mean archiving an email, message, etc.
+         */
+        public static final int SEMANTIC_ACTION_ARCHIVE = 5;
+
+        /**
+         * {@link SemanticAction}: Mute the content associated with the notification. This could
+         * mean silencing a conversation or currently playing media.
+         */
+        public static final int SEMANTIC_ACTION_MUTE = 6;
+
+        /**
+         * {@link SemanticAction}: Unmute the content associated with the notification. This could
+         * mean un-silencing a conversation or currently playing media.
+         */
+        public static final int SEMANTIC_ACTION_UNMUTE = 7;
+
+        /**
+         * {@link SemanticAction}: Mark content with a thumbs up.
+         */
+        public static final int SEMANTIC_ACTION_THUMBS_UP = 8;
+
+        /**
+         * {@link SemanticAction}: Mark content with a thumbs down.
+         */
+        public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9;
+
+        static final String EXTRA_SHOWS_USER_INTERFACE =
+                "android.support.action.showsUserInterface";
+
+        static final String EXTRA_SEMANTIC_ACTION = "android.support.action.semanticAction";
+
         final Bundle mExtras;
         private final RemoteInput[] mRemoteInputs;
 
@@ -2760,6 +2905,9 @@
         private final RemoteInput[] mDataOnlyRemoteInputs;
 
         private boolean mAllowGeneratedReplies;
+        private boolean mShowsUserInterface = true;
+
+        private final @SemanticAction int mSemanticAction;
 
         /**
          * Small icon representing the action.
@@ -2776,12 +2924,13 @@
         public PendingIntent actionIntent;
 
         public Action(int icon, CharSequence title, PendingIntent intent) {
-            this(icon, title, intent, new Bundle(), null, null, true);
+            this(icon, title, intent, new Bundle(), null, null, true, SEMANTIC_ACTION_NONE, true);
         }
 
         Action(int icon, CharSequence title, PendingIntent intent, Bundle extras,
                 RemoteInput[] remoteInputs, RemoteInput[] dataOnlyRemoteInputs,
-                boolean allowGeneratedReplies) {
+                boolean allowGeneratedReplies, @SemanticAction int semanticAction,
+                boolean showsUserInterface) {
             this.icon = icon;
             this.title = NotificationCompat.Builder.limitCharSequenceLength(title);
             this.actionIntent = intent;
@@ -2789,6 +2938,8 @@
             this.mRemoteInputs = remoteInputs;
             this.mDataOnlyRemoteInputs = dataOnlyRemoteInputs;
             this.mAllowGeneratedReplies = allowGeneratedReplies;
+            this.mSemanticAction = semanticAction;
+            this.mShowsUserInterface = showsUserInterface;
         }
 
         public int getIcon() {
@@ -2828,6 +2979,17 @@
         }
 
         /**
+         * Returns the {@link SemanticAction} associated with this {@link Action}. A
+         * {@link SemanticAction} denotes what an {@link Action}'s {@link PendingIntent} will do
+         * (eg. reply, mark as read, delete, etc).
+         *
+         * @see SemanticAction
+         */
+        public @SemanticAction int getSemanticAction() {
+            return mSemanticAction;
+        }
+
+        /**
          * Get the list of inputs to be collected from the user that ONLY accept data when this
          * action is sent. These remote inputs are guaranteed to return true on a call to
          * {@link RemoteInput#isDataOnly}.
@@ -2842,6 +3004,14 @@
         }
 
         /**
+         * Return whether or not triggering this {@link Action}'s {@link PendingIntent} will open a
+         * user interface.
+         */
+        public boolean getShowsUserInterface() {
+            return mShowsUserInterface;
+        }
+
+        /**
          * Builder class for {@link Action} objects.
          */
         public static final class Builder {
@@ -2851,6 +3021,8 @@
             private boolean mAllowGeneratedReplies = true;
             private final Bundle mExtras;
             private ArrayList<RemoteInput> mRemoteInputs;
+            private @SemanticAction int mSemanticAction;
+            private boolean mShowsUserInterface = true;
 
             /**
              * Construct a new builder for {@link Action} object.
@@ -2859,7 +3031,7 @@
              * @param intent the {@link PendingIntent} to fire when users trigger this action
              */
             public Builder(int icon, CharSequence title, PendingIntent intent) {
-                this(icon, title, intent, new Bundle(), null, true);
+                this(icon, title, intent, new Bundle(), null, true, SEMANTIC_ACTION_NONE, true);
             }
 
             /**
@@ -2869,11 +3041,13 @@
              */
             public Builder(Action action) {
                 this(action.icon, action.title, action.actionIntent, new Bundle(action.mExtras),
-                        action.getRemoteInputs(), action.getAllowGeneratedReplies());
+                        action.getRemoteInputs(), action.getAllowGeneratedReplies(),
+                        action.getSemanticAction(), action.mShowsUserInterface);
             }
 
             private Builder(int icon, CharSequence title, PendingIntent intent, Bundle extras,
-                    RemoteInput[] remoteInputs, boolean allowGeneratedReplies) {
+                    RemoteInput[] remoteInputs, boolean allowGeneratedReplies,
+                    @SemanticAction int semanticAction, boolean showsUserInterface) {
                 mIcon = icon;
                 mTitle = NotificationCompat.Builder.limitCharSequenceLength(title);
                 mIntent = intent;
@@ -2881,6 +3055,8 @@
                 mRemoteInputs = remoteInputs == null ? null : new ArrayList<>(
                         Arrays.asList(remoteInputs));
                 mAllowGeneratedReplies = allowGeneratedReplies;
+                mSemanticAction = semanticAction;
+                mShowsUserInterface = showsUserInterface;
             }
 
             /**
@@ -2936,6 +3112,32 @@
             }
 
             /**
+             * Sets the {@link SemanticAction} for this {@link Action}. A {@link SemanticAction}
+             * denotes what an {@link Action}'s {@link PendingIntent} will do (eg. reply, mark
+             * as read, delete, etc).
+             * @param semanticAction a {@link SemanticAction} defined within {@link Action} with
+             * {@code SEMANTIC_ACTION_} prefixes
+             * @return this object for method chaining
+             */
+            public Builder setSemanticAction(@SemanticAction int semanticAction) {
+                mSemanticAction = semanticAction;
+                return this;
+            }
+
+            /**
+             * Set whether or not this {@link Action}'s {@link PendingIntent} will open a user
+             * interface.
+             * @param showsUserInterface {@code true} if this {@link Action}'s {@link PendingIntent}
+             * will open a user interface, otherwise {@code false}
+             * @return this object for method chaining
+             * The default value is {@code true}
+             */
+            public Builder setShowsUserInterface(boolean showsUserInterface) {
+                mShowsUserInterface = showsUserInterface;
+                return this;
+            }
+
+            /**
              * Apply an extender to this action builder. Extenders may be used to add
              * metadata or change options on this builder.
              */
@@ -2966,7 +3168,8 @@
                 RemoteInput[] textInputsArr = textInputs.isEmpty()
                         ? null : textInputs.toArray(new RemoteInput[textInputs.size()]);
                 return new Action(mIcon, mTitle, mIntent, mExtras, textInputsArr,
-                        dataOnlyInputsArr, mAllowGeneratedReplies);
+                        dataOnlyInputsArr, mAllowGeneratedReplies, mSemanticAction,
+                        mShowsUserInterface);
             }
         }
 
@@ -3226,6 +3429,27 @@
                 return (mFlags & FLAG_HINT_DISPLAY_INLINE) != 0;
             }
         }
+
+        /**
+         * Provides meaning to an {@link Action} that hints at what the associated
+         * {@link PendingIntent} will do. For example, an {@link Action} with a
+         * {@link PendingIntent} that replies to a text message notification may have the
+         * {@link #SEMANTIC_ACTION_REPLY} {@link SemanticAction} set within it.
+         */
+        @IntDef({
+                SEMANTIC_ACTION_NONE,
+                SEMANTIC_ACTION_REPLY,
+                SEMANTIC_ACTION_MARK_AS_READ,
+                SEMANTIC_ACTION_MARK_AS_UNREAD,
+                SEMANTIC_ACTION_DELETE,
+                SEMANTIC_ACTION_ARCHIVE,
+                SEMANTIC_ACTION_MUTE,
+                SEMANTIC_ACTION_UNMUTE,
+                SEMANTIC_ACTION_THUMBS_UP,
+                SEMANTIC_ACTION_THUMBS_DOWN
+        })
+        @Retention(RetentionPolicy.SOURCE)
+        public @interface SemanticAction {}
     }
 
 
@@ -4135,10 +4359,15 @@
      * to access values.
      */
     public static final class CarExtender implements Extender {
-        private static final String EXTRA_CAR_EXTENDER = "android.car.EXTENSIONS";
+        /** @hide **/
+        @RestrictTo(LIBRARY_GROUP)
+        static final String EXTRA_CAR_EXTENDER = "android.car.EXTENSIONS";
         private static final String EXTRA_LARGE_ICON = "large_icon";
         private static final String EXTRA_CONVERSATION = "car_conversation";
         private static final String EXTRA_COLOR = "app_color";
+        /** @hide **/
+        @RestrictTo(LIBRARY_GROUP)
+        static final String EXTRA_INVISIBLE_ACTIONS = "invisible_actions";
 
         private static final String KEY_AUTHOR = "author";
         private static final String KEY_TEXT = "text";
@@ -4626,8 +4855,41 @@
             allowGeneratedReplies = action.getExtras().getBoolean(
                     NotificationCompatJellybean.EXTRA_ALLOW_GENERATED_REPLIES);
         }
+
+        final boolean showsUserInterface =
+                action.getExtras().getBoolean(Action.EXTRA_SHOWS_USER_INTERFACE, true);
+
+        final @Action.SemanticAction int semanticAction;
+        if (Build.VERSION.SDK_INT >= 28) {
+            semanticAction = action.getSemanticAction();
+        } else {
+            semanticAction = action.getExtras().getInt(
+                    Action.EXTRA_SEMANTIC_ACTION, Action.SEMANTIC_ACTION_NONE);
+        }
+
         return new Action(action.icon, action.title, action.actionIntent,
-                action.getExtras(), remoteInputs, null, allowGeneratedReplies);
+                action.getExtras(), remoteInputs, null, allowGeneratedReplies,
+                semanticAction, showsUserInterface);
+    }
+
+    /** Returns the invisible actions contained within the given notification. */
+    @RequiresApi(21)
+    public static List<Action> getInvisibleActions(Notification notification) {
+        ArrayList<Action> result = new ArrayList<>();
+
+        Bundle carExtenderBundle = notification.extras.getBundle(CarExtender.EXTRA_CAR_EXTENDER);
+        if (carExtenderBundle == null) {
+            return result;
+        }
+
+        Bundle listBundle = carExtenderBundle.getBundle(CarExtender.EXTRA_INVISIBLE_ACTIONS);
+        if (listBundle != null) {
+            for (int i = 0; i < listBundle.size(); i++) {
+                result.add(NotificationCompatJellybean.getActionFromBundle(
+                        listBundle.getBundle(Integer.toString(i))));
+            }
+        }
+        return result;
     }
 
     /**
diff --git a/compat/src/main/java/android/support/v4/app/NotificationCompatBuilder.java b/compat/src/main/java/android/support/v4/app/NotificationCompatBuilder.java
index db775a5..35960d2 100644
--- a/compat/src/main/java/android/support/v4/app/NotificationCompatBuilder.java
+++ b/compat/src/main/java/android/support/v4/app/NotificationCompatBuilder.java
@@ -151,6 +151,26 @@
                 mBuilder.addPerson(person);
             }
             mHeadsUpContentView = b.mHeadsUpContentView;
+
+            // Invisible actions should be stored in the extender so we need to check if one exists
+            // already.
+            Bundle carExtenderBundle =
+                    b.getExtras().getBundle(NotificationCompat.CarExtender.EXTRA_CAR_EXTENDER);
+            if (carExtenderBundle == null) {
+                carExtenderBundle = new Bundle();
+            }
+            Bundle listBundle = new Bundle();
+            for (int i = 0; i < b.mInvisibleActions.size(); i++) {
+                listBundle.putBundle(
+                        Integer.toString(i),
+                        NotificationCompatJellybean.getBundleForAction(b.mInvisibleActions.get(i)));
+            }
+            carExtenderBundle.putBundle(
+                    NotificationCompat.CarExtender.EXTRA_INVISIBLE_ACTIONS, listBundle);
+            b.getExtras().putBundle(
+                    NotificationCompat.CarExtender.EXTRA_CAR_EXTENDER, carExtenderBundle);
+            mExtras.putBundle(
+                    NotificationCompat.CarExtender.EXTRA_CAR_EXTENDER, carExtenderBundle);
         }
         if (Build.VERSION.SDK_INT >= 24) {
             mBuilder.setExtras(b.mExtras)
@@ -248,6 +268,15 @@
             if (Build.VERSION.SDK_INT >= 24) {
                 actionBuilder.setAllowGeneratedReplies(action.getAllowGeneratedReplies());
             }
+
+            actionExtras.putInt(NotificationCompat.Action.EXTRA_SEMANTIC_ACTION,
+                    action.getSemanticAction());
+            if (Build.VERSION.SDK_INT >= 28) {
+                actionBuilder.setSemanticAction(action.getSemanticAction());
+            }
+
+            actionExtras.putBoolean(NotificationCompat.Action.EXTRA_SHOWS_USER_INTERFACE,
+                    action.getShowsUserInterface());
             actionBuilder.addExtras(actionExtras);
             mBuilder.addAction(actionBuilder.build());
         } else if (Build.VERSION.SDK_INT >= 16) {
diff --git a/compat/src/main/java/android/support/v4/app/NotificationCompatJellybean.java b/compat/src/main/java/android/support/v4/app/NotificationCompatJellybean.java
index 9cdd2e9..82f8941 100644
--- a/compat/src/main/java/android/support/v4/app/NotificationCompatJellybean.java
+++ b/compat/src/main/java/android/support/v4/app/NotificationCompatJellybean.java
@@ -129,7 +129,8 @@
             allowGeneratedReplies = extras.getBoolean(EXTRA_ALLOW_GENERATED_REPLIES);
         }
         return new NotificationCompat.Action(icon, title, actionIntent, extras, remoteInputs,
-                dataOnlyRemoteInputs, allowGeneratedReplies);
+                dataOnlyRemoteInputs, allowGeneratedReplies,
+                NotificationCompat.Action.SEMANTIC_ACTION_NONE, true);
     }
 
     public static Bundle writeActionAndGetExtras(
@@ -236,7 +237,9 @@
                 bundle.getBundle(KEY_EXTRAS),
                 fromBundleArray(getBundleArrayFromBundle(bundle, KEY_REMOTE_INPUTS)),
                 fromBundleArray(getBundleArrayFromBundle(bundle, KEY_DATA_ONLY_REMOTE_INPUTS)),
-                allowGeneratedReplies);
+                allowGeneratedReplies,
+                NotificationCompat.Action.SEMANTIC_ACTION_NONE,
+                true);
     }
 
     static Bundle getBundleForAction(NotificationCompat.Action action) {
diff --git a/compat/src/main/java/android/support/v4/content/pm/ShortcutInfoCompat.java b/compat/src/main/java/android/support/v4/content/pm/ShortcutInfoCompat.java
index 63585e1..bbfc805 100644
--- a/compat/src/main/java/android/support/v4/content/pm/ShortcutInfoCompat.java
+++ b/compat/src/main/java/android/support/v4/content/pm/ShortcutInfoCompat.java
@@ -301,10 +301,10 @@
         public ShortcutInfoCompat build() {
             // Verify the arguments
             if (TextUtils.isEmpty(mInfo.mLabel)) {
-                throw new IllegalArgumentException("Shortcut much have a non-empty label");
+                throw new IllegalArgumentException("Shortcut must have a non-empty label");
             }
             if (mInfo.mIntents == null || mInfo.mIntents.length == 0) {
-                throw new IllegalArgumentException("Shortcut much have an intent");
+                throw new IllegalArgumentException("Shortcut must have an intent");
             }
             return mInfo;
         }
diff --git a/compat/src/main/java/android/support/v4/content/res/FontResourcesParserCompat.java b/compat/src/main/java/android/support/v4/content/res/FontResourcesParserCompat.java
index 8ad07d3..f597e68 100644
--- a/compat/src/main/java/android/support/v4/content/res/FontResourcesParserCompat.java
+++ b/compat/src/main/java/android/support/v4/content/res/FontResourcesParserCompat.java
@@ -102,13 +102,17 @@
         private final @NonNull String mFileName;
         private int mWeight;
         private boolean mItalic;
+        private String mVariationSettings;
+        private int mTtcIndex;
         private int mResourceId;
 
         public FontFileResourceEntry(@NonNull String fileName, int weight, boolean italic,
-                int resourceId) {
+                @Nullable String variationSettings, int ttcIndex, int resourceId) {
             mFileName = fileName;
             mWeight = weight;
             mItalic = italic;
+            mVariationSettings = variationSettings;
+            mTtcIndex = ttcIndex;
             mResourceId = resourceId;
         }
 
@@ -124,6 +128,14 @@
             return mItalic;
         }
 
+        public @Nullable String getVariationSettings() {
+            return mVariationSettings;
+        }
+
+        public int getTtcIndex() {
+            return mTtcIndex;
+        }
+
         public int getResourceId() {
             return mResourceId;
         }
@@ -260,6 +272,15 @@
                 ? R.styleable.FontFamilyFont_fontStyle
                 : R.styleable.FontFamilyFont_android_fontStyle;
         boolean isItalic = ITALIC == array.getInt(styleAttr, 0);
+        final int ttcIndexAttr = array.hasValue(R.styleable.FontFamilyFont_ttcIndex)
+                ? R.styleable.FontFamilyFont_ttcIndex
+                : R.styleable.FontFamilyFont_android_ttcIndex;
+        final int variationSettingsAttr =
+                array.hasValue(R.styleable.FontFamilyFont_fontVariationSettings)
+                        ? R.styleable.FontFamilyFont_fontVariationSettings
+                        : R.styleable.FontFamilyFont_android_fontVariationSettings;
+        String variationSettings = array.getString(variationSettingsAttr);
+        int ttcIndex = array.getInt(ttcIndexAttr, 0);
         final int resourceAttr = array.hasValue(R.styleable.FontFamilyFont_font)
                 ? R.styleable.FontFamilyFont_font
                 : R.styleable.FontFamilyFont_android_font;
@@ -269,7 +290,8 @@
         while (parser.next() != XmlPullParser.END_TAG) {
             skip(parser);
         }
-        return new FontFileResourceEntry(filename, weight, isItalic, resourceId);
+        return new FontFileResourceEntry(filename, weight, isItalic, variationSettings, ttcIndex,
+                resourceId);
     }
 
     private static void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
diff --git a/compat/src/main/java/android/support/v4/graphics/TypefaceCompat.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompat.java
index 3c55df6..b763101 100644
--- a/compat/src/main/java/android/support/v4/graphics/TypefaceCompat.java
+++ b/compat/src/main/java/android/support/v4/graphics/TypefaceCompat.java
@@ -32,10 +32,10 @@
 import android.support.v4.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry;
 import android.support.v4.content.res.FontResourcesParserCompat.ProviderResourceEntry;
 import android.support.v4.content.res.ResourcesCompat;
+import android.support.v4.os.BuildCompat;
 import android.support.v4.provider.FontsContractCompat;
 import android.support.v4.provider.FontsContractCompat.FontInfo;
 import android.support.v4.util.LruCache;
-
 /**
  * Helper for accessing features in {@link Typeface}.
  * @hide
@@ -46,7 +46,9 @@
 
     private static final TypefaceCompatImpl sTypefaceCompatImpl;
     static {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+        if (BuildCompat.isAtLeastP()) {
+            sTypefaceCompatImpl = new TypefaceCompatApi28Impl();
+        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             sTypefaceCompatImpl = new TypefaceCompatApi26Impl();
         } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
                 && TypefaceCompatApi24Impl.isUsable()) {
diff --git a/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
index 89a6ec4..a8c1988 100644
--- a/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
+++ b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi24Impl.java
@@ -159,8 +159,7 @@
             if (buffer == null) {
                 return null;
             }
-            // TODO: support ttc index.
-            if (!addFontWeightStyle(family, buffer, 0, e.getWeight(), e.isItalic())) {
+            if (!addFontWeightStyle(family, buffer, e.getTtcIndex(), e.getWeight(), e.isItalic())) {
                 return null;
             }
         }
diff --git a/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
index 28ab3ed..955284e 100644
--- a/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
+++ b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi26Impl.java
@@ -60,76 +60,70 @@
             "createFromFamiliesWithDefault";
     private static final String FREEZE_METHOD = "freeze";
     private static final String ABORT_CREATION_METHOD = "abortCreation";
-    private static final Class sFontFamily;
-    private static final Constructor sFontFamilyCtor;
-    private static final Method sAddFontFromAssetManager;
-    private static final Method sAddFontFromBuffer;
-    private static final Method sFreeze;
-    private static final Method sAbortCreation;
-    private static final Method sCreateFromFamiliesWithDefault;
     private static final int RESOLVE_BY_FONT_TABLE = -1;
+    private static final String DEFAULT_FAMILY = "sans-serif";
 
-    static {
-        Class fontFamilyClass;
+    protected final Class mFontFamily;
+    protected final Constructor mFontFamilyCtor;
+    protected final Method mAddFontFromAssetManager;
+    protected final Method mAddFontFromBuffer;
+    protected final Method mFreeze;
+    protected final Method mAbortCreation;
+    protected final Method mCreateFromFamiliesWithDefault;
+
+    public TypefaceCompatApi26Impl() {
+        Class fontFamily;
         Constructor fontFamilyCtor;
-        Method addFontMethod;
-        Method addFromBufferMethod;
-        Method freezeMethod;
-        Method abortCreationMethod;
-        Method createFromFamiliesWithDefaultMethod;
+        Method addFontFromAssetManager;
+        Method addFontFromBuffer;
+        Method freeze;
+        Method abortCreation;
+        Method createFromFamiliesWithDefault;
         try {
-            fontFamilyClass = Class.forName(FONT_FAMILY_CLASS);
-            fontFamilyCtor = fontFamilyClass.getConstructor();
-            addFontMethod = fontFamilyClass.getMethod(ADD_FONT_FROM_ASSET_MANAGER_METHOD,
-                    AssetManager.class, String.class, Integer.TYPE, Boolean.TYPE, Integer.TYPE,
-                    Integer.TYPE, Integer.TYPE, FontVariationAxis[].class);
-            addFromBufferMethod = fontFamilyClass.getMethod(ADD_FONT_FROM_BUFFER_METHOD,
-                    ByteBuffer.class, Integer.TYPE, FontVariationAxis[].class, Integer.TYPE,
-                    Integer.TYPE);
-            freezeMethod = fontFamilyClass.getMethod(FREEZE_METHOD);
-            abortCreationMethod = fontFamilyClass.getMethod(ABORT_CREATION_METHOD);
-            Object familyArray = Array.newInstance(fontFamilyClass, 1);
-            createFromFamiliesWithDefaultMethod =
-                    Typeface.class.getDeclaredMethod(CREATE_FROM_FAMILIES_WITH_DEFAULT_METHOD,
-                            familyArray.getClass(), Integer.TYPE, Integer.TYPE);
-            createFromFamiliesWithDefaultMethod.setAccessible(true);
+            fontFamily = obtainFontFamily();
+            fontFamilyCtor = obtainFontFamilyCtor(fontFamily);
+            addFontFromAssetManager = obtainAddFontFromAssetManagerMethod(fontFamily);
+            addFontFromBuffer = obtainAddFontFromBufferMethod(fontFamily);
+            freeze = obtainFreezeMethod(fontFamily);
+            abortCreation = obtainAbortCreationMethod(fontFamily);
+            createFromFamiliesWithDefault = obtainCreateFromFamiliesWithDefaultMethod(fontFamily);
         } catch (ClassNotFoundException | NoSuchMethodException e) {
             Log.e(TAG, "Unable to collect necessary methods for class " + e.getClass().getName(),
                     e);
-            fontFamilyClass = null;
+            fontFamily = null;
             fontFamilyCtor = null;
-            addFontMethod = null;
-            addFromBufferMethod = null;
-            freezeMethod = null;
-            abortCreationMethod = null;
-            createFromFamiliesWithDefaultMethod = null;
+            addFontFromAssetManager = null;
+            addFontFromBuffer = null;
+            freeze = null;
+            abortCreation = null;
+            createFromFamiliesWithDefault = null;
         }
-        sFontFamilyCtor = fontFamilyCtor;
-        sFontFamily = fontFamilyClass;
-        sAddFontFromAssetManager = addFontMethod;
-        sAddFontFromBuffer = addFromBufferMethod;
-        sFreeze = freezeMethod;
-        sAbortCreation = abortCreationMethod;
-        sCreateFromFamiliesWithDefault = createFromFamiliesWithDefaultMethod;
+        mFontFamily = fontFamily;
+        mFontFamilyCtor = fontFamilyCtor;
+        mAddFontFromAssetManager = addFontFromAssetManager;
+        mAddFontFromBuffer = addFontFromBuffer;
+        mFreeze = freeze;
+        mAbortCreation = abortCreation;
+        mCreateFromFamiliesWithDefault = createFromFamiliesWithDefault;
     }
 
     /**
-     * Returns true if API26 implementation is usable.
+     * Returns true if all the necessary methods were found.
      */
-    private static boolean isFontFamilyPrivateAPIAvailable() {
-        if (sAddFontFromAssetManager == null) {
+    private boolean isFontFamilyPrivateAPIAvailable() {
+        if (mAddFontFromAssetManager == null) {
             Log.w(TAG, "Unable to collect necessary private methods. "
                     + "Fallback to legacy implementation.");
         }
-        return sAddFontFromAssetManager != null;
+        return mAddFontFromAssetManager != null;
     }
 
     /**
      * Create a new FontFamily instance
      */
-    private static Object newFamily() {
+    private Object newFamily() {
         try {
-            return sFontFamilyCtor.newInstance();
+            return mFontFamilyCtor.newInstance();
         } catch (IllegalAccessException | InstantiationException | InvocationTargetException e) {
             throw new RuntimeException(e);
         }
@@ -139,12 +133,12 @@
      * Call FontFamily#addFontFromAssetManager(AssetManager mgr, String path, int cookie,
      *      boolean isAsset, int ttcIndex, int weight, int isItalic, FontVariationAxis[] axes)
      */
-    private static boolean addFontFromAssetManager(Context context, Object family, String fileName,
-            int ttcIndex, int weight, int style) {
+    private boolean addFontFromAssetManager(Context context, Object family, String fileName,
+            int ttcIndex, int weight, int style, @Nullable FontVariationAxis[] axes) {
         try {
-            final Boolean result = (Boolean) sAddFontFromAssetManager.invoke(family,
+            final Boolean result = (Boolean) mAddFontFromAssetManager.invoke(family,
                     context.getAssets(), fileName, 0 /* cookie */, false /* isAsset */, ttcIndex,
-                    weight, style, null /* axes */);
+                    weight, style, axes);
             return result.booleanValue();
         } catch (IllegalAccessException | InvocationTargetException e) {
             throw new RuntimeException(e);
@@ -155,10 +149,10 @@
      * Call FontFamily#addFontFromBuffer(ByteBuffer font, int ttcIndex, FontVariationAxis[] axes,
      *      int weight, int italic)
      */
-    private static boolean addFontFromBuffer(Object family, ByteBuffer buffer,
+    private boolean addFontFromBuffer(Object family, ByteBuffer buffer,
             int ttcIndex, int weight, int style) {
         try {
-            final Boolean result = (Boolean) sAddFontFromBuffer.invoke(family,
+            final Boolean result = (Boolean) mAddFontFromBuffer.invoke(family,
                     buffer, ttcIndex, null /* axes */, weight, style);
             return result.booleanValue();
         } catch (IllegalAccessException | InvocationTargetException e) {
@@ -167,14 +161,14 @@
     }
 
     /**
-     * Call static method Typeface#createFromFamiliesWithDefault(
+     * Call method Typeface#createFromFamiliesWithDefault(
      *      FontFamily[] families, int weight, int italic)
      */
-    private static Typeface createFromFamiliesWithDefault(Object family) {
+    protected Typeface createFromFamiliesWithDefault(Object family) {
         try {
-            Object familyArray = Array.newInstance(sFontFamily, 1);
+            Object familyArray = Array.newInstance(mFontFamily, 1);
             Array.set(familyArray, 0, family);
-            return (Typeface) sCreateFromFamiliesWithDefault.invoke(null /* static method */,
+            return (Typeface) mCreateFromFamiliesWithDefault.invoke(null /* static method */,
                     familyArray, RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE);
         } catch (IllegalAccessException | InvocationTargetException e) {
             throw new RuntimeException(e);
@@ -184,9 +178,9 @@
     /**
      * Call FontFamily#freeze()
      */
-    private static boolean freeze(Object family) {
+    private boolean freeze(Object family) {
         try {
-            Boolean result = (Boolean) sFreeze.invoke(family);
+            Boolean result = (Boolean) mFreeze.invoke(family);
             return result.booleanValue();
         } catch (IllegalAccessException | InvocationTargetException e) {
             throw new RuntimeException(e);
@@ -196,9 +190,9 @@
     /**
      * Call FontFamily#abortCreation()
      */
-    private static void abortCreation(Object family) {
+    private void abortCreation(Object family) {
         try {
-            sAbortCreation.invoke(family);
+            mAbortCreation.invoke(family);
         } catch (IllegalAccessException | InvocationTargetException e) {
             throw new RuntimeException(e);
         }
@@ -213,9 +207,9 @@
         }
         Object fontFamily = newFamily();
         for (final FontFileResourceEntry fontFile : entry.getEntries()) {
-            // TODO: Add ttc and variation font support. (b/37853920)
             if (!addFontFromAssetManager(context, fontFamily, fontFile.getFileName(),
-                    0 /* ttcIndex */, fontFile.getWeight(), fontFile.isItalic() ? 1 : 0)) {
+                    fontFile.getTtcIndex(), fontFile.getWeight(), fontFile.isItalic() ? 1 : 0,
+                    FontVariationAxis.fromFontVariationSettings(fontFile.getVariationSettings()))) {
                 abortCreation(fontFamily);
                 return null;
             }
@@ -292,7 +286,7 @@
         Object fontFamily = newFamily();
         if (!addFontFromAssetManager(context, fontFamily, path,
                 0 /* ttcIndex */, RESOLVE_BY_FONT_TABLE /* weight */,
-                RESOLVE_BY_FONT_TABLE /* italic */)) {
+                RESOLVE_BY_FONT_TABLE /* italic */, null /* axes */)) {
             abortCreation(fontFamily);
             return null;
         }
@@ -301,4 +295,47 @@
         }
         return createFromFamiliesWithDefault(fontFamily);
     }
+
+    // The following getters retrieve by reflection the Typeface methods, belonging to the
+    // framework code, which will be invoked. Since the definitions of these methods can change
+    // across different API versions, inheriting classes should override these getters in order to
+    // reflect the method definitions in the API versions they represent.
+    //===========================================================================================
+    protected Class obtainFontFamily() throws ClassNotFoundException {
+        return Class.forName(FONT_FAMILY_CLASS);
+    }
+
+    protected Constructor obtainFontFamilyCtor(Class fontFamily) throws NoSuchMethodException {
+        return fontFamily.getConstructor();
+    }
+
+    protected Method obtainAddFontFromAssetManagerMethod(Class fontFamily)
+            throws NoSuchMethodException {
+        return fontFamily.getMethod(ADD_FONT_FROM_ASSET_MANAGER_METHOD,
+                AssetManager.class, String.class, Integer.TYPE, Boolean.TYPE, Integer.TYPE,
+                Integer.TYPE, Integer.TYPE, FontVariationAxis[].class);
+    }
+
+    protected Method obtainAddFontFromBufferMethod(Class fontFamily) throws NoSuchMethodException {
+        return fontFamily.getMethod(ADD_FONT_FROM_BUFFER_METHOD,
+                ByteBuffer.class, Integer.TYPE, FontVariationAxis[].class, Integer.TYPE,
+                Integer.TYPE);
+    }
+
+    protected Method obtainFreezeMethod(Class fontFamily) throws NoSuchMethodException {
+        return fontFamily.getMethod(FREEZE_METHOD);
+    }
+
+    protected Method obtainAbortCreationMethod(Class fontFamily) throws NoSuchMethodException {
+        return fontFamily.getMethod(ABORT_CREATION_METHOD);
+    }
+
+    protected Method obtainCreateFromFamiliesWithDefaultMethod(Class fontFamily)
+            throws NoSuchMethodException {
+        Object familyArray = Array.newInstance(fontFamily, 1);
+        Method m =  Typeface.class.getDeclaredMethod(CREATE_FROM_FAMILIES_WITH_DEFAULT_METHOD,
+                familyArray.getClass(), Integer.TYPE, Integer.TYPE);
+        m.setAccessible(true);
+        return m;
+    }
 }
diff --git a/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi28Impl.java b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi28Impl.java
new file mode 100644
index 0000000..baa2ce6
--- /dev/null
+++ b/compat/src/main/java/android/support/v4/graphics/TypefaceCompatApi28Impl.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2017 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 static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+
+import android.graphics.Typeface;
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Implementation of the Typeface compat methods for API 28 and above.
+ * @hide
+ */
+@RestrictTo(LIBRARY_GROUP)
+@RequiresApi(28)
+public class TypefaceCompatApi28Impl extends TypefaceCompatApi26Impl {
+    private static final String TAG = "TypefaceCompatApi28Impl";
+
+    private static final String CREATE_FROM_FAMILIES_WITH_DEFAULT_METHOD =
+            "createFromFamiliesWithDefault";
+    private static final int RESOLVE_BY_FONT_TABLE = -1;
+    private static final String DEFAULT_FAMILY = "sans-serif";
+
+    /**
+     * Call method Typeface#createFromFamiliesWithDefault(
+     *      FontFamily[] families, String fallbackName, int weight, int italic)
+     */
+    @Override
+    protected Typeface createFromFamiliesWithDefault(Object family) {
+        try {
+            Object familyArray = Array.newInstance(mFontFamily, 1);
+            Array.set(familyArray, 0, family);
+            return (Typeface) mCreateFromFamiliesWithDefault.invoke(null /* static method */,
+                    familyArray, DEFAULT_FAMILY, RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE);
+        } catch (IllegalAccessException | InvocationTargetException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    protected Method obtainCreateFromFamiliesWithDefaultMethod(Class fontFamily)
+            throws NoSuchMethodException {
+        Object familyArray = Array.newInstance(fontFamily, 1);
+        Method m =  Typeface.class.getDeclaredMethod(CREATE_FROM_FAMILIES_WITH_DEFAULT_METHOD,
+                familyArray.getClass(), String.class, Integer.TYPE, Integer.TYPE);
+        m.setAccessible(true);
+        return m;
+    }
+}
diff --git a/compat/src/main/java/android/support/v4/graphics/drawable/IconCompat.java b/compat/src/main/java/android/support/v4/graphics/drawable/IconCompat.java
index 359c96b..dc226c1 100644
--- a/compat/src/main/java/android/support/v4/graphics/drawable/IconCompat.java
+++ b/compat/src/main/java/android/support/v4/graphics/drawable/IconCompat.java
@@ -220,6 +220,7 @@
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP)
+    @SuppressWarnings("deprecation")
     public void addToShortcutIntent(@NonNull Intent outIntent, @Nullable Drawable badge) {
         Bitmap icon;
         switch (mType) {
diff --git a/compat/src/main/java/android/support/v4/util/LongSparseArray.java b/compat/src/main/java/android/support/v4/util/LongSparseArray.java
index 25b6bb9..febb5d5 100644
--- a/compat/src/main/java/android/support/v4/util/LongSparseArray.java
+++ b/compat/src/main/java/android/support/v4/util/LongSparseArray.java
@@ -235,6 +235,14 @@
     }
 
     /**
+     * Return true if size() is 0.
+     * @return true if size() is 0.
+     */
+    public boolean isEmpty() {
+        return size() == 0;
+    }
+
+    /**
      * Given an index in the range <code>0...size()-1</code>, returns
      * the key from the <code>index</code>th key-value mapping that this
      * LongSparseArray stores.
diff --git a/compat/src/main/java/android/support/v4/util/SparseArrayCompat.java b/compat/src/main/java/android/support/v4/util/SparseArrayCompat.java
index aedc4ad..5238cf0 100644
--- a/compat/src/main/java/android/support/v4/util/SparseArrayCompat.java
+++ b/compat/src/main/java/android/support/v4/util/SparseArrayCompat.java
@@ -228,6 +228,14 @@
     }
 
     /**
+     * Return true if size() is 0.
+     * @return true if size() is 0.
+     */
+    public boolean isEmpty() {
+        return size() == 0;
+    }
+
+    /**
      * Given an index in the range <code>0...size()-1</code>, returns
      * the key from the <code>index</code>th key-value mapping that this
      * SparseArray stores.
diff --git a/compat/src/main/java/android/support/v4/view/ViewConfigurationCompat.java b/compat/src/main/java/android/support/v4/view/ViewConfigurationCompat.java
index 60d37a9..a12387b 100644
--- a/compat/src/main/java/android/support/v4/view/ViewConfigurationCompat.java
+++ b/compat/src/main/java/android/support/v4/view/ViewConfigurationCompat.java
@@ -117,5 +117,17 @@
         return 0;
     }
 
+    /**
+     * @param config Used to get the hover slop directly from the {@link ViewConfiguration}.
+     *
+     * @return The hover slop value.
+     */
+    public static int getScaledHoverSlop(ViewConfiguration config) {
+        if (android.os.Build.VERSION.SDK_INT >= 28) {
+            return config.getScaledHoverSlop();
+        }
+        return config.getScaledTouchSlop() / 2;
+    }
+
     private ViewConfigurationCompat() {}
 }
diff --git a/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
index 327be01..d76481c 100644
--- a/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/compat/src/main/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -2343,16 +2343,18 @@
 
     public void setCollectionInfo(Object collectionInfo) {
         if (Build.VERSION.SDK_INT >= 19) {
-            mInfo.setCollectionInfo((AccessibilityNodeInfo.CollectionInfo)
-                    ((CollectionInfoCompat) collectionInfo).mInfo);
+            mInfo.setCollectionInfo((collectionInfo == null) ? null
+                    : (AccessibilityNodeInfo.CollectionInfo) ((CollectionInfoCompat)
+                            collectionInfo).mInfo);
         }
 
     }
 
     public void setCollectionItemInfo(Object collectionItemInfo) {
         if (Build.VERSION.SDK_INT >= 19) {
-            mInfo.setCollectionItemInfo((AccessibilityNodeInfo.CollectionItemInfo)
-                    ((CollectionItemInfoCompat) collectionItemInfo).mInfo);
+            mInfo.setCollectionItemInfo((collectionItemInfo == null) ? null
+                    : (AccessibilityNodeInfo.CollectionItemInfo) ((CollectionItemInfoCompat)
+                            collectionItemInfo).mInfo);
         }
     }
 
diff --git a/compat/tests/java/android/support/v4/app/NotificationCompatTest.java b/compat/tests/java/android/support/v4/app/NotificationCompatTest.java
index 41da709..903778f 100644
--- a/compat/tests/java/android/support/v4/app/NotificationCompatTest.java
+++ b/compat/tests/java/android/support/v4/app/NotificationCompatTest.java
@@ -23,7 +23,6 @@
 import static android.support.v4.app.NotificationCompat.GROUP_ALERT_ALL;
 import static android.support.v4.app.NotificationCompat.GROUP_ALERT_CHILDREN;
 import static android.support.v4.app.NotificationCompat.GROUP_ALERT_SUMMARY;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -49,6 +48,7 @@
 import org.junit.runner.RunWith;
 
 import java.util.ArrayList;
+import java.util.List;
 
 
 @RunWith(AndroidJUnit4.class)
@@ -200,6 +200,13 @@
     }
 
     @Test
+    public void testNotificationActionBuilder_defaultShowsUserInterfaceTrue() {
+        NotificationCompat.Action action = newActionBuilder().build();
+
+        assertTrue(action.getShowsUserInterface());
+    }
+
+    @Test
     public void testNotificationAction_defaultAllowGeneratedRepliesTrue() throws Throwable {
         NotificationCompat.Action a = new NotificationCompat.Action(0, null, null);
 
@@ -207,6 +214,13 @@
     }
 
     @Test
+    public void testNotificationAction_defaultShowsUserInterfaceTrue() {
+        NotificationCompat.Action action = new NotificationCompat.Action(0, null, null);
+
+        assertTrue(action.getShowsUserInterface());
+    }
+
+    @Test
     public void testNotificationActionBuilder_setAllowGeneratedRepliesFalse() throws Throwable {
         NotificationCompat.Action a = newActionBuilder()
                 .setAllowGeneratedReplies(false).build();
@@ -214,6 +228,28 @@
         assertFalse(a.getAllowGeneratedReplies());
     }
 
+    @Test
+    public void testNotificationAction_setShowsUserInterfaceFalse() {
+        NotificationCompat.Action action = newActionBuilder()
+                .setShowsUserInterface(false).build();
+
+        assertFalse(action.getShowsUserInterface());
+    }
+
+    @SdkSuppress(minSdkVersion = 20)
+    @Test
+    public void testGetActionCompatFromAction_showsUserInterface() {
+        NotificationCompat.Action action = newActionBuilder()
+                .setShowsUserInterface(false).build();
+        Notification notification = newNotificationBuilder().addAction(action).build();
+        NotificationCompat.Action result =
+                NotificationCompat.getActionCompatFromAction(notification.actions[0]);
+
+        assertFalse(result.getExtras().getBoolean(
+                NotificationCompat.Action.EXTRA_SHOWS_USER_INTERFACE, true));
+        assertFalse(result.getShowsUserInterface());
+    }
+
     @SdkSuppress(minSdkVersion = 17)
     @Test
     public void testNotificationWearableExtenderAction_setAllowGeneratedRepliesTrue()
@@ -488,6 +524,147 @@
         assertEquals(100, n.ledOffMS);
     }
 
+    @Test
+    public void messagingStyle_isGroupConversation() {
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.P;
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("self name")
+                        .setGroupConversation(true)
+                        .setConversationTitle("test conversation title");
+        new NotificationCompat.Builder(mContext, "test id")
+                .setSmallIcon(1)
+                .setContentTitle("test title")
+                .setStyle(messagingStyle)
+                .build();
+
+        assertTrue(messagingStyle.isGroupConversation());
+    }
+
+    @Test
+    public void messagingStyle_isGroupConversation_noConversationTitle() {
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.P;
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("self name")
+                        .setGroupConversation(true)
+                        .setConversationTitle(null);
+        new NotificationCompat.Builder(mContext, "test id")
+                .setSmallIcon(1)
+                .setContentTitle("test title")
+                .setStyle(messagingStyle)
+                .build();
+
+        assertTrue(messagingStyle.isGroupConversation());
+    }
+
+    @Test
+    public void messagingStyle_isGroupConversation_withConversationTitle_legacy() {
+        // In legacy (version < P), isGroupConversation is controlled by conversationTitle.
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.O;
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("self name")
+                        .setGroupConversation(false)
+                        .setConversationTitle("test conversation title");
+        new NotificationCompat.Builder(mContext, "test id")
+                .setSmallIcon(1)
+                .setContentTitle("test title")
+                .setStyle(messagingStyle)
+                .build();
+
+        assertTrue(messagingStyle.isGroupConversation());
+    }
+
+    @Test
+    public void messagingStyle_isGroupConversation_withoutConversationTitle_legacy() {
+        // In legacy (version < P), isGroupConversation is controlled by conversationTitle.
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.O;
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("self name")
+                        .setGroupConversation(true)
+                        .setConversationTitle(null);
+        new NotificationCompat.Builder(mContext, "test id")
+                .setSmallIcon(1)
+                .setContentTitle("test title")
+                .setStyle(messagingStyle)
+                .build();
+
+        assertFalse(messagingStyle.isGroupConversation());
+    }
+
+    @Test
+    public void testMessagingStyle_extras() {
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("test name")
+                        .setGroupConversation(true);
+        Bundle bundle = new Bundle();
+        messagingStyle.addCompatExtras(bundle);
+
+        NotificationCompat.MessagingStyle resultMessagingStyle =
+                new NotificationCompat.MessagingStyle("test name");
+        resultMessagingStyle.restoreFromCompatExtras(bundle);
+
+        assertTrue(resultMessagingStyle.isGroupConversation());
+    }
+
+    @Test
+    public void action_builder_hasDefault() {
+        NotificationCompat.Action action =
+                new NotificationCompat.Action.Builder(0, "Test Title", null).build();
+        assertEquals(NotificationCompat.Action.SEMANTIC_ACTION_NONE, action.getSemanticAction());
+    }
+
+    @Test
+    public void action_builder_setSemanticAction() {
+        NotificationCompat.Action action =
+                new NotificationCompat.Action.Builder(0, "Test Title", null)
+                        .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_REPLY)
+                        .build();
+        assertEquals(NotificationCompat.Action.SEMANTIC_ACTION_REPLY, action.getSemanticAction());
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 20)
+    public void action_semanticAction_toAndFromNotification() {
+        NotificationCompat.Action action =
+                new NotificationCompat.Action.Builder(0, "Test Title", null)
+                        .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_REPLY)
+                        .build();
+        Notification notification = newNotificationBuilder().addAction(action).build();
+        NotificationCompat.Action result = NotificationCompat.getAction(notification, 0);
+
+        assertEquals(NotificationCompat.Action.SEMANTIC_ACTION_REPLY, result.getSemanticAction());
+    }
+
+    private static final NotificationCompat.Action TEST_INVISIBLE_ACTION =
+            new NotificationCompat.Action.Builder(0, "Test Title", null).build();
+
+    @Test
+    @SdkSuppress(minSdkVersion = 21)
+    public void getInvisibleActions() {
+        Notification notification =
+                newNotificationBuilder().addInvisibleAction(TEST_INVISIBLE_ACTION).build();
+        verifyInvisibleActionExists(notification);
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 21)
+    public void getInvisibleActions_withCarExtender() {
+        NotificationCompat.CarExtender carExtender = new NotificationCompat.CarExtender();
+        Notification notification = newNotificationBuilder()
+                .addInvisibleAction(TEST_INVISIBLE_ACTION)
+                .extend(carExtender)
+                .build();
+        verifyInvisibleActionExists(notification);
+    }
+
+    private static void verifyInvisibleActionExists(Notification notification) {
+        List<NotificationCompat.Action> result =
+                NotificationCompat.getInvisibleActions(notification);
+        assertTrue("Expecting 1 result, got " + result.size(), result.size() == 1);
+        NotificationCompat.Action resultAction = result.get(0);
+        assertEquals(resultAction.getIcon(), TEST_INVISIBLE_ACTION.getIcon());
+        assertEquals(resultAction.getTitle(), TEST_INVISIBLE_ACTION.getTitle());
+    }
+
     private static RemoteInput newDataOnlyRemoteInput() {
         return new RemoteInput.Builder(DATA_RESULT_KEY)
             .setAllowFreeFormInput(false)
diff --git a/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java b/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java
index 6120eed..f503d99 100644
--- a/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java
+++ b/compat/tests/java/android/support/v4/content/res/FontResourcesParserCompatTest.java
@@ -63,7 +63,7 @@
     @Test
     public void testParse() throws XmlPullParserException, IOException {
         @SuppressLint("ResourceType")
-        XmlResourceParser parser = mResources.getXml(R.font.samplexmlfont);
+        XmlResourceParser parser = mResources.getXml(R.font.samplexmlfontforparsing);
 
         FamilyResourceEntry result = FontResourcesParserCompat.parse(parser, mResources);
 
@@ -74,18 +74,26 @@
         FontFileResourceEntry font1 = fileEntries[0];
         assertEquals(400, font1.getWeight());
         assertEquals(false, font1.isItalic());
+        assertEquals("'wdth' 0.8", font1.getVariationSettings());
+        assertEquals(0, font1.getTtcIndex());
         assertEquals(R.font.samplefont, font1.getResourceId());
         FontFileResourceEntry font2 = fileEntries[1];
         assertEquals(400, font2.getWeight());
         assertEquals(true, font2.isItalic());
+        assertEquals("'contrast' 0.5", font2.getVariationSettings());
+        assertEquals(1, font2.getTtcIndex());
         assertEquals(R.font.samplefont2, font2.getResourceId());
         FontFileResourceEntry font3 = fileEntries[2];
         assertEquals(700, font3.getWeight());
         assertEquals(false, font3.isItalic());
+        assertEquals("'wdth' 500.0, 'wght' 300.0", font3.getVariationSettings());
+        assertEquals(2, font3.getTtcIndex());
         assertEquals(R.font.samplefont3, font3.getResourceId());
         FontFileResourceEntry font4 = fileEntries[3];
         assertEquals(700, font4.getWeight());
         assertEquals(true, font4.isItalic());
+        assertEquals(null, font4.getVariationSettings());
+        assertEquals(0, font4.getTtcIndex());
         assertEquals(R.font.samplefont4, font4.getResourceId());
     }
 
@@ -98,7 +106,7 @@
         }
 
         @SuppressLint("ResourceType")
-        XmlResourceParser parser = mResources.getXml(R.font.samplexmlfont2);
+        XmlResourceParser parser = mResources.getXml(R.font.samplexmlfontforparsing2);
 
         FamilyResourceEntry result = FontResourcesParserCompat.parse(parser, mResources);
 
@@ -109,18 +117,26 @@
         FontFileResourceEntry font1 = fileEntries[0];
         assertEquals(400, font1.getWeight());
         assertEquals(false, font1.isItalic());
+        assertEquals("'wdth' 0.8", font1.getVariationSettings());
+        assertEquals(0, font1.getTtcIndex());
         assertEquals(R.font.samplefont, font1.getResourceId());
         FontFileResourceEntry font2 = fileEntries[1];
         assertEquals(400, font2.getWeight());
         assertEquals(true, font2.isItalic());
+        assertEquals("'contrast' 0.5", font2.getVariationSettings());
+        assertEquals(1, font2.getTtcIndex());
         assertEquals(R.font.samplefont2, font2.getResourceId());
         FontFileResourceEntry font3 = fileEntries[2];
         assertEquals(700, font3.getWeight());
         assertEquals(false, font3.isItalic());
+        assertEquals("'wdth' 500.0, 'wght' 300.0", font3.getVariationSettings());
+        assertEquals(2, font3.getTtcIndex());
         assertEquals(R.font.samplefont3, font3.getResourceId());
         FontFileResourceEntry font4 = fileEntries[3];
         assertEquals(700, font4.getWeight());
         assertEquals(true, font4.isItalic());
+        assertEquals(null, font4.getVariationSettings());
+        assertEquals(0, font4.getTtcIndex());
         assertEquals(R.font.samplefont4, font4.getResourceId());
     }
 
diff --git a/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java b/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java
index dff4c33..9c27966 100644
--- a/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java
+++ b/compat/tests/java/android/support/v4/graphics/TypefaceCompatTest.java
@@ -31,6 +31,7 @@
 import android.content.res.Resources;
 import android.graphics.Paint;
 import android.graphics.Typeface;
+import android.os.Build;
 import android.support.annotation.NonNull;
 import android.support.compat.test.R;
 import android.support.test.InstrumentationRegistry;
@@ -356,6 +357,81 @@
         assertEquals(R.font.large_d, getSelectedFontResourceId(typeface));
     }
 
+    private Typeface getLargerTypeface(String text, Typeface typeface1, Typeface typeface2) {
+        Paint p1 = new Paint();
+        p1.setTypeface(typeface1);
+        float width1 = p1.measureText(text);
+        Paint p2 = new Paint();
+        p2.setTypeface(typeface2);
+        float width2 = p2.measureText(text);
+
+        if (width1 > width2) {
+            return typeface1;
+        } else if (width1 < width2) {
+            return typeface2;
+        } else {
+            assertTrue(false);
+            return null;
+        }
+    }
+
+    @Test
+    public void testCreateFromResourcesFamilyXml_resourceTtcFont() throws Exception {
+        // Here we test that building typefaces by indexing in font collections works correctly.
+        // We want to ensure that the built typefaces correspond to the fonts with the right index.
+        // sample_font_collection.ttc contains two fonts (with indices 0 and 1). The first one has
+        // glyph "a" of 3em width, and all the other glyphs 1em. The second one has glyph "b" of
+        // 3em width, and all the other glyphs 1em. Hence, we can compare the width of these
+        // glyphs to assert that ttc indexing works.
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
+            // Creating typefaces with ttc index was only supported in the API starting with N.
+            return;
+        }
+        final FamilyResourceEntry entry1 = FontResourcesParserCompat.parse(
+                mResources.getXml(R.font.ttctestfont1), mResources);
+        Typeface typeface1 = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry1,
+                mResources, R.font.ttctestfont1, Typeface.NORMAL, null /* callback */,
+                null /*handler */, false /* isXmlRequest */);
+        assertNotNull(typeface1);
+        final FamilyResourceEntry entry2 = FontResourcesParserCompat.parse(
+                mResources.getXml(R.font.ttctestfont2), mResources);
+        Typeface typeface2 = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry2,
+                mResources, R.font.ttctestfont2, Typeface.NORMAL, null /* callback */,
+                null /*handler */, false /* isXmlRequest */);
+        assertNotNull(typeface2);
+
+        assertEquals(getLargerTypeface("a", typeface1, typeface2), typeface1);
+        assertEquals(getLargerTypeface("b", typeface1, typeface2), typeface2);
+    }
+
+    @Test
+    public void testCreateFromResourcesFamilyXml_resourceFontWithVariationSettings()
+            throws Exception {
+        // Here we test that specifying variation settings for fonts in XMLs works correctly.
+        // We build typefaces from two families containing one font each, using the same font
+        // resource, but having different values for the 'wdth' tag. Then we measure the painted
+        // text to ensure that the tag affects the text width. The font resource used supports
+        // the 'wdth' axis for the dash (-) character.
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            // Variation settings are only supported on O and newer.
+            return;
+        }
+        final FamilyResourceEntry entry1 = FontResourcesParserCompat.parse(
+                mResources.getXml(R.font.variationsettingstestfont1), mResources);
+        Typeface typeface1 = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry1,
+                mResources, R.font.variationsettingstestfont1, Typeface.NORMAL, null /* callback */,
+                null /*handler */, false /* isXmlRequest */);
+        assertNotNull(typeface1);
+        final FamilyResourceEntry entry2 = FontResourcesParserCompat.parse(
+                mResources.getXml(R.font.variationsettingstestfont2), mResources);
+        Typeface typeface2 = TypefaceCompat.createFromResourcesFamilyXml(mContext, entry2,
+                mResources, R.font.variationsettingstestfont2, Typeface.NORMAL, null /* callback */,
+                null /*handler */, false /* isXmlRequest */);
+        assertNotNull(typeface2);
+
+        assertEquals(getLargerTypeface("-", typeface1, typeface2), typeface2);
+    }
+
     @Test
     public void testCreateFromResourcesFontFile() {
         Typeface typeface = TypefaceCompat.createFromResourcesFontFile(mContext, mResources,
diff --git a/compat/tests/java/android/support/v4/util/LongSparseArrayTest.java b/compat/tests/java/android/support/v4/util/LongSparseArrayTest.java
new file mode 100644
index 0000000..663ea48
--- /dev/null
+++ b/compat/tests/java/android/support/v4/util/LongSparseArrayTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2018 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.util;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class LongSparseArrayTest {
+    @Test
+    public void isEmpty() throws Exception {
+        LongSparseArray<String> LongSparseArray = new LongSparseArray<>();
+        assertTrue(LongSparseArray.isEmpty()); // Newly created LongSparseArray should be empty
+
+        // Adding elements should change state from empty to not empty.
+        for (long i = 0L; i < 5L; i++) {
+            LongSparseArray.put(i, Long.toString(i));
+            assertFalse(LongSparseArray.isEmpty());
+        }
+        LongSparseArray.clear();
+        assertTrue(LongSparseArray.isEmpty()); // A cleared LongSparseArray should be empty.
+
+
+        long key1 = 1L, key2 = 2L;
+        String value1 = "some value", value2 = "some other value";
+        LongSparseArray.append(key1, value1);
+        assertFalse(LongSparseArray.isEmpty()); // has 1 element.
+        LongSparseArray.append(key2, value2);
+        assertFalse(LongSparseArray.isEmpty());  // has 2 elements.
+        assertFalse(LongSparseArray.isEmpty());  // consecutive calls should be OK.
+
+        LongSparseArray.remove(key1);
+        assertFalse(LongSparseArray.isEmpty()); // has 1 element.
+        LongSparseArray.remove(key2);
+        assertTrue(LongSparseArray.isEmpty());
+    }
+
+}
diff --git a/compat/tests/java/android/support/v4/util/SparseArrayCompatTest.java b/compat/tests/java/android/support/v4/util/SparseArrayCompatTest.java
new file mode 100644
index 0000000..122c89b
--- /dev/null
+++ b/compat/tests/java/android/support/v4/util/SparseArrayCompatTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2018 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.util;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SparseArrayCompatTest {
+    @Test
+    public void isEmpty() throws Exception {
+        SparseArrayCompat<String> sparseArrayCompat = new SparseArrayCompat<>();
+        assertTrue(sparseArrayCompat.isEmpty()); // Newly created SparseArrayCompat should be empty
+
+        // Adding elements should change state from empty to not empty.
+        for (int i = 0; i < 5; i++) {
+            sparseArrayCompat.put(i, Integer.toString(i));
+            assertFalse(sparseArrayCompat.isEmpty());
+        }
+        sparseArrayCompat.clear();
+        assertTrue(sparseArrayCompat.isEmpty()); // A cleared SparseArrayCompat should be empty.
+
+
+        int key1 = 1, key2 = 2;
+        String value1 = "some value", value2 = "some other value";
+        sparseArrayCompat.append(key1, value1);
+        assertFalse(sparseArrayCompat.isEmpty()); // has 1 element.
+        sparseArrayCompat.append(key2, value2);
+        assertFalse(sparseArrayCompat.isEmpty());  // has 2 elements.
+        assertFalse(sparseArrayCompat.isEmpty());  // consecutive calls should be OK.
+
+        sparseArrayCompat.remove(key1);
+        assertFalse(sparseArrayCompat.isEmpty()); // has 1 element.
+        sparseArrayCompat.remove(key2);
+        assertTrue(sparseArrayCompat.isEmpty());
+    }
+}
diff --git a/compat/tests/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatTest.java b/compat/tests/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatTest.java
new file mode 100644
index 0000000..34a0f99
--- /dev/null
+++ b/compat/tests/java/android/support/v4/view/accessibility/AccessibilityNodeInfoCompatTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2018 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.view.accessibility;
+
+import static org.junit.Assert.*;
+
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AccessibilityNodeInfoCompatTest {
+    @Test
+    public void testSetCollectionInfoIsNullable() throws Exception {
+        AccessibilityNodeInfo accessibilityNodeInfo = AccessibilityNodeInfo.obtain();
+        AccessibilityNodeInfoCompat accessibilityNodeInfoCompat = AccessibilityNodeInfoCompat.wrap(
+                accessibilityNodeInfo);
+        accessibilityNodeInfoCompat.setCollectionInfo(null);
+    }
+
+    @Test
+    public void testSetCollectionItemInfoIsNullable() throws Exception {
+        AccessibilityNodeInfo accessibilityNodeInfo = AccessibilityNodeInfo.obtain();
+        AccessibilityNodeInfoCompat accessibilityNodeInfoCompat = AccessibilityNodeInfoCompat.wrap(
+                accessibilityNodeInfo);
+        accessibilityNodeInfoCompat.setCollectionItemInfo(null);
+    }
+}
diff --git a/compat/tests/res/font/sample_font_collection.ttc b/compat/tests/res/font/sample_font_collection.ttc
new file mode 100644
index 0000000..9252f3d
--- /dev/null
+++ b/compat/tests/res/font/sample_font_collection.ttc
Binary files differ
diff --git a/compat/tests/res/font/samplexmlfontforparsing.xml b/compat/tests/res/font/samplexmlfontforparsing.xml
new file mode 100644
index 0000000..a96385c
--- /dev/null
+++ b/compat/tests/res/font/samplexmlfontforparsing.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:android="http://schemas.android.com/apk/res/android"
+             xmlns:app="http://schemas.android.com/apk/res-auto">
+    <font app:fontStyle="normal" app:fontWeight="400" app:fontVariationSettings="'wdth' 0.8"
+          app:font="@font/samplefont" app:ttcIndex="0" />
+    <font app:fontStyle="italic" app:fontWeight="400" app:fontVariationSettings="'contrast' 0.5"
+          app:font="@font/samplefont2" app:ttcIndex="1" />
+    <font app:fontStyle="normal" app:fontWeight="700" app:fontVariationSettings="'wdth' 500.0, 'wght' 300.0"
+          app:font="@font/samplefont3" app:ttcIndex="2" />
+    <font app:fontStyle="italic" app:fontWeight="700" app:font="@font/samplefont4" />
+</font-family>
diff --git a/compat/tests/res/font/samplexmlfontforparsing2.xml b/compat/tests/res/font/samplexmlfontforparsing2.xml
new file mode 100644
index 0000000..eb310ba
--- /dev/null
+++ b/compat/tests/res/font/samplexmlfontforparsing2.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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.
+  -->
+
+<font-family xmlns:android="http://schemas.android.com/apk/res/android" >
+    <font android:fontStyle="normal" android:fontWeight="400" android:fontVariationSettings="'wdth' 0.8"
+          android:font="@font/samplefont" android:ttcIndex="0" />
+    <font android:fontStyle="italic" android:fontWeight="400" android:fontVariationSettings="'contrast' 0.5"
+          android:font="@font/samplefont2" android:ttcIndex="1" />
+    <font android:fontStyle="normal" android:fontWeight="700" android:fontVariationSettings="'wdth' 500.0, 'wght' 300.0"
+          android:font="@font/samplefont3" android:ttcIndex="2" />
+    <font android:fontStyle="italic" android:fontWeight="700" android:font="@font/samplefont4" />
+</font-family>
diff --git a/compat/tests/res/font/ttctestfont1.xml b/compat/tests/res/font/ttctestfont1.xml
new file mode 100644
index 0000000..a2b75e3
--- /dev/null
+++ b/compat/tests/res/font/ttctestfont1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
+    <font app:font="@font/sample_font_collection" app:ttcIndex="0" />
+</font-family>
diff --git a/compat/tests/res/font/ttctestfont2.xml b/compat/tests/res/font/ttctestfont2.xml
new file mode 100644
index 0000000..e64ed6a
--- /dev/null
+++ b/compat/tests/res/font/ttctestfont2.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
+    <font app:font="@font/sample_font_collection" app:ttcIndex="1" />
+</font-family>
diff --git a/compat/tests/res/font/variable_width_dash_font.ttf b/compat/tests/res/font/variable_width_dash_font.ttf
new file mode 100644
index 0000000..f7a256a
--- /dev/null
+++ b/compat/tests/res/font/variable_width_dash_font.ttf
Binary files differ
diff --git a/compat/tests/res/font/variationsettingstestfont1.xml b/compat/tests/res/font/variationsettingstestfont1.xml
new file mode 100644
index 0000000..39052a6
--- /dev/null
+++ b/compat/tests/res/font/variationsettingstestfont1.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
+    <font app:font="@font/variable_width_dash_font" app:fontVariationSettings="'wdth' 100.0" />
+</font-family>
diff --git a/compat/tests/res/font/variationsettingstestfont2.xml b/compat/tests/res/font/variationsettingstestfont2.xml
new file mode 100644
index 0000000..90382d0
--- /dev/null
+++ b/compat/tests/res/font/variationsettingstestfont2.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
+    <font app:font="@font/variable_width_dash_font" app:fontVariationSettings="'wdth' 500.0" />
+</font-family>
diff --git a/content/Android.mk b/content/Android.mk
deleted file mode 100644
index cdd49af..0000000
--- a/content/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (C) 2017 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)
-
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-content
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/content/api/27.1.0.txt b/content/api/27.1.0.txt
new file mode 100644
index 0000000..e0b4fa3
--- /dev/null
+++ b/content/api/27.1.0.txt
@@ -0,0 +1,54 @@
+package android.support.content {
+
+  public class ContentPager {
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner);
+    ctor public ContentPager(android.content.ContentResolver, android.support.content.ContentPager.QueryRunner, int);
+    method public static android.os.Bundle createArgs(int, int);
+    method public android.support.content.Query query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal, android.support.content.ContentPager.ContentCallback);
+    method public void reset();
+    field public static final int CURSOR_DISPOSITION_COPIED = 1; // 0x1
+    field public static final int CURSOR_DISPOSITION_PAGED = 2; // 0x2
+    field public static final int CURSOR_DISPOSITION_REPAGED = 3; // 0x3
+    field public static final int CURSOR_DISPOSITION_WRAPPED = 4; // 0x4
+    field public static final java.lang.String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
+    field public static final java.lang.String EXTRA_REQUESTED_LIMIT = "android-support:extra-ignored-limit";
+    field public static final java.lang.String EXTRA_SUGGESTED_LIMIT = "android-support:extra-suggested-limit";
+    field public static final java.lang.String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
+    field public static final java.lang.String QUERY_ARG_LIMIT = "android:query-arg-limit";
+    field public static final java.lang.String QUERY_ARG_OFFSET = "android:query-arg-offset";
+  }
+
+  public static abstract interface ContentPager.ContentCallback {
+    method public abstract void onCursorReady(android.support.content.Query, android.database.Cursor);
+  }
+
+  public static abstract class ContentPager.CursorDisposition implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract interface ContentPager.QueryRunner {
+    method public abstract void cancel(android.support.content.Query);
+    method public abstract boolean isRunning(android.support.content.Query);
+    method public abstract void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public static abstract interface ContentPager.QueryRunner.Callback {
+    method public abstract void onQueryFinished(android.support.content.Query, android.database.Cursor);
+    method public abstract android.database.Cursor runQueryInBackground(android.support.content.Query);
+  }
+
+  public final class LoaderQueryRunner implements android.support.content.ContentPager.QueryRunner {
+    ctor public LoaderQueryRunner(android.content.Context, android.app.LoaderManager);
+    method public void cancel(android.support.content.Query);
+    method public boolean isRunning(android.support.content.Query);
+    method public void query(android.support.content.Query, android.support.content.ContentPager.QueryRunner.Callback);
+  }
+
+  public final class Query {
+    method public int getId();
+    method public int getLimit();
+    method public int getOffset();
+    method public android.net.Uri getUri();
+  }
+
+}
+
diff --git a/content/src/androidTest/AndroidManifest.xml b/content/src/androidTest/AndroidManifest.xml
index 4a815c4..4ccc3a2 100644
--- a/content/src/androidTest/AndroidManifest.xml
+++ b/content/src/androidTest/AndroidManifest.xml
@@ -15,9 +15,8 @@
   ~ limitations under the License.
   -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:tools="http://schemas.android.com/tools"
           package="android.support.content.test">
-    <uses-sdk android:minSdkVersion="14" />
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
 
     <application android:supportsRtl="true">
         <activity android:name="android.support.content.TestActivity" />
diff --git a/core-ui/Android.mk b/core-ui/Android.mk
deleted file mode 100644
index 1473381..0000000
--- a/core-ui/Android.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-core-ui \
-#       android-support-compat
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-core-ui
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat \
-    android-support-core-utils
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-LOCAL_EXPORT_PROGUARD_FLAG_FILES := proguard-rules.pro
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/core-ui/api/27.1.0.txt b/core-ui/api/27.1.0.txt
new file mode 100644
index 0000000..815d6e3
--- /dev/null
+++ b/core-ui/api/27.1.0.txt
@@ -0,0 +1,750 @@
+package android.support.design.widget {
+
+  public class CoordinatorLayout extends android.view.ViewGroup implements android.support.v4.view.NestedScrollingParent2 {
+    ctor public CoordinatorLayout(android.content.Context);
+    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
+    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
+    method public void dispatchDependentViewsChanged(android.view.View);
+    method public boolean doViewsOverlap(android.view.View, android.view.View);
+    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public java.util.List<android.view.View> getDependencies(android.view.View);
+    method public java.util.List<android.view.View> getDependents(android.view.View);
+    method public android.graphics.drawable.Drawable getStatusBarBackground();
+    method public boolean isPointInChildBounds(android.view.View, int, int);
+    method public void onAttachedToWindow();
+    method public void onDetachedFromWindow();
+    method public void onDraw(android.graphics.Canvas);
+    method public void onLayoutChild(android.view.View, int);
+    method public void onMeasureChild(android.view.View, int, int, int, int);
+    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
+    method public void onNestedScroll(android.view.View, int, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
+    method public void onStopNestedScroll(android.view.View, int);
+    method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+    method public void setStatusBarBackgroundColor(int);
+    method public void setStatusBarBackgroundResource(int);
+  }
+
+  public static abstract interface CoordinatorLayout.AttachedBehavior {
+    method public abstract android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
+  }
+
+  public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
+    ctor public CoordinatorLayout.Behavior();
+    ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
+    method public boolean blocksInteractionBelow(android.support.design.widget.CoordinatorLayout, V);
+    method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect);
+    method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
+    method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
+    method public static java.lang.Object getTag(android.view.View);
+    method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+    method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
+    method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+    method public void onDependentViewRemoved(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+    method public void onDetachedFromLayoutParams();
+    method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, V, int);
+    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, V, int, int, int, int);
+    method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
+    method public boolean onNestedPreFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float);
+    method public deprecated void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
+    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
+    method public deprecated void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
+    method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
+    method public deprecated void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+    method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
+    method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
+    method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, V, android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, V);
+    method public deprecated boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
+    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
+    method public deprecated void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
+    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int);
+    method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
+    method public static void setTag(android.view.View, java.lang.Object);
+  }
+
+  public static abstract deprecated class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
+  }
+
+  public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public CoordinatorLayout.LayoutParams(int, int);
+    ctor public CoordinatorLayout.LayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
+    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getAnchorId();
+    method public android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
+    method public void setAnchorId(int);
+    method public void setBehavior(android.support.design.widget.CoordinatorLayout.Behavior);
+    field public int anchorGravity;
+    field public int dodgeInsetEdges;
+    field public int gravity;
+    field public int insetEdge;
+    field public int keyline;
+  }
+
+  protected static class CoordinatorLayout.SavedState extends android.support.v4.view.AbsSavedState {
+    ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+    ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
+    field public static final android.os.Parcelable.Creator<android.support.design.widget.CoordinatorLayout.SavedState> CREATOR;
+  }
+
+}
+
+package android.support.v4.app {
+
+  public deprecated class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+    ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int, int);
+    ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, boolean, int, int, int);
+    method public boolean isDrawerIndicatorEnabled();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onDrawerClosed(android.view.View);
+    method public void onDrawerOpened(android.view.View);
+    method public void onDrawerSlide(android.view.View, float);
+    method public void onDrawerStateChanged(int);
+    method public boolean onOptionsItemSelected(android.view.MenuItem);
+    method public void setDrawerIndicatorEnabled(boolean);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+    method public void setHomeAsUpIndicator(int);
+    method public void syncState();
+  }
+
+  public static abstract deprecated interface ActionBarDrawerToggle.Delegate {
+    method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+    method public abstract void setActionBarDescription(int);
+    method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+  }
+
+  public static abstract deprecated interface ActionBarDrawerToggle.DelegateProvider {
+    method public abstract android.support.v4.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+  }
+
+}
+
+package android.support.v4.view {
+
+  public abstract class AbsSavedState implements android.os.Parcelable {
+    ctor protected AbsSavedState(android.os.Parcelable);
+    ctor protected AbsSavedState(android.os.Parcel);
+    ctor protected AbsSavedState(android.os.Parcel, java.lang.ClassLoader);
+    method public int describeContents();
+    method public final android.os.Parcelable getSuperState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.view.AbsSavedState> CREATOR;
+    field public static final android.support.v4.view.AbsSavedState EMPTY_STATE;
+  }
+
+  public final class AsyncLayoutInflater {
+    ctor public AsyncLayoutInflater(android.content.Context);
+    method public void inflate(int, android.view.ViewGroup, android.support.v4.view.AsyncLayoutInflater.OnInflateFinishedListener);
+  }
+
+  public static abstract interface AsyncLayoutInflater.OnInflateFinishedListener {
+    method public abstract void onInflateFinished(android.view.View, int, android.view.ViewGroup);
+  }
+
+  public class NestedScrollingChildHelper {
+    ctor public NestedScrollingChildHelper(android.view.View);
+    method public boolean dispatchNestedFling(float, float, boolean);
+    method public boolean dispatchNestedPreFling(float, float);
+    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
+    method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+    method public boolean hasNestedScrollingParent();
+    method public boolean hasNestedScrollingParent(int);
+    method public boolean isNestedScrollingEnabled();
+    method public void onDetachedFromWindow();
+    method public void onStopNestedScroll(android.view.View);
+    method public void setNestedScrollingEnabled(boolean);
+    method public boolean startNestedScroll(int);
+    method public boolean startNestedScroll(int, int);
+    method public void stopNestedScroll();
+    method public void stopNestedScroll(int);
+  }
+
+  public class NestedScrollingParentHelper {
+    ctor public NestedScrollingParentHelper(android.view.ViewGroup);
+    method public int getNestedScrollAxes();
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
+    method public void onStopNestedScroll(android.view.View);
+    method public void onStopNestedScroll(android.view.View, int);
+  }
+
+  public abstract class PagerAdapter {
+    ctor public PagerAdapter();
+    method public void destroyItem(android.view.ViewGroup, int, java.lang.Object);
+    method public deprecated void destroyItem(android.view.View, int, java.lang.Object);
+    method public void finishUpdate(android.view.ViewGroup);
+    method public deprecated void finishUpdate(android.view.View);
+    method public abstract int getCount();
+    method public int getItemPosition(java.lang.Object);
+    method public java.lang.CharSequence getPageTitle(int);
+    method public float getPageWidth(int);
+    method public java.lang.Object instantiateItem(android.view.ViewGroup, int);
+    method public deprecated java.lang.Object instantiateItem(android.view.View, int);
+    method public abstract boolean isViewFromObject(android.view.View, java.lang.Object);
+    method public void notifyDataSetChanged();
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void restoreState(android.os.Parcelable, java.lang.ClassLoader);
+    method public android.os.Parcelable saveState();
+    method public void setPrimaryItem(android.view.ViewGroup, int, java.lang.Object);
+    method public deprecated void setPrimaryItem(android.view.View, int, java.lang.Object);
+    method public void startUpdate(android.view.ViewGroup);
+    method public deprecated void startUpdate(android.view.View);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+    field public static final int POSITION_NONE = -2; // 0xfffffffe
+    field public static final int POSITION_UNCHANGED = -1; // 0xffffffff
+  }
+
+  public class PagerTabStrip extends android.support.v4.view.PagerTitleStrip {
+    ctor public PagerTabStrip(android.content.Context);
+    ctor public PagerTabStrip(android.content.Context, android.util.AttributeSet);
+    method public boolean getDrawFullUnderline();
+    method public int getTabIndicatorColor();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setDrawFullUnderline(boolean);
+    method public void setTabIndicatorColor(int);
+    method public void setTabIndicatorColorResource(int);
+  }
+
+  public class PagerTitleStrip extends android.view.ViewGroup {
+    ctor public PagerTitleStrip(android.content.Context);
+    ctor public PagerTitleStrip(android.content.Context, android.util.AttributeSet);
+    method public int getTextSpacing();
+    method public void setGravity(int);
+    method public void setNonPrimaryAlpha(float);
+    method public void setTextColor(int);
+    method public void setTextSize(int, float);
+    method public void setTextSpacing(int);
+  }
+
+  public class ViewPager extends android.view.ViewGroup {
+    ctor public ViewPager(android.content.Context);
+    ctor public ViewPager(android.content.Context, android.util.AttributeSet);
+    method public void addOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+    method public void addOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+    method public boolean arrowScroll(int);
+    method public boolean beginFakeDrag();
+    method protected boolean canScroll(android.view.View, boolean, int, int, int);
+    method public void clearOnPageChangeListeners();
+    method public void endFakeDrag();
+    method public boolean executeKeyEvent(android.view.KeyEvent);
+    method public void fakeDragBy(float);
+    method public android.support.v4.view.PagerAdapter getAdapter();
+    method public int getCurrentItem();
+    method public int getOffscreenPageLimit();
+    method public int getPageMargin();
+    method public boolean isFakeDragging();
+    method protected void onPageScrolled(int, float, int);
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void removeOnAdapterChangeListener(android.support.v4.view.ViewPager.OnAdapterChangeListener);
+    method public void removeOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+    method public void setAdapter(android.support.v4.view.PagerAdapter);
+    method public void setCurrentItem(int);
+    method public void setCurrentItem(int, boolean);
+    method public void setOffscreenPageLimit(int);
+    method public deprecated void setOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener);
+    method public void setPageMargin(int);
+    method public void setPageMarginDrawable(android.graphics.drawable.Drawable);
+    method public void setPageMarginDrawable(int);
+    method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer);
+    method public void setPageTransformer(boolean, android.support.v4.view.ViewPager.PageTransformer, int);
+    field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+    field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+    field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+  }
+
+  public static abstract class ViewPager.DecorView implements java.lang.annotation.Annotation {
+  }
+
+  public static class ViewPager.LayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor public ViewPager.LayoutParams();
+    ctor public ViewPager.LayoutParams(android.content.Context, android.util.AttributeSet);
+    field public int gravity;
+    field public boolean isDecor;
+  }
+
+  public static abstract interface ViewPager.OnAdapterChangeListener {
+    method public abstract void onAdapterChanged(android.support.v4.view.ViewPager, android.support.v4.view.PagerAdapter, android.support.v4.view.PagerAdapter);
+  }
+
+  public static abstract interface ViewPager.OnPageChangeListener {
+    method public abstract void onPageScrollStateChanged(int);
+    method public abstract void onPageScrolled(int, float, int);
+    method public abstract void onPageSelected(int);
+  }
+
+  public static abstract interface ViewPager.PageTransformer {
+    method public abstract void transformPage(android.view.View, float);
+  }
+
+  public static class ViewPager.SavedState extends android.support.v4.view.AbsSavedState {
+    ctor public ViewPager.SavedState(android.os.Parcelable);
+    field public static final android.os.Parcelable.Creator<android.support.v4.view.ViewPager.SavedState> CREATOR;
+  }
+
+  public static class ViewPager.SimpleOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
+    ctor public ViewPager.SimpleOnPageChangeListener();
+    method public void onPageScrollStateChanged(int);
+    method public void onPageScrolled(int, float, int);
+    method public void onPageSelected(int);
+  }
+
+}
+
+package android.support.v4.view.animation {
+
+  public class FastOutLinearInInterpolator implements android.view.animation.Interpolator {
+    ctor public FastOutLinearInInterpolator();
+  }
+
+  public class FastOutSlowInInterpolator implements android.view.animation.Interpolator {
+    ctor public FastOutSlowInInterpolator();
+  }
+
+  public class LinearOutSlowInInterpolator implements android.view.animation.Interpolator {
+    ctor public LinearOutSlowInInterpolator();
+  }
+
+}
+
+package android.support.v4.widget {
+
+  public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
+    ctor public AutoScrollHelper(android.view.View);
+    method public abstract boolean canTargetScrollHorizontally(int);
+    method public abstract boolean canTargetScrollVertically(int);
+    method public boolean isEnabled();
+    method public boolean isExclusive();
+    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+    method public abstract void scrollTargetBy(int, int);
+    method public android.support.v4.widget.AutoScrollHelper setActivationDelay(int);
+    method public android.support.v4.widget.AutoScrollHelper setEdgeType(int);
+    method public android.support.v4.widget.AutoScrollHelper setEnabled(boolean);
+    method public android.support.v4.widget.AutoScrollHelper setExclusive(boolean);
+    method public android.support.v4.widget.AutoScrollHelper setMaximumEdges(float, float);
+    method public android.support.v4.widget.AutoScrollHelper setMaximumVelocity(float, float);
+    method public android.support.v4.widget.AutoScrollHelper setMinimumVelocity(float, float);
+    method public android.support.v4.widget.AutoScrollHelper setRampDownDuration(int);
+    method public android.support.v4.widget.AutoScrollHelper setRampUpDuration(int);
+    method public android.support.v4.widget.AutoScrollHelper setRelativeEdges(float, float);
+    method public android.support.v4.widget.AutoScrollHelper setRelativeVelocity(float, float);
+    field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
+    field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
+    field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
+    field public static final float NO_MAX = 3.4028235E38f;
+    field public static final float NO_MIN = 0.0f;
+    field public static final float RELATIVE_UNSPECIFIED = 0.0f;
+  }
+
+  public class CircularProgressDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable {
+    ctor public CircularProgressDrawable(android.content.Context);
+    method public void draw(android.graphics.Canvas);
+    method public boolean getArrowEnabled();
+    method public float getArrowHeight();
+    method public float getArrowScale();
+    method public float getArrowWidth();
+    method public int getBackgroundColor();
+    method public float getCenterRadius();
+    method public int[] getColorSchemeColors();
+    method public float getEndTrim();
+    method public int getOpacity();
+    method public float getProgressRotation();
+    method public float getStartTrim();
+    method public android.graphics.Paint.Cap getStrokeCap();
+    method public float getStrokeWidth();
+    method public boolean isRunning();
+    method public void setAlpha(int);
+    method public void setArrowDimensions(float, float);
+    method public void setArrowEnabled(boolean);
+    method public void setArrowScale(float);
+    method public void setBackgroundColor(int);
+    method public void setCenterRadius(float);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setColorSchemeColors(int...);
+    method public void setProgressRotation(float);
+    method public void setStartEndTrim(float, float);
+    method public void setStrokeCap(android.graphics.Paint.Cap);
+    method public void setStrokeWidth(float);
+    method public void setStyle(int);
+    method public void start();
+    method public void stop();
+    field public static final int DEFAULT = 1; // 0x1
+    field public static final int LARGE = 0; // 0x0
+  }
+
+  public class ContentLoadingProgressBar extends android.widget.ProgressBar {
+    ctor public ContentLoadingProgressBar(android.content.Context);
+    ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet);
+    method public synchronized void hide();
+    method public void onAttachedToWindow();
+    method public void onDetachedFromWindow();
+    method public synchronized void show();
+  }
+
+  public abstract class CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable {
+    ctor public deprecated CursorAdapter(android.content.Context, android.database.Cursor);
+    ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean);
+    ctor public CursorAdapter(android.content.Context, android.database.Cursor, int);
+    method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor);
+    method public void changeCursor(android.database.Cursor);
+    method public java.lang.CharSequence convertToString(android.database.Cursor);
+    method public int getCount();
+    method public android.database.Cursor getCursor();
+    method public android.widget.Filter getFilter();
+    method public android.widget.FilterQueryProvider getFilterQueryProvider();
+    method public java.lang.Object getItem(int);
+    method public long getItemId(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method protected deprecated void init(android.content.Context, android.database.Cursor, boolean);
+    method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method protected void onContentChanged();
+    method public android.database.Cursor runQueryOnBackgroundThread(java.lang.CharSequence);
+    method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+    method public android.database.Cursor swapCursor(android.database.Cursor);
+    field public static final deprecated int FLAG_AUTO_REQUERY = 1; // 0x1
+    field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2
+  }
+
+  public class DrawerLayout extends android.view.ViewGroup {
+    ctor public DrawerLayout(android.content.Context);
+    ctor public DrawerLayout(android.content.Context, android.util.AttributeSet);
+    ctor public DrawerLayout(android.content.Context, android.util.AttributeSet, int);
+    method public void addDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+    method public void closeDrawer(android.view.View);
+    method public void closeDrawer(android.view.View, boolean);
+    method public void closeDrawer(int);
+    method public void closeDrawer(int, boolean);
+    method public void closeDrawers();
+    method public float getDrawerElevation();
+    method public int getDrawerLockMode(int);
+    method public int getDrawerLockMode(android.view.View);
+    method public java.lang.CharSequence getDrawerTitle(int);
+    method public android.graphics.drawable.Drawable getStatusBarBackgroundDrawable();
+    method public boolean isDrawerOpen(android.view.View);
+    method public boolean isDrawerOpen(int);
+    method public boolean isDrawerVisible(android.view.View);
+    method public boolean isDrawerVisible(int);
+    method public void onDraw(android.graphics.Canvas);
+    method public void openDrawer(android.view.View);
+    method public void openDrawer(android.view.View, boolean);
+    method public void openDrawer(int);
+    method public void openDrawer(int, boolean);
+    method public void removeDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+    method public void setDrawerElevation(float);
+    method public deprecated void setDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);
+    method public void setDrawerLockMode(int);
+    method public void setDrawerLockMode(int, int);
+    method public void setDrawerLockMode(int, android.view.View);
+    method public void setDrawerShadow(android.graphics.drawable.Drawable, int);
+    method public void setDrawerShadow(int, int);
+    method public void setDrawerTitle(int, java.lang.CharSequence);
+    method public void setScrimColor(int);
+    method public void setStatusBarBackground(android.graphics.drawable.Drawable);
+    method public void setStatusBarBackground(int);
+    method public void setStatusBarBackgroundColor(int);
+    field public static final int LOCK_MODE_LOCKED_CLOSED = 1; // 0x1
+    field public static final int LOCK_MODE_LOCKED_OPEN = 2; // 0x2
+    field public static final int LOCK_MODE_UNDEFINED = 3; // 0x3
+    field public static final int LOCK_MODE_UNLOCKED = 0; // 0x0
+    field public static final int STATE_DRAGGING = 1; // 0x1
+    field public static final int STATE_IDLE = 0; // 0x0
+    field public static final int STATE_SETTLING = 2; // 0x2
+  }
+
+  public static abstract interface DrawerLayout.DrawerListener {
+    method public abstract void onDrawerClosed(android.view.View);
+    method public abstract void onDrawerOpened(android.view.View);
+    method public abstract void onDrawerSlide(android.view.View, float);
+    method public abstract void onDrawerStateChanged(int);
+  }
+
+  public static class DrawerLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public DrawerLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public DrawerLayout.LayoutParams(int, int);
+    ctor public DrawerLayout.LayoutParams(int, int, int);
+    ctor public DrawerLayout.LayoutParams(android.support.v4.widget.DrawerLayout.LayoutParams);
+    ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public DrawerLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    field public int gravity;
+  }
+
+  protected static class DrawerLayout.SavedState extends android.support.v4.view.AbsSavedState {
+    ctor public DrawerLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
+    ctor public DrawerLayout.SavedState(android.os.Parcelable);
+    field public static final android.os.Parcelable.Creator<android.support.v4.widget.DrawerLayout.SavedState> CREATOR;
+  }
+
+  public static abstract class DrawerLayout.SimpleDrawerListener implements android.support.v4.widget.DrawerLayout.DrawerListener {
+    ctor public DrawerLayout.SimpleDrawerListener();
+    method public void onDrawerClosed(android.view.View);
+    method public void onDrawerOpened(android.view.View);
+    method public void onDrawerSlide(android.view.View, float);
+    method public void onDrawerStateChanged(int);
+  }
+
+  public abstract class ExploreByTouchHelper extends android.support.v4.view.AccessibilityDelegateCompat {
+    ctor public ExploreByTouchHelper(android.view.View);
+    method public final boolean clearKeyboardFocusForVirtualView(int);
+    method public final boolean dispatchHoverEvent(android.view.MotionEvent);
+    method public final boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public final int getAccessibilityFocusedVirtualViewId();
+    method public deprecated int getFocusedVirtualView();
+    method public final int getKeyboardFocusedVirtualViewId();
+    method protected abstract int getVirtualViewAt(float, float);
+    method protected abstract void getVisibleVirtualViews(java.util.List<java.lang.Integer>);
+    method public final void invalidateRoot();
+    method public final void invalidateVirtualView(int);
+    method public final void invalidateVirtualView(int, int);
+    method public final void onFocusChanged(boolean, int, android.graphics.Rect);
+    method protected abstract boolean onPerformActionForVirtualView(int, int, android.os.Bundle);
+    method protected void onPopulateEventForHost(android.view.accessibility.AccessibilityEvent);
+    method protected void onPopulateEventForVirtualView(int, android.view.accessibility.AccessibilityEvent);
+    method protected void onPopulateNodeForHost(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method protected abstract void onPopulateNodeForVirtualView(int, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method protected void onVirtualViewKeyboardFocusChanged(int, boolean);
+    method public final boolean requestKeyboardFocusForVirtualView(int);
+    method public final boolean sendEventForVirtualView(int, int);
+    field public static final int HOST_ID = -1; // 0xffffffff
+    field public static final int INVALID_ID = -2147483648; // 0x80000000
+  }
+
+  public class ListViewAutoScrollHelper extends android.support.v4.widget.AutoScrollHelper {
+    ctor public ListViewAutoScrollHelper(android.widget.ListView);
+    method public boolean canTargetScrollHorizontally(int);
+    method public boolean canTargetScrollVertically(int);
+    method public void scrollTargetBy(int, int);
+  }
+
+  public class NestedScrollView extends android.widget.FrameLayout implements android.support.v4.view.NestedScrollingChild2 android.support.v4.view.NestedScrollingParent android.support.v4.view.ScrollingView {
+    ctor public NestedScrollView(android.content.Context);
+    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet);
+    ctor public NestedScrollView(android.content.Context, android.util.AttributeSet, int);
+    method public boolean arrowScroll(int);
+    method public int computeHorizontalScrollExtent();
+    method public int computeHorizontalScrollOffset();
+    method public int computeHorizontalScrollRange();
+    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+    method public int computeVerticalScrollExtent();
+    method public int computeVerticalScrollOffset();
+    method public int computeVerticalScrollRange();
+    method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+    method public boolean executeKeyEvent(android.view.KeyEvent);
+    method public void fling(int);
+    method public boolean fullScroll(int);
+    method public int getMaxScrollAmount();
+    method public boolean hasNestedScrollingParent(int);
+    method public boolean isFillViewport();
+    method public boolean isSmoothScrollingEnabled();
+    method public void onAttachedToWindow();
+    method public boolean pageScroll(int);
+    method public void setFillViewport(boolean);
+    method public void setOnScrollChangeListener(android.support.v4.widget.NestedScrollView.OnScrollChangeListener);
+    method public void setSmoothScrollingEnabled(boolean);
+    method public final void smoothScrollBy(int, int);
+    method public final void smoothScrollTo(int, int);
+    method public boolean startNestedScroll(int, int);
+    method public void stopNestedScroll(int);
+  }
+
+  public static abstract interface NestedScrollView.OnScrollChangeListener {
+    method public abstract void onScrollChange(android.support.v4.widget.NestedScrollView, int, int, int, int);
+  }
+
+  public abstract class ResourceCursorAdapter extends android.support.v4.widget.CursorAdapter {
+    ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor);
+    ctor public deprecated ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean);
+    ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int);
+    method public android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method public void setDropDownViewResource(int);
+    method public void setViewResource(int);
+  }
+
+  public class SimpleCursorAdapter extends android.support.v4.widget.ResourceCursorAdapter {
+    ctor public deprecated SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[]);
+    ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[], int);
+    method public void bindView(android.view.View, android.content.Context, android.database.Cursor);
+    method public void changeCursorAndColumns(android.database.Cursor, java.lang.String[], int[]);
+    method public android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter();
+    method public int getStringConversionColumn();
+    method public android.support.v4.widget.SimpleCursorAdapter.ViewBinder getViewBinder();
+    method public void setCursorToStringConverter(android.support.v4.widget.SimpleCursorAdapter.CursorToStringConverter);
+    method public void setStringConversionColumn(int);
+    method public void setViewBinder(android.support.v4.widget.SimpleCursorAdapter.ViewBinder);
+    method public void setViewImage(android.widget.ImageView, java.lang.String);
+    method public void setViewText(android.widget.TextView, java.lang.String);
+  }
+
+  public static abstract interface SimpleCursorAdapter.CursorToStringConverter {
+    method public abstract java.lang.CharSequence convertToString(android.database.Cursor);
+  }
+
+  public static abstract interface SimpleCursorAdapter.ViewBinder {
+    method public abstract boolean setViewValue(android.view.View, android.database.Cursor, int);
+  }
+
+  public class SlidingPaneLayout extends android.view.ViewGroup {
+    ctor public SlidingPaneLayout(android.content.Context);
+    ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet);
+    ctor public SlidingPaneLayout(android.content.Context, android.util.AttributeSet, int);
+    method protected boolean canScroll(android.view.View, boolean, int, int, int);
+    method public deprecated boolean canSlide();
+    method public boolean closePane();
+    method public int getCoveredFadeColor();
+    method public int getParallaxDistance();
+    method public int getSliderFadeColor();
+    method public boolean isOpen();
+    method public boolean isSlideable();
+    method public boolean openPane();
+    method public void setCoveredFadeColor(int);
+    method public void setPanelSlideListener(android.support.v4.widget.SlidingPaneLayout.PanelSlideListener);
+    method public void setParallaxDistance(int);
+    method public deprecated void setShadowDrawable(android.graphics.drawable.Drawable);
+    method public void setShadowDrawableLeft(android.graphics.drawable.Drawable);
+    method public void setShadowDrawableRight(android.graphics.drawable.Drawable);
+    method public deprecated void setShadowResource(int);
+    method public void setShadowResourceLeft(int);
+    method public void setShadowResourceRight(int);
+    method public void setSliderFadeColor(int);
+    method public deprecated void smoothSlideClosed();
+    method public deprecated void smoothSlideOpen();
+  }
+
+  public static class SlidingPaneLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public SlidingPaneLayout.LayoutParams();
+    ctor public SlidingPaneLayout.LayoutParams(int, int);
+    ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public SlidingPaneLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public SlidingPaneLayout.LayoutParams(android.support.v4.widget.SlidingPaneLayout.LayoutParams);
+    ctor public SlidingPaneLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    field public float weight;
+  }
+
+  public static abstract interface SlidingPaneLayout.PanelSlideListener {
+    method public abstract void onPanelClosed(android.view.View);
+    method public abstract void onPanelOpened(android.view.View);
+    method public abstract void onPanelSlide(android.view.View, float);
+  }
+
+  public static class SlidingPaneLayout.SimplePanelSlideListener implements android.support.v4.widget.SlidingPaneLayout.PanelSlideListener {
+    ctor public SlidingPaneLayout.SimplePanelSlideListener();
+    method public void onPanelClosed(android.view.View);
+    method public void onPanelOpened(android.view.View);
+    method public void onPanelSlide(android.view.View, float);
+  }
+
+  public deprecated class Space extends android.view.View {
+    ctor public deprecated Space(android.content.Context, android.util.AttributeSet, int);
+    ctor public deprecated Space(android.content.Context, android.util.AttributeSet);
+    ctor public deprecated Space(android.content.Context);
+    method public deprecated void draw(android.graphics.Canvas);
+    method protected deprecated void onMeasure(int, int);
+  }
+
+  public class SwipeRefreshLayout extends android.view.ViewGroup implements android.support.v4.view.NestedScrollingChild android.support.v4.view.NestedScrollingParent {
+    ctor public SwipeRefreshLayout(android.content.Context);
+    ctor public SwipeRefreshLayout(android.content.Context, android.util.AttributeSet);
+    method public boolean canChildScrollUp();
+    method public int getProgressCircleDiameter();
+    method public int getProgressViewEndOffset();
+    method public int getProgressViewStartOffset();
+    method public boolean isRefreshing();
+    method public void onMeasure(int, int);
+    method public deprecated void setColorScheme(int...);
+    method public void setColorSchemeColors(int...);
+    method public void setColorSchemeResources(int...);
+    method public void setDistanceToTriggerSync(int);
+    method public void setOnChildScrollUpCallback(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback);
+    method public void setOnRefreshListener(android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener);
+    method public deprecated void setProgressBackgroundColor(int);
+    method public void setProgressBackgroundColorSchemeColor(int);
+    method public void setProgressBackgroundColorSchemeResource(int);
+    method public void setProgressViewEndTarget(boolean, int);
+    method public void setProgressViewOffset(boolean, int, int);
+    method public void setRefreshing(boolean);
+    method public void setSize(int);
+    field public static final int DEFAULT = 1; // 0x1
+    field public static final int LARGE = 0; // 0x0
+    field protected int mFrom;
+    field protected int mOriginalOffsetTop;
+  }
+
+  public static abstract interface SwipeRefreshLayout.OnChildScrollUpCallback {
+    method public abstract boolean canChildScrollUp(android.support.v4.widget.SwipeRefreshLayout, android.view.View);
+  }
+
+  public static abstract interface SwipeRefreshLayout.OnRefreshListener {
+    method public abstract void onRefresh();
+  }
+
+  public class ViewDragHelper {
+    method public void abort();
+    method protected boolean canScroll(android.view.View, boolean, int, int, int, int);
+    method public void cancel();
+    method public void captureChildView(android.view.View, int);
+    method public boolean checkTouchSlop(int);
+    method public boolean checkTouchSlop(int, int);
+    method public boolean continueSettling(boolean);
+    method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, android.support.v4.widget.ViewDragHelper.Callback);
+    method public static android.support.v4.widget.ViewDragHelper create(android.view.ViewGroup, float, android.support.v4.widget.ViewDragHelper.Callback);
+    method public android.view.View findTopChildUnder(int, int);
+    method public void flingCapturedView(int, int, int, int);
+    method public int getActivePointerId();
+    method public android.view.View getCapturedView();
+    method public int getEdgeSize();
+    method public float getMinVelocity();
+    method public int getTouchSlop();
+    method public int getViewDragState();
+    method public boolean isCapturedViewUnder(int, int);
+    method public boolean isEdgeTouched(int);
+    method public boolean isEdgeTouched(int, int);
+    method public boolean isPointerDown(int);
+    method public boolean isViewUnder(android.view.View, int, int);
+    method public void processTouchEvent(android.view.MotionEvent);
+    method public void setEdgeTrackingEnabled(int);
+    method public void setMinVelocity(float);
+    method public boolean settleCapturedViewAt(int, int);
+    method public boolean shouldInterceptTouchEvent(android.view.MotionEvent);
+    method public boolean smoothSlideViewTo(android.view.View, int, int);
+    field public static final int DIRECTION_ALL = 3; // 0x3
+    field public static final int DIRECTION_HORIZONTAL = 1; // 0x1
+    field public static final int DIRECTION_VERTICAL = 2; // 0x2
+    field public static final int EDGE_ALL = 15; // 0xf
+    field public static final int EDGE_BOTTOM = 8; // 0x8
+    field public static final int EDGE_LEFT = 1; // 0x1
+    field public static final int EDGE_RIGHT = 2; // 0x2
+    field public static final int EDGE_TOP = 4; // 0x4
+    field public static final int INVALID_POINTER = -1; // 0xffffffff
+    field public static final int STATE_DRAGGING = 1; // 0x1
+    field public static final int STATE_IDLE = 0; // 0x0
+    field public static final int STATE_SETTLING = 2; // 0x2
+  }
+
+  public static abstract class ViewDragHelper.Callback {
+    ctor public ViewDragHelper.Callback();
+    method public int clampViewPositionHorizontal(android.view.View, int, int);
+    method public int clampViewPositionVertical(android.view.View, int, int);
+    method public int getOrderedChildIndex(int);
+    method public int getViewHorizontalDragRange(android.view.View);
+    method public int getViewVerticalDragRange(android.view.View);
+    method public void onEdgeDragStarted(int, int);
+    method public boolean onEdgeLock(int);
+    method public void onEdgeTouched(int, int);
+    method public void onViewCaptured(android.view.View, int);
+    method public void onViewDragStateChanged(int);
+    method public void onViewPositionChanged(android.view.View, int, int, int, int);
+    method public void onViewReleased(android.view.View, float, float);
+    method public abstract boolean tryCaptureView(android.view.View, int);
+  }
+
+}
+
diff --git a/core-utils/Android.mk b/core-utils/Android.mk
deleted file mode 100644
index 751091b..0000000
--- a/core-utils/Android.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-core-utils \
-#       android-support-compat
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-core-utils
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,kitkat) \
-    $(call all-java-files-under,api21) \
-    $(call all-java-files-under,java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/core-utils/api/27.1.0.txt b/core-utils/api/27.1.0.txt
new file mode 100644
index 0000000..d535653
--- /dev/null
+++ b/core-utils/api/27.1.0.txt
@@ -0,0 +1,321 @@
+package android.support.v4.app {
+
+  public class AppLaunchChecker {
+    ctor public AppLaunchChecker();
+    method public static boolean hasStartedFromLauncher(android.content.Context);
+    method public static void onActivityCreate(android.app.Activity);
+  }
+
+  public class FrameMetricsAggregator {
+    ctor public FrameMetricsAggregator();
+    ctor public FrameMetricsAggregator(int);
+    method public void add(android.app.Activity);
+    method public android.util.SparseIntArray[] getMetrics();
+    method public android.util.SparseIntArray[] remove(android.app.Activity);
+    method public android.util.SparseIntArray[] reset();
+    method public android.util.SparseIntArray[] stop();
+    field public static final int ANIMATION_DURATION = 256; // 0x100
+    field public static final int ANIMATION_INDEX = 8; // 0x8
+    field public static final int COMMAND_DURATION = 32; // 0x20
+    field public static final int COMMAND_INDEX = 5; // 0x5
+    field public static final int DELAY_DURATION = 128; // 0x80
+    field public static final int DELAY_INDEX = 7; // 0x7
+    field public static final int DRAW_DURATION = 8; // 0x8
+    field public static final int DRAW_INDEX = 3; // 0x3
+    field public static final int EVERY_DURATION = 511; // 0x1ff
+    field public static final int INPUT_DURATION = 2; // 0x2
+    field public static final int INPUT_INDEX = 1; // 0x1
+    field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
+    field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
+    field public static final int SWAP_DURATION = 64; // 0x40
+    field public static final int SWAP_INDEX = 6; // 0x6
+    field public static final int SYNC_DURATION = 16; // 0x10
+    field public static final int SYNC_INDEX = 4; // 0x4
+    field public static final int TOTAL_DURATION = 1; // 0x1
+    field public static final int TOTAL_INDEX = 0; // 0x0
+  }
+
+  public final class NavUtils {
+    method public static android.content.Intent getParentActivityIntent(android.app.Activity);
+    method public static android.content.Intent getParentActivityIntent(android.content.Context, java.lang.Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static android.content.Intent getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static java.lang.String getParentActivityName(android.app.Activity);
+    method public static java.lang.String getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static void navigateUpFromSameTask(android.app.Activity);
+    method public static void navigateUpTo(android.app.Activity, android.content.Intent);
+    method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
+    field public static final java.lang.String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+  }
+
+  public final class TaskStackBuilder implements java.lang.Iterable {
+    method public android.support.v4.app.TaskStackBuilder addNextIntent(android.content.Intent);
+    method public android.support.v4.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+    method public android.support.v4.app.TaskStackBuilder addParentStack(android.app.Activity);
+    method public android.support.v4.app.TaskStackBuilder addParentStack(java.lang.Class<?>);
+    method public android.support.v4.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+    method public static android.support.v4.app.TaskStackBuilder create(android.content.Context);
+    method public android.content.Intent editIntentAt(int);
+    method public static deprecated android.support.v4.app.TaskStackBuilder from(android.content.Context);
+    method public deprecated android.content.Intent getIntent(int);
+    method public int getIntentCount();
+    method public android.content.Intent[] getIntents();
+    method public android.app.PendingIntent getPendingIntent(int, int);
+    method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle);
+    method public deprecated java.util.Iterator<android.content.Intent> iterator();
+    method public void startActivities();
+    method public void startActivities(android.os.Bundle);
+  }
+
+  public static abstract interface TaskStackBuilder.SupportParentable {
+    method public abstract android.content.Intent getSupportParentActivityIntent();
+  }
+
+}
+
+package android.support.v4.content {
+
+  public abstract class AsyncTaskLoader<D> extends android.support.v4.content.Loader {
+    ctor public AsyncTaskLoader(android.content.Context);
+    method public void cancelLoadInBackground();
+    method public boolean isLoadInBackgroundCanceled();
+    method public abstract D loadInBackground();
+    method public void onCanceled(D);
+    method protected D onLoadInBackground();
+    method public void setUpdateThrottle(long);
+  }
+
+  public class CursorLoader extends android.support.v4.content.AsyncTaskLoader {
+    ctor public CursorLoader(android.content.Context);
+    ctor public CursorLoader(android.content.Context, android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+    method public void deliverResult(android.database.Cursor);
+    method public java.lang.String[] getProjection();
+    method public java.lang.String getSelection();
+    method public java.lang.String[] getSelectionArgs();
+    method public java.lang.String getSortOrder();
+    method public android.net.Uri getUri();
+    method public android.database.Cursor loadInBackground();
+    method public void onCanceled(android.database.Cursor);
+    method public void setProjection(java.lang.String[]);
+    method public void setSelection(java.lang.String);
+    method public void setSelectionArgs(java.lang.String[]);
+    method public void setSortOrder(java.lang.String);
+    method public void setUri(android.net.Uri);
+  }
+
+  public class FileProvider extends android.content.ContentProvider {
+    ctor public FileProvider();
+    method public int delete(android.net.Uri, java.lang.String, java.lang.String[]);
+    method public java.lang.String getType(android.net.Uri);
+    method public static android.net.Uri getUriForFile(android.content.Context, java.lang.String, java.io.File);
+    method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean onCreate();
+    method public android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
+    method public int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
+  }
+
+  public class Loader<D> {
+    ctor public Loader(android.content.Context);
+    method public void abandon();
+    method public boolean cancelLoad();
+    method public void commitContentChanged();
+    method public java.lang.String dataToString(D);
+    method public void deliverCancellation();
+    method public void deliverResult(D);
+    method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public void forceLoad();
+    method public android.content.Context getContext();
+    method public int getId();
+    method public boolean isAbandoned();
+    method public boolean isReset();
+    method public boolean isStarted();
+    method protected void onAbandon();
+    method protected boolean onCancelLoad();
+    method public void onContentChanged();
+    method protected void onForceLoad();
+    method protected void onReset();
+    method protected void onStartLoading();
+    method protected void onStopLoading();
+    method public void registerListener(int, android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+    method public void registerOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+    method public void reset();
+    method public void rollbackContentChanged();
+    method public final void startLoading();
+    method public void stopLoading();
+    method public boolean takeContentChanged();
+    method public void unregisterListener(android.support.v4.content.Loader.OnLoadCompleteListener<D>);
+    method public void unregisterOnLoadCanceledListener(android.support.v4.content.Loader.OnLoadCanceledListener<D>);
+  }
+
+  public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+    ctor public Loader.ForceLoadContentObserver();
+  }
+
+  public static abstract interface Loader.OnLoadCanceledListener<D> {
+    method public abstract void onLoadCanceled(android.support.v4.content.Loader<D>);
+  }
+
+  public static abstract interface Loader.OnLoadCompleteListener<D> {
+    method public abstract void onLoadComplete(android.support.v4.content.Loader<D>, D);
+  }
+
+  public final class LocalBroadcastManager {
+    method public static android.support.v4.content.LocalBroadcastManager getInstance(android.content.Context);
+    method public void registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+    method public boolean sendBroadcast(android.content.Intent);
+    method public void sendBroadcastSync(android.content.Intent);
+    method public void unregisterReceiver(android.content.BroadcastReceiver);
+  }
+
+  public final class MimeTypeFilter {
+    method public static boolean matches(java.lang.String, java.lang.String);
+    method public static java.lang.String matches(java.lang.String, java.lang.String[]);
+    method public static java.lang.String matches(java.lang.String[], java.lang.String);
+    method public static java.lang.String[] matchesMany(java.lang.String[], java.lang.String);
+  }
+
+  public final class PermissionChecker {
+    method public static int checkCallingOrSelfPermission(android.content.Context, java.lang.String);
+    method public static int checkCallingPermission(android.content.Context, java.lang.String, java.lang.String);
+    method public static int checkPermission(android.content.Context, java.lang.String, int, int, java.lang.String);
+    method public static int checkSelfPermission(android.content.Context, java.lang.String);
+    field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+    field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
+    field public static final int PERMISSION_GRANTED = 0; // 0x0
+  }
+
+  public abstract deprecated class WakefulBroadcastReceiver extends android.content.BroadcastReceiver {
+    ctor public WakefulBroadcastReceiver();
+    method public static boolean completeWakefulIntent(android.content.Intent);
+    method public static android.content.ComponentName startWakefulService(android.content.Context, android.content.Intent);
+  }
+
+}
+
+package android.support.v4.graphics {
+
+  public final class ColorUtils {
+    method public static int HSLToColor(float[]);
+    method public static int LABToColor(double, double, double);
+    method public static void LABToXYZ(double, double, double, double[]);
+    method public static void RGBToHSL(int, int, int, float[]);
+    method public static void RGBToLAB(int, int, int, double[]);
+    method public static void RGBToXYZ(int, int, int, double[]);
+    method public static int XYZToColor(double, double, double);
+    method public static void XYZToLAB(double, double, double, double[]);
+    method public static int blendARGB(int, int, float);
+    method public static void blendHSL(float[], float[], float, float[]);
+    method public static void blendLAB(double[], double[], double, double[]);
+    method public static double calculateContrast(int, int);
+    method public static double calculateLuminance(int);
+    method public static int calculateMinimumAlpha(int, int, float);
+    method public static void colorToHSL(int, float[]);
+    method public static void colorToLAB(int, double[]);
+    method public static void colorToXYZ(int, double[]);
+    method public static int compositeColors(int, int);
+    method public static double distanceEuclidean(double[], double[]);
+    method public static int setAlphaComponent(int, int);
+  }
+
+}
+
+package android.support.v4.graphics.drawable {
+
+  public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
+    method public void draw(android.graphics.Canvas);
+    method public final android.graphics.Bitmap getBitmap();
+    method public float getCornerRadius();
+    method public int getGravity();
+    method public int getOpacity();
+    method public final android.graphics.Paint getPaint();
+    method public boolean hasAntiAlias();
+    method public boolean hasMipMap();
+    method public boolean isCircular();
+    method public void setAlpha(int);
+    method public void setAntiAlias(boolean);
+    method public void setCircular(boolean);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setCornerRadius(float);
+    method public void setDither(boolean);
+    method public void setGravity(int);
+    method public void setMipMap(boolean);
+    method public void setTargetDensity(android.graphics.Canvas);
+    method public void setTargetDensity(android.util.DisplayMetrics);
+    method public void setTargetDensity(int);
+  }
+
+  public final class RoundedBitmapDrawableFactory {
+    method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap);
+    method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.lang.String);
+    method public static android.support.v4.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+  }
+
+}
+
+package android.support.v4.math {
+
+  public class MathUtils {
+    method public static float clamp(float, float, float);
+    method public static double clamp(double, double, double);
+    method public static int clamp(int, int, int);
+  }
+
+}
+
+package android.support.v4.print {
+
+  public final class PrintHelper {
+    ctor public PrintHelper(android.content.Context);
+    method public int getColorMode();
+    method public int getOrientation();
+    method public int getScaleMode();
+    method public void printBitmap(java.lang.String, android.graphics.Bitmap);
+    method public void printBitmap(java.lang.String, android.graphics.Bitmap, android.support.v4.print.PrintHelper.OnPrintFinishCallback);
+    method public void printBitmap(java.lang.String, android.net.Uri) throws java.io.FileNotFoundException;
+    method public void printBitmap(java.lang.String, android.net.Uri, android.support.v4.print.PrintHelper.OnPrintFinishCallback) throws java.io.FileNotFoundException;
+    method public void setColorMode(int);
+    method public void setOrientation(int);
+    method public void setScaleMode(int);
+    method public static boolean systemSupportsPrint();
+    field public static final int COLOR_MODE_COLOR = 2; // 0x2
+    field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1
+    field public static final int ORIENTATION_LANDSCAPE = 1; // 0x1
+    field public static final int ORIENTATION_PORTRAIT = 2; // 0x2
+    field public static final int SCALE_MODE_FILL = 2; // 0x2
+    field public static final int SCALE_MODE_FIT = 1; // 0x1
+  }
+
+  public static abstract interface PrintHelper.OnPrintFinishCallback {
+    method public abstract void onFinish();
+  }
+
+}
+
+package android.support.v4.provider {
+
+  public abstract class DocumentFile {
+    method public abstract boolean canRead();
+    method public abstract boolean canWrite();
+    method public abstract android.support.v4.provider.DocumentFile createDirectory(java.lang.String);
+    method public abstract android.support.v4.provider.DocumentFile createFile(java.lang.String, java.lang.String);
+    method public abstract boolean delete();
+    method public abstract boolean exists();
+    method public android.support.v4.provider.DocumentFile findFile(java.lang.String);
+    method public static android.support.v4.provider.DocumentFile fromFile(java.io.File);
+    method public static android.support.v4.provider.DocumentFile fromSingleUri(android.content.Context, android.net.Uri);
+    method public static android.support.v4.provider.DocumentFile fromTreeUri(android.content.Context, android.net.Uri);
+    method public abstract java.lang.String getName();
+    method public android.support.v4.provider.DocumentFile getParentFile();
+    method public abstract java.lang.String getType();
+    method public abstract android.net.Uri getUri();
+    method public abstract boolean isDirectory();
+    method public static boolean isDocumentUri(android.content.Context, android.net.Uri);
+    method public abstract boolean isFile();
+    method public abstract boolean isVirtual();
+    method public abstract long lastModified();
+    method public abstract long length();
+    method public abstract android.support.v4.provider.DocumentFile[] listFiles();
+    method public abstract boolean renameTo(java.lang.String);
+  }
+
+}
+
diff --git a/core-utils/java/android/support/v4/content/WakefulBroadcastReceiver.java b/core-utils/java/android/support/v4/content/WakefulBroadcastReceiver.java
index 8ec3eee..78555aa 100644
--- a/core-utils/java/android/support/v4/content/WakefulBroadcastReceiver.java
+++ b/core-utils/java/android/support/v4/content/WakefulBroadcastReceiver.java
@@ -34,6 +34,9 @@
  * for you; you must request the {@link android.Manifest.permission#WAKE_LOCK}
  * permission to use it.</p>
  *
+ * <p>Wakelocks held by this class are reported to tools as
+ * {@code "androidx.core:wake:<component-name>"}.</p>
+ *
  * <h3>Example</h3>
  *
  * <p>A {@link WakefulBroadcastReceiver} uses the method
@@ -103,7 +106,7 @@
 
             PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
             PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
-                    "wake:" + comp.flattenToShortString());
+                    "androidx.core:wake:" + comp.flattenToShortString());
             wl.setReferenceCounted(false);
             wl.acquire(60 * 1000);
             sActiveWakeLocks.put(id, wl);
diff --git a/customtabs/Android.mk b/customtabs/Android.mk
deleted file mode 100644
index 27b92a0..0000000
--- a/customtabs/Android.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-customtabs \
-#       android-support-compat
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-customtabs
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src/main/java
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,src/main/java) \
-    $(call all-Iaidl-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/src/main/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v7-appcompat \
-    android-support-compat \
-    android-support-core-ui
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/customtabs/api/27.1.0.txt b/customtabs/api/27.1.0.txt
new file mode 100644
index 0000000..e172dba
--- /dev/null
+++ b/customtabs/api/27.1.0.txt
@@ -0,0 +1,208 @@
+package android.support.customtabs {
+
+  public class CustomTabsCallback {
+    ctor public CustomTabsCallback();
+    method public void extraCallback(java.lang.String, android.os.Bundle);
+    method public void onMessageChannelReady(android.os.Bundle);
+    method public void onNavigationEvent(int, android.os.Bundle);
+    method public void onPostMessage(java.lang.String, android.os.Bundle);
+    method public void onRelationshipValidationResult(int, android.net.Uri, boolean, android.os.Bundle);
+    field public static final int NAVIGATION_ABORTED = 4; // 0x4
+    field public static final int NAVIGATION_FAILED = 3; // 0x3
+    field public static final int NAVIGATION_FINISHED = 2; // 0x2
+    field public static final int NAVIGATION_STARTED = 1; // 0x1
+    field public static final int TAB_HIDDEN = 6; // 0x6
+    field public static final int TAB_SHOWN = 5; // 0x5
+  }
+
+  public class CustomTabsClient {
+    method public static boolean bindCustomTabsService(android.content.Context, java.lang.String, android.support.customtabs.CustomTabsServiceConnection);
+    method public static boolean connectAndInitialize(android.content.Context, java.lang.String);
+    method public android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+    method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>);
+    method public static java.lang.String getPackageName(android.content.Context, java.util.List<java.lang.String>, boolean);
+    method public android.support.customtabs.CustomTabsSession newSession(android.support.customtabs.CustomTabsCallback);
+    method public boolean warmup(long);
+  }
+
+  public final class CustomTabsIntent {
+    method public static int getMaxToolbarItems();
+    method public void launchUrl(android.content.Context, android.net.Uri);
+    method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent);
+    method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+    field public static final java.lang.String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+    field public static final java.lang.String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+    field public static final java.lang.String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+    field public static final java.lang.String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+    field public static final java.lang.String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+    field public static final java.lang.String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+    field public static final java.lang.String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+    field public static final java.lang.String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+    field public static final java.lang.String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+    field public static final java.lang.String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+    field public static final java.lang.String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+    field public static final java.lang.String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+    field public static final java.lang.String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+    field public static final java.lang.String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+    field public static final java.lang.String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+    field public static final java.lang.String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+    field public static final java.lang.String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+    field public static final java.lang.String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+    field public static final java.lang.String KEY_ICON = "android.support.customtabs.customaction.ICON";
+    field public static final java.lang.String KEY_ID = "android.support.customtabs.customaction.ID";
+    field public static final java.lang.String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+    field public static final java.lang.String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+    field public static final int NO_TITLE = 0; // 0x0
+    field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+    field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+    field public final android.content.Intent intent;
+    field public final android.os.Bundle startAnimationBundle;
+  }
+
+  public static final class CustomTabsIntent.Builder {
+    ctor public CustomTabsIntent.Builder();
+    ctor public CustomTabsIntent.Builder(android.support.customtabs.CustomTabsSession);
+    method public android.support.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+    method public android.support.customtabs.CustomTabsIntent.Builder addMenuItem(java.lang.String, android.app.PendingIntent);
+    method public deprecated android.support.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, java.lang.String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+    method public android.support.customtabs.CustomTabsIntent build();
+    method public android.support.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+    method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent, boolean);
+    method public android.support.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, java.lang.String, android.app.PendingIntent);
+    method public android.support.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+    method public android.support.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, int, int);
+    method public android.support.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+    method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(int);
+    method public android.support.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+    method public android.support.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+    method public android.support.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, int, int);
+    method public android.support.customtabs.CustomTabsIntent.Builder setToolbarColor(int);
+  }
+
+  public abstract class CustomTabsService extends android.app.Service {
+    ctor public CustomTabsService();
+    method protected boolean cleanUpSession(android.support.customtabs.CustomTabsSessionToken);
+    method protected abstract android.os.Bundle extraCommand(java.lang.String, android.os.Bundle);
+    method protected abstract boolean mayLaunchUrl(android.support.customtabs.CustomTabsSessionToken, android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+    method protected abstract boolean newSession(android.support.customtabs.CustomTabsSessionToken);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method protected abstract int postMessage(android.support.customtabs.CustomTabsSessionToken, java.lang.String, android.os.Bundle);
+    method protected abstract boolean requestPostMessageChannel(android.support.customtabs.CustomTabsSessionToken, android.net.Uri);
+    method protected abstract boolean updateVisuals(android.support.customtabs.CustomTabsSessionToken, android.os.Bundle);
+    method protected abstract boolean validateRelationship(android.support.customtabs.CustomTabsSessionToken, int, android.net.Uri, android.os.Bundle);
+    method protected abstract boolean warmup(long);
+    field public static final java.lang.String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+    field public static final java.lang.String KEY_URL = "android.support.customtabs.otherurls.URL";
+    field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+    field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
+    field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+    field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+    field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public static abstract class CustomTabsService.Relation implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class CustomTabsService.Result implements java.lang.annotation.Annotation {
+  }
+
+  public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+    ctor public CustomTabsServiceConnection();
+    method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, android.support.customtabs.CustomTabsClient);
+    method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+  }
+
+  public final class CustomTabsSession {
+    method public static android.support.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
+    method public boolean mayLaunchUrl(android.net.Uri, android.os.Bundle, java.util.List<android.os.Bundle>);
+    method public int postMessage(java.lang.String, android.os.Bundle);
+    method public boolean requestPostMessageChannel(android.net.Uri);
+    method public boolean setActionButton(android.graphics.Bitmap, java.lang.String);
+    method public boolean setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent);
+    method public deprecated boolean setToolbarItem(int, android.graphics.Bitmap, java.lang.String);
+    method public boolean validateRelationship(int, android.net.Uri, android.os.Bundle);
+  }
+
+  public class CustomTabsSessionToken {
+    method public static android.support.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
+    method public android.support.customtabs.CustomTabsCallback getCallback();
+    method public static android.support.customtabs.CustomTabsSessionToken getSessionTokenFromIntent(android.content.Intent);
+    method public boolean isAssociatedWith(android.support.customtabs.CustomTabsSession);
+  }
+
+  public class PostMessageService extends android.app.Service {
+    ctor public PostMessageService();
+    method public android.os.IBinder onBind(android.content.Intent);
+  }
+
+  public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
+    ctor public PostMessageServiceConnection(android.support.customtabs.CustomTabsSessionToken);
+    method public boolean bindSessionToPostMessageService(android.content.Context, java.lang.String);
+    method public final boolean notifyMessageChannelReady(android.os.Bundle);
+    method public void onPostMessageServiceConnected();
+    method public void onPostMessageServiceDisconnected();
+    method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+    method public final void onServiceDisconnected(android.content.ComponentName);
+    method public final boolean postMessage(java.lang.String, android.os.Bundle);
+    method public void unbindFromContext(android.content.Context);
+  }
+
+  public class TrustedWebUtils {
+    method public static void launchAsTrustedWebActivity(android.content.Context, android.support.customtabs.CustomTabsIntent, android.net.Uri);
+    field public static final java.lang.String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+  }
+
+}
+
+package androidx.browser.browseractions {
+
+  public class BrowserActionItem {
+    ctor public BrowserActionItem(java.lang.String, android.app.PendingIntent, int);
+    ctor public BrowserActionItem(java.lang.String, android.app.PendingIntent);
+    method public android.app.PendingIntent getAction();
+    method public int getIconId();
+    method public java.lang.String getTitle();
+  }
+
+  public class BrowserActionsIntent {
+    method public static java.lang.String getCreatorPackageName(android.content.Intent);
+    method public android.content.Intent getIntent();
+    method public static void launchIntent(android.content.Context, android.content.Intent);
+    method public static void openBrowserAction(android.content.Context, android.net.Uri);
+    method public static void openBrowserAction(android.content.Context, android.net.Uri, int, java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem>, android.app.PendingIntent);
+    method public static java.util.List<androidx.browser.browseractions.BrowserActionItem> parseBrowserActionItems(java.util.ArrayList<android.os.Bundle>);
+    field public static final java.lang.String ACTION_BROWSER_ACTIONS_OPEN = "androidx.browser.browseractions.browser_action_open";
+    field public static final java.lang.String EXTRA_APP_ID = "androidx.browser.browseractions.APP_ID";
+    field public static final java.lang.String EXTRA_MENU_ITEMS = "androidx.browser.browseractions.extra.MENU_ITEMS";
+    field public static final java.lang.String EXTRA_SELECTED_ACTION_PENDING_INTENT = "androidx.browser.browseractions.extra.SELECTED_ACTION_PENDING_INTENT";
+    field public static final java.lang.String EXTRA_TYPE = "androidx.browser.browseractions.extra.TYPE";
+    field public static final int ITEM_COPY = 3; // 0x3
+    field public static final int ITEM_DOWNLOAD = 2; // 0x2
+    field public static final int ITEM_INVALID_ITEM = -1; // 0xffffffff
+    field public static final int ITEM_OPEN_IN_INCOGNITO = 1; // 0x1
+    field public static final int ITEM_OPEN_IN_NEW_TAB = 0; // 0x0
+    field public static final int ITEM_SHARE = 4; // 0x4
+    field public static final java.lang.String KEY_ACTION = "androidx.browser.browseractions.ACTION";
+    field public static final java.lang.String KEY_ICON_ID = "androidx.browser.browseractions.ICON_ID";
+    field public static final java.lang.String KEY_TITLE = "androidx.browser.browseractions.TITLE";
+    field public static final int MAX_CUSTOM_ITEMS = 5; // 0x5
+    field public static final int URL_TYPE_AUDIO = 3; // 0x3
+    field public static final int URL_TYPE_FILE = 4; // 0x4
+    field public static final int URL_TYPE_IMAGE = 1; // 0x1
+    field public static final int URL_TYPE_NONE = 0; // 0x0
+    field public static final int URL_TYPE_PLUGIN = 5; // 0x5
+    field public static final int URL_TYPE_VIDEO = 2; // 0x2
+  }
+
+  public static final class BrowserActionsIntent.Builder {
+    ctor public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
+    method public androidx.browser.browseractions.BrowserActionsIntent build();
+    method public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem>);
+    method public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem...);
+    method public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
+    method public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(int);
+  }
+
+}
+
diff --git a/design/Android.mk b/design/Android.mk
deleted file mode 100644
index f856de6..0000000
--- a/design/Android.mk
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-design \
-#       android-support-transition \
-#       android-support-v7-appcompat \
-#       android-support-v7-recyclerview \
-#       android-support-v4
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_AAPT2_ONLY := true
-LOCAL_MODULE := android-support-design
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,base) \
-    $(call all-java-files-under,lollipop) \
-    $(call all-java-files-under,src)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-transition \
-    android-support-v7-appcompat \
-    android-support-v7-recyclerview \
-    android-support-compat \
-    android-support-media-compat \
-    android-support-core-utils \
-    android-support-core-ui \
-    android-support-fragment
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := \
-    --no-version-vectors \
-    --add-javadoc-annotation doconly
-LOCAL_EXPORT_PROGUARD_FLAG_FILES := proguard-rules.pro
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/design/api/26.0.0.txt b/design/api/26.0.0.txt
deleted file mode 100644
index 602ee48..0000000
--- a/design/api/26.0.0.txt
+++ /dev/null
@@ -1,618 +0,0 @@
-package android.support.design.widget {
-
-  public class AppBarLayout extends android.widget.LinearLayout {
-    ctor public AppBarLayout(android.content.Context);
-    ctor public AppBarLayout(android.content.Context, android.util.AttributeSet);
-    method public void addOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
-    method protected android.support.design.widget.AppBarLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public deprecated float getTargetElevation();
-    method public final int getTotalScrollRange();
-    method public void removeOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
-    method public void setExpanded(boolean);
-    method public void setExpanded(boolean, boolean);
-    method public deprecated void setTargetElevation(float);
-  }
-
-  public static class AppBarLayout.Behavior extends android.support.design.widget.HeaderBehavior {
-    ctor public AppBarLayout.Behavior();
-    ctor public AppBarLayout.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int, int, int, int);
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int, int, int);
-    method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int);
-    method public void setDragCallback(android.support.design.widget.AppBarLayout.Behavior.DragCallback);
-  }
-
-  public static abstract class AppBarLayout.Behavior.DragCallback {
-    ctor public AppBarLayout.Behavior.DragCallback();
-    method public abstract boolean canDrag(android.support.design.widget.AppBarLayout);
-  }
-
-  protected static class AppBarLayout.Behavior.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public AppBarLayout.Behavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public AppBarLayout.Behavior.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.AppBarLayout.Behavior.SavedState> CREATOR;
-  }
-
-  public static class AppBarLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
-    ctor public AppBarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
-    ctor public AppBarLayout.LayoutParams(int, int);
-    ctor public AppBarLayout.LayoutParams(int, int, float);
-    ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.support.design.widget.AppBarLayout.LayoutParams);
-    method public int getScrollFlags();
-    method public android.view.animation.Interpolator getScrollInterpolator();
-    method public void setScrollFlags(int);
-    method public void setScrollInterpolator(android.view.animation.Interpolator);
-    field public static final int SCROLL_FLAG_ENTER_ALWAYS = 4; // 0x4
-    field public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 8; // 0x8
-    field public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 2; // 0x2
-    field public static final int SCROLL_FLAG_SCROLL = 1; // 0x1
-    field public static final int SCROLL_FLAG_SNAP = 16; // 0x10
-  }
-
-  public static abstract interface AppBarLayout.OnOffsetChangedListener {
-    method public abstract void onOffsetChanged(android.support.design.widget.AppBarLayout, int);
-  }
-
-  public static class AppBarLayout.ScrollingViewBehavior extends android.support.design.widget.HeaderScrollingViewBehavior {
-    ctor public AppBarLayout.ScrollingViewBehavior();
-    ctor public AppBarLayout.ScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
-    method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
-    method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean);
-  }
-
-  public abstract class BaseTransientBottomBar<B extends android.support.design.widget.BaseTransientBottomBar<B>> {
-    ctor protected BaseTransientBottomBar(android.view.ViewGroup, android.view.View, android.support.design.widget.BaseTransientBottomBar.ContentViewCallback);
-    method public B addCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
-    method public void dismiss();
-    method public android.content.Context getContext();
-    method public int getDuration();
-    method public android.view.View getView();
-    method public boolean isShown();
-    method public boolean isShownOrQueued();
-    method public B removeCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
-    method public B setDuration(int);
-    method public void show();
-    field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
-    field public static final int LENGTH_LONG = 0; // 0x0
-    field public static final int LENGTH_SHORT = -1; // 0xffffffff
-  }
-
-  public static abstract class BaseTransientBottomBar.BaseCallback<B> {
-    ctor public BaseTransientBottomBar.BaseCallback();
-    method public void onDismissed(B, int);
-    method public void onShown(B);
-    field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
-    field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
-    field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
-    field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
-    field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
-  }
-
-  public static abstract interface BaseTransientBottomBar.ContentViewCallback {
-    method public abstract void animateContentIn(int, int);
-    method public abstract void animateContentOut(int, int);
-  }
-
-  public class BottomNavigationView extends android.widget.FrameLayout {
-    ctor public BottomNavigationView(android.content.Context);
-    ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet);
-    ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet, int);
-    method public int getItemBackgroundResource();
-    method public android.content.res.ColorStateList getItemIconTintList();
-    method public android.content.res.ColorStateList getItemTextColor();
-    method public int getMaxItemCount();
-    method public android.view.Menu getMenu();
-    method public int getSelectedItemId();
-    method public void inflateMenu(int);
-    method public void setItemBackgroundResource(int);
-    method public void setItemIconTintList(android.content.res.ColorStateList);
-    method public void setItemTextColor(android.content.res.ColorStateList);
-    method public void setOnNavigationItemReselectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemReselectedListener);
-    method public void setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener);
-    method public void setSelectedItemId(int);
-  }
-
-  public static abstract interface BottomNavigationView.OnNavigationItemReselectedListener {
-    method public abstract void onNavigationItemReselected(android.view.MenuItem);
-  }
-
-  public static abstract interface BottomNavigationView.OnNavigationItemSelectedListener {
-    method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
-  }
-
-  public class BottomSheetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public BottomSheetBehavior();
-    ctor public BottomSheetBehavior(android.content.Context, android.util.AttributeSet);
-    method public static <V extends android.view.View> android.support.design.widget.BottomSheetBehavior<V> from(V);
-    method public final int getPeekHeight();
-    method public boolean getSkipCollapsed();
-    method public final int getState();
-    method public boolean isHideable();
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void setBottomSheetCallback(android.support.design.widget.BottomSheetBehavior.BottomSheetCallback);
-    method public void setHideable(boolean);
-    method public final void setPeekHeight(int);
-    method public void setSkipCollapsed(boolean);
-    method public final void setState(int);
-    field public static final int PEEK_HEIGHT_AUTO = -1; // 0xffffffff
-    field public static final int STATE_COLLAPSED = 4; // 0x4
-    field public static final int STATE_DRAGGING = 1; // 0x1
-    field public static final int STATE_EXPANDED = 3; // 0x3
-    field public static final int STATE_HIDDEN = 5; // 0x5
-    field public static final int STATE_SETTLING = 2; // 0x2
-  }
-
-  public static abstract class BottomSheetBehavior.BottomSheetCallback {
-    ctor public BottomSheetBehavior.BottomSheetCallback();
-    method public abstract void onSlide(android.view.View, float);
-    method public abstract void onStateChanged(android.view.View, int);
-  }
-
-  protected static class BottomSheetBehavior.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcel);
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcelable, int);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.BottomSheetBehavior.SavedState> CREATOR;
-  }
-
-  public class BottomSheetDialog extends android.support.v7.app.AppCompatDialog {
-    ctor public BottomSheetDialog(android.content.Context);
-    ctor public BottomSheetDialog(android.content.Context, int);
-    ctor protected BottomSheetDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
-  }
-
-  public class BottomSheetDialogFragment extends android.support.v7.app.AppCompatDialogFragment {
-    ctor public BottomSheetDialogFragment();
-  }
-
-  public class CollapsingToolbarLayout extends android.widget.FrameLayout {
-    ctor public CollapsingToolbarLayout(android.content.Context);
-    ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet);
-    ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet, int);
-    method protected android.support.design.widget.CollapsingToolbarLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.widget.FrameLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public int getCollapsedTitleGravity();
-    method public android.graphics.Typeface getCollapsedTitleTypeface();
-    method public android.graphics.drawable.Drawable getContentScrim();
-    method public int getExpandedTitleGravity();
-    method public int getExpandedTitleMarginBottom();
-    method public int getExpandedTitleMarginEnd();
-    method public int getExpandedTitleMarginStart();
-    method public int getExpandedTitleMarginTop();
-    method public android.graphics.Typeface getExpandedTitleTypeface();
-    method public long getScrimAnimationDuration();
-    method public int getScrimVisibleHeightTrigger();
-    method public android.graphics.drawable.Drawable getStatusBarScrim();
-    method public java.lang.CharSequence getTitle();
-    method public boolean isTitleEnabled();
-    method public void setCollapsedTitleGravity(int);
-    method public void setCollapsedTitleTextAppearance(int);
-    method public void setCollapsedTitleTextColor(int);
-    method public void setCollapsedTitleTextColor(android.content.res.ColorStateList);
-    method public void setCollapsedTitleTypeface(android.graphics.Typeface);
-    method public void setContentScrim(android.graphics.drawable.Drawable);
-    method public void setContentScrimColor(int);
-    method public void setContentScrimResource(int);
-    method public void setExpandedTitleColor(int);
-    method public void setExpandedTitleGravity(int);
-    method public void setExpandedTitleMargin(int, int, int, int);
-    method public void setExpandedTitleMarginBottom(int);
-    method public void setExpandedTitleMarginEnd(int);
-    method public void setExpandedTitleMarginStart(int);
-    method public void setExpandedTitleMarginTop(int);
-    method public void setExpandedTitleTextAppearance(int);
-    method public void setExpandedTitleTextColor(android.content.res.ColorStateList);
-    method public void setExpandedTitleTypeface(android.graphics.Typeface);
-    method public void setScrimAnimationDuration(long);
-    method public void setScrimVisibleHeightTrigger(int);
-    method public void setScrimsShown(boolean);
-    method public void setScrimsShown(boolean, boolean);
-    method public void setStatusBarScrim(android.graphics.drawable.Drawable);
-    method public void setStatusBarScrimColor(int);
-    method public void setStatusBarScrimResource(int);
-    method public void setTitle(java.lang.CharSequence);
-    method public void setTitleEnabled(boolean);
-  }
-
-  public static class CollapsingToolbarLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
-    ctor public CollapsingToolbarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
-    ctor public CollapsingToolbarLayout.LayoutParams(int, int);
-    ctor public CollapsingToolbarLayout.LayoutParams(int, int, int);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
-    method public int getCollapseMode();
-    method public float getParallaxMultiplier();
-    method public void setCollapseMode(int);
-    method public void setParallaxMultiplier(float);
-    field public static final int COLLAPSE_MODE_OFF = 0; // 0x0
-    field public static final int COLLAPSE_MODE_PARALLAX = 2; // 0x2
-    field public static final int COLLAPSE_MODE_PIN = 1; // 0x1
-  }
-
-  public class CoordinatorLayout extends android.view.ViewGroup {
-    ctor public CoordinatorLayout(android.content.Context);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
-    method public void dispatchDependentViewsChanged(android.view.View);
-    method public boolean doViewsOverlap(android.view.View, android.view.View);
-    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public java.util.List<android.view.View> getDependencies(android.view.View);
-    method public java.util.List<android.view.View> getDependents(android.view.View);
-    method public android.graphics.drawable.Drawable getStatusBarBackground();
-    method public boolean isPointInChildBounds(android.view.View, int, int);
-    method public void onAttachedToWindow();
-    method public void onDetachedFromWindow();
-    method public void onDraw(android.graphics.Canvas);
-    method protected void onLayout(boolean, int, int, int, int);
-    method public void onLayoutChild(android.view.View, int);
-    method public void onMeasureChild(android.view.View, int, int, int, int);
-    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View, int);
-    method public void setStatusBarBackground(android.graphics.drawable.Drawable);
-    method public void setStatusBarBackgroundColor(int);
-    method public void setStatusBarBackgroundResource(int);
-  }
-
-  public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
-    ctor public CoordinatorLayout.Behavior();
-    ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean blocksInteractionBelow(android.support.design.widget.CoordinatorLayout, V);
-    method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect);
-    method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
-    method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
-    method public static java.lang.Object getTag(android.view.View);
-    method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
-    method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onDependentViewRemoved(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onDetachedFromLayoutParams();
-    method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, V, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, V, int, int, int, int);
-    method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
-    method public boolean onNestedPreFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float);
-    method public deprecated void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
-    method public deprecated void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
-    method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
-    method public deprecated void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
-    method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
-    method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, V, android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, V);
-    method public deprecated boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
-    method public deprecated void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int);
-    method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
-    method public static void setTag(android.view.View, java.lang.Object);
-  }
-
-  public static abstract class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
-  }
-
-  public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
-    ctor public CoordinatorLayout.LayoutParams(int, int);
-    ctor public CoordinatorLayout.LayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    method public int getAnchorId();
-    method public android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
-    method public void setAnchorId(int);
-    method public void setBehavior(android.support.design.widget.CoordinatorLayout.Behavior);
-    field public int anchorGravity;
-    field public int dodgeInsetEdges;
-    field public int gravity;
-    field public int insetEdge;
-    field public int keyline;
-  }
-
-  protected static class CoordinatorLayout.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.CoordinatorLayout.SavedState> CREATOR;
-  }
-
-  public class FloatingActionButton extends android.support.design.widget.VisibilityAwareImageButton {
-    ctor public FloatingActionButton(android.content.Context);
-    ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet);
-    ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet, int);
-    method public float getCompatElevation();
-    method public android.graphics.drawable.Drawable getContentBackground();
-    method public boolean getContentRect(android.graphics.Rect);
-    method public int getRippleColor();
-    method public int getSize();
-    method public boolean getUseCompatPadding();
-    method public void hide();
-    method public void hide(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setCompatElevation(float);
-    method public void setRippleColor(int);
-    method public void setSize(int);
-    method public void setUseCompatPadding(boolean);
-    method public void show();
-    method public void show(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
-    field public static final int SIZE_AUTO = -1; // 0xffffffff
-    field public static final int SIZE_MINI = 1; // 0x1
-    field public static final int SIZE_NORMAL = 0; // 0x0
-  }
-
-  public static class FloatingActionButton.Behavior extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public FloatingActionButton.Behavior();
-    ctor public FloatingActionButton.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect);
-    method public boolean isAutoHideEnabled();
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, int);
-    method public void setAutoHideEnabled(boolean);
-  }
-
-  public static abstract class FloatingActionButton.OnVisibilityChangedListener {
-    ctor public FloatingActionButton.OnVisibilityChangedListener();
-    method public void onHidden(android.support.design.widget.FloatingActionButton);
-    method public void onShown(android.support.design.widget.FloatingActionButton);
-  }
-
-   abstract class HeaderBehavior<V extends android.view.View> extends android.support.design.widget.ViewOffsetBehavior {
-    ctor public HeaderBehavior();
-    ctor public HeaderBehavior(android.content.Context, android.util.AttributeSet);
-  }
-
-   abstract class HeaderScrollingViewBehavior extends android.support.design.widget.ViewOffsetBehavior {
-    ctor public HeaderScrollingViewBehavior();
-    ctor public HeaderScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
-    method public final int getOverlayTop();
-    method protected void layoutChild(android.support.design.widget.CoordinatorLayout, android.view.View, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.view.View, int, int, int, int);
-    method public final void setOverlayTop(int);
-  }
-
-  public class NavigationView extends android.widget.FrameLayout {
-    ctor public NavigationView(android.content.Context);
-    ctor public NavigationView(android.content.Context, android.util.AttributeSet);
-    ctor public NavigationView(android.content.Context, android.util.AttributeSet, int);
-    method public void addHeaderView(android.view.View);
-    method public int getHeaderCount();
-    method public android.view.View getHeaderView(int);
-    method public android.graphics.drawable.Drawable getItemBackground();
-    method public android.content.res.ColorStateList getItemIconTintList();
-    method public android.content.res.ColorStateList getItemTextColor();
-    method public android.view.Menu getMenu();
-    method public android.view.View inflateHeaderView(int);
-    method public void inflateMenu(int);
-    method public void removeHeaderView(android.view.View);
-    method public void setCheckedItem(int);
-    method public void setItemBackground(android.graphics.drawable.Drawable);
-    method public void setItemBackgroundResource(int);
-    method public void setItemIconTintList(android.content.res.ColorStateList);
-    method public void setItemTextAppearance(int);
-    method public void setItemTextColor(android.content.res.ColorStateList);
-    method public void setNavigationItemSelectedListener(android.support.design.widget.NavigationView.OnNavigationItemSelectedListener);
-  }
-
-  public static abstract interface NavigationView.OnNavigationItemSelectedListener {
-    method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
-  }
-
-  public static class NavigationView.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public NavigationView.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public NavigationView.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.NavigationView.SavedState> CREATOR;
-    field public android.os.Bundle menuState;
-  }
-
-  public final class Snackbar extends android.support.design.widget.BaseTransientBottomBar {
-    method public static android.support.design.widget.Snackbar make(android.view.View, java.lang.CharSequence, int);
-    method public static android.support.design.widget.Snackbar make(android.view.View, int, int);
-    method public android.support.design.widget.Snackbar setAction(int, android.view.View.OnClickListener);
-    method public android.support.design.widget.Snackbar setAction(java.lang.CharSequence, android.view.View.OnClickListener);
-    method public android.support.design.widget.Snackbar setActionTextColor(android.content.res.ColorStateList);
-    method public android.support.design.widget.Snackbar setActionTextColor(int);
-    method public deprecated android.support.design.widget.Snackbar setCallback(android.support.design.widget.Snackbar.Callback);
-    method public android.support.design.widget.Snackbar setText(java.lang.CharSequence);
-    method public android.support.design.widget.Snackbar setText(int);
-    field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
-    field public static final int LENGTH_LONG = 0; // 0x0
-    field public static final int LENGTH_SHORT = -1; // 0xffffffff
-  }
-
-  public static class Snackbar.Callback extends android.support.design.widget.BaseTransientBottomBar.BaseCallback {
-    ctor public Snackbar.Callback();
-    method public void onDismissed(android.support.design.widget.Snackbar, int);
-    method public void onShown(android.support.design.widget.Snackbar);
-    field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
-    field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
-    field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
-    field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
-    field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
-  }
-
-  public class SwipeDismissBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public SwipeDismissBehavior();
-    method public boolean canSwipeDismissView(android.view.View);
-    method public int getDragState();
-    method public void setDragDismissDistance(float);
-    method public void setEndAlphaSwipeDistance(float);
-    method public void setListener(android.support.design.widget.SwipeDismissBehavior.OnDismissListener);
-    method public void setSensitivity(float);
-    method public void setStartAlphaSwipeDistance(float);
-    method public void setSwipeDirection(int);
-    field public static final int STATE_DRAGGING = 1; // 0x1
-    field public static final int STATE_IDLE = 0; // 0x0
-    field public static final int STATE_SETTLING = 2; // 0x2
-    field public static final int SWIPE_DIRECTION_ANY = 2; // 0x2
-    field public static final int SWIPE_DIRECTION_END_TO_START = 1; // 0x1
-    field public static final int SWIPE_DIRECTION_START_TO_END = 0; // 0x0
-  }
-
-  public static abstract interface SwipeDismissBehavior.OnDismissListener {
-    method public abstract void onDismiss(android.view.View);
-    method public abstract void onDragStateChanged(int);
-  }
-
-  public final class TabItem extends android.view.View {
-    ctor public TabItem(android.content.Context);
-    ctor public TabItem(android.content.Context, android.util.AttributeSet);
-  }
-
-  public class TabLayout extends android.widget.HorizontalScrollView {
-    ctor public TabLayout(android.content.Context);
-    ctor public TabLayout(android.content.Context, android.util.AttributeSet);
-    ctor public TabLayout(android.content.Context, android.util.AttributeSet, int);
-    method public void addOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void addTab(android.support.design.widget.TabLayout.Tab);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, int);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, boolean);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, int, boolean);
-    method public void clearOnTabSelectedListeners();
-    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method public int getSelectedTabPosition();
-    method public android.support.design.widget.TabLayout.Tab getTabAt(int);
-    method public int getTabCount();
-    method public int getTabGravity();
-    method public int getTabMode();
-    method public android.content.res.ColorStateList getTabTextColors();
-    method public android.support.design.widget.TabLayout.Tab newTab();
-    method public void removeAllTabs();
-    method public void removeOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void removeTab(android.support.design.widget.TabLayout.Tab);
-    method public void removeTabAt(int);
-    method public deprecated void setOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void setScrollPosition(int, float, boolean);
-    method public void setSelectedTabIndicatorColor(int);
-    method public void setSelectedTabIndicatorHeight(int);
-    method public void setTabGravity(int);
-    method public void setTabMode(int);
-    method public void setTabTextColors(android.content.res.ColorStateList);
-    method public void setTabTextColors(int, int);
-    method public deprecated void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter);
-    method public void setupWithViewPager(android.support.v4.view.ViewPager);
-    method public void setupWithViewPager(android.support.v4.view.ViewPager, boolean);
-    field public static final int GRAVITY_CENTER = 1; // 0x1
-    field public static final int GRAVITY_FILL = 0; // 0x0
-    field public static final int MODE_FIXED = 1; // 0x1
-    field public static final int MODE_SCROLLABLE = 0; // 0x0
-  }
-
-  public static abstract interface TabLayout.OnTabSelectedListener {
-    method public abstract void onTabReselected(android.support.design.widget.TabLayout.Tab);
-    method public abstract void onTabSelected(android.support.design.widget.TabLayout.Tab);
-    method public abstract void onTabUnselected(android.support.design.widget.TabLayout.Tab);
-  }
-
-  public static final class TabLayout.Tab {
-    method public java.lang.CharSequence getContentDescription();
-    method public android.view.View getCustomView();
-    method public android.graphics.drawable.Drawable getIcon();
-    method public int getPosition();
-    method public java.lang.Object getTag();
-    method public java.lang.CharSequence getText();
-    method public boolean isSelected();
-    method public void select();
-    method public android.support.design.widget.TabLayout.Tab setContentDescription(int);
-    method public android.support.design.widget.TabLayout.Tab setContentDescription(java.lang.CharSequence);
-    method public android.support.design.widget.TabLayout.Tab setCustomView(android.view.View);
-    method public android.support.design.widget.TabLayout.Tab setCustomView(int);
-    method public android.support.design.widget.TabLayout.Tab setIcon(android.graphics.drawable.Drawable);
-    method public android.support.design.widget.TabLayout.Tab setIcon(int);
-    method public android.support.design.widget.TabLayout.Tab setTag(java.lang.Object);
-    method public android.support.design.widget.TabLayout.Tab setText(java.lang.CharSequence);
-    method public android.support.design.widget.TabLayout.Tab setText(int);
-    field public static final int INVALID_POSITION = -1; // 0xffffffff
-  }
-
-  public static class TabLayout.TabLayoutOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
-    ctor public TabLayout.TabLayoutOnPageChangeListener(android.support.design.widget.TabLayout);
-    method public void onPageScrollStateChanged(int);
-    method public void onPageScrolled(int, float, int);
-    method public void onPageSelected(int);
-  }
-
-  public static class TabLayout.ViewPagerOnTabSelectedListener implements android.support.design.widget.TabLayout.OnTabSelectedListener {
-    ctor public TabLayout.ViewPagerOnTabSelectedListener(android.support.v4.view.ViewPager);
-    method public void onTabReselected(android.support.design.widget.TabLayout.Tab);
-    method public void onTabSelected(android.support.design.widget.TabLayout.Tab);
-    method public void onTabUnselected(android.support.design.widget.TabLayout.Tab);
-  }
-
-  public class TextInputEditText extends android.support.v7.widget.AppCompatEditText {
-    ctor public TextInputEditText(android.content.Context);
-    ctor public TextInputEditText(android.content.Context, android.util.AttributeSet);
-    ctor public TextInputEditText(android.content.Context, android.util.AttributeSet, int);
-  }
-
-  public class TextInputLayout extends android.widget.LinearLayout {
-    ctor public TextInputLayout(android.content.Context);
-    ctor public TextInputLayout(android.content.Context, android.util.AttributeSet);
-    ctor public TextInputLayout(android.content.Context, android.util.AttributeSet, int);
-    method public int getCounterMaxLength();
-    method public android.widget.EditText getEditText();
-    method public java.lang.CharSequence getError();
-    method public java.lang.CharSequence getHint();
-    method public java.lang.CharSequence getPasswordVisibilityToggleContentDescription();
-    method public android.graphics.drawable.Drawable getPasswordVisibilityToggleDrawable();
-    method public android.graphics.Typeface getTypeface();
-    method public boolean isCounterEnabled();
-    method public boolean isErrorEnabled();
-    method public boolean isHintAnimationEnabled();
-    method public boolean isHintEnabled();
-    method public boolean isPasswordVisibilityToggleEnabled();
-    method public android.os.Parcelable onSaveInstanceState();
-    method public void setCounterEnabled(boolean);
-    method public void setCounterMaxLength(int);
-    method public void setError(java.lang.CharSequence);
-    method public void setErrorEnabled(boolean);
-    method public void setErrorTextAppearance(int);
-    method public void setHint(java.lang.CharSequence);
-    method public void setHintAnimationEnabled(boolean);
-    method public void setHintEnabled(boolean);
-    method public void setHintTextAppearance(int);
-    method public void setPasswordVisibilityToggleContentDescription(int);
-    method public void setPasswordVisibilityToggleContentDescription(java.lang.CharSequence);
-    method public void setPasswordVisibilityToggleDrawable(int);
-    method public void setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable);
-    method public void setPasswordVisibilityToggleEnabled(boolean);
-    method public void setPasswordVisibilityToggleTintList(android.content.res.ColorStateList);
-    method public void setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTypeface(android.graphics.Typeface);
-  }
-
-   class ViewOffsetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public ViewOffsetBehavior();
-    ctor public ViewOffsetBehavior(android.content.Context, android.util.AttributeSet);
-    method public int getLeftAndRightOffset();
-    method public int getTopAndBottomOffset();
-    method protected void layoutChild(android.support.design.widget.CoordinatorLayout, V, int);
-    method public boolean setLeftAndRightOffset(int);
-    method public boolean setTopAndBottomOffset(int);
-  }
-
-   class VisibilityAwareImageButton extends android.widget.ImageButton {
-    ctor public VisibilityAwareImageButton(android.content.Context);
-    ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet);
-    ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet, int);
-  }
-
-}
-
diff --git a/design/api/26.1.0.txt b/design/api/26.1.0.txt
deleted file mode 100644
index 602ee48..0000000
--- a/design/api/26.1.0.txt
+++ /dev/null
@@ -1,618 +0,0 @@
-package android.support.design.widget {
-
-  public class AppBarLayout extends android.widget.LinearLayout {
-    ctor public AppBarLayout(android.content.Context);
-    ctor public AppBarLayout(android.content.Context, android.util.AttributeSet);
-    method public void addOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
-    method protected android.support.design.widget.AppBarLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public deprecated float getTargetElevation();
-    method public final int getTotalScrollRange();
-    method public void removeOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
-    method public void setExpanded(boolean);
-    method public void setExpanded(boolean, boolean);
-    method public deprecated void setTargetElevation(float);
-  }
-
-  public static class AppBarLayout.Behavior extends android.support.design.widget.HeaderBehavior {
-    ctor public AppBarLayout.Behavior();
-    ctor public AppBarLayout.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int, int, int, int);
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int, int, int);
-    method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int);
-    method public void setDragCallback(android.support.design.widget.AppBarLayout.Behavior.DragCallback);
-  }
-
-  public static abstract class AppBarLayout.Behavior.DragCallback {
-    ctor public AppBarLayout.Behavior.DragCallback();
-    method public abstract boolean canDrag(android.support.design.widget.AppBarLayout);
-  }
-
-  protected static class AppBarLayout.Behavior.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public AppBarLayout.Behavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public AppBarLayout.Behavior.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.AppBarLayout.Behavior.SavedState> CREATOR;
-  }
-
-  public static class AppBarLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
-    ctor public AppBarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
-    ctor public AppBarLayout.LayoutParams(int, int);
-    ctor public AppBarLayout.LayoutParams(int, int, float);
-    ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.support.design.widget.AppBarLayout.LayoutParams);
-    method public int getScrollFlags();
-    method public android.view.animation.Interpolator getScrollInterpolator();
-    method public void setScrollFlags(int);
-    method public void setScrollInterpolator(android.view.animation.Interpolator);
-    field public static final int SCROLL_FLAG_ENTER_ALWAYS = 4; // 0x4
-    field public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 8; // 0x8
-    field public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 2; // 0x2
-    field public static final int SCROLL_FLAG_SCROLL = 1; // 0x1
-    field public static final int SCROLL_FLAG_SNAP = 16; // 0x10
-  }
-
-  public static abstract interface AppBarLayout.OnOffsetChangedListener {
-    method public abstract void onOffsetChanged(android.support.design.widget.AppBarLayout, int);
-  }
-
-  public static class AppBarLayout.ScrollingViewBehavior extends android.support.design.widget.HeaderScrollingViewBehavior {
-    ctor public AppBarLayout.ScrollingViewBehavior();
-    ctor public AppBarLayout.ScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
-    method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
-    method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean);
-  }
-
-  public abstract class BaseTransientBottomBar<B extends android.support.design.widget.BaseTransientBottomBar<B>> {
-    ctor protected BaseTransientBottomBar(android.view.ViewGroup, android.view.View, android.support.design.widget.BaseTransientBottomBar.ContentViewCallback);
-    method public B addCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
-    method public void dismiss();
-    method public android.content.Context getContext();
-    method public int getDuration();
-    method public android.view.View getView();
-    method public boolean isShown();
-    method public boolean isShownOrQueued();
-    method public B removeCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
-    method public B setDuration(int);
-    method public void show();
-    field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
-    field public static final int LENGTH_LONG = 0; // 0x0
-    field public static final int LENGTH_SHORT = -1; // 0xffffffff
-  }
-
-  public static abstract class BaseTransientBottomBar.BaseCallback<B> {
-    ctor public BaseTransientBottomBar.BaseCallback();
-    method public void onDismissed(B, int);
-    method public void onShown(B);
-    field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
-    field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
-    field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
-    field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
-    field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
-  }
-
-  public static abstract interface BaseTransientBottomBar.ContentViewCallback {
-    method public abstract void animateContentIn(int, int);
-    method public abstract void animateContentOut(int, int);
-  }
-
-  public class BottomNavigationView extends android.widget.FrameLayout {
-    ctor public BottomNavigationView(android.content.Context);
-    ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet);
-    ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet, int);
-    method public int getItemBackgroundResource();
-    method public android.content.res.ColorStateList getItemIconTintList();
-    method public android.content.res.ColorStateList getItemTextColor();
-    method public int getMaxItemCount();
-    method public android.view.Menu getMenu();
-    method public int getSelectedItemId();
-    method public void inflateMenu(int);
-    method public void setItemBackgroundResource(int);
-    method public void setItemIconTintList(android.content.res.ColorStateList);
-    method public void setItemTextColor(android.content.res.ColorStateList);
-    method public void setOnNavigationItemReselectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemReselectedListener);
-    method public void setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener);
-    method public void setSelectedItemId(int);
-  }
-
-  public static abstract interface BottomNavigationView.OnNavigationItemReselectedListener {
-    method public abstract void onNavigationItemReselected(android.view.MenuItem);
-  }
-
-  public static abstract interface BottomNavigationView.OnNavigationItemSelectedListener {
-    method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
-  }
-
-  public class BottomSheetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public BottomSheetBehavior();
-    ctor public BottomSheetBehavior(android.content.Context, android.util.AttributeSet);
-    method public static <V extends android.view.View> android.support.design.widget.BottomSheetBehavior<V> from(V);
-    method public final int getPeekHeight();
-    method public boolean getSkipCollapsed();
-    method public final int getState();
-    method public boolean isHideable();
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void setBottomSheetCallback(android.support.design.widget.BottomSheetBehavior.BottomSheetCallback);
-    method public void setHideable(boolean);
-    method public final void setPeekHeight(int);
-    method public void setSkipCollapsed(boolean);
-    method public final void setState(int);
-    field public static final int PEEK_HEIGHT_AUTO = -1; // 0xffffffff
-    field public static final int STATE_COLLAPSED = 4; // 0x4
-    field public static final int STATE_DRAGGING = 1; // 0x1
-    field public static final int STATE_EXPANDED = 3; // 0x3
-    field public static final int STATE_HIDDEN = 5; // 0x5
-    field public static final int STATE_SETTLING = 2; // 0x2
-  }
-
-  public static abstract class BottomSheetBehavior.BottomSheetCallback {
-    ctor public BottomSheetBehavior.BottomSheetCallback();
-    method public abstract void onSlide(android.view.View, float);
-    method public abstract void onStateChanged(android.view.View, int);
-  }
-
-  protected static class BottomSheetBehavior.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcel);
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcelable, int);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.BottomSheetBehavior.SavedState> CREATOR;
-  }
-
-  public class BottomSheetDialog extends android.support.v7.app.AppCompatDialog {
-    ctor public BottomSheetDialog(android.content.Context);
-    ctor public BottomSheetDialog(android.content.Context, int);
-    ctor protected BottomSheetDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
-  }
-
-  public class BottomSheetDialogFragment extends android.support.v7.app.AppCompatDialogFragment {
-    ctor public BottomSheetDialogFragment();
-  }
-
-  public class CollapsingToolbarLayout extends android.widget.FrameLayout {
-    ctor public CollapsingToolbarLayout(android.content.Context);
-    ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet);
-    ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet, int);
-    method protected android.support.design.widget.CollapsingToolbarLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.widget.FrameLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public int getCollapsedTitleGravity();
-    method public android.graphics.Typeface getCollapsedTitleTypeface();
-    method public android.graphics.drawable.Drawable getContentScrim();
-    method public int getExpandedTitleGravity();
-    method public int getExpandedTitleMarginBottom();
-    method public int getExpandedTitleMarginEnd();
-    method public int getExpandedTitleMarginStart();
-    method public int getExpandedTitleMarginTop();
-    method public android.graphics.Typeface getExpandedTitleTypeface();
-    method public long getScrimAnimationDuration();
-    method public int getScrimVisibleHeightTrigger();
-    method public android.graphics.drawable.Drawable getStatusBarScrim();
-    method public java.lang.CharSequence getTitle();
-    method public boolean isTitleEnabled();
-    method public void setCollapsedTitleGravity(int);
-    method public void setCollapsedTitleTextAppearance(int);
-    method public void setCollapsedTitleTextColor(int);
-    method public void setCollapsedTitleTextColor(android.content.res.ColorStateList);
-    method public void setCollapsedTitleTypeface(android.graphics.Typeface);
-    method public void setContentScrim(android.graphics.drawable.Drawable);
-    method public void setContentScrimColor(int);
-    method public void setContentScrimResource(int);
-    method public void setExpandedTitleColor(int);
-    method public void setExpandedTitleGravity(int);
-    method public void setExpandedTitleMargin(int, int, int, int);
-    method public void setExpandedTitleMarginBottom(int);
-    method public void setExpandedTitleMarginEnd(int);
-    method public void setExpandedTitleMarginStart(int);
-    method public void setExpandedTitleMarginTop(int);
-    method public void setExpandedTitleTextAppearance(int);
-    method public void setExpandedTitleTextColor(android.content.res.ColorStateList);
-    method public void setExpandedTitleTypeface(android.graphics.Typeface);
-    method public void setScrimAnimationDuration(long);
-    method public void setScrimVisibleHeightTrigger(int);
-    method public void setScrimsShown(boolean);
-    method public void setScrimsShown(boolean, boolean);
-    method public void setStatusBarScrim(android.graphics.drawable.Drawable);
-    method public void setStatusBarScrimColor(int);
-    method public void setStatusBarScrimResource(int);
-    method public void setTitle(java.lang.CharSequence);
-    method public void setTitleEnabled(boolean);
-  }
-
-  public static class CollapsingToolbarLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
-    ctor public CollapsingToolbarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
-    ctor public CollapsingToolbarLayout.LayoutParams(int, int);
-    ctor public CollapsingToolbarLayout.LayoutParams(int, int, int);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
-    method public int getCollapseMode();
-    method public float getParallaxMultiplier();
-    method public void setCollapseMode(int);
-    method public void setParallaxMultiplier(float);
-    field public static final int COLLAPSE_MODE_OFF = 0; // 0x0
-    field public static final int COLLAPSE_MODE_PARALLAX = 2; // 0x2
-    field public static final int COLLAPSE_MODE_PIN = 1; // 0x1
-  }
-
-  public class CoordinatorLayout extends android.view.ViewGroup {
-    ctor public CoordinatorLayout(android.content.Context);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
-    method public void dispatchDependentViewsChanged(android.view.View);
-    method public boolean doViewsOverlap(android.view.View, android.view.View);
-    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public java.util.List<android.view.View> getDependencies(android.view.View);
-    method public java.util.List<android.view.View> getDependents(android.view.View);
-    method public android.graphics.drawable.Drawable getStatusBarBackground();
-    method public boolean isPointInChildBounds(android.view.View, int, int);
-    method public void onAttachedToWindow();
-    method public void onDetachedFromWindow();
-    method public void onDraw(android.graphics.Canvas);
-    method protected void onLayout(boolean, int, int, int, int);
-    method public void onLayoutChild(android.view.View, int);
-    method public void onMeasureChild(android.view.View, int, int, int, int);
-    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View, int);
-    method public void setStatusBarBackground(android.graphics.drawable.Drawable);
-    method public void setStatusBarBackgroundColor(int);
-    method public void setStatusBarBackgroundResource(int);
-  }
-
-  public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
-    ctor public CoordinatorLayout.Behavior();
-    ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean blocksInteractionBelow(android.support.design.widget.CoordinatorLayout, V);
-    method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect);
-    method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
-    method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
-    method public static java.lang.Object getTag(android.view.View);
-    method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
-    method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onDependentViewRemoved(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onDetachedFromLayoutParams();
-    method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, V, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, V, int, int, int, int);
-    method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
-    method public boolean onNestedPreFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float);
-    method public deprecated void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
-    method public deprecated void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
-    method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
-    method public deprecated void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
-    method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
-    method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, V, android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, V);
-    method public deprecated boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
-    method public deprecated void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int);
-    method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
-    method public static void setTag(android.view.View, java.lang.Object);
-  }
-
-  public static abstract class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
-  }
-
-  public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
-    ctor public CoordinatorLayout.LayoutParams(int, int);
-    ctor public CoordinatorLayout.LayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    method public int getAnchorId();
-    method public android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
-    method public void setAnchorId(int);
-    method public void setBehavior(android.support.design.widget.CoordinatorLayout.Behavior);
-    field public int anchorGravity;
-    field public int dodgeInsetEdges;
-    field public int gravity;
-    field public int insetEdge;
-    field public int keyline;
-  }
-
-  protected static class CoordinatorLayout.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.CoordinatorLayout.SavedState> CREATOR;
-  }
-
-  public class FloatingActionButton extends android.support.design.widget.VisibilityAwareImageButton {
-    ctor public FloatingActionButton(android.content.Context);
-    ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet);
-    ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet, int);
-    method public float getCompatElevation();
-    method public android.graphics.drawable.Drawable getContentBackground();
-    method public boolean getContentRect(android.graphics.Rect);
-    method public int getRippleColor();
-    method public int getSize();
-    method public boolean getUseCompatPadding();
-    method public void hide();
-    method public void hide(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setCompatElevation(float);
-    method public void setRippleColor(int);
-    method public void setSize(int);
-    method public void setUseCompatPadding(boolean);
-    method public void show();
-    method public void show(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
-    field public static final int SIZE_AUTO = -1; // 0xffffffff
-    field public static final int SIZE_MINI = 1; // 0x1
-    field public static final int SIZE_NORMAL = 0; // 0x0
-  }
-
-  public static class FloatingActionButton.Behavior extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public FloatingActionButton.Behavior();
-    ctor public FloatingActionButton.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect);
-    method public boolean isAutoHideEnabled();
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, int);
-    method public void setAutoHideEnabled(boolean);
-  }
-
-  public static abstract class FloatingActionButton.OnVisibilityChangedListener {
-    ctor public FloatingActionButton.OnVisibilityChangedListener();
-    method public void onHidden(android.support.design.widget.FloatingActionButton);
-    method public void onShown(android.support.design.widget.FloatingActionButton);
-  }
-
-   abstract class HeaderBehavior<V extends android.view.View> extends android.support.design.widget.ViewOffsetBehavior {
-    ctor public HeaderBehavior();
-    ctor public HeaderBehavior(android.content.Context, android.util.AttributeSet);
-  }
-
-   abstract class HeaderScrollingViewBehavior extends android.support.design.widget.ViewOffsetBehavior {
-    ctor public HeaderScrollingViewBehavior();
-    ctor public HeaderScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
-    method public final int getOverlayTop();
-    method protected void layoutChild(android.support.design.widget.CoordinatorLayout, android.view.View, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.view.View, int, int, int, int);
-    method public final void setOverlayTop(int);
-  }
-
-  public class NavigationView extends android.widget.FrameLayout {
-    ctor public NavigationView(android.content.Context);
-    ctor public NavigationView(android.content.Context, android.util.AttributeSet);
-    ctor public NavigationView(android.content.Context, android.util.AttributeSet, int);
-    method public void addHeaderView(android.view.View);
-    method public int getHeaderCount();
-    method public android.view.View getHeaderView(int);
-    method public android.graphics.drawable.Drawable getItemBackground();
-    method public android.content.res.ColorStateList getItemIconTintList();
-    method public android.content.res.ColorStateList getItemTextColor();
-    method public android.view.Menu getMenu();
-    method public android.view.View inflateHeaderView(int);
-    method public void inflateMenu(int);
-    method public void removeHeaderView(android.view.View);
-    method public void setCheckedItem(int);
-    method public void setItemBackground(android.graphics.drawable.Drawable);
-    method public void setItemBackgroundResource(int);
-    method public void setItemIconTintList(android.content.res.ColorStateList);
-    method public void setItemTextAppearance(int);
-    method public void setItemTextColor(android.content.res.ColorStateList);
-    method public void setNavigationItemSelectedListener(android.support.design.widget.NavigationView.OnNavigationItemSelectedListener);
-  }
-
-  public static abstract interface NavigationView.OnNavigationItemSelectedListener {
-    method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
-  }
-
-  public static class NavigationView.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public NavigationView.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public NavigationView.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.NavigationView.SavedState> CREATOR;
-    field public android.os.Bundle menuState;
-  }
-
-  public final class Snackbar extends android.support.design.widget.BaseTransientBottomBar {
-    method public static android.support.design.widget.Snackbar make(android.view.View, java.lang.CharSequence, int);
-    method public static android.support.design.widget.Snackbar make(android.view.View, int, int);
-    method public android.support.design.widget.Snackbar setAction(int, android.view.View.OnClickListener);
-    method public android.support.design.widget.Snackbar setAction(java.lang.CharSequence, android.view.View.OnClickListener);
-    method public android.support.design.widget.Snackbar setActionTextColor(android.content.res.ColorStateList);
-    method public android.support.design.widget.Snackbar setActionTextColor(int);
-    method public deprecated android.support.design.widget.Snackbar setCallback(android.support.design.widget.Snackbar.Callback);
-    method public android.support.design.widget.Snackbar setText(java.lang.CharSequence);
-    method public android.support.design.widget.Snackbar setText(int);
-    field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
-    field public static final int LENGTH_LONG = 0; // 0x0
-    field public static final int LENGTH_SHORT = -1; // 0xffffffff
-  }
-
-  public static class Snackbar.Callback extends android.support.design.widget.BaseTransientBottomBar.BaseCallback {
-    ctor public Snackbar.Callback();
-    method public void onDismissed(android.support.design.widget.Snackbar, int);
-    method public void onShown(android.support.design.widget.Snackbar);
-    field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
-    field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
-    field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
-    field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
-    field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
-  }
-
-  public class SwipeDismissBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public SwipeDismissBehavior();
-    method public boolean canSwipeDismissView(android.view.View);
-    method public int getDragState();
-    method public void setDragDismissDistance(float);
-    method public void setEndAlphaSwipeDistance(float);
-    method public void setListener(android.support.design.widget.SwipeDismissBehavior.OnDismissListener);
-    method public void setSensitivity(float);
-    method public void setStartAlphaSwipeDistance(float);
-    method public void setSwipeDirection(int);
-    field public static final int STATE_DRAGGING = 1; // 0x1
-    field public static final int STATE_IDLE = 0; // 0x0
-    field public static final int STATE_SETTLING = 2; // 0x2
-    field public static final int SWIPE_DIRECTION_ANY = 2; // 0x2
-    field public static final int SWIPE_DIRECTION_END_TO_START = 1; // 0x1
-    field public static final int SWIPE_DIRECTION_START_TO_END = 0; // 0x0
-  }
-
-  public static abstract interface SwipeDismissBehavior.OnDismissListener {
-    method public abstract void onDismiss(android.view.View);
-    method public abstract void onDragStateChanged(int);
-  }
-
-  public final class TabItem extends android.view.View {
-    ctor public TabItem(android.content.Context);
-    ctor public TabItem(android.content.Context, android.util.AttributeSet);
-  }
-
-  public class TabLayout extends android.widget.HorizontalScrollView {
-    ctor public TabLayout(android.content.Context);
-    ctor public TabLayout(android.content.Context, android.util.AttributeSet);
-    ctor public TabLayout(android.content.Context, android.util.AttributeSet, int);
-    method public void addOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void addTab(android.support.design.widget.TabLayout.Tab);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, int);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, boolean);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, int, boolean);
-    method public void clearOnTabSelectedListeners();
-    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method public int getSelectedTabPosition();
-    method public android.support.design.widget.TabLayout.Tab getTabAt(int);
-    method public int getTabCount();
-    method public int getTabGravity();
-    method public int getTabMode();
-    method public android.content.res.ColorStateList getTabTextColors();
-    method public android.support.design.widget.TabLayout.Tab newTab();
-    method public void removeAllTabs();
-    method public void removeOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void removeTab(android.support.design.widget.TabLayout.Tab);
-    method public void removeTabAt(int);
-    method public deprecated void setOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void setScrollPosition(int, float, boolean);
-    method public void setSelectedTabIndicatorColor(int);
-    method public void setSelectedTabIndicatorHeight(int);
-    method public void setTabGravity(int);
-    method public void setTabMode(int);
-    method public void setTabTextColors(android.content.res.ColorStateList);
-    method public void setTabTextColors(int, int);
-    method public deprecated void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter);
-    method public void setupWithViewPager(android.support.v4.view.ViewPager);
-    method public void setupWithViewPager(android.support.v4.view.ViewPager, boolean);
-    field public static final int GRAVITY_CENTER = 1; // 0x1
-    field public static final int GRAVITY_FILL = 0; // 0x0
-    field public static final int MODE_FIXED = 1; // 0x1
-    field public static final int MODE_SCROLLABLE = 0; // 0x0
-  }
-
-  public static abstract interface TabLayout.OnTabSelectedListener {
-    method public abstract void onTabReselected(android.support.design.widget.TabLayout.Tab);
-    method public abstract void onTabSelected(android.support.design.widget.TabLayout.Tab);
-    method public abstract void onTabUnselected(android.support.design.widget.TabLayout.Tab);
-  }
-
-  public static final class TabLayout.Tab {
-    method public java.lang.CharSequence getContentDescription();
-    method public android.view.View getCustomView();
-    method public android.graphics.drawable.Drawable getIcon();
-    method public int getPosition();
-    method public java.lang.Object getTag();
-    method public java.lang.CharSequence getText();
-    method public boolean isSelected();
-    method public void select();
-    method public android.support.design.widget.TabLayout.Tab setContentDescription(int);
-    method public android.support.design.widget.TabLayout.Tab setContentDescription(java.lang.CharSequence);
-    method public android.support.design.widget.TabLayout.Tab setCustomView(android.view.View);
-    method public android.support.design.widget.TabLayout.Tab setCustomView(int);
-    method public android.support.design.widget.TabLayout.Tab setIcon(android.graphics.drawable.Drawable);
-    method public android.support.design.widget.TabLayout.Tab setIcon(int);
-    method public android.support.design.widget.TabLayout.Tab setTag(java.lang.Object);
-    method public android.support.design.widget.TabLayout.Tab setText(java.lang.CharSequence);
-    method public android.support.design.widget.TabLayout.Tab setText(int);
-    field public static final int INVALID_POSITION = -1; // 0xffffffff
-  }
-
-  public static class TabLayout.TabLayoutOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
-    ctor public TabLayout.TabLayoutOnPageChangeListener(android.support.design.widget.TabLayout);
-    method public void onPageScrollStateChanged(int);
-    method public void onPageScrolled(int, float, int);
-    method public void onPageSelected(int);
-  }
-
-  public static class TabLayout.ViewPagerOnTabSelectedListener implements android.support.design.widget.TabLayout.OnTabSelectedListener {
-    ctor public TabLayout.ViewPagerOnTabSelectedListener(android.support.v4.view.ViewPager);
-    method public void onTabReselected(android.support.design.widget.TabLayout.Tab);
-    method public void onTabSelected(android.support.design.widget.TabLayout.Tab);
-    method public void onTabUnselected(android.support.design.widget.TabLayout.Tab);
-  }
-
-  public class TextInputEditText extends android.support.v7.widget.AppCompatEditText {
-    ctor public TextInputEditText(android.content.Context);
-    ctor public TextInputEditText(android.content.Context, android.util.AttributeSet);
-    ctor public TextInputEditText(android.content.Context, android.util.AttributeSet, int);
-  }
-
-  public class TextInputLayout extends android.widget.LinearLayout {
-    ctor public TextInputLayout(android.content.Context);
-    ctor public TextInputLayout(android.content.Context, android.util.AttributeSet);
-    ctor public TextInputLayout(android.content.Context, android.util.AttributeSet, int);
-    method public int getCounterMaxLength();
-    method public android.widget.EditText getEditText();
-    method public java.lang.CharSequence getError();
-    method public java.lang.CharSequence getHint();
-    method public java.lang.CharSequence getPasswordVisibilityToggleContentDescription();
-    method public android.graphics.drawable.Drawable getPasswordVisibilityToggleDrawable();
-    method public android.graphics.Typeface getTypeface();
-    method public boolean isCounterEnabled();
-    method public boolean isErrorEnabled();
-    method public boolean isHintAnimationEnabled();
-    method public boolean isHintEnabled();
-    method public boolean isPasswordVisibilityToggleEnabled();
-    method public android.os.Parcelable onSaveInstanceState();
-    method public void setCounterEnabled(boolean);
-    method public void setCounterMaxLength(int);
-    method public void setError(java.lang.CharSequence);
-    method public void setErrorEnabled(boolean);
-    method public void setErrorTextAppearance(int);
-    method public void setHint(java.lang.CharSequence);
-    method public void setHintAnimationEnabled(boolean);
-    method public void setHintEnabled(boolean);
-    method public void setHintTextAppearance(int);
-    method public void setPasswordVisibilityToggleContentDescription(int);
-    method public void setPasswordVisibilityToggleContentDescription(java.lang.CharSequence);
-    method public void setPasswordVisibilityToggleDrawable(int);
-    method public void setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable);
-    method public void setPasswordVisibilityToggleEnabled(boolean);
-    method public void setPasswordVisibilityToggleTintList(android.content.res.ColorStateList);
-    method public void setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTypeface(android.graphics.Typeface);
-  }
-
-   class ViewOffsetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public ViewOffsetBehavior();
-    ctor public ViewOffsetBehavior(android.content.Context, android.util.AttributeSet);
-    method public int getLeftAndRightOffset();
-    method public int getTopAndBottomOffset();
-    method protected void layoutChild(android.support.design.widget.CoordinatorLayout, V, int);
-    method public boolean setLeftAndRightOffset(int);
-    method public boolean setTopAndBottomOffset(int);
-  }
-
-   class VisibilityAwareImageButton extends android.widget.ImageButton {
-    ctor public VisibilityAwareImageButton(android.content.Context);
-    ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet);
-    ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet, int);
-  }
-
-}
-
diff --git a/design/api/27.0.0.ignore b/design/api/27.0.0.ignore
deleted file mode 100644
index d982dc1..0000000
--- a/design/api/27.0.0.ignore
+++ /dev/null
@@ -1,14 +0,0 @@
-a1fc27e
-197ce1d
-88bc57e
-9761c3e
-86b38bf
-c6abd5e
-cea5c29
-8bac7c2
-f02de9f
-1d50e39
-fb2d5b2
-4c9b1f0
-7da565d
-33c90df
diff --git a/design/api/27.0.0.txt b/design/api/27.0.0.txt
deleted file mode 100644
index 602ee48..0000000
--- a/design/api/27.0.0.txt
+++ /dev/null
@@ -1,618 +0,0 @@
-package android.support.design.widget {
-
-  public class AppBarLayout extends android.widget.LinearLayout {
-    ctor public AppBarLayout(android.content.Context);
-    ctor public AppBarLayout(android.content.Context, android.util.AttributeSet);
-    method public void addOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
-    method protected android.support.design.widget.AppBarLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.support.design.widget.AppBarLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public deprecated float getTargetElevation();
-    method public final int getTotalScrollRange();
-    method public void removeOnOffsetChangedListener(android.support.design.widget.AppBarLayout.OnOffsetChangedListener);
-    method public void setExpanded(boolean);
-    method public void setExpanded(boolean, boolean);
-    method public deprecated void setTargetElevation(float);
-  }
-
-  public static class AppBarLayout.Behavior extends android.support.design.widget.HeaderBehavior {
-    ctor public AppBarLayout.Behavior();
-    ctor public AppBarLayout.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, int, int, int, int);
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int, int, int, int, int);
-    method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, android.support.design.widget.AppBarLayout, android.view.View, int);
-    method public void setDragCallback(android.support.design.widget.AppBarLayout.Behavior.DragCallback);
-  }
-
-  public static abstract class AppBarLayout.Behavior.DragCallback {
-    ctor public AppBarLayout.Behavior.DragCallback();
-    method public abstract boolean canDrag(android.support.design.widget.AppBarLayout);
-  }
-
-  protected static class AppBarLayout.Behavior.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public AppBarLayout.Behavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public AppBarLayout.Behavior.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.AppBarLayout.Behavior.SavedState> CREATOR;
-  }
-
-  public static class AppBarLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
-    ctor public AppBarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
-    ctor public AppBarLayout.LayoutParams(int, int);
-    ctor public AppBarLayout.LayoutParams(int, int, float);
-    ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
-    ctor public AppBarLayout.LayoutParams(android.support.design.widget.AppBarLayout.LayoutParams);
-    method public int getScrollFlags();
-    method public android.view.animation.Interpolator getScrollInterpolator();
-    method public void setScrollFlags(int);
-    method public void setScrollInterpolator(android.view.animation.Interpolator);
-    field public static final int SCROLL_FLAG_ENTER_ALWAYS = 4; // 0x4
-    field public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 8; // 0x8
-    field public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 2; // 0x2
-    field public static final int SCROLL_FLAG_SCROLL = 1; // 0x1
-    field public static final int SCROLL_FLAG_SNAP = 16; // 0x10
-  }
-
-  public static abstract interface AppBarLayout.OnOffsetChangedListener {
-    method public abstract void onOffsetChanged(android.support.design.widget.AppBarLayout, int);
-  }
-
-  public static class AppBarLayout.ScrollingViewBehavior extends android.support.design.widget.HeaderScrollingViewBehavior {
-    ctor public AppBarLayout.ScrollingViewBehavior();
-    ctor public AppBarLayout.ScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
-    method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.view.View, android.view.View);
-    method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean);
-  }
-
-  public abstract class BaseTransientBottomBar<B extends android.support.design.widget.BaseTransientBottomBar<B>> {
-    ctor protected BaseTransientBottomBar(android.view.ViewGroup, android.view.View, android.support.design.widget.BaseTransientBottomBar.ContentViewCallback);
-    method public B addCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
-    method public void dismiss();
-    method public android.content.Context getContext();
-    method public int getDuration();
-    method public android.view.View getView();
-    method public boolean isShown();
-    method public boolean isShownOrQueued();
-    method public B removeCallback(android.support.design.widget.BaseTransientBottomBar.BaseCallback<B>);
-    method public B setDuration(int);
-    method public void show();
-    field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
-    field public static final int LENGTH_LONG = 0; // 0x0
-    field public static final int LENGTH_SHORT = -1; // 0xffffffff
-  }
-
-  public static abstract class BaseTransientBottomBar.BaseCallback<B> {
-    ctor public BaseTransientBottomBar.BaseCallback();
-    method public void onDismissed(B, int);
-    method public void onShown(B);
-    field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
-    field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
-    field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
-    field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
-    field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
-  }
-
-  public static abstract interface BaseTransientBottomBar.ContentViewCallback {
-    method public abstract void animateContentIn(int, int);
-    method public abstract void animateContentOut(int, int);
-  }
-
-  public class BottomNavigationView extends android.widget.FrameLayout {
-    ctor public BottomNavigationView(android.content.Context);
-    ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet);
-    ctor public BottomNavigationView(android.content.Context, android.util.AttributeSet, int);
-    method public int getItemBackgroundResource();
-    method public android.content.res.ColorStateList getItemIconTintList();
-    method public android.content.res.ColorStateList getItemTextColor();
-    method public int getMaxItemCount();
-    method public android.view.Menu getMenu();
-    method public int getSelectedItemId();
-    method public void inflateMenu(int);
-    method public void setItemBackgroundResource(int);
-    method public void setItemIconTintList(android.content.res.ColorStateList);
-    method public void setItemTextColor(android.content.res.ColorStateList);
-    method public void setOnNavigationItemReselectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemReselectedListener);
-    method public void setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView.OnNavigationItemSelectedListener);
-    method public void setSelectedItemId(int);
-  }
-
-  public static abstract interface BottomNavigationView.OnNavigationItemReselectedListener {
-    method public abstract void onNavigationItemReselected(android.view.MenuItem);
-  }
-
-  public static abstract interface BottomNavigationView.OnNavigationItemSelectedListener {
-    method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
-  }
-
-  public class BottomSheetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public BottomSheetBehavior();
-    ctor public BottomSheetBehavior(android.content.Context, android.util.AttributeSet);
-    method public static <V extends android.view.View> android.support.design.widget.BottomSheetBehavior<V> from(V);
-    method public final int getPeekHeight();
-    method public boolean getSkipCollapsed();
-    method public final int getState();
-    method public boolean isHideable();
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void setBottomSheetCallback(android.support.design.widget.BottomSheetBehavior.BottomSheetCallback);
-    method public void setHideable(boolean);
-    method public final void setPeekHeight(int);
-    method public void setSkipCollapsed(boolean);
-    method public final void setState(int);
-    field public static final int PEEK_HEIGHT_AUTO = -1; // 0xffffffff
-    field public static final int STATE_COLLAPSED = 4; // 0x4
-    field public static final int STATE_DRAGGING = 1; // 0x1
-    field public static final int STATE_EXPANDED = 3; // 0x3
-    field public static final int STATE_HIDDEN = 5; // 0x5
-    field public static final int STATE_SETTLING = 2; // 0x2
-  }
-
-  public static abstract class BottomSheetBehavior.BottomSheetCallback {
-    ctor public BottomSheetBehavior.BottomSheetCallback();
-    method public abstract void onSlide(android.view.View, float);
-    method public abstract void onStateChanged(android.view.View, int);
-  }
-
-  protected static class BottomSheetBehavior.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcel);
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public BottomSheetBehavior.SavedState(android.os.Parcelable, int);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.BottomSheetBehavior.SavedState> CREATOR;
-  }
-
-  public class BottomSheetDialog extends android.support.v7.app.AppCompatDialog {
-    ctor public BottomSheetDialog(android.content.Context);
-    ctor public BottomSheetDialog(android.content.Context, int);
-    ctor protected BottomSheetDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
-  }
-
-  public class BottomSheetDialogFragment extends android.support.v7.app.AppCompatDialogFragment {
-    ctor public BottomSheetDialogFragment();
-  }
-
-  public class CollapsingToolbarLayout extends android.widget.FrameLayout {
-    ctor public CollapsingToolbarLayout(android.content.Context);
-    ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet);
-    ctor public CollapsingToolbarLayout(android.content.Context, android.util.AttributeSet, int);
-    method protected android.support.design.widget.CollapsingToolbarLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.widget.FrameLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public int getCollapsedTitleGravity();
-    method public android.graphics.Typeface getCollapsedTitleTypeface();
-    method public android.graphics.drawable.Drawable getContentScrim();
-    method public int getExpandedTitleGravity();
-    method public int getExpandedTitleMarginBottom();
-    method public int getExpandedTitleMarginEnd();
-    method public int getExpandedTitleMarginStart();
-    method public int getExpandedTitleMarginTop();
-    method public android.graphics.Typeface getExpandedTitleTypeface();
-    method public long getScrimAnimationDuration();
-    method public int getScrimVisibleHeightTrigger();
-    method public android.graphics.drawable.Drawable getStatusBarScrim();
-    method public java.lang.CharSequence getTitle();
-    method public boolean isTitleEnabled();
-    method public void setCollapsedTitleGravity(int);
-    method public void setCollapsedTitleTextAppearance(int);
-    method public void setCollapsedTitleTextColor(int);
-    method public void setCollapsedTitleTextColor(android.content.res.ColorStateList);
-    method public void setCollapsedTitleTypeface(android.graphics.Typeface);
-    method public void setContentScrim(android.graphics.drawable.Drawable);
-    method public void setContentScrimColor(int);
-    method public void setContentScrimResource(int);
-    method public void setExpandedTitleColor(int);
-    method public void setExpandedTitleGravity(int);
-    method public void setExpandedTitleMargin(int, int, int, int);
-    method public void setExpandedTitleMarginBottom(int);
-    method public void setExpandedTitleMarginEnd(int);
-    method public void setExpandedTitleMarginStart(int);
-    method public void setExpandedTitleMarginTop(int);
-    method public void setExpandedTitleTextAppearance(int);
-    method public void setExpandedTitleTextColor(android.content.res.ColorStateList);
-    method public void setExpandedTitleTypeface(android.graphics.Typeface);
-    method public void setScrimAnimationDuration(long);
-    method public void setScrimVisibleHeightTrigger(int);
-    method public void setScrimsShown(boolean);
-    method public void setScrimsShown(boolean, boolean);
-    method public void setStatusBarScrim(android.graphics.drawable.Drawable);
-    method public void setStatusBarScrimColor(int);
-    method public void setStatusBarScrimResource(int);
-    method public void setTitle(java.lang.CharSequence);
-    method public void setTitleEnabled(boolean);
-  }
-
-  public static class CollapsingToolbarLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
-    ctor public CollapsingToolbarLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
-    ctor public CollapsingToolbarLayout.LayoutParams(int, int);
-    ctor public CollapsingToolbarLayout.LayoutParams(int, int, int);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public CollapsingToolbarLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
-    method public int getCollapseMode();
-    method public float getParallaxMultiplier();
-    method public void setCollapseMode(int);
-    method public void setParallaxMultiplier(float);
-    field public static final int COLLAPSE_MODE_OFF = 0; // 0x0
-    field public static final int COLLAPSE_MODE_PARALLAX = 2; // 0x2
-    field public static final int COLLAPSE_MODE_PIN = 1; // 0x1
-  }
-
-  public class CoordinatorLayout extends android.view.ViewGroup {
-    ctor public CoordinatorLayout(android.content.Context);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet);
-    ctor public CoordinatorLayout(android.content.Context, android.util.AttributeSet, int);
-    method public void dispatchDependentViewsChanged(android.view.View);
-    method public boolean doViewsOverlap(android.view.View, android.view.View);
-    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateDefaultLayoutParams();
-    method public android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method protected android.support.design.widget.CoordinatorLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
-    method public java.util.List<android.view.View> getDependencies(android.view.View);
-    method public java.util.List<android.view.View> getDependents(android.view.View);
-    method public android.graphics.drawable.Drawable getStatusBarBackground();
-    method public boolean isPointInChildBounds(android.view.View, int, int);
-    method public void onAttachedToWindow();
-    method public void onDetachedFromWindow();
-    method public void onDraw(android.graphics.Canvas);
-    method protected void onLayout(boolean, int, int, int, int);
-    method public void onLayoutChild(android.view.View, int);
-    method public void onMeasureChild(android.view.View, int, int, int, int);
-    method public void onNestedPreScroll(android.view.View, int, int, int[], int);
-    method public void onNestedScroll(android.view.View, int, int, int, int, int);
-    method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
-    method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
-    method public void onStopNestedScroll(android.view.View, int);
-    method public void setStatusBarBackground(android.graphics.drawable.Drawable);
-    method public void setStatusBarBackgroundColor(int);
-    method public void setStatusBarBackgroundResource(int);
-  }
-
-  public static abstract class CoordinatorLayout.Behavior<V extends android.view.View> {
-    ctor public CoordinatorLayout.Behavior();
-    ctor public CoordinatorLayout.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean blocksInteractionBelow(android.support.design.widget.CoordinatorLayout, V);
-    method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect);
-    method public int getScrimColor(android.support.design.widget.CoordinatorLayout, V);
-    method public float getScrimOpacity(android.support.design.widget.CoordinatorLayout, V);
-    method public static java.lang.Object getTag(android.view.View);
-    method public boolean layoutDependsOn(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public android.support.v4.view.WindowInsetsCompat onApplyWindowInsets(android.support.design.widget.CoordinatorLayout, V, android.support.v4.view.WindowInsetsCompat);
-    method public void onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onDependentViewRemoved(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onDetachedFromLayoutParams();
-    method public boolean onInterceptTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, V, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, V, int, int, int, int);
-    method public boolean onNestedFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float, boolean);
-    method public boolean onNestedPreFling(android.support.design.widget.CoordinatorLayout, V, android.view.View, float, float);
-    method public deprecated void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[]);
-    method public void onNestedPreScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int[], int);
-    method public deprecated void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int);
-    method public void onNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int, int, int, int, int);
-    method public deprecated void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public void onNestedScrollAccepted(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
-    method public boolean onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean);
-    method public void onRestoreInstanceState(android.support.design.widget.CoordinatorLayout, V, android.os.Parcelable);
-    method public android.os.Parcelable onSaveInstanceState(android.support.design.widget.CoordinatorLayout, V);
-    method public deprecated boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int);
-    method public boolean onStartNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, android.view.View, int, int);
-    method public deprecated void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View);
-    method public void onStopNestedScroll(android.support.design.widget.CoordinatorLayout, V, android.view.View, int);
-    method public boolean onTouchEvent(android.support.design.widget.CoordinatorLayout, V, android.view.MotionEvent);
-    method public static void setTag(android.view.View, java.lang.Object);
-  }
-
-  public static abstract class CoordinatorLayout.DefaultBehavior implements java.lang.annotation.Annotation {
-  }
-
-  public static class CoordinatorLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
-    ctor public CoordinatorLayout.LayoutParams(int, int);
-    ctor public CoordinatorLayout.LayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
-    ctor public CoordinatorLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
-    method public int getAnchorId();
-    method public android.support.design.widget.CoordinatorLayout.Behavior getBehavior();
-    method public void setAnchorId(int);
-    method public void setBehavior(android.support.design.widget.CoordinatorLayout.Behavior);
-    field public int anchorGravity;
-    field public int dodgeInsetEdges;
-    field public int gravity;
-    field public int insetEdge;
-    field public int keyline;
-  }
-
-  protected static class CoordinatorLayout.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public CoordinatorLayout.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public CoordinatorLayout.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.CoordinatorLayout.SavedState> CREATOR;
-  }
-
-  public class FloatingActionButton extends android.support.design.widget.VisibilityAwareImageButton {
-    ctor public FloatingActionButton(android.content.Context);
-    ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet);
-    ctor public FloatingActionButton(android.content.Context, android.util.AttributeSet, int);
-    method public float getCompatElevation();
-    method public android.graphics.drawable.Drawable getContentBackground();
-    method public boolean getContentRect(android.graphics.Rect);
-    method public int getRippleColor();
-    method public int getSize();
-    method public boolean getUseCompatPadding();
-    method public void hide();
-    method public void hide(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
-    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
-    method public void setCompatElevation(float);
-    method public void setRippleColor(int);
-    method public void setSize(int);
-    method public void setUseCompatPadding(boolean);
-    method public void show();
-    method public void show(android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener);
-    field public static final int SIZE_AUTO = -1; // 0xffffffff
-    field public static final int SIZE_MINI = 1; // 0x1
-    field public static final int SIZE_NORMAL = 0; // 0x0
-  }
-
-  public static class FloatingActionButton.Behavior extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public FloatingActionButton.Behavior();
-    ctor public FloatingActionButton.Behavior(android.content.Context, android.util.AttributeSet);
-    method public boolean getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect);
-    method public boolean isAutoHideEnabled();
-    method public boolean onDependentViewChanged(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View);
-    method public boolean onLayoutChild(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, int);
-    method public void setAutoHideEnabled(boolean);
-  }
-
-  public static abstract class FloatingActionButton.OnVisibilityChangedListener {
-    ctor public FloatingActionButton.OnVisibilityChangedListener();
-    method public void onHidden(android.support.design.widget.FloatingActionButton);
-    method public void onShown(android.support.design.widget.FloatingActionButton);
-  }
-
-   abstract class HeaderBehavior<V extends android.view.View> extends android.support.design.widget.ViewOffsetBehavior {
-    ctor public HeaderBehavior();
-    ctor public HeaderBehavior(android.content.Context, android.util.AttributeSet);
-  }
-
-   abstract class HeaderScrollingViewBehavior extends android.support.design.widget.ViewOffsetBehavior {
-    ctor public HeaderScrollingViewBehavior();
-    ctor public HeaderScrollingViewBehavior(android.content.Context, android.util.AttributeSet);
-    method public final int getOverlayTop();
-    method protected void layoutChild(android.support.design.widget.CoordinatorLayout, android.view.View, int);
-    method public boolean onMeasureChild(android.support.design.widget.CoordinatorLayout, android.view.View, int, int, int, int);
-    method public final void setOverlayTop(int);
-  }
-
-  public class NavigationView extends android.widget.FrameLayout {
-    ctor public NavigationView(android.content.Context);
-    ctor public NavigationView(android.content.Context, android.util.AttributeSet);
-    ctor public NavigationView(android.content.Context, android.util.AttributeSet, int);
-    method public void addHeaderView(android.view.View);
-    method public int getHeaderCount();
-    method public android.view.View getHeaderView(int);
-    method public android.graphics.drawable.Drawable getItemBackground();
-    method public android.content.res.ColorStateList getItemIconTintList();
-    method public android.content.res.ColorStateList getItemTextColor();
-    method public android.view.Menu getMenu();
-    method public android.view.View inflateHeaderView(int);
-    method public void inflateMenu(int);
-    method public void removeHeaderView(android.view.View);
-    method public void setCheckedItem(int);
-    method public void setItemBackground(android.graphics.drawable.Drawable);
-    method public void setItemBackgroundResource(int);
-    method public void setItemIconTintList(android.content.res.ColorStateList);
-    method public void setItemTextAppearance(int);
-    method public void setItemTextColor(android.content.res.ColorStateList);
-    method public void setNavigationItemSelectedListener(android.support.design.widget.NavigationView.OnNavigationItemSelectedListener);
-  }
-
-  public static abstract interface NavigationView.OnNavigationItemSelectedListener {
-    method public abstract boolean onNavigationItemSelected(android.view.MenuItem);
-  }
-
-  public static class NavigationView.SavedState extends android.support.v4.view.AbsSavedState {
-    ctor public NavigationView.SavedState(android.os.Parcel, java.lang.ClassLoader);
-    ctor public NavigationView.SavedState(android.os.Parcelable);
-    field public static final android.os.Parcelable.Creator<android.support.design.widget.NavigationView.SavedState> CREATOR;
-    field public android.os.Bundle menuState;
-  }
-
-  public final class Snackbar extends android.support.design.widget.BaseTransientBottomBar {
-    method public static android.support.design.widget.Snackbar make(android.view.View, java.lang.CharSequence, int);
-    method public static android.support.design.widget.Snackbar make(android.view.View, int, int);
-    method public android.support.design.widget.Snackbar setAction(int, android.view.View.OnClickListener);
-    method public android.support.design.widget.Snackbar setAction(java.lang.CharSequence, android.view.View.OnClickListener);
-    method public android.support.design.widget.Snackbar setActionTextColor(android.content.res.ColorStateList);
-    method public android.support.design.widget.Snackbar setActionTextColor(int);
-    method public deprecated android.support.design.widget.Snackbar setCallback(android.support.design.widget.Snackbar.Callback);
-    method public android.support.design.widget.Snackbar setText(java.lang.CharSequence);
-    method public android.support.design.widget.Snackbar setText(int);
-    field public static final int LENGTH_INDEFINITE = -2; // 0xfffffffe
-    field public static final int LENGTH_LONG = 0; // 0x0
-    field public static final int LENGTH_SHORT = -1; // 0xffffffff
-  }
-
-  public static class Snackbar.Callback extends android.support.design.widget.BaseTransientBottomBar.BaseCallback {
-    ctor public Snackbar.Callback();
-    method public void onDismissed(android.support.design.widget.Snackbar, int);
-    method public void onShown(android.support.design.widget.Snackbar);
-    field public static final int DISMISS_EVENT_ACTION = 1; // 0x1
-    field public static final int DISMISS_EVENT_CONSECUTIVE = 4; // 0x4
-    field public static final int DISMISS_EVENT_MANUAL = 3; // 0x3
-    field public static final int DISMISS_EVENT_SWIPE = 0; // 0x0
-    field public static final int DISMISS_EVENT_TIMEOUT = 2; // 0x2
-  }
-
-  public class SwipeDismissBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public SwipeDismissBehavior();
-    method public boolean canSwipeDismissView(android.view.View);
-    method public int getDragState();
-    method public void setDragDismissDistance(float);
-    method public void setEndAlphaSwipeDistance(float);
-    method public void setListener(android.support.design.widget.SwipeDismissBehavior.OnDismissListener);
-    method public void setSensitivity(float);
-    method public void setStartAlphaSwipeDistance(float);
-    method public void setSwipeDirection(int);
-    field public static final int STATE_DRAGGING = 1; // 0x1
-    field public static final int STATE_IDLE = 0; // 0x0
-    field public static final int STATE_SETTLING = 2; // 0x2
-    field public static final int SWIPE_DIRECTION_ANY = 2; // 0x2
-    field public static final int SWIPE_DIRECTION_END_TO_START = 1; // 0x1
-    field public static final int SWIPE_DIRECTION_START_TO_END = 0; // 0x0
-  }
-
-  public static abstract interface SwipeDismissBehavior.OnDismissListener {
-    method public abstract void onDismiss(android.view.View);
-    method public abstract void onDragStateChanged(int);
-  }
-
-  public final class TabItem extends android.view.View {
-    ctor public TabItem(android.content.Context);
-    ctor public TabItem(android.content.Context, android.util.AttributeSet);
-  }
-
-  public class TabLayout extends android.widget.HorizontalScrollView {
-    ctor public TabLayout(android.content.Context);
-    ctor public TabLayout(android.content.Context, android.util.AttributeSet);
-    ctor public TabLayout(android.content.Context, android.util.AttributeSet, int);
-    method public void addOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void addTab(android.support.design.widget.TabLayout.Tab);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, int);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, boolean);
-    method public void addTab(android.support.design.widget.TabLayout.Tab, int, boolean);
-    method public void clearOnTabSelectedListeners();
-    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
-    method public int getSelectedTabPosition();
-    method public android.support.design.widget.TabLayout.Tab getTabAt(int);
-    method public int getTabCount();
-    method public int getTabGravity();
-    method public int getTabMode();
-    method public android.content.res.ColorStateList getTabTextColors();
-    method public android.support.design.widget.TabLayout.Tab newTab();
-    method public void removeAllTabs();
-    method public void removeOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void removeTab(android.support.design.widget.TabLayout.Tab);
-    method public void removeTabAt(int);
-    method public deprecated void setOnTabSelectedListener(android.support.design.widget.TabLayout.OnTabSelectedListener);
-    method public void setScrollPosition(int, float, boolean);
-    method public void setSelectedTabIndicatorColor(int);
-    method public void setSelectedTabIndicatorHeight(int);
-    method public void setTabGravity(int);
-    method public void setTabMode(int);
-    method public void setTabTextColors(android.content.res.ColorStateList);
-    method public void setTabTextColors(int, int);
-    method public deprecated void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter);
-    method public void setupWithViewPager(android.support.v4.view.ViewPager);
-    method public void setupWithViewPager(android.support.v4.view.ViewPager, boolean);
-    field public static final int GRAVITY_CENTER = 1; // 0x1
-    field public static final int GRAVITY_FILL = 0; // 0x0
-    field public static final int MODE_FIXED = 1; // 0x1
-    field public static final int MODE_SCROLLABLE = 0; // 0x0
-  }
-
-  public static abstract interface TabLayout.OnTabSelectedListener {
-    method public abstract void onTabReselected(android.support.design.widget.TabLayout.Tab);
-    method public abstract void onTabSelected(android.support.design.widget.TabLayout.Tab);
-    method public abstract void onTabUnselected(android.support.design.widget.TabLayout.Tab);
-  }
-
-  public static final class TabLayout.Tab {
-    method public java.lang.CharSequence getContentDescription();
-    method public android.view.View getCustomView();
-    method public android.graphics.drawable.Drawable getIcon();
-    method public int getPosition();
-    method public java.lang.Object getTag();
-    method public java.lang.CharSequence getText();
-    method public boolean isSelected();
-    method public void select();
-    method public android.support.design.widget.TabLayout.Tab setContentDescription(int);
-    method public android.support.design.widget.TabLayout.Tab setContentDescription(java.lang.CharSequence);
-    method public android.support.design.widget.TabLayout.Tab setCustomView(android.view.View);
-    method public android.support.design.widget.TabLayout.Tab setCustomView(int);
-    method public android.support.design.widget.TabLayout.Tab setIcon(android.graphics.drawable.Drawable);
-    method public android.support.design.widget.TabLayout.Tab setIcon(int);
-    method public android.support.design.widget.TabLayout.Tab setTag(java.lang.Object);
-    method public android.support.design.widget.TabLayout.Tab setText(java.lang.CharSequence);
-    method public android.support.design.widget.TabLayout.Tab setText(int);
-    field public static final int INVALID_POSITION = -1; // 0xffffffff
-  }
-
-  public static class TabLayout.TabLayoutOnPageChangeListener implements android.support.v4.view.ViewPager.OnPageChangeListener {
-    ctor public TabLayout.TabLayoutOnPageChangeListener(android.support.design.widget.TabLayout);
-    method public void onPageScrollStateChanged(int);
-    method public void onPageScrolled(int, float, int);
-    method public void onPageSelected(int);
-  }
-
-  public static class TabLayout.ViewPagerOnTabSelectedListener implements android.support.design.widget.TabLayout.OnTabSelectedListener {
-    ctor public TabLayout.ViewPagerOnTabSelectedListener(android.support.v4.view.ViewPager);
-    method public void onTabReselected(android.support.design.widget.TabLayout.Tab);
-    method public void onTabSelected(android.support.design.widget.TabLayout.Tab);
-    method public void onTabUnselected(android.support.design.widget.TabLayout.Tab);
-  }
-
-  public class TextInputEditText extends android.support.v7.widget.AppCompatEditText {
-    ctor public TextInputEditText(android.content.Context);
-    ctor public TextInputEditText(android.content.Context, android.util.AttributeSet);
-    ctor public TextInputEditText(android.content.Context, android.util.AttributeSet, int);
-  }
-
-  public class TextInputLayout extends android.widget.LinearLayout {
-    ctor public TextInputLayout(android.content.Context);
-    ctor public TextInputLayout(android.content.Context, android.util.AttributeSet);
-    ctor public TextInputLayout(android.content.Context, android.util.AttributeSet, int);
-    method public int getCounterMaxLength();
-    method public android.widget.EditText getEditText();
-    method public java.lang.CharSequence getError();
-    method public java.lang.CharSequence getHint();
-    method public java.lang.CharSequence getPasswordVisibilityToggleContentDescription();
-    method public android.graphics.drawable.Drawable getPasswordVisibilityToggleDrawable();
-    method public android.graphics.Typeface getTypeface();
-    method public boolean isCounterEnabled();
-    method public boolean isErrorEnabled();
-    method public boolean isHintAnimationEnabled();
-    method public boolean isHintEnabled();
-    method public boolean isPasswordVisibilityToggleEnabled();
-    method public android.os.Parcelable onSaveInstanceState();
-    method public void setCounterEnabled(boolean);
-    method public void setCounterMaxLength(int);
-    method public void setError(java.lang.CharSequence);
-    method public void setErrorEnabled(boolean);
-    method public void setErrorTextAppearance(int);
-    method public void setHint(java.lang.CharSequence);
-    method public void setHintAnimationEnabled(boolean);
-    method public void setHintEnabled(boolean);
-    method public void setHintTextAppearance(int);
-    method public void setPasswordVisibilityToggleContentDescription(int);
-    method public void setPasswordVisibilityToggleContentDescription(java.lang.CharSequence);
-    method public void setPasswordVisibilityToggleDrawable(int);
-    method public void setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable);
-    method public void setPasswordVisibilityToggleEnabled(boolean);
-    method public void setPasswordVisibilityToggleTintList(android.content.res.ColorStateList);
-    method public void setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode);
-    method public void setTypeface(android.graphics.Typeface);
-  }
-
-   class ViewOffsetBehavior<V extends android.view.View> extends android.support.design.widget.CoordinatorLayout.Behavior {
-    ctor public ViewOffsetBehavior();
-    ctor public ViewOffsetBehavior(android.content.Context, android.util.AttributeSet);
-    method public int getLeftAndRightOffset();
-    method public int getTopAndBottomOffset();
-    method protected void layoutChild(android.support.design.widget.CoordinatorLayout, V, int);
-    method public boolean setLeftAndRightOffset(int);
-    method public boolean setTopAndBottomOffset(int);
-  }
-
-   class VisibilityAwareImageButton extends android.widget.ImageButton {
-    ctor public VisibilityAwareImageButton(android.content.Context);
-    ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet);
-    ctor public VisibilityAwareImageButton(android.content.Context, android.util.AttributeSet, int);
-  }
-
-}
-
diff --git a/design/api/current.txt b/design/api/27.1.0.txt
similarity index 100%
rename from design/api/current.txt
rename to design/api/27.1.0.txt
diff --git a/design/base/android/support/design/widget/AnimationUtils.java b/design/base/android/support/design/widget/AnimationUtils.java
deleted file mode 100644
index 3613afd..0000000
--- a/design/base/android/support/design/widget/AnimationUtils.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.v4.view.animation.FastOutLinearInInterpolator;
-import android.support.v4.view.animation.FastOutSlowInInterpolator;
-import android.support.v4.view.animation.LinearOutSlowInInterpolator;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-import android.view.animation.LinearInterpolator;
-
-class AnimationUtils {
-
-    static final Interpolator LINEAR_INTERPOLATOR = new LinearInterpolator();
-    static final Interpolator FAST_OUT_SLOW_IN_INTERPOLATOR = new FastOutSlowInInterpolator();
-    static final Interpolator FAST_OUT_LINEAR_IN_INTERPOLATOR = new FastOutLinearInInterpolator();
-    static final Interpolator LINEAR_OUT_SLOW_IN_INTERPOLATOR = new LinearOutSlowInInterpolator();
-    static final Interpolator DECELERATE_INTERPOLATOR = new DecelerateInterpolator();
-
-    /**
-     * Linear interpolation between {@code startValue} and {@code endValue} by {@code fraction}.
-     */
-    static float lerp(float startValue, float endValue, float fraction) {
-        return startValue + (fraction * (endValue - startValue));
-    }
-
-    static int lerp(int startValue, int endValue, float fraction) {
-        return startValue + Math.round(fraction * (endValue - startValue));
-    }
-
-}
diff --git a/design/base/android/support/design/widget/CircularBorderDrawable.java b/design/base/android/support/design/widget/CircularBorderDrawable.java
deleted file mode 100644
index 617a501..0000000
--- a/design/base/android/support/design/widget/CircularBorderDrawable.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.res.ColorStateList;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.LinearGradient;
-import android.graphics.Paint;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Shader;
-import android.graphics.drawable.Drawable;
-import android.support.v4.graphics.ColorUtils;
-
-/**
- * A drawable which draws an oval 'border'.
- */
-class CircularBorderDrawable extends Drawable {
-
-    /**
-     * We actually draw the stroke wider than the border size given. This is to reduce any
-     * potential transparent space caused by anti-aliasing and padding rounding.
-     * This value defines the multiplier used to determine to draw stroke width.
-     */
-    private static final float DRAW_STROKE_WIDTH_MULTIPLE = 1.3333f;
-
-    final Paint mPaint;
-    final Rect mRect = new Rect();
-    final RectF mRectF = new RectF();
-
-    float mBorderWidth;
-
-    private int mTopOuterStrokeColor;
-    private int mTopInnerStrokeColor;
-    private int mBottomOuterStrokeColor;
-    private int mBottomInnerStrokeColor;
-
-    private ColorStateList mBorderTint;
-    private int mCurrentBorderTintColor;
-
-    private boolean mInvalidateShader = true;
-
-    private float mRotation;
-
-    public CircularBorderDrawable() {
-        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        mPaint.setStyle(Paint.Style.STROKE);
-    }
-
-    void setGradientColors(int topOuterStrokeColor, int topInnerStrokeColor,
-            int bottomOuterStrokeColor, int bottomInnerStrokeColor) {
-        mTopOuterStrokeColor = topOuterStrokeColor;
-        mTopInnerStrokeColor = topInnerStrokeColor;
-        mBottomOuterStrokeColor = bottomOuterStrokeColor;
-        mBottomInnerStrokeColor = bottomInnerStrokeColor;
-    }
-
-    /**
-     * Set the border width
-     */
-    void setBorderWidth(float width) {
-        if (mBorderWidth != width) {
-            mBorderWidth = width;
-            mPaint.setStrokeWidth(width * DRAW_STROKE_WIDTH_MULTIPLE);
-            mInvalidateShader = true;
-            invalidateSelf();
-        }
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        if (mInvalidateShader) {
-            mPaint.setShader(createGradientShader());
-            mInvalidateShader = false;
-        }
-
-        final float halfBorderWidth = mPaint.getStrokeWidth() / 2f;
-        final RectF rectF = mRectF;
-
-        // We need to inset the oval bounds by half the border width. This is because stroke draws
-        // the center of the border on the dimension. Whereas we want the stroke on the inside.
-        copyBounds(mRect);
-        rectF.set(mRect);
-        rectF.left += halfBorderWidth;
-        rectF.top += halfBorderWidth;
-        rectF.right -= halfBorderWidth;
-        rectF.bottom -= halfBorderWidth;
-
-        canvas.save();
-        canvas.rotate(mRotation, rectF.centerX(), rectF.centerY());
-        // Draw the oval
-        canvas.drawOval(rectF, mPaint);
-        canvas.restore();
-    }
-
-    @Override
-    public boolean getPadding(Rect padding) {
-        final int borderWidth = Math.round(mBorderWidth);
-        padding.set(borderWidth, borderWidth, borderWidth, borderWidth);
-        return true;
-    }
-
-    @Override
-    public void setAlpha(int alpha) {
-        mPaint.setAlpha(alpha);
-        invalidateSelf();
-    }
-
-    void setBorderTint(ColorStateList tint) {
-        if (tint != null) {
-            mCurrentBorderTintColor = tint.getColorForState(getState(), mCurrentBorderTintColor);
-        }
-        mBorderTint = tint;
-        mInvalidateShader = true;
-        invalidateSelf();
-    }
-
-    @Override
-    public void setColorFilter(ColorFilter colorFilter) {
-        mPaint.setColorFilter(colorFilter);
-        invalidateSelf();
-    }
-
-    @Override
-    public int getOpacity() {
-        return mBorderWidth > 0 ? PixelFormat.TRANSLUCENT : PixelFormat.TRANSPARENT;
-    }
-
-    final void setRotation(float rotation) {
-        if (rotation != mRotation) {
-            mRotation = rotation;
-            invalidateSelf();
-        }
-    }
-
-    @Override
-    protected void onBoundsChange(Rect bounds) {
-        mInvalidateShader = true;
-    }
-
-    @Override
-    public boolean isStateful() {
-        return (mBorderTint != null && mBorderTint.isStateful()) || super.isStateful();
-    }
-
-    @Override
-    protected boolean onStateChange(int[] state) {
-        if (mBorderTint != null) {
-            final int newColor = mBorderTint.getColorForState(state, mCurrentBorderTintColor);
-            if (newColor != mCurrentBorderTintColor) {
-                mInvalidateShader = true;
-                mCurrentBorderTintColor = newColor;
-            }
-        }
-        if (mInvalidateShader) {
-            invalidateSelf();
-        }
-        return mInvalidateShader;
-    }
-
-    /**
-     * Creates a vertical {@link LinearGradient}
-     * @return
-     */
-    private Shader createGradientShader() {
-        final Rect rect = mRect;
-        copyBounds(rect);
-
-        final float borderRatio = mBorderWidth / rect.height();
-
-        final int[] colors = new int[6];
-        colors[0] = ColorUtils.compositeColors(mTopOuterStrokeColor, mCurrentBorderTintColor);
-        colors[1] = ColorUtils.compositeColors(mTopInnerStrokeColor, mCurrentBorderTintColor);
-        colors[2] = ColorUtils.compositeColors(
-                ColorUtils.setAlphaComponent(mTopInnerStrokeColor, 0), mCurrentBorderTintColor);
-        colors[3] = ColorUtils.compositeColors(
-                ColorUtils.setAlphaComponent(mBottomInnerStrokeColor, 0), mCurrentBorderTintColor);
-        colors[4] = ColorUtils.compositeColors(mBottomInnerStrokeColor, mCurrentBorderTintColor);
-        colors[5] = ColorUtils.compositeColors(mBottomOuterStrokeColor, mCurrentBorderTintColor);
-
-        final float[] positions = new float[6];
-        positions[0] = 0f;
-        positions[1] = borderRatio;
-        positions[2] = 0.5f;
-        positions[3] = 0.5f;
-        positions[4] = 1f - borderRatio;
-        positions[5] = 1f;
-
-        return new LinearGradient(
-                0, rect.top,
-                0, rect.bottom,
-                colors, positions,
-                Shader.TileMode.CLAMP);
-    }
-}
diff --git a/design/base/android/support/design/widget/FloatingActionButtonImpl.java b/design/base/android/support/design/widget/FloatingActionButtonImpl.java
deleted file mode 100644
index 132cd81..0000000
--- a/design/base/android/support/design/widget/FloatingActionButtonImpl.java
+++ /dev/null
@@ -1,531 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.GradientDrawable;
-import android.graphics.drawable.LayerDrawable;
-import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.design.R;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v4.view.ViewCompat;
-import android.view.View;
-import android.view.ViewTreeObserver;
-import android.view.animation.Interpolator;
-
-@RequiresApi(14)
-class FloatingActionButtonImpl {
-    static final Interpolator ANIM_INTERPOLATOR = AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR;
-    static final long PRESSED_ANIM_DURATION = 100;
-    static final long PRESSED_ANIM_DELAY = 100;
-
-    static final int ANIM_STATE_NONE = 0;
-    static final int ANIM_STATE_HIDING = 1;
-    static final int ANIM_STATE_SHOWING = 2;
-
-    int mAnimState = ANIM_STATE_NONE;
-
-    private final StateListAnimator mStateListAnimator;
-
-    ShadowDrawableWrapper mShadowDrawable;
-
-    private float mRotation;
-
-    Drawable mShapeDrawable;
-    Drawable mRippleDrawable;
-    CircularBorderDrawable mBorderDrawable;
-    Drawable mContentBackground;
-
-    float mElevation;
-    float mPressedTranslationZ;
-
-    interface InternalVisibilityChangedListener {
-        void onShown();
-        void onHidden();
-    }
-
-    static final int SHOW_HIDE_ANIM_DURATION = 200;
-
-    static final int[] PRESSED_ENABLED_STATE_SET = {android.R.attr.state_pressed,
-            android.R.attr.state_enabled};
-    static final int[] FOCUSED_ENABLED_STATE_SET = {android.R.attr.state_focused,
-            android.R.attr.state_enabled};
-    static final int[] ENABLED_STATE_SET = {android.R.attr.state_enabled};
-    static final int[] EMPTY_STATE_SET = new int[0];
-
-    final VisibilityAwareImageButton mView;
-    final ShadowViewDelegate mShadowViewDelegate;
-
-    private final Rect mTmpRect = new Rect();
-    private ViewTreeObserver.OnPreDrawListener mPreDrawListener;
-
-    FloatingActionButtonImpl(VisibilityAwareImageButton view,
-            ShadowViewDelegate shadowViewDelegate) {
-        mView = view;
-        mShadowViewDelegate = shadowViewDelegate;
-
-        mStateListAnimator = new StateListAnimator();
-
-        // Elevate with translationZ when pressed or focused
-        mStateListAnimator.addState(PRESSED_ENABLED_STATE_SET,
-                createAnimator(new ElevateToTranslationZAnimation()));
-        mStateListAnimator.addState(FOCUSED_ENABLED_STATE_SET,
-                createAnimator(new ElevateToTranslationZAnimation()));
-        // Reset back to elevation by default
-        mStateListAnimator.addState(ENABLED_STATE_SET,
-                createAnimator(new ResetElevationAnimation()));
-        // Set to 0 when disabled
-        mStateListAnimator.addState(EMPTY_STATE_SET,
-                createAnimator(new DisabledElevationAnimation()));
-
-        mRotation = mView.getRotation();
-    }
-
-    void setBackgroundDrawable(ColorStateList backgroundTint,
-            PorterDuff.Mode backgroundTintMode, int rippleColor, int borderWidth) {
-        // Now we need to tint the original background with the tint, using
-        // an InsetDrawable if we have a border width
-        mShapeDrawable = DrawableCompat.wrap(createShapeDrawable());
-        DrawableCompat.setTintList(mShapeDrawable, backgroundTint);
-        if (backgroundTintMode != null) {
-            DrawableCompat.setTintMode(mShapeDrawable, backgroundTintMode);
-        }
-
-        // Now we created a mask Drawable which will be used for touch feedback.
-        GradientDrawable touchFeedbackShape = createShapeDrawable();
-
-        // We'll now wrap that touch feedback mask drawable with a ColorStateList. We do not need
-        // to inset for any border here as LayerDrawable will nest the padding for us
-        mRippleDrawable = DrawableCompat.wrap(touchFeedbackShape);
-        DrawableCompat.setTintList(mRippleDrawable, createColorStateList(rippleColor));
-
-        final Drawable[] layers;
-        if (borderWidth > 0) {
-            mBorderDrawable = createBorderDrawable(borderWidth, backgroundTint);
-            layers = new Drawable[] {mBorderDrawable, mShapeDrawable, mRippleDrawable};
-        } else {
-            mBorderDrawable = null;
-            layers = new Drawable[] {mShapeDrawable, mRippleDrawable};
-        }
-
-        mContentBackground = new LayerDrawable(layers);
-
-        mShadowDrawable = new ShadowDrawableWrapper(
-                mView.getContext(),
-                mContentBackground,
-                mShadowViewDelegate.getRadius(),
-                mElevation,
-                mElevation + mPressedTranslationZ);
-        mShadowDrawable.setAddPaddingForCorners(false);
-        mShadowViewDelegate.setBackgroundDrawable(mShadowDrawable);
-    }
-
-    void setBackgroundTintList(ColorStateList tint) {
-        if (mShapeDrawable != null) {
-            DrawableCompat.setTintList(mShapeDrawable, tint);
-        }
-        if (mBorderDrawable != null) {
-            mBorderDrawable.setBorderTint(tint);
-        }
-    }
-
-    void setBackgroundTintMode(PorterDuff.Mode tintMode) {
-        if (mShapeDrawable != null) {
-            DrawableCompat.setTintMode(mShapeDrawable, tintMode);
-        }
-    }
-
-
-    void setRippleColor(int rippleColor) {
-        if (mRippleDrawable != null) {
-            DrawableCompat.setTintList(mRippleDrawable, createColorStateList(rippleColor));
-        }
-    }
-
-    final void setElevation(float elevation) {
-        if (mElevation != elevation) {
-            mElevation = elevation;
-            onElevationsChanged(elevation, mPressedTranslationZ);
-        }
-    }
-
-    float getElevation() {
-        return mElevation;
-    }
-
-    final void setPressedTranslationZ(float translationZ) {
-        if (mPressedTranslationZ != translationZ) {
-            mPressedTranslationZ = translationZ;
-            onElevationsChanged(mElevation, translationZ);
-        }
-    }
-
-    void onElevationsChanged(float elevation, float pressedTranslationZ) {
-        if (mShadowDrawable != null) {
-            mShadowDrawable.setShadowSize(elevation, elevation + mPressedTranslationZ);
-            updatePadding();
-        }
-    }
-
-    void onDrawableStateChanged(int[] state) {
-        mStateListAnimator.setState(state);
-    }
-
-    void jumpDrawableToCurrentState() {
-        mStateListAnimator.jumpToCurrentState();
-    }
-
-    void hide(@Nullable final InternalVisibilityChangedListener listener, final boolean fromUser) {
-        if (isOrWillBeHidden()) {
-            // We either are or will soon be hidden, skip the call
-            return;
-        }
-
-        mView.animate().cancel();
-
-        if (shouldAnimateVisibilityChange()) {
-            mAnimState = ANIM_STATE_HIDING;
-
-            mView.animate()
-                    .scaleX(0f)
-                    .scaleY(0f)
-                    .alpha(0f)
-                    .setDuration(SHOW_HIDE_ANIM_DURATION)
-                    .setInterpolator(AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR)
-                    .setListener(new AnimatorListenerAdapter() {
-                        private boolean mCancelled;
-
-                        @Override
-                        public void onAnimationStart(Animator animation) {
-                            mView.internalSetVisibility(View.VISIBLE, fromUser);
-                            mCancelled = false;
-                        }
-
-                        @Override
-                        public void onAnimationCancel(Animator animation) {
-                            mCancelled = true;
-                        }
-
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            mAnimState = ANIM_STATE_NONE;
-
-                            if (!mCancelled) {
-                                mView.internalSetVisibility(fromUser ? View.GONE : View.INVISIBLE,
-                                        fromUser);
-                                if (listener != null) {
-                                    listener.onHidden();
-                                }
-                            }
-                        }
-                    });
-        } else {
-            // If the view isn't laid out, or we're in the editor, don't run the animation
-            mView.internalSetVisibility(fromUser ? View.GONE : View.INVISIBLE, fromUser);
-            if (listener != null) {
-                listener.onHidden();
-            }
-        }
-    }
-
-    void show(@Nullable final InternalVisibilityChangedListener listener, final boolean fromUser) {
-        if (isOrWillBeShown()) {
-            // We either are or will soon be visible, skip the call
-            return;
-        }
-
-        mView.animate().cancel();
-
-        if (shouldAnimateVisibilityChange()) {
-            mAnimState = ANIM_STATE_SHOWING;
-
-            if (mView.getVisibility() != View.VISIBLE) {
-                // If the view isn't visible currently, we'll animate it from a single pixel
-                mView.setAlpha(0f);
-                mView.setScaleY(0f);
-                mView.setScaleX(0f);
-            }
-
-            mView.animate()
-                    .scaleX(1f)
-                    .scaleY(1f)
-                    .alpha(1f)
-                    .setDuration(SHOW_HIDE_ANIM_DURATION)
-                    .setInterpolator(AnimationUtils.LINEAR_OUT_SLOW_IN_INTERPOLATOR)
-                    .setListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationStart(Animator animation) {
-                            mView.internalSetVisibility(View.VISIBLE, fromUser);
-                        }
-
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            mAnimState = ANIM_STATE_NONE;
-                            if (listener != null) {
-                                listener.onShown();
-                            }
-                        }
-                    });
-        } else {
-            mView.internalSetVisibility(View.VISIBLE, fromUser);
-            mView.setAlpha(1f);
-            mView.setScaleY(1f);
-            mView.setScaleX(1f);
-            if (listener != null) {
-                listener.onShown();
-            }
-        }
-    }
-
-    final Drawable getContentBackground() {
-        return mContentBackground;
-    }
-
-    void onCompatShadowChanged() {
-        // Ignore pre-v21
-    }
-
-    final void updatePadding() {
-        Rect rect = mTmpRect;
-        getPadding(rect);
-        onPaddingUpdated(rect);
-        mShadowViewDelegate.setShadowPadding(rect.left, rect.top, rect.right, rect.bottom);
-    }
-
-    void getPadding(Rect rect) {
-        mShadowDrawable.getPadding(rect);
-    }
-
-    void onPaddingUpdated(Rect padding) {}
-
-    void onAttachedToWindow() {
-        if (requirePreDrawListener()) {
-            ensurePreDrawListener();
-            mView.getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
-        }
-    }
-
-    void onDetachedFromWindow() {
-        if (mPreDrawListener != null) {
-            mView.getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
-            mPreDrawListener = null;
-        }
-    }
-
-    boolean requirePreDrawListener() {
-        return true;
-    }
-
-    CircularBorderDrawable createBorderDrawable(int borderWidth, ColorStateList backgroundTint) {
-        final Context context = mView.getContext();
-        CircularBorderDrawable borderDrawable = newCircularDrawable();
-        borderDrawable.setGradientColors(
-                ContextCompat.getColor(context, R.color.design_fab_stroke_top_outer_color),
-                ContextCompat.getColor(context, R.color.design_fab_stroke_top_inner_color),
-                ContextCompat.getColor(context, R.color.design_fab_stroke_end_inner_color),
-                ContextCompat.getColor(context, R.color.design_fab_stroke_end_outer_color));
-        borderDrawable.setBorderWidth(borderWidth);
-        borderDrawable.setBorderTint(backgroundTint);
-        return borderDrawable;
-    }
-
-    CircularBorderDrawable newCircularDrawable() {
-        return new CircularBorderDrawable();
-    }
-
-    void onPreDraw() {
-        final float rotation = mView.getRotation();
-        if (mRotation != rotation) {
-            mRotation = rotation;
-            updateFromViewRotation();
-        }
-    }
-
-    private void ensurePreDrawListener() {
-        if (mPreDrawListener == null) {
-            mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
-                @Override
-                public boolean onPreDraw() {
-                    FloatingActionButtonImpl.this.onPreDraw();
-                    return true;
-                }
-            };
-        }
-    }
-
-    GradientDrawable createShapeDrawable() {
-        GradientDrawable d = newGradientDrawableForShape();
-        d.setShape(GradientDrawable.OVAL);
-        d.setColor(Color.WHITE);
-        return d;
-    }
-
-    GradientDrawable newGradientDrawableForShape() {
-        return new GradientDrawable();
-    }
-
-    boolean isOrWillBeShown() {
-        if (mView.getVisibility() != View.VISIBLE) {
-            // If we not currently visible, return true if we're animating to be shown
-            return mAnimState == ANIM_STATE_SHOWING;
-        } else {
-            // Otherwise if we're visible, return true if we're not animating to be hidden
-            return mAnimState != ANIM_STATE_HIDING;
-        }
-    }
-
-    boolean isOrWillBeHidden() {
-        if (mView.getVisibility() == View.VISIBLE) {
-            // If we currently visible, return true if we're animating to be hidden
-            return mAnimState == ANIM_STATE_HIDING;
-        } else {
-            // Otherwise if we're not visible, return true if we're not animating to be shown
-            return mAnimState != ANIM_STATE_SHOWING;
-        }
-    }
-
-    private ValueAnimator createAnimator(@NonNull ShadowAnimatorImpl impl) {
-        final ValueAnimator animator = new ValueAnimator();
-        animator.setInterpolator(ANIM_INTERPOLATOR);
-        animator.setDuration(PRESSED_ANIM_DURATION);
-        animator.addListener(impl);
-        animator.addUpdateListener(impl);
-        animator.setFloatValues(0, 1);
-        return animator;
-    }
-
-    private abstract class ShadowAnimatorImpl extends AnimatorListenerAdapter
-            implements ValueAnimator.AnimatorUpdateListener {
-        private boolean mValidValues;
-        private float mShadowSizeStart;
-        private float mShadowSizeEnd;
-
-        @Override
-        public void onAnimationUpdate(ValueAnimator animator) {
-            if (!mValidValues) {
-                mShadowSizeStart = mShadowDrawable.getShadowSize();
-                mShadowSizeEnd = getTargetShadowSize();
-                mValidValues = true;
-            }
-
-            mShadowDrawable.setShadowSize(mShadowSizeStart
-                    + ((mShadowSizeEnd - mShadowSizeStart) * animator.getAnimatedFraction()));
-        }
-
-        @Override
-        public void onAnimationEnd(Animator animator) {
-            mShadowDrawable.setShadowSize(mShadowSizeEnd);
-            mValidValues = false;
-        }
-
-        /**
-         * @return the shadow size we want to animate to.
-         */
-        protected abstract float getTargetShadowSize();
-    }
-
-    private class ResetElevationAnimation extends ShadowAnimatorImpl {
-        ResetElevationAnimation() {
-        }
-
-        @Override
-        protected float getTargetShadowSize() {
-            return mElevation;
-        }
-    }
-
-    private class ElevateToTranslationZAnimation extends ShadowAnimatorImpl {
-        ElevateToTranslationZAnimation() {
-        }
-
-        @Override
-        protected float getTargetShadowSize() {
-            return mElevation + mPressedTranslationZ;
-        }
-    }
-
-    private class DisabledElevationAnimation extends ShadowAnimatorImpl {
-        DisabledElevationAnimation() {
-        }
-
-        @Override
-        protected float getTargetShadowSize() {
-            return 0f;
-        }
-    }
-
-    private static ColorStateList createColorStateList(int selectedColor) {
-        final int[][] states = new int[3][];
-        final int[] colors = new int[3];
-        int i = 0;
-
-        states[i] = FOCUSED_ENABLED_STATE_SET;
-        colors[i] = selectedColor;
-        i++;
-
-        states[i] = PRESSED_ENABLED_STATE_SET;
-        colors[i] = selectedColor;
-        i++;
-
-        // Default enabled state
-        states[i] = new int[0];
-        colors[i] = Color.TRANSPARENT;
-        i++;
-
-        return new ColorStateList(states, colors);
-    }
-
-    private boolean shouldAnimateVisibilityChange() {
-        return ViewCompat.isLaidOut(mView) && !mView.isInEditMode();
-    }
-
-    private void updateFromViewRotation() {
-        if (Build.VERSION.SDK_INT == 19) {
-            // KitKat seems to have an issue with views which are rotated with angles which are
-            // not divisible by 90. Worked around by moving to software rendering in these cases.
-            if ((mRotation % 90) != 0) {
-                if (mView.getLayerType() != View.LAYER_TYPE_SOFTWARE) {
-                    mView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
-                }
-            } else {
-                if (mView.getLayerType() != View.LAYER_TYPE_NONE) {
-                    mView.setLayerType(View.LAYER_TYPE_NONE, null);
-                }
-            }
-        }
-
-        // Offset any View rotation
-        if (mShadowDrawable != null) {
-            mShadowDrawable.setRotation(-mRotation);
-        }
-        if (mBorderDrawable != null) {
-            mBorderDrawable.setRotation(-mRotation);
-        }
-    }
-}
diff --git a/design/base/android/support/design/widget/ShadowDrawableWrapper.java b/design/base/android/support/design/widget/ShadowDrawableWrapper.java
deleted file mode 100644
index dfb8e1d..0000000
--- a/design/base/android/support/design/widget/ShadowDrawableWrapper.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * 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.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.LinearGradient;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.PixelFormat;
-import android.graphics.RadialGradient;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Shader;
-import android.graphics.drawable.Drawable;
-import android.support.design.R;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.graphics.drawable.DrawableWrapper;
-
-/**
- * A {@link android.graphics.drawable.Drawable} which wraps another drawable and
- * draws a shadow around it.
- */
-class ShadowDrawableWrapper extends DrawableWrapper {
-    // used to calculate content padding
-    static final double COS_45 = Math.cos(Math.toRadians(45));
-
-    static final float SHADOW_MULTIPLIER = 1.5f;
-
-    static final float SHADOW_TOP_SCALE = 0.25f;
-    static final float SHADOW_HORIZ_SCALE = 0.5f;
-    static final float SHADOW_BOTTOM_SCALE = 1f;
-
-    final Paint mCornerShadowPaint;
-    final Paint mEdgeShadowPaint;
-
-    final RectF mContentBounds;
-
-    float mCornerRadius;
-
-    Path mCornerShadowPath;
-
-    // updated value with inset
-    float mMaxShadowSize;
-    // actual value set by developer
-    float mRawMaxShadowSize;
-
-    // multiplied value to account for shadow offset
-    float mShadowSize;
-    // actual value set by developer
-    float mRawShadowSize;
-
-    private boolean mDirty = true;
-
-    private final int mShadowStartColor;
-    private final int mShadowMiddleColor;
-    private final int mShadowEndColor;
-
-    private boolean mAddPaddingForCorners = true;
-
-    private float mRotation;
-
-    /**
-     * If shadow size is set to a value above max shadow, we print a warning
-     */
-    private boolean mPrintedShadowClipWarning = false;
-
-    public ShadowDrawableWrapper(Context context, Drawable content, float radius,
-            float shadowSize, float maxShadowSize) {
-        super(content);
-
-        mShadowStartColor = ContextCompat.getColor(context, R.color.design_fab_shadow_start_color);
-        mShadowMiddleColor = ContextCompat.getColor(context, R.color.design_fab_shadow_mid_color);
-        mShadowEndColor = ContextCompat.getColor(context, R.color.design_fab_shadow_end_color);
-
-        mCornerShadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
-        mCornerShadowPaint.setStyle(Paint.Style.FILL);
-        mCornerRadius = Math.round(radius);
-        mContentBounds = new RectF();
-        mEdgeShadowPaint = new Paint(mCornerShadowPaint);
-        mEdgeShadowPaint.setAntiAlias(false);
-        setShadowSize(shadowSize, maxShadowSize);
-    }
-
-    /**
-     * Casts the value to an even integer.
-     */
-    private static int toEven(float value) {
-        int i = Math.round(value);
-        return (i % 2 == 1) ? i - 1 : i;
-    }
-
-    public void setAddPaddingForCorners(boolean addPaddingForCorners) {
-        mAddPaddingForCorners = addPaddingForCorners;
-        invalidateSelf();
-    }
-
-    @Override
-    public void setAlpha(int alpha) {
-        super.setAlpha(alpha);
-        mCornerShadowPaint.setAlpha(alpha);
-        mEdgeShadowPaint.setAlpha(alpha);
-    }
-
-    @Override
-    protected void onBoundsChange(Rect bounds) {
-        mDirty = true;
-    }
-
-    void setShadowSize(float shadowSize, float maxShadowSize) {
-        if (shadowSize < 0 || maxShadowSize < 0) {
-            throw new IllegalArgumentException("invalid shadow size");
-        }
-        shadowSize = toEven(shadowSize);
-        maxShadowSize = toEven(maxShadowSize);
-        if (shadowSize > maxShadowSize) {
-            shadowSize = maxShadowSize;
-            if (!mPrintedShadowClipWarning) {
-                mPrintedShadowClipWarning = true;
-            }
-        }
-        if (mRawShadowSize == shadowSize && mRawMaxShadowSize == maxShadowSize) {
-            return;
-        }
-        mRawShadowSize = shadowSize;
-        mRawMaxShadowSize = maxShadowSize;
-        mShadowSize = Math.round(shadowSize * SHADOW_MULTIPLIER);
-        mMaxShadowSize = maxShadowSize;
-        mDirty = true;
-        invalidateSelf();
-    }
-
-    @Override
-    public boolean getPadding(Rect padding) {
-        int vOffset = (int) Math.ceil(calculateVerticalPadding(mRawMaxShadowSize, mCornerRadius,
-                mAddPaddingForCorners));
-        int hOffset = (int) Math.ceil(calculateHorizontalPadding(mRawMaxShadowSize, mCornerRadius,
-                mAddPaddingForCorners));
-        padding.set(hOffset, vOffset, hOffset, vOffset);
-        return true;
-    }
-
-    public static float calculateVerticalPadding(float maxShadowSize, float cornerRadius,
-            boolean addPaddingForCorners) {
-        if (addPaddingForCorners) {
-            return (float) (maxShadowSize * SHADOW_MULTIPLIER + (1 - COS_45) * cornerRadius);
-        } else {
-            return maxShadowSize * SHADOW_MULTIPLIER;
-        }
-    }
-
-    public static float calculateHorizontalPadding(float maxShadowSize, float cornerRadius,
-            boolean addPaddingForCorners) {
-        if (addPaddingForCorners) {
-            return (float) (maxShadowSize + (1 - COS_45) * cornerRadius);
-        } else {
-            return maxShadowSize;
-        }
-    }
-
-    @Override
-    public int getOpacity() {
-        return PixelFormat.TRANSLUCENT;
-    }
-
-    public void setCornerRadius(float radius) {
-        radius = Math.round(radius);
-        if (mCornerRadius == radius) {
-            return;
-        }
-        mCornerRadius = radius;
-        mDirty = true;
-        invalidateSelf();
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        if (mDirty) {
-            buildComponents(getBounds());
-            mDirty = false;
-        }
-        drawShadow(canvas);
-
-        super.draw(canvas);
-    }
-
-    final void setRotation(float rotation) {
-        if (mRotation != rotation) {
-            mRotation = rotation;
-            invalidateSelf();
-        }
-    }
-
-    private void drawShadow(Canvas canvas) {
-        final int rotateSaved = canvas.save();
-        canvas.rotate(mRotation, mContentBounds.centerX(), mContentBounds.centerY());
-
-        final float edgeShadowTop = -mCornerRadius - mShadowSize;
-        final float shadowOffset = mCornerRadius;
-        final boolean drawHorizontalEdges = mContentBounds.width() - 2 * shadowOffset > 0;
-        final boolean drawVerticalEdges = mContentBounds.height() - 2 * shadowOffset > 0;
-
-        final float shadowOffsetTop = mRawShadowSize - (mRawShadowSize * SHADOW_TOP_SCALE);
-        final float shadowOffsetHorizontal = mRawShadowSize - (mRawShadowSize * SHADOW_HORIZ_SCALE);
-        final float shadowOffsetBottom = mRawShadowSize - (mRawShadowSize * SHADOW_BOTTOM_SCALE);
-
-        final float shadowScaleHorizontal = shadowOffset / (shadowOffset + shadowOffsetHorizontal);
-        final float shadowScaleTop = shadowOffset / (shadowOffset + shadowOffsetTop);
-        final float shadowScaleBottom = shadowOffset / (shadowOffset + shadowOffsetBottom);
-
-        // LT
-        int saved = canvas.save();
-        canvas.translate(mContentBounds.left + shadowOffset, mContentBounds.top + shadowOffset);
-        canvas.scale(shadowScaleHorizontal, shadowScaleTop);
-        canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
-        if (drawHorizontalEdges) {
-            // TE
-            canvas.scale(1f / shadowScaleHorizontal, 1f);
-            canvas.drawRect(0, edgeShadowTop,
-                    mContentBounds.width() - 2 * shadowOffset, -mCornerRadius,
-                    mEdgeShadowPaint);
-        }
-        canvas.restoreToCount(saved);
-        // RB
-        saved = canvas.save();
-        canvas.translate(mContentBounds.right - shadowOffset, mContentBounds.bottom - shadowOffset);
-        canvas.scale(shadowScaleHorizontal, shadowScaleBottom);
-        canvas.rotate(180f);
-        canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
-        if (drawHorizontalEdges) {
-            // BE
-            canvas.scale(1f / shadowScaleHorizontal, 1f);
-            canvas.drawRect(0, edgeShadowTop,
-                    mContentBounds.width() - 2 * shadowOffset, -mCornerRadius + mShadowSize,
-                    mEdgeShadowPaint);
-        }
-        canvas.restoreToCount(saved);
-        // LB
-        saved = canvas.save();
-        canvas.translate(mContentBounds.left + shadowOffset, mContentBounds.bottom - shadowOffset);
-        canvas.scale(shadowScaleHorizontal, shadowScaleBottom);
-        canvas.rotate(270f);
-        canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
-        if (drawVerticalEdges) {
-            // LE
-            canvas.scale(1f / shadowScaleBottom, 1f);
-            canvas.drawRect(0, edgeShadowTop,
-                    mContentBounds.height() - 2 * shadowOffset, -mCornerRadius, mEdgeShadowPaint);
-        }
-        canvas.restoreToCount(saved);
-        // RT
-        saved = canvas.save();
-        canvas.translate(mContentBounds.right - shadowOffset, mContentBounds.top + shadowOffset);
-        canvas.scale(shadowScaleHorizontal, shadowScaleTop);
-        canvas.rotate(90f);
-        canvas.drawPath(mCornerShadowPath, mCornerShadowPaint);
-        if (drawVerticalEdges) {
-            // RE
-            canvas.scale(1f / shadowScaleTop, 1f);
-            canvas.drawRect(0, edgeShadowTop,
-                    mContentBounds.height() - 2 * shadowOffset, -mCornerRadius, mEdgeShadowPaint);
-        }
-        canvas.restoreToCount(saved);
-
-        canvas.restoreToCount(rotateSaved);
-    }
-
-    private void buildShadowCorners() {
-        RectF innerBounds = new RectF(-mCornerRadius, -mCornerRadius, mCornerRadius, mCornerRadius);
-        RectF outerBounds = new RectF(innerBounds);
-        outerBounds.inset(-mShadowSize, -mShadowSize);
-
-        if (mCornerShadowPath == null) {
-            mCornerShadowPath = new Path();
-        } else {
-            mCornerShadowPath.reset();
-        }
-        mCornerShadowPath.setFillType(Path.FillType.EVEN_ODD);
-        mCornerShadowPath.moveTo(-mCornerRadius, 0);
-        mCornerShadowPath.rLineTo(-mShadowSize, 0);
-        // outer arc
-        mCornerShadowPath.arcTo(outerBounds, 180f, 90f, false);
-        // inner arc
-        mCornerShadowPath.arcTo(innerBounds, 270f, -90f, false);
-        mCornerShadowPath.close();
-
-        float shadowRadius = -outerBounds.top;
-        if (shadowRadius > 0f) {
-            float startRatio = mCornerRadius / shadowRadius;
-            float midRatio = startRatio + ((1f - startRatio) / 2f);
-            mCornerShadowPaint.setShader(new RadialGradient(0, 0, shadowRadius,
-                    new int[]{0, mShadowStartColor, mShadowMiddleColor, mShadowEndColor},
-                    new float[]{0f, startRatio, midRatio, 1f},
-                    Shader.TileMode.CLAMP));
-        }
-
-        // we offset the content shadowSize/2 pixels up to make it more realistic.
-        // this is why edge shadow shader has some extra space
-        // When drawing bottom edge shadow, we use that extra space.
-        mEdgeShadowPaint.setShader(new LinearGradient(0, innerBounds.top, 0, outerBounds.top,
-                new int[]{mShadowStartColor, mShadowMiddleColor, mShadowEndColor},
-                new float[]{0f, .5f, 1f}, Shader.TileMode.CLAMP));
-        mEdgeShadowPaint.setAntiAlias(false);
-    }
-
-    private void buildComponents(Rect bounds) {
-        // Card is offset SHADOW_MULTIPLIER * maxShadowSize to account for the shadow shift.
-        // We could have different top-bottom offsets to avoid extra gap above but in that case
-        // center aligning Views inside the CardView would be problematic.
-        final float verticalOffset = mRawMaxShadowSize * SHADOW_MULTIPLIER;
-        mContentBounds.set(bounds.left + mRawMaxShadowSize, bounds.top + verticalOffset,
-                bounds.right - mRawMaxShadowSize, bounds.bottom - verticalOffset);
-
-        getWrappedDrawable().setBounds((int) mContentBounds.left, (int) mContentBounds.top,
-                (int) mContentBounds.right, (int) mContentBounds.bottom);
-
-        buildShadowCorners();
-    }
-
-    public float getCornerRadius() {
-        return mCornerRadius;
-    }
-
-    public void setShadowSize(float size) {
-        setShadowSize(size, mRawMaxShadowSize);
-    }
-
-    public void setMaxShadowSize(float size) {
-        setShadowSize(mRawShadowSize, size);
-    }
-
-    public float getShadowSize() {
-        return mRawShadowSize;
-    }
-
-    public float getMaxShadowSize() {
-        return mRawMaxShadowSize;
-    }
-
-    public float getMinWidth() {
-        final float content = 2 *
-                Math.max(mRawMaxShadowSize, mCornerRadius + mRawMaxShadowSize / 2);
-        return content + mRawMaxShadowSize * 2;
-    }
-
-    public float getMinHeight() {
-        final float content = 2 * Math.max(mRawMaxShadowSize, mCornerRadius
-                + mRawMaxShadowSize * SHADOW_MULTIPLIER / 2);
-        return content + (mRawMaxShadowSize * SHADOW_MULTIPLIER) * 2;
-    }
-}
diff --git a/design/base/android/support/design/widget/ShadowViewDelegate.java b/design/base/android/support/design/widget/ShadowViewDelegate.java
deleted file mode 100644
index 83a3a7a..0000000
--- a/design/base/android/support/design/widget/ShadowViewDelegate.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.graphics.drawable.Drawable;
-
-interface ShadowViewDelegate {
-    float getRadius();
-    void setShadowPadding(int left, int top, int right, int bottom);
-    void setBackgroundDrawable(Drawable background);
-    boolean isCompatPaddingEnabled();
-}
diff --git a/design/base/android/support/design/widget/StateListAnimator.java b/design/base/android/support/design/widget/StateListAnimator.java
deleted file mode 100644
index aef24be..0000000
--- a/design/base/android/support/design/widget/StateListAnimator.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.util.StateSet;
-
-import java.util.ArrayList;
-
-final class StateListAnimator {
-
-    private final ArrayList<Tuple> mTuples = new ArrayList<>();
-
-    private Tuple mLastMatch = null;
-    ValueAnimator mRunningAnimator = null;
-
-    private final ValueAnimator.AnimatorListener mAnimationListener =
-            new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animator) {
-                    if (mRunningAnimator == animator) {
-                        mRunningAnimator = null;
-                    }
-                }
-            };
-
-    /**
-     * Associates the given Animation with the provided drawable state specs so that it will be run
-     * when the View's drawable state matches the specs.
-     *
-     * @param specs    The drawable state specs to match against
-     * @param animator The animator to run when the specs match
-     */
-    public void addState(int[] specs, ValueAnimator animator) {
-        Tuple tuple = new Tuple(specs, animator);
-        animator.addListener(mAnimationListener);
-        mTuples.add(tuple);
-    }
-
-    /**
-     * Called by View
-     */
-    void setState(int[] state) {
-        Tuple match = null;
-        final int count = mTuples.size();
-        for (int i = 0; i < count; i++) {
-            final Tuple tuple = mTuples.get(i);
-            if (StateSet.stateSetMatches(tuple.mSpecs, state)) {
-                match = tuple;
-                break;
-            }
-        }
-        if (match == mLastMatch) {
-            return;
-        }
-        if (mLastMatch != null) {
-            cancel();
-        }
-
-        mLastMatch = match;
-
-        if (match != null) {
-            start(match);
-        }
-    }
-
-    private void start(Tuple match) {
-        mRunningAnimator = match.mAnimator;
-        mRunningAnimator.start();
-    }
-
-    private void cancel() {
-        if (mRunningAnimator != null) {
-            mRunningAnimator.cancel();
-            mRunningAnimator = null;
-        }
-    }
-
-    /**
-     * If there is an animation running for a recent state change, ends it.
-     *
-     * <p>This causes the animation to assign the end value(s) to the View.</p>
-     */
-    public void jumpToCurrentState() {
-        if (mRunningAnimator != null) {
-            mRunningAnimator.end();
-            mRunningAnimator = null;
-        }
-    }
-
-    static class Tuple {
-        final int[] mSpecs;
-        final ValueAnimator mAnimator;
-
-        Tuple(int[] specs, ValueAnimator animator) {
-            mSpecs = specs;
-            mAnimator = animator;
-        }
-    }
-}
\ No newline at end of file
diff --git a/design/base/android/support/design/widget/VisibilityAwareImageButton.java b/design/base/android/support/design/widget/VisibilityAwareImageButton.java
deleted file mode 100644
index d7a0b13..0000000
--- a/design/base/android/support/design/widget/VisibilityAwareImageButton.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.ImageButton;
-
-class VisibilityAwareImageButton extends ImageButton {
-
-    private int mUserSetVisibility;
-
-    public VisibilityAwareImageButton(Context context) {
-        this(context, null);
-    }
-
-    public VisibilityAwareImageButton(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public VisibilityAwareImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        mUserSetVisibility = getVisibility();
-    }
-
-    @Override
-    public void setVisibility(int visibility) {
-        internalSetVisibility(visibility, true);
-    }
-
-    final void internalSetVisibility(int visibility, boolean fromUser) {
-        super.setVisibility(visibility);
-        if (fromUser) {
-            mUserSetVisibility = visibility;
-        }
-    }
-
-    final int getUserSetVisibility() {
-        return mUserSetVisibility;
-    }
-}
diff --git a/design/build.gradle b/design/build.gradle
deleted file mode 100644
index baa94ea..0000000
--- a/design/build.gradle
+++ /dev/null
@@ -1,67 +0,0 @@
-import static android.support.dependencies.DependenciesKt.*
-import android.support.LibraryGroups
-import android.support.LibraryVersions
-
-plugins {
-    id("SupportAndroidLibraryPlugin")
-}
-
-dependencies {
-    api(project(":support-v4"))
-    api(project(":appcompat-v7"))
-    api(project(":recyclerview-v7"))
-    api(project(":transition"))
-
-    androidTestImplementation(TEST_RUNNER)
-    androidTestImplementation(ESPRESSO_CORE)
-    androidTestImplementation(ESPRESSO_CONTRIB, libs.exclude_support)
-    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
-    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
-    androidTestImplementation project(':support-testutils')
-}
-
-android {
-    defaultConfig {
-        // This disables the builds tools automatic vector -> PNG generation
-        generatedDensities = []
-    }
-
-    sourceSets {
-        main.java.srcDirs = [
-                'base',
-                'gingerbread',
-                'ics',
-                'lollipop',
-                'src'
-        ]
-        main.res.srcDirs = [
-                'res',
-                'res-public'
-        ]
-        main.resources.srcDir 'src'
-    }
-
-    buildTypes.all {
-        consumerProguardFiles 'proguard-rules.pro'
-    }
-
-    aaptOptions {
-        additionalParameters "--no-version-vectors"
-    }
-
-    buildTypes {
-        debug {
-            pseudoLocalesEnabled true
-        }
-    }
-}
-
-supportLibrary {
-    name = "Android Design Support Library"
-    publish = true
-    mavenVersion = LibraryVersions.SUPPORT_LIBRARY
-    mavenGroup = LibraryGroups.SUPPORT
-    inceptionYear = "2015"
-    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 14 or later."
-    legacySourceLocation = true
-}
diff --git a/design/lollipop/android/support/design/widget/CircularBorderDrawableLollipop.java b/design/lollipop/android/support/design/widget/CircularBorderDrawableLollipop.java
deleted file mode 100644
index 8008404..0000000
--- a/design/lollipop/android/support/design/widget/CircularBorderDrawableLollipop.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.graphics.Outline;
-import android.support.annotation.RequiresApi;
-
-/**
- * Lollipop version of {@link CircularBorderDrawable}.
- */
-@RequiresApi(21)
-class CircularBorderDrawableLollipop extends CircularBorderDrawable {
-
-    @Override
-    public void getOutline(Outline outline) {
-        copyBounds(mRect);
-        outline.setOval(mRect);
-    }
-
-}
diff --git a/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java b/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
deleted file mode 100644
index 0df83da..0000000
--- a/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.StateListAnimator;
-import android.content.res.ColorStateList;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.GradientDrawable;
-import android.graphics.drawable.InsetDrawable;
-import android.graphics.drawable.LayerDrawable;
-import android.graphics.drawable.RippleDrawable;
-import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.view.View;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@RequiresApi(21)
-class FloatingActionButtonLollipop extends FloatingActionButtonImpl {
-
-    private InsetDrawable mInsetDrawable;
-
-    FloatingActionButtonLollipop(VisibilityAwareImageButton view,
-            ShadowViewDelegate shadowViewDelegate) {
-        super(view, shadowViewDelegate);
-    }
-
-    @Override
-    void setBackgroundDrawable(ColorStateList backgroundTint,
-            PorterDuff.Mode backgroundTintMode, int rippleColor, int borderWidth) {
-        // Now we need to tint the shape background with the tint
-        mShapeDrawable = DrawableCompat.wrap(createShapeDrawable());
-        DrawableCompat.setTintList(mShapeDrawable, backgroundTint);
-        if (backgroundTintMode != null) {
-            DrawableCompat.setTintMode(mShapeDrawable, backgroundTintMode);
-        }
-
-        final Drawable rippleContent;
-        if (borderWidth > 0) {
-            mBorderDrawable = createBorderDrawable(borderWidth, backgroundTint);
-            rippleContent = new LayerDrawable(new Drawable[]{mBorderDrawable, mShapeDrawable});
-        } else {
-            mBorderDrawable = null;
-            rippleContent = mShapeDrawable;
-        }
-
-        mRippleDrawable = new RippleDrawable(ColorStateList.valueOf(rippleColor),
-                rippleContent, null);
-
-        mContentBackground = mRippleDrawable;
-
-        mShadowViewDelegate.setBackgroundDrawable(mRippleDrawable);
-    }
-
-    @Override
-    void setRippleColor(int rippleColor) {
-        if (mRippleDrawable instanceof RippleDrawable) {
-            ((RippleDrawable) mRippleDrawable).setColor(ColorStateList.valueOf(rippleColor));
-        } else {
-            super.setRippleColor(rippleColor);
-        }
-    }
-
-    @Override
-    void onElevationsChanged(final float elevation, final float pressedTranslationZ) {
-        if (Build.VERSION.SDK_INT == 21) {
-            // Animations produce NPE in version 21. Bluntly set the values instead (matching the
-            // logic in the animations below).
-            if (mView.isEnabled()) {
-                mView.setElevation(elevation);
-                if (mView.isFocused() || mView.isPressed()) {
-                    mView.setTranslationZ(pressedTranslationZ);
-                } else {
-                    mView.setTranslationZ(0);
-                }
-            } else {
-                mView.setElevation(0);
-                mView.setTranslationZ(0);
-            }
-        } else {
-            final StateListAnimator stateListAnimator = new StateListAnimator();
-
-            // Animate elevation and translationZ to our values when pressed
-            AnimatorSet set = new AnimatorSet();
-            set.play(ObjectAnimator.ofFloat(mView, "elevation", elevation).setDuration(0))
-                    .with(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, pressedTranslationZ)
-                            .setDuration(PRESSED_ANIM_DURATION));
-            set.setInterpolator(ANIM_INTERPOLATOR);
-            stateListAnimator.addState(PRESSED_ENABLED_STATE_SET, set);
-
-            // Same deal for when we're focused
-            set = new AnimatorSet();
-            set.play(ObjectAnimator.ofFloat(mView, "elevation", elevation).setDuration(0))
-                    .with(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, pressedTranslationZ)
-                            .setDuration(PRESSED_ANIM_DURATION));
-            set.setInterpolator(ANIM_INTERPOLATOR);
-            stateListAnimator.addState(FOCUSED_ENABLED_STATE_SET, set);
-
-            // Animate translationZ to 0 if not pressed
-            set = new AnimatorSet();
-            List<Animator> animators = new ArrayList<>();
-            animators.add(ObjectAnimator.ofFloat(mView, "elevation", elevation).setDuration(0));
-            if (Build.VERSION.SDK_INT >= 22 && Build.VERSION.SDK_INT <= 24) {
-                // This is a no-op animation which exists here only for introducing the duration
-                // because setting the delay (on the next animation) via "setDelay" or "after"
-                // can trigger a NPE between android versions 22 and 24 (due to a framework
-                // bug). The issue has been fixed in version 25.
-                animators.add(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z,
-                        mView.getTranslationZ()).setDuration(PRESSED_ANIM_DELAY));
-            }
-            animators.add(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, 0f)
-                    .setDuration(PRESSED_ANIM_DURATION));
-            set.playSequentially(animators.toArray(new ObjectAnimator[0]));
-            set.setInterpolator(ANIM_INTERPOLATOR);
-            stateListAnimator.addState(ENABLED_STATE_SET, set);
-
-            // Animate everything to 0 when disabled
-            set = new AnimatorSet();
-            set.play(ObjectAnimator.ofFloat(mView, "elevation", 0f).setDuration(0))
-                    .with(ObjectAnimator.ofFloat(mView, View.TRANSLATION_Z, 0f).setDuration(0));
-            set.setInterpolator(ANIM_INTERPOLATOR);
-            stateListAnimator.addState(EMPTY_STATE_SET, set);
-
-            mView.setStateListAnimator(stateListAnimator);
-        }
-
-        if (mShadowViewDelegate.isCompatPaddingEnabled()) {
-            updatePadding();
-        }
-    }
-
-    @Override
-    public float getElevation() {
-        return mView.getElevation();
-    }
-
-    @Override
-    void onCompatShadowChanged() {
-        updatePadding();
-    }
-
-    @Override
-    void onPaddingUpdated(Rect padding) {
-        if (mShadowViewDelegate.isCompatPaddingEnabled()) {
-            mInsetDrawable = new InsetDrawable(mRippleDrawable,
-                    padding.left, padding.top, padding.right, padding.bottom);
-            mShadowViewDelegate.setBackgroundDrawable(mInsetDrawable);
-        } else {
-            mShadowViewDelegate.setBackgroundDrawable(mRippleDrawable);
-        }
-    }
-
-    @Override
-    void onDrawableStateChanged(int[] state) {
-        // no-op
-    }
-
-    @Override
-    void jumpDrawableToCurrentState() {
-        // no-op
-    }
-
-    @Override
-    boolean requirePreDrawListener() {
-        return false;
-    }
-
-    @Override
-    CircularBorderDrawable newCircularDrawable() {
-        return new CircularBorderDrawableLollipop();
-    }
-
-    @Override
-    GradientDrawable newGradientDrawableForShape() {
-        return new AlwaysStatefulGradientDrawable();
-    }
-
-    @Override
-    void getPadding(Rect rect) {
-        if (mShadowViewDelegate.isCompatPaddingEnabled()) {
-            final float radius = mShadowViewDelegate.getRadius();
-            final float maxShadowSize = getElevation() + mPressedTranslationZ;
-            final int hPadding = (int) Math.ceil(
-                    ShadowDrawableWrapper.calculateHorizontalPadding(maxShadowSize, radius, false));
-            final int vPadding = (int) Math.ceil(
-                    ShadowDrawableWrapper.calculateVerticalPadding(maxShadowSize, radius, false));
-            rect.set(hPadding, vPadding, hPadding, vPadding);
-        } else {
-            rect.set(0, 0, 0, 0);
-        }
-    }
-
-    /**
-     * LayerDrawable on L+ caches its isStateful() state and doesn't refresh it,
-     * meaning that if we apply a tint to one of its children, the parent doesn't become
-     * stateful and the tint doesn't work for state changes. We workaround it by saying that we
-     * are always stateful. If we don't have a stateful tint, the change is ignored anyway.
-     */
-    static class AlwaysStatefulGradientDrawable extends GradientDrawable {
-        @Override
-        public boolean isStateful() {
-            return true;
-        }
-    }
-}
diff --git a/design/lollipop/android/support/design/widget/ViewUtilsLollipop.java b/design/lollipop/android/support/design/widget/ViewUtilsLollipop.java
deleted file mode 100644
index 5927e9b..0000000
--- a/design/lollipop/android/support/design/widget/ViewUtilsLollipop.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.animation.AnimatorInflater;
-import android.animation.ObjectAnimator;
-import android.animation.StateListAnimator;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.support.annotation.RequiresApi;
-import android.support.design.R;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewOutlineProvider;
-
-@RequiresApi(21)
-class ViewUtilsLollipop {
-
-    private static final int[] STATE_LIST_ANIM_ATTRS = new int[] {android.R.attr.stateListAnimator};
-
-    static void setBoundsViewOutlineProvider(View view) {
-        view.setOutlineProvider(ViewOutlineProvider.BOUNDS);
-    }
-
-    static void setStateListAnimatorFromAttrs(View view, AttributeSet attrs,
-           int defStyleAttr,  int defStyleRes) {
-        final Context context = view.getContext();
-        final TypedArray a = context.obtainStyledAttributes(attrs, STATE_LIST_ANIM_ATTRS,
-                defStyleAttr, defStyleRes);
-        try {
-            if (a.hasValue(0)) {
-                StateListAnimator sla = AnimatorInflater.loadStateListAnimator(context,
-                        a.getResourceId(0, 0));
-                view.setStateListAnimator(sla);
-            }
-        } finally {
-            a.recycle();
-        }
-    }
-
-    /**
-     * Creates and sets a {@link StateListAnimator} with a custom elevation value
-     */
-    static void setDefaultAppBarLayoutStateListAnimator(final View view, final float elevation) {
-        final int dur = view.getResources().getInteger(R.integer.app_bar_elevation_anim_duration);
-
-        final StateListAnimator sla = new StateListAnimator();
-
-        // Enabled and collapsible, but not collapsed means not elevated
-        sla.addState(new int[]{android.R.attr.enabled, R.attr.state_collapsible,
-                        -R.attr.state_collapsed},
-                ObjectAnimator.ofFloat(view, "elevation", 0f).setDuration(dur));
-
-        // Default enabled state
-        sla.addState(new int[]{android.R.attr.enabled},
-                ObjectAnimator.ofFloat(view, "elevation", elevation).setDuration(dur));
-
-        // Disabled state
-        sla.addState(new int[0],
-                ObjectAnimator.ofFloat(view, "elevation", 0).setDuration(0));
-
-        view.setStateListAnimator(sla);
-    }
-
-}
diff --git a/design/proguard-rules.pro b/design/proguard-rules.pro
deleted file mode 100644
index 96e2ee0..0000000
--- a/design/proguard-rules.pro
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# CoordinatorLayout resolves the behaviors of its child components with reflection.
--keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior {
-    public <init>(android.content.Context, android.util.AttributeSet);
-    public <init>();
-}
-
-# Make sure we keep annotations for CoordinatorLayout's DefaultBehavior
--keepattributes *Annotation*
diff --git a/design/res-public/values/public_attrs.xml b/design/res-public/values/public_attrs.xml
deleted file mode 100644
index 9afe981..0000000
--- a/design/res-public/values/public_attrs.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Definitions of attributes to be exposed as public -->
-<resources>
-    <public type="attr" name="backgroundTint"/>
-    <public type="attr" name="backgroundTintMode"/>
-    <public type="attr" name="behavior_hideable"/>
-    <public type="attr" name="behavior_overlapTop"/>
-    <public type="attr" name="behavior_peekHeight"/>
-    <public type="attr" name="borderWidth"/>
-    <public type="attr" name="bottomSheetDialogTheme"/>
-    <public type="attr" name="bottomSheetStyle"/>
-    <public type="attr" name="collapsedTitleGravity"/>
-    <public type="attr" name="collapsedTitleTextAppearance"/>
-    <public type="attr" name="contentScrim"/>
-    <public type="attr" name="counterEnabled"/>
-    <public type="attr" name="counterMaxLength"/>
-    <public type="attr" name="counterOverflowTextAppearance"/>
-    <public type="attr" name="counterTextAppearance"/>
-    <public type="attr" name="elevation"/>
-    <public type="attr" name="errorEnabled"/>
-    <public type="attr" name="errorTextAppearance"/>
-    <public type="attr" name="expanded"/>
-    <public type="attr" name="expandedTitleGravity"/>
-    <public type="attr" name="expandedTitleMargin"/>
-    <public type="attr" name="expandedTitleMarginBottom"/>
-    <public type="attr" name="expandedTitleMarginEnd"/>
-    <public type="attr" name="expandedTitleMarginStart"/>
-    <public type="attr" name="expandedTitleMarginTop"/>
-    <public type="attr" name="expandedTitleTextAppearance"/>
-    <public type="attr" name="fabSize"/>
-    <public type="attr" name="headerLayout"/>
-    <public type="attr" name="hintAnimationEnabled"/>
-    <public type="attr" name="hintEnabled"/>
-    <public type="attr" name="hintTextAppearance"/>
-    <public type="attr" name="itemBackground"/>
-    <public type="attr" name="itemIconTint"/>
-    <public type="attr" name="itemTextAppearance"/>
-    <public type="attr" name="itemTextColor"/>
-    <public type="attr" name="layout_collapseMode"/>
-    <public type="attr" name="layout_collapseParallaxMultiplier"/>
-    <public type="attr" name="layout_scrollFlags"/>
-    <public type="attr" name="layout_scrollInterpolator"/>
-    <public type="attr" name="menu"/>
-    <public type="attr" name="pressedTranslationZ"/>
-    <public type="attr" name="rippleColor"/>
-    <public type="attr" name="statusBarScrim"/>
-    <public type="attr" name="tabBackground"/>
-    <public type="attr" name="tabContentStart"/>
-    <public type="attr" name="tabGravity"/>
-    <public type="attr" name="tabIndicatorColor"/>
-    <public type="attr" name="tabIndicatorHeight"/>
-    <public type="attr" name="tabMaxWidth"/>
-    <public type="attr" name="tabMinWidth"/>
-    <public type="attr" name="tabMode"/>
-    <public type="attr" name="tabPadding"/>
-    <public type="attr" name="tabPaddingBottom"/>
-    <public type="attr" name="tabPaddingEnd"/>
-    <public type="attr" name="tabPaddingStart"/>
-    <public type="attr" name="tabPaddingTop"/>
-    <public type="attr" name="tabSelectedTextColor"/>
-    <public type="attr" name="tabTextAppearance"/>
-    <public type="attr" name="tabTextColor"/>
-    <public type="attr" name="textColorError"/>
-    <public type="attr" name="title"/>
-    <public type="attr" name="titleEnabled"/>
-    <public type="attr" name="toolbarId"/>
-    <public type="attr" name="useCompatPadding"/>
-</resources>
diff --git a/design/res-public/values/public_strings.xml b/design/res-public/values/public_strings.xml
deleted file mode 100644
index 29f4155..0000000
--- a/design/res-public/values/public_strings.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Definitions of styles to be exposed as public -->
-<resources>
-    <public type="string" name="appbar_scrolling_view_behavior"/>
-    <public type="string" name="bottom_sheet_behavior"/>
-</resources>
diff --git a/design/res-public/values/public_styles.xml b/design/res-public/values/public_styles.xml
deleted file mode 100644
index 0dcde45..0000000
--- a/design/res-public/values/public_styles.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Definitions of styles to be exposed as public -->
-<resources>
-    <public type="style" name="TextAppearance.Design.CollapsingToolbar.Expanded"/>
-    <public type="style" name="TextAppearance.Design.Counter"/>
-    <public type="style" name="TextAppearance.Design.Counter.Overflow"/>
-    <public type="style" name="TextAppearance.Design.Error"/>
-    <public type="style" name="TextAppearance.Design.Hint"/>
-    <public type="style" name="TextAppearance.Design.Snackbar.Message"/>
-    <public type="style" name="TextAppearance.Design.Tab"/>
-    <public type="style" name="Theme.Design"/>
-    <public type="style" name="Theme.Design.BottomNavigationView"/>
-    <public type="style" name="Theme.Design.BottomSheetDialog"/>
-    <public type="style" name="Theme.Design.Light"/>
-    <public type="style" name="Theme.Design.Light.BottomSheetDialog"/>
-    <public type="style" name="Theme.Design.Light.NoActionBar"/>
-    <public type="style" name="Theme.Design.NoActionBar"/>
-    <public type="style" name="Widget.Design.AppBarLayout"/>
-    <public type="style" name="Widget.Design.BottomSheet.Modal"/>
-    <public type="style" name="Widget.Design.CollapsingToolbar"/>
-    <public type="style" name="Widget.Design.CoordinatorLayout"/>
-    <public type="style" name="Widget.Design.FloatingActionButton"/>
-    <public type="style" name="Widget.Design.NavigationView"/>
-    <public type="style" name="Widget.Design.Snackbar"/>
-    <public type="style" name="Widget.Design.TabLayout"/>
-    <public type="style" name="Widget.Design.TextInputLayout"/>
-</resources>
diff --git a/design/res/anim-v21/design_bottom_sheet_slide_in.xml b/design/res/anim-v21/design_bottom_sheet_slide_in.xml
deleted file mode 100644
index b5960a3..0000000
--- a/design/res/anim-v21/design_bottom_sheet_slide_in.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-     android:duration="@integer/bottom_sheet_slide_duration"
-     android:interpolator="@android:interpolator/fast_out_linear_in">
-
-    <translate
-            android:fromYDelta="20%p"
-            android:toYDelta="0"/>
-
-    <alpha
-            android:fromAlpha="0.0"
-            android:toAlpha="1.0"/>
-
-</set>
diff --git a/design/res/anim-v21/design_bottom_sheet_slide_out.xml b/design/res/anim-v21/design_bottom_sheet_slide_out.xml
deleted file mode 100644
index d680abe..0000000
--- a/design/res/anim-v21/design_bottom_sheet_slide_out.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-     android:duration="@integer/bottom_sheet_slide_duration"
-     android:interpolator="@android:interpolator/fast_out_slow_in">
-
-    <translate
-            android:fromYDelta="0"
-            android:toYDelta="20%p"/>
-
-    <alpha
-            android:fromAlpha="1.0"
-            android:toAlpha="0.0"/>
-
-</set>
diff --git a/design/res/anim/design_bottom_sheet_slide_in.xml b/design/res/anim/design_bottom_sheet_slide_in.xml
deleted file mode 100644
index 7cbae08..0000000
--- a/design/res/anim/design_bottom_sheet_slide_in.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-     android:duration="@integer/bottom_sheet_slide_duration"
-     android:interpolator="@android:anim/accelerate_decelerate_interpolator">
-
-    <translate
-            android:fromYDelta="20%p"
-            android:toYDelta="0"/>
-
-    <alpha
-            android:fromAlpha="0.0"
-            android:toAlpha="1.0"/>
-
-</set>
diff --git a/design/res/anim/design_bottom_sheet_slide_out.xml b/design/res/anim/design_bottom_sheet_slide_out.xml
deleted file mode 100644
index 2e30963..0000000
--- a/design/res/anim/design_bottom_sheet_slide_out.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-     android:duration="@integer/bottom_sheet_slide_duration"
-     android:interpolator="@android:anim/accelerate_interpolator">
-
-    <translate
-            android:fromYDelta="0"
-            android:toYDelta="20%p"/>
-
-    <alpha
-            android:fromAlpha="1.0"
-            android:toAlpha="0.0"/>
-
-</set>
diff --git a/design/res/anim/design_snackbar_in.xml b/design/res/anim/design_snackbar_in.xml
deleted file mode 100644
index a40524c..0000000
--- a/design/res/anim/design_snackbar_in.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-           android:fromYDelta="100%"
-           android:toYDelta="0"/>
diff --git a/design/res/anim/design_snackbar_out.xml b/design/res/anim/design_snackbar_out.xml
deleted file mode 100644
index eb55cc0..0000000
--- a/design/res/anim/design_snackbar_out.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-           android:fromYDelta="0"
-           android:toYDelta="100%"/>
\ No newline at end of file
diff --git a/design/res/animator-v21/design_appbar_state_list_animator.xml b/design/res/animator-v21/design_appbar_state_list_animator.xml
deleted file mode 100644
index a8a98e5..0000000
--- a/design/res/animator-v21/design_appbar_state_list_animator.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:app="http://schemas.android.com/apk/res-auto">
-
-    <item android:state_enabled="true" app:state_collapsed="false" app:state_collapsible="true">
-        <objectAnimator android:duration="@integer/app_bar_elevation_anim_duration"
-                        android:propertyName="elevation"
-                        android:valueTo="0dp"
-                        android:valueType="floatType"/>
-    </item>
-
-    <item android:state_enabled="true">
-        <objectAnimator android:duration="@integer/app_bar_elevation_anim_duration"
-                        android:propertyName="elevation"
-                        android:valueTo="@dimen/design_appbar_elevation"
-                        android:valueType="floatType"/>
-    </item>
-
-    <item>
-        <objectAnimator android:duration="0"
-                        android:propertyName="elevation"
-                        android:valueTo="0"
-                        android:valueType="floatType"/>
-    </item>
-
-</selector>
\ No newline at end of file
diff --git a/design/res/color-v23/design_tint_password_toggle.xml b/design/res/color-v23/design_tint_password_toggle.xml
deleted file mode 100644
index b728ccf..0000000
--- a/design/res/color-v23/design_tint_password_toggle.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="?android:attr/colorForeground" android:alpha="0.54"/>
-</selector>
\ No newline at end of file
diff --git a/design/res/color/design_error.xml b/design/res/color/design_error.xml
deleted file mode 100644
index e28602f..0000000
--- a/design/res/color/design_error.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false" android:color="?android:attr/textColorTertiary"/>
-    <item android:color="?attr/textColorError"/>
-</selector>
\ No newline at end of file
diff --git a/design/res/color/design_tint_password_toggle.xml b/design/res/color/design_tint_password_toggle.xml
deleted file mode 100644
index 13beffd..0000000
--- a/design/res/color/design_tint_password_toggle.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:app="http://schemas.android.com/apk/res-auto">
-    <item android:color="?android:attr/colorForeground" app:alpha="0.54"/>
-</selector>
\ No newline at end of file
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility_off.xml b/design/res/drawable-anydpi-v21/design_ic_visibility_off.xml
deleted file mode 100644
index a8b47f0..0000000
--- a/design/res/drawable-anydpi-v21/design_ic_visibility_off.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportHeight="24"
-        android:viewportWidth="24">
-
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M12,7c2.76,0 5,2.24 5,5 0,0.65 -0.13,1.26 -0.36,1.83l2.92,2.92c1.51,-1.26 2.7,-2.89 3.43,-4.75 -1.73,-4.39 -6,-7.5 -11,-7.5 -1.4,0 -2.74,0.25 -3.98,0.7l2.16,2.16C10.74,7.13 11.35,7 12,7zM2,4.27l2.28,2.28 0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5 1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22 21,20.73 3.27,3 2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.66 1.34,3 3,3 0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53 -2.76,0 -5,-2.24 -5,-5 0,-0.79 0.2,-1.53 0.53,-2.2zM11.84,9.02l3.15,3.15 0.02,-0.16c0,-1.66 -1.34,-3 -3,-3l-0.17,0.01z"/>
-
-</vector>
\ No newline at end of file
diff --git a/design/res/drawable-hdpi/design_ic_visibility.png b/design/res/drawable-hdpi/design_ic_visibility.png
deleted file mode 100644
index 329e617..0000000
--- a/design/res/drawable-hdpi/design_ic_visibility.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-hdpi/design_ic_visibility_off.png b/design/res/drawable-hdpi/design_ic_visibility_off.png
deleted file mode 100644
index b21a686..0000000
--- a/design/res/drawable-hdpi/design_ic_visibility_off.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-mdpi/design_ic_visibility.png b/design/res/drawable-mdpi/design_ic_visibility.png
deleted file mode 100644
index 58597e9..0000000
--- a/design/res/drawable-mdpi/design_ic_visibility.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-mdpi/design_ic_visibility_off.png b/design/res/drawable-mdpi/design_ic_visibility_off.png
deleted file mode 100644
index 3efdf49..0000000
--- a/design/res/drawable-mdpi/design_ic_visibility_off.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-v21/avd_hide_password.xml b/design/res/drawable-v21/avd_hide_password.xml
deleted file mode 100644
index 8c6ed1c..0000000
--- a/design/res/drawable-v21/avd_hide_password.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:aapt="http://schemas.android.com/aapt">
-
-    <aapt:attr name="android:drawable">
-
-        <vector
-            android:width="24dp"
-            android:height="24dp"
-            android:viewportHeight="24"
-            android:viewportWidth="24">
-
-            <path
-                android:name="strike_through"
-                android:pathData="@string/path_password_strike_through"
-                android:strokeColor="@android:color/white"
-                android:strokeLineCap="square"
-                android:strokeWidth="1.8"
-                android:trimPathEnd="0"/>
-
-            <group>
-
-                <clip-path
-                    android:name="eye_mask"
-                    android:pathData="@string/path_password_eye_mask_visible"/>
-
-                <path
-                    android:name="eye"
-                    android:fillColor="@android:color/white"
-                    android:pathData="@string/path_password_eye"/>
-
-            </group>
-
-        </vector>
-
-    </aapt:attr>
-
-    <target android:name="eye_mask">
-
-        <aapt:attr name="android:animation">
-
-            <objectAnimator
-                android:duration="@integer/hide_password_duration"
-                android:interpolator="@android:interpolator/fast_out_slow_in"
-                android:propertyName="pathData"
-                android:valueFrom="@string/path_password_eye_mask_visible"
-                android:valueTo="@string/path_password_eye_mask_strike_through"
-                android:valueType="pathType"/>
-
-        </aapt:attr>
-
-    </target>
-
-    <target android:name="strike_through">
-
-        <aapt:attr name="android:animation">
-
-            <objectAnimator
-                android:duration="@integer/hide_password_duration"
-                android:interpolator="@android:interpolator/fast_out_slow_in"
-                android:propertyName="trimPathEnd"
-                android:valueFrom="0"
-                android:valueTo="1"/>
-
-        </aapt:attr>
-
-    </target>
-
-</animated-vector>
diff --git a/design/res/drawable-v21/avd_show_password.xml b/design/res/drawable-v21/avd_show_password.xml
deleted file mode 100644
index 5b205d7..0000000
--- a/design/res/drawable-v21/avd_show_password.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<animated-vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:aapt="http://schemas.android.com/aapt">
-
-    <aapt:attr name="android:drawable">
-
-        <vector
-            android:width="24dp"
-            android:height="24dp"
-            android:viewportHeight="24"
-            android:viewportWidth="24">
-
-            <path
-                android:name="strike_through"
-                android:pathData="@string/path_password_strike_through"
-                android:strokeColor="@android:color/white"
-                android:strokeLineCap="square"
-                android:strokeWidth="1.8"/>
-
-            <group>
-
-                <clip-path
-                    android:name="eye_mask"
-                    android:pathData="@string/path_password_eye_mask_strike_through"/>
-
-                <path
-                    android:name="eye"
-                    android:fillColor="@android:color/white"
-                    android:pathData="@string/path_password_eye"/>
-
-            </group>
-
-        </vector>
-
-    </aapt:attr>
-
-    <target android:name="eye_mask">
-
-        <aapt:attr name="android:animation">
-
-            <objectAnimator
-                android:duration="@integer/show_password_duration"
-                android:interpolator="@android:interpolator/fast_out_linear_in"
-                android:propertyName="pathData"
-                android:valueFrom="@string/path_password_eye_mask_strike_through"
-                android:valueTo="@string/path_password_eye_mask_visible"
-                android:valueType="pathType"/>
-
-        </aapt:attr>
-
-    </target>
-
-    <target android:name="strike_through">
-
-        <aapt:attr name="android:animation">
-
-            <objectAnimator
-                android:duration="@integer/show_password_duration"
-                android:interpolator="@android:interpolator/fast_out_linear_in"
-                android:propertyName="trimPathEnd"
-                android:valueFrom="1"
-                android:valueTo="0"/>
-
-        </aapt:attr>
-
-    </target>
-
-</animated-vector>
diff --git a/design/res/drawable-v21/design_password_eye.xml b/design/res/drawable-v21/design_password_eye.xml
deleted file mode 100644
index 1bffaf4..0000000
--- a/design/res/drawable-v21/design_password_eye.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item
-        android:id="@+id/visible"
-        android:drawable="@drawable/design_ic_visibility"
-        android:state_checked="true"/>
-
-    <item
-        android:id="@+id/masked"
-        android:drawable="@drawable/design_ic_visibility_off"/>
-
-    <transition
-        android:drawable="@drawable/avd_show_password"
-        android:fromId="@id/masked"
-        android:toId="@id/visible"/>
-
-    <transition
-        android:drawable="@drawable/avd_hide_password"
-        android:fromId="@id/visible"
-        android:toId="@id/masked"/>
-
-</animated-selector>
\ No newline at end of file
diff --git a/design/res/drawable-xhdpi/design_ic_visibility.png b/design/res/drawable-xhdpi/design_ic_visibility.png
deleted file mode 100644
index 1f7b4cc..0000000
--- a/design/res/drawable-xhdpi/design_ic_visibility.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-xhdpi/design_ic_visibility_off.png b/design/res/drawable-xhdpi/design_ic_visibility_off.png
deleted file mode 100644
index 46bf0c9..0000000
--- a/design/res/drawable-xhdpi/design_ic_visibility_off.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-xxhdpi/design_ic_visibility.png b/design/res/drawable-xxhdpi/design_ic_visibility.png
deleted file mode 100644
index c816ab4..0000000
--- a/design/res/drawable-xxhdpi/design_ic_visibility.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-xxhdpi/design_ic_visibility_off.png b/design/res/drawable-xxhdpi/design_ic_visibility_off.png
deleted file mode 100644
index 13eb65d..0000000
--- a/design/res/drawable-xxhdpi/design_ic_visibility_off.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-xxxhdpi/design_ic_visibility.png b/design/res/drawable-xxxhdpi/design_ic_visibility.png
deleted file mode 100644
index e005b97..0000000
--- a/design/res/drawable-xxxhdpi/design_ic_visibility.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable-xxxhdpi/design_ic_visibility_off.png b/design/res/drawable-xxxhdpi/design_ic_visibility_off.png
deleted file mode 100644
index ce3c9d8..0000000
--- a/design/res/drawable-xxxhdpi/design_ic_visibility_off.png
+++ /dev/null
Binary files differ
diff --git a/design/res/drawable/design_bottom_navigation_item_background.xml b/design/res/drawable/design_bottom_navigation_item_background.xml
deleted file mode 100644
index 7674f42..0000000
--- a/design/res/drawable/design_bottom_navigation_item_background.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true">
-        <shape android:shape="rectangle">
-            <solid android:color="#ff0000"/>
-        </shape>
-    </item>
-    <item>
-        <shape android:shape="rectangle">
-            <solid android:color="#ffffff"/>
-        </shape>
-    </item>
-</selector>
\ No newline at end of file
diff --git a/design/res/drawable/design_password_eye.xml b/design/res/drawable/design_password_eye.xml
deleted file mode 100644
index b5185f1..0000000
--- a/design/res/drawable/design_password_eye.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item
-        android:drawable="@drawable/design_ic_visibility"
-        android:state_checked="true"/>
-
-    <item
-        android:drawable="@drawable/design_ic_visibility_off"/>
-
-</selector>
\ No newline at end of file
diff --git a/design/res/drawable/design_snackbar_background.xml b/design/res/drawable/design_snackbar_background.xml
deleted file mode 100644
index e82441c..0000000
--- a/design/res/drawable/design_snackbar_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-       android:shape="rectangle">
-    <corners android:radius="@dimen/design_snackbar_background_corner_radius"/>
-    <solid android:color="@color/design_snackbar_background_color"/>
-</shape>
\ No newline at end of file
diff --git a/design/res/drawable/navigation_empty_icon.xml b/design/res/drawable/navigation_empty_icon.xml
deleted file mode 100644
index 799bd94..0000000
--- a/design/res/drawable/navigation_empty_icon.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <solid android:color="@android:color/transparent"/>
-    <size
-        android:width="@dimen/design_navigation_icon_size"
-        android:height="@dimen/design_navigation_icon_size" />
-</shape>
diff --git a/design/res/layout-sw600dp/design_layout_snackbar.xml b/design/res/layout-sw600dp/design_layout_snackbar.xml
deleted file mode 100644
index 28835e5..0000000
--- a/design/res/layout-sw600dp/design_layout_snackbar.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<view xmlns:android="http://schemas.android.com/apk/res/android"
-      class="android.support.design.widget.Snackbar$SnackbarLayout"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_gravity="bottom|center_horizontal"
-      android:theme="@style/ThemeOverlay.AppCompat.Dark"
-      style="@style/Widget.Design.Snackbar" />
\ No newline at end of file
diff --git a/design/res/layout/design_bottom_navigation_item.xml b/design/res/layout/design_bottom_navigation_item.xml
deleted file mode 100644
index f6212cf..0000000
--- a/design/res/layout/design_bottom_navigation_item.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <ImageView
-        android:id="@+id/icon"
-        android:layout_width="24dp"
-        android:layout_height="24dp"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginTop="@dimen/design_bottom_navigation_margin"
-        android:layout_marginBottom="@dimen/design_bottom_navigation_margin"
-        android:duplicateParentState="true" />
-    <android.support.design.internal.BaselineLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="bottom|center_horizontal"
-        android:clipToPadding="false"
-        android:paddingBottom="10dp"
-        android:duplicateParentState="true">
-        <TextView
-            android:id="@+id/smallLabel"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textSize="@dimen/design_bottom_navigation_text_size"
-            android:singleLine="true"
-            android:duplicateParentState="true" />
-        <TextView
-            android:id="@+id/largeLabel"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:visibility="invisible"
-            android:textSize="@dimen/design_bottom_navigation_active_text_size"
-            android:singleLine="true"
-            android:duplicateParentState="true" />
-    </android.support.design.internal.BaselineLayout>
-</merge>
\ No newline at end of file
diff --git a/design/res/layout/design_bottom_sheet_dialog.xml b/design/res/layout/design_bottom_sheet_dialog.xml
deleted file mode 100644
index 28e023c..0000000
--- a/design/res/layout/design_bottom_sheet_dialog.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.CoordinatorLayout
-        android:id="@+id/coordinator"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:fitsSystemWindows="true">
-
-        <View
-            android:id="@+id/touch_outside"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:importantForAccessibility="no"
-            android:soundEffectsEnabled="false"
-            tools:ignore="UnusedAttribute"/>
-
-        <FrameLayout
-            android:id="@+id/design_bottom_sheet"
-            style="?attr/bottomSheetStyle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal|top"
-            app:layout_behavior="@string/bottom_sheet_behavior"/>
-
-    </android.support.design.widget.CoordinatorLayout>
-
-</FrameLayout>
diff --git a/design/res/layout/design_layout_snackbar.xml b/design/res/layout/design_layout_snackbar.xml
deleted file mode 100644
index 8f3f0d6..0000000
--- a/design/res/layout/design_layout_snackbar.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<view xmlns:android="http://schemas.android.com/apk/res/android"
-      class="android.support.design.widget.Snackbar$SnackbarLayout"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_gravity="bottom"
-      android:theme="@style/ThemeOverlay.AppCompat.Dark"
-      style="@style/Widget.Design.Snackbar" />
\ No newline at end of file
diff --git a/design/res/layout/design_layout_snackbar_include.xml b/design/res/layout/design_layout_snackbar_include.xml
deleted file mode 100644
index fe11d8e..0000000
--- a/design/res/layout/design_layout_snackbar_include.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<view
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="android.support.design.internal.SnackbarContentLayout"
-    android:theme="@style/ThemeOverlay.AppCompat.Dark"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="bottom">
-
-    <TextView
-        android:id="@+id/snackbar_text"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:paddingTop="@dimen/design_snackbar_padding_vertical"
-        android:paddingBottom="@dimen/design_snackbar_padding_vertical"
-        android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
-        android:paddingRight="@dimen/design_snackbar_padding_horizontal"
-        android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
-        android:maxLines="@integer/design_snackbar_text_max_lines"
-        android:layout_gravity="center_vertical|left|start"
-        android:ellipsize="end"
-        android:textAlignment="viewStart"/>
-
-    <Button
-        android:id="@+id/snackbar_action"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"
-        android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"
-        android:layout_gravity="center_vertical|right|end"
-        android:minWidth="48dp"
-        android:visibility="gone"
-        android:textColor="?attr/colorAccent"
-        style="?attr/borderlessButtonStyle"/>
-
-</view>
\ No newline at end of file
diff --git a/design/res/layout/design_layout_tab_icon.xml b/design/res/layout/design_layout_tab_icon.xml
deleted file mode 100644
index 5dcfa11..0000000
--- a/design/res/layout/design_layout_tab_icon.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
-           android:layout_width="24dp"
-           android:layout_height="24dp"
-           android:scaleType="centerInside"/>
\ No newline at end of file
diff --git a/design/res/layout/design_layout_tab_text.xml b/design/res/layout/design_layout_tab_text.xml
deleted file mode 100644
index a83bb3d..0000000
--- a/design/res/layout/design_layout_tab_text.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:ellipsize="end"
-          android:gravity="center"
-          android:maxLines="2"/>
\ No newline at end of file
diff --git a/design/res/layout/design_menu_item_action_area.xml b/design/res/layout/design_menu_item_action_area.xml
deleted file mode 100644
index ba8141d..0000000
--- a/design/res/layout/design_menu_item_action_area.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:layout_width="wrap_content"
-             android:layout_height="match_parent"/>
diff --git a/design/res/layout/design_navigation_item.xml b/design/res/layout/design_navigation_item.xml
deleted file mode 100644
index ccd42de..0000000
--- a/design/res/layout/design_navigation_item.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<android.support.design.internal.NavigationMenuItemView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="?attr/listPreferredItemHeightSmall"
-        android:paddingLeft="?attr/listPreferredItemPaddingLeft"
-        android:paddingRight="?attr/listPreferredItemPaddingRight"
-        android:foreground="?attr/selectableItemBackground"
-        android:focusable="true"/>
diff --git a/design/res/layout/design_navigation_item_header.xml b/design/res/layout/design_navigation_item_header.xml
deleted file mode 100644
index 8d03f69..0000000
--- a/design/res/layout/design_navigation_item_header.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-      android:id="@+id/navigation_header_container"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:orientation="vertical"
-      android:paddingBottom="@dimen/design_navigation_separator_vertical_padding" />
diff --git a/design/res/layout/design_navigation_item_separator.xml b/design/res/layout/design_navigation_item_separator.xml
deleted file mode 100644
index 938a3fb..0000000
--- a/design/res/layout/design_navigation_item_separator.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:layout_width="match_parent"
-             android:layout_height="wrap_content">
-
-    <View android:layout_width="match_parent"
-          android:layout_height="1dp"
-          android:background="?android:attr/listDivider"/>
-
-</FrameLayout>
diff --git a/design/res/layout/design_navigation_item_subheader.xml b/design/res/layout/design_navigation_item_subheader.xml
deleted file mode 100644
index 707ec6a..0000000
--- a/design/res/layout/design_navigation_item_subheader.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-          android:layout_width="match_parent"
-          android:layout_height="?attr/listPreferredItemHeightSmall"
-          android:gravity="center_vertical|start"
-          android:maxLines="1"
-          android:paddingLeft="?attr/listPreferredItemPaddingLeft"
-          android:paddingRight="?attr/listPreferredItemPaddingRight"
-          android:textAppearance="@style/TextAppearance.AppCompat.Body2"
-          android:textColor="?android:textColorSecondary"/>
diff --git a/design/res/layout/design_navigation_menu_item.xml b/design/res/layout/design_navigation_menu_item.xml
deleted file mode 100644
index 91104bb..0000000
--- a/design/res/layout/design_navigation_menu_item.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <CheckedTextView
-            android:id="@+id/design_menu_item_text"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:drawablePadding="@dimen/design_navigation_icon_padding"
-            android:gravity="center_vertical|start"
-            android:maxLines="1"
-            android:textAppearance="@style/TextAppearance.AppCompat.Body2"/>
-
-    <ViewStub
-            android:id="@+id/design_menu_item_action_area_stub"
-            android:inflatedId="@+id/design_menu_item_action_area"
-            android:layout="@layout/design_menu_item_action_area"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"/>
-
-</merge>
diff --git a/design/res/layout/design_text_input_password_icon.xml b/design/res/layout/design_text_input_password_icon.xml
deleted file mode 100644
index ca1cd09..0000000
--- a/design/res/layout/design_text_input_password_icon.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<android.support.design.widget.CheckableImageButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/text_input_password_toggle"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center_vertical|end|right"
-    android:background="?attr/selectableItemBackgroundBorderless"
-    android:minHeight="48dp"
-    android:minWidth="48dp"/>
\ No newline at end of file
diff --git a/design/res/values-sw600dp/dimens.xml b/design/res/values-sw600dp/dimens.xml
deleted file mode 100644
index 9d61f00..0000000
--- a/design/res/values-sw600dp/dimens.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<resources>
-
-    <dimen name="design_tab_scrollable_min_width">160dp</dimen>
-
-    <dimen name="design_snackbar_min_width">320dp</dimen>
-    <dimen name="design_snackbar_max_width">576dp</dimen>
-    <dimen name="design_snackbar_padding_vertical_2lines">@dimen/design_snackbar_padding_vertical</dimen>
-    <dimen name="design_snackbar_extra_spacing_horizontal">24dp</dimen>
-    <dimen name="design_snackbar_background_corner_radius">2dp</dimen>
-    <dimen name="design_snackbar_action_inline_max_width">0dp</dimen>
-
-    <!-- 5 * standard increment (64dp on tablets) -->
-    <dimen name="design_navigation_max_width">320dp</dimen>
-
-</resources>
\ No newline at end of file
diff --git a/design/res/values-sw600dp/styles.xml b/design/res/values-sw600dp/styles.xml
deleted file mode 100644
index 622a5e3..0000000
--- a/design/res/values-sw600dp/styles.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources>
-
-    <style name="Widget.Design.TabLayout" parent="Base.Widget.Design.TabLayout">
-        <item name="tabGravity">center</item>
-        <item name="tabMode">fixed</item>
-    </style>
-
-</resources>
-
diff --git a/design/res/values-v21/styles.xml b/design/res/values-v21/styles.xml
deleted file mode 100644
index c692579..0000000
--- a/design/res/values-v21/styles.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources>
-
-    <style name="Base.Widget.Design.AppBarLayout" parent="Base.V21.Widget.Design.AppBarLayout" />
-
-    <style name="Base.V21.Widget.Design.AppBarLayout" parent="Base.V14.Widget.Design.AppBarLayout">
-        <item name="android:stateListAnimator">@animator/design_appbar_state_list_animator</item>
-    </style>
-
-</resources>
-
diff --git a/design/res/values-v26/styles.xml b/design/res/values-v26/styles.xml
deleted file mode 100644
index f20a058..0000000
--- a/design/res/values-v26/styles.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2017 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>
-
-    <style name="Base.Widget.Design.AppBarLayout" parent="Base.V26.Widget.Design.AppBarLayout" />
-
-    <style name="Base.V26.Widget.Design.AppBarLayout" parent="Base.V21.Widget.Design.AppBarLayout">
-        <item name="android:keyboardNavigationCluster">true</item>
-        <item name="android:touchscreenBlocksFocus">true</item>
-    </style>
-
-</resources>
\ No newline at end of file
diff --git a/design/res/values/attrs.xml b/design/res/values/attrs.xml
deleted file mode 100644
index 8c3536f..0000000
--- a/design/res/values/attrs.xml
+++ /dev/null
@@ -1,379 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources>
-
-    <declare-styleable name="FloatingActionButton">
-        <!-- Background for the FloatingActionButton -->
-        <attr name="backgroundTint"/>
-        <attr name="backgroundTintMode"/>
-
-        <!-- Ripple color for the FAB. -->
-        <attr name="rippleColor" format="color"/>
-        <!-- Size for the FAB. If fabCustomSize is set, this will be ignored. -->
-        <attr name="fabSize">
-            <!-- A size which will change based on the window size. -->
-            <enum name="auto" value="-1"/>
-            <!-- The normal sized button. -->
-            <enum name="normal" value="0"/>
-            <!-- The mini sized button. -->
-            <enum name="mini" value="1"/>
-        </attr>
-        <!-- Custom size for the FAB. If this is set, fabSize will be ignored. -->
-        <attr name="fabCustomSize" format="dimension"/>
-        <!-- Elevation value for the FAB -->
-        <attr name="elevation"/>
-        <!-- TranslationZ value for the FAB when pressed-->
-        <attr name="pressedTranslationZ" format="dimension"/>
-        <!-- The width of the border around the FAB. -->
-        <attr name="borderWidth" format="dimension"/>
-        <!-- Enable compat padding. -->
-        <attr name="useCompatPadding" format="boolean"/>
-    </declare-styleable>
-
-    <declare-styleable name="FloatingActionButton_Behavior_Layout">
-        <!-- Whether the FAB should automatically hide when there is no space for it. -->
-        <attr name="behavior_autoHide" format="boolean"/>
-    </declare-styleable>
-
-    <declare-styleable name="ScrimInsetsFrameLayout">
-        <attr name="insetForeground" format="color|reference"/>
-    </declare-styleable>
-
-    <declare-styleable name="NavigationView">
-        <attr name="android:background"/>
-        <attr name="android:fitsSystemWindows"/>
-        <attr name="android:maxWidth"/>
-        <attr name="elevation"/>
-        <!-- The menu resource to inflate and populate items from. -->
-        <attr name="menu" format="reference"/>
-        <attr name="itemIconTint" format="color"/>
-        <attr name="itemTextColor" format="color"/>
-        <attr name="itemBackground" format="reference"/>
-        <attr name="itemTextAppearance" format="reference"/>
-        <!-- Layout resource to inflate as the header -->
-        <attr name="headerLayout" format="reference"/>
-    </declare-styleable>
-
-    <declare-styleable name="ForegroundLinearLayout">
-        <attr name="android:foreground" />
-        <attr name="android:foregroundGravity" />
-        <attr name="foregroundInsidePadding" format="boolean" />
-    </declare-styleable>
-
-    <declare-styleable name="TabLayout">
-        <!-- Color of the indicator used to show the currently selected tab. -->
-        <attr name="tabIndicatorColor" format="color"/>
-        <!-- Height of the indicator used to show the currently selected tab. -->
-        <attr name="tabIndicatorHeight" format="dimension"/>
-        <!-- Position in the Y axis from the starting edge that tabs should be positioned from. -->
-        <attr name="tabContentStart" format="dimension"/>
-        <!-- Reference to a background to be applied to tabs. -->
-        <attr name="tabBackground" format="reference"/>
-        <!-- The behavior mode for the Tabs in this layout -->
-        <attr name="tabMode">
-            <enum name="scrollable" value="0"/>
-            <enum name="fixed" value="1"/>
-        </attr>
-        <!-- Gravity constant for tabs. -->
-        <attr name="tabGravity">
-            <enum name="fill" value="0"/>
-            <enum name="center" value="1"/>
-        </attr>
-        <!-- The minimum width for tabs. -->
-        <attr name="tabMinWidth" format="dimension"/>
-        <!-- The maximum width for tabs. -->
-        <attr name="tabMaxWidth" format="dimension"/>
-        <!-- A reference to a TextAppearance style to be applied to tabs. -->
-        <attr name="tabTextAppearance" format="reference"/>
-        <!-- The default text color to be applied to tabs. -->
-        <attr name="tabTextColor" format="color"/>
-        <!-- The text color to be applied to the currently selected tab. -->
-        <attr name="tabSelectedTextColor" format="color"/>
-        <!-- The preferred padding along the start edge of tabs. -->
-        <attr name="tabPaddingStart" format="dimension"/>
-        <!-- The preferred padding along the top edge of tabs. -->
-        <attr name="tabPaddingTop" format="dimension"/>
-        <!-- The preferred padding along the end edge of tabs. -->
-        <attr name="tabPaddingEnd" format="dimension"/>
-        <!-- The preferred padding along the bottom edge of tabs. -->
-        <attr name="tabPaddingBottom" format="dimension"/>
-        <!-- The preferred padding along all edges of tabs. -->
-        <attr name="tabPadding" format="dimension"/>
-    </declare-styleable>
-
-    <declare-styleable name="TabItem">
-        <!-- Text to display in the tab. -->
-        <attr name="android:text" />
-        <!-- Icon to display in the tab. -->
-        <attr name="android:icon" />
-        <!-- A reference to a layout resource to be displayed in the tab. -->
-        <attr name="android:layout" />
-    </declare-styleable>
-
-    <declare-styleable name="TextInputLayout">
-        <attr name="hintTextAppearance" format="reference"/>
-        <!-- The hint to display in the floating label. -->
-        <attr name="android:hint"/>
-        <!-- Whether the layout's floating label functionality is enabled. -->
-        <attr name="hintEnabled" format="boolean"/>
-        <!-- Whether the layout is laid out as if an error will be displayed. -->
-        <attr name="errorEnabled" format="boolean"/>
-        <!-- TextAppearance of any error message displayed. -->
-        <attr name="errorTextAppearance" format="reference"/>
-        <!-- Whether the layout is laid out as if the character counter will be displayed. -->
-        <attr name="counterEnabled" format="boolean"/>
-        <!-- The max length to display in the character counter. -->
-        <attr name="counterMaxLength" format="integer" />
-        <!-- TextAppearance of the character counter. -->
-        <attr name="counterTextAppearance" format="reference"/>
-        <!-- TextAppearance of the character counter when the text is longer than the max. -->
-        <attr name="counterOverflowTextAppearance" format="reference"/>
-        <attr name="android:textColorHint"/>
-        <!-- Whether to animate hint state changes. -->
-        <attr name="hintAnimationEnabled" format="boolean"/>
-        <!-- Whether the view will display a toggle when the EditText has a password. -->
-        <attr name="passwordToggleEnabled" format="boolean"/>
-        <!-- Drawable to use as the password input visibility toggle icon. -->
-        <attr name="passwordToggleDrawable" format="reference"/>
-        <!-- Text to set as the content description for the password input visibility toggle. -->
-        <attr name="passwordToggleContentDescription" format="string"/>
-        <!-- Icon to use for the password input visibility toggle -->
-        <attr name="passwordToggleTint" format="color"/>
-        <!-- Blending mode used to apply the background tint. -->
-        <attr name="passwordToggleTintMode">
-            <!-- The tint is drawn on top of the drawable.
-                 [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] -->
-            <enum name="src_over" value="3" />
-            <!-- The tint is masked by the alpha channel of the drawable. The drawable’s
-                 color channels are thrown out. [Sa * Da, Sc * Da] -->
-            <enum name="src_in" value="5" />
-            <!-- The tint is drawn above the drawable, but with the drawable’s alpha
-                 channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] -->
-            <enum name="src_atop" value="9" />
-            <!-- Multiplies the color and alpha channels of the drawable with those of
-                 the tint. [Sa * Da, Sc * Dc] -->
-            <enum name="multiply" value="14" />
-            <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] -->
-            <enum name="screen" value="15" />
-        </attr>
-    </declare-styleable>
-
-    <declare-styleable name="SnackbarLayout">
-        <attr name="android:maxWidth"/>
-        <attr name="elevation"/>
-        <attr name="maxActionInlineWidth" format="dimension"/>
-    </declare-styleable>
-
-    <declare-styleable name="AppBarLayout">
-        <!-- Deprecated. Elevation is now controlled via a state list animator. -->
-        <attr name="elevation" />
-        <attr name="android:background" />
-        <!-- The initial expanded state for the AppBarLayout. This only takes effect when this
-             view is a direct child of a CoordinatorLayout. -->
-        <attr name="expanded" format="boolean" />
-        <attr name="android:keyboardNavigationCluster" />
-        <attr name="android:touchscreenBlocksFocus" />
-    </declare-styleable>
-
-    <declare-styleable name="AppBarLayoutStates">
-        <!-- State value for {@link android.support.design.widget.AppBarLayout} set when the view
-             has been collapsed. -->
-        <attr name="state_collapsed" format="boolean" />
-        <!-- State value for {@link android.support.design.widget.AppBarLayout} set when the view
-             has children which are capable of being collapsed. -->
-        <attr name="state_collapsible" format="boolean" />
-    </declare-styleable>
-
-    <declare-styleable name="AppBarLayout_Layout">
-        <attr name="layout_scrollFlags">
-            <!-- The view will be scroll in direct relation to scroll events. This flag needs to be
-                 set for any of the other flags to take effect. If any sibling views
-                 before this one do not have this flag, then this value has no effect. -->
-            <flag name="scroll" value="0x1"/>
-
-            <!-- When exiting (scrolling off screen) the view will be scrolled until it is
-                 'collapsed'. The collapsed height is defined by the view's minimum height. -->
-            <flag name="exitUntilCollapsed" value="0x2"/>
-
-            <!-- When entering (scrolling on screen) the view will scroll on any downwards
-                 scroll event, regardless of whether the scrolling view is also scrolling. This
-                 is commonly referred to as the 'quick return' pattern. -->
-            <flag name="enterAlways" value="0x4"/>
-
-            <!-- An additional flag for 'enterAlways' which modifies the returning view to
-                 only initially scroll back to it's collapsed height. Once the scrolling view has
-                 reached the end of it's scroll range, the remainder of this view will be scrolled
-                 into view. -->
-            <flag name="enterAlwaysCollapsed" value="0x8"/>
-
-            <!-- Upon a scroll ending, if the view is only partially visible then it will be
-                 snapped and scrolled to it's closest edge. -->
-            <flag name="snap" value="0x10"/>
-        </attr>
-
-        <!-- An interpolator to use when scrolling this View. Only takes effect when View
-             is scrollable. -->
-        <attr name="layout_scrollInterpolator" format="reference" />
-    </declare-styleable>
-
-    <declare-styleable name="ScrollingViewBehavior_Layout">
-        <!-- The amount that the scrolling view should overlap the bottom of any AppBarLayout -->
-        <attr name="behavior_overlapTop" format="dimension" />
-    </declare-styleable>
-
-    <declare-styleable name="CollapsingToolbarLayout">
-        <!--  Specifies extra space on the start, top, end and bottom
-              sides of the the expanded title text. Margin values should be positive. -->
-        <attr name="expandedTitleMargin" format="dimension"/>
-        <!--  Specifies extra space on the start side of the the expanded title text.
-              Margin values should be positive. -->
-        <attr name="expandedTitleMarginStart" format="dimension"/>
-        <!--  Specifies extra space on the top side of the the expanded title text.
-              Margin values should be positive. -->
-        <attr name="expandedTitleMarginTop" format="dimension"/>
-        <!--  Specifies extra space on the end side of the the expanded title text.
-              Margin values should be positive. -->
-        <attr name="expandedTitleMarginEnd" format="dimension"/>
-        <!--  Specifies extra space on the bottom side of the the expanded title text.
-              Margin values should be positive. -->
-        <attr name="expandedTitleMarginBottom" format="dimension"/>
-        <!-- The text appearance of the CollapsingToolbarLayout's title when it is fully
-             'expanded' -->
-        <attr name="expandedTitleTextAppearance" format="reference"/>
-        <!-- The text appearance of the CollapsingToolbarLayouts title when it is fully
-             'collapsed' -->
-        <attr name="collapsedTitleTextAppearance" format="reference"/>
-        <!-- The drawable to use as a scrim on top of the CollapsingToolbarLayouts content when
-             it has been scrolled sufficiently off screen. -->
-        <attr name="contentScrim" format="color"/>
-        <!-- The drawable to use as a scrim for the status bar content when the
-             CollapsingToolbarLayout has been scrolled sufficiently off screen. Only works on
-             Lollipop with the correct setup. -->
-        <attr name="statusBarScrim" format="color" />
-        <!-- The id of the primary Toolbar child that you wish to use for the purpose of collapsing.
-             This Toolbar descendant view does not need to be a direct child of the layout.
-             If you do not set this, the first direct Toolbar child found will be used. -->
-        <attr name="toolbarId" format="reference"/>
-        <!-- Specifies the amount of visible height in pixels used to define when to trigger a
-             scrim visibility change. -->
-        <attr name="scrimVisibleHeightTrigger" format="dimension"/>
-        <!-- Specifies the duration used for scrim visibility animations. -->
-        <attr name="scrimAnimationDuration" format="integer"/>
-
-        <!-- Specifies how the title should be positioned when collapsed. -->
-        <attr name="collapsedTitleGravity">
-            <!-- Push title to the top of its container, not changing its size. -->
-            <flag name="top" value="0x30"/>
-            <!-- Push title to the bottom of its container, not changing its size. -->
-            <flag name="bottom" value="0x50"/>
-            <!-- Push title to the left of its container, not changing its size. -->
-            <flag name="left" value="0x03"/>
-            <!-- Push title to the right of its container, not changing its size. -->
-            <flag name="right" value="0x05"/>
-            <!-- Place title in the vertical center of its container, not changing its size. -->
-            <flag name="center_vertical" value="0x10"/>
-            <!-- Grow the vertical size of the title if needed so it completely fills its container. -->
-            <flag name="fill_vertical" value="0x70"/>
-            <!-- Place title in the horizontal center of its container, not changing its size. -->
-            <flag name="center_horizontal" value="0x01"/>
-            <!-- Place the title in the center of its container in both the vertical and horizontal axis, not changing its size. -->
-            <flag name="center" value="0x11"/>
-            <!-- Push title to the beginning of its container, not changing its size. -->
-            <flag name="start" value="0x00800003"/>
-            <!-- Push title to the end of its container, not changing its size. -->
-            <flag name="end" value="0x00800005"/>
-        </attr>
-
-        <!-- Specifies how the title should be positioned when expanded. -->
-        <attr name="expandedTitleGravity">
-            <!-- Push title to the top of its container, not changing its size. -->
-            <flag name="top" value="0x30"/>
-            <!-- Push title to the bottom of its container, not changing its size. -->
-            <flag name="bottom" value="0x50"/>
-            <!-- Push title to the left of its container, not changing its size. -->
-            <flag name="left" value="0x03"/>
-            <!-- Push title to the right of its container, not changing its size. -->
-            <flag name="right" value="0x05"/>
-            <!-- Place title in the vertical center of its container, not changing its size. -->
-            <flag name="center_vertical" value="0x10"/>
-            <!-- Grow the vertical size of the title if needed so it completely fills its container. -->
-            <flag name="fill_vertical" value="0x70"/>
-            <!-- Place title in the horizontal center of its container, not changing its size. -->
-            <flag name="center_horizontal" value="0x01"/>
-            <!-- Place the title in the center of its container in both the vertical and horizontal axis, not changing its size. -->
-            <flag name="center" value="0x11"/>
-            <!-- Push title to the beginning of its container, not changing its size. -->
-            <flag name="start" value="0x00800003"/>
-            <!-- Push title to the end of its container, not changing its size. -->
-            <flag name="end" value="0x00800005"/>
-        </attr>
-
-        <!-- Whether the CollapsingToolbarLayout should draw its own shrinking/growing title. -->
-        <attr name="titleEnabled" format="boolean"/>
-        <!-- The title to show when titleEnabled is set to true. -->
-        <attr name="title"/>
-    </declare-styleable>
-
-    <declare-styleable name="CollapsingToolbarLayout_Layout">
-        <attr name="layout_collapseMode">
-            <!-- The view will act as normal with no collapsing behavior. -->
-            <enum name="none" value="0"/>
-            <!-- The view will pin in place. -->
-            <enum name="pin" value="1"/>
-            <!-- The view will scroll in a parallax fashion. See the
-                 layout_collapseParallaxMultiplier attribute to change the multiplier. -->
-            <enum name="parallax" value="2"/>
-        </attr>
-
-        <!-- The multiplier used when layout_collapseMode is set to 'parallax'. The value should
-             be between 0.0 and 1.0. -->
-        <attr name="layout_collapseParallaxMultiplier" format="float"/>
-    </declare-styleable>
-
-    <declare-styleable name="BottomSheetBehavior_Layout">
-        <!-- The height of the bottom sheet when it is collapsed. -->
-        <attr name="behavior_peekHeight" format="dimension">
-            <!-- Peek at the 16:9 ratio keyline of its parent -->
-            <enum name="auto" value="-1"/>
-        </attr>
-        <!-- Whether this bottom sheet can be hidden by dragging it further downwards -->
-        <attr name="behavior_hideable" format="boolean"/>
-        <!-- Skip the collapsed state once expanded; no effect unless it is hideable -->
-        <attr name="behavior_skipCollapsed" format="boolean"/>
-    </declare-styleable>
-
-    <declare-styleable name="DesignTheme">
-        <!-- Theme to use for modal bottom sheet dialogs spawned from this theme. -->
-        <attr name="bottomSheetDialogTheme" format="reference" />
-        <!-- Style to use for modal bottom sheets in this theme. -->
-        <attr name="bottomSheetStyle" format="reference" />
-
-        <!-- Text color used to indicate an error has occurred. -->
-        <!-- {@deprecated Use colorError} -->
-        <attr name="textColorError" format="reference|color" />
-    </declare-styleable>
-
-    <declare-styleable name="BottomNavigationView">
-        <!-- The menu resource to inflate and populate items from. -->
-        <attr name="menu"/>
-        <attr name="itemIconTint"/>
-        <attr name="itemTextColor"/>
-        <attr name="itemBackground"/>
-        <attr name="elevation"/>
-    </declare-styleable>
-
-</resources>
diff --git a/design/res/values/colors.xml b/design/res/values/colors.xml
deleted file mode 100644
index 88fe630..0000000
--- a/design/res/values/colors.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<resources>
-
-    <!-- Color for the top outer pixels in the stroke: 18% white (these are multiplied) -->
-    <color name="design_fab_stroke_top_outer_color">#2EFFFFFF</color>
-    <!-- Color for the top inner pixels in the stroke: 10% white (these are multiplied) -->
-    <color name="design_fab_stroke_top_inner_color">#1AFFFFFF</color>
-    <!-- Color for the bottom outer pixels in the stroke: 6% black (these are multiplied) -->
-    <color name="design_fab_stroke_end_outer_color">#0F000000</color>
-    <!-- Color for the bottom inner pixels in the stroke: 4% black (these are multiplied) -->
-    <color name="design_fab_stroke_end_inner_color">#0A000000</color>
-
-    <!-- Shadow color for the first pixels of a shadow -->
-    <color name="design_fab_shadow_start_color">#44000000</color>
-    <!-- Shadow color for the middle pixels of a shadow -->
-    <color name="design_fab_shadow_mid_color">#14000000</color>
-    <!-- Shadow color for the furthest pixels of a shadow -->
-    <color name="design_fab_shadow_end_color">@android:color/transparent</color>
-
-    <color name="design_snackbar_background_color">#323232</color>
-
-    <color name="design_bottom_navigation_shadow_color">#14000000</color>
-
-</resources>
\ No newline at end of file
diff --git a/design/res/values/config.xml b/design/res/values/config.xml
deleted file mode 100644
index 67635a8..0000000
--- a/design/res/values/config.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<resources>
-
-    <integer name="design_snackbar_text_max_lines">2</integer>
-
-</resources>
\ No newline at end of file
diff --git a/design/res/values/dimens.xml b/design/res/values/dimens.xml
deleted file mode 100644
index de715ce..0000000
--- a/design/res/values/dimens.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources>
-
-    <dimen name="design_fab_elevation">6dp</dimen>
-    <dimen name="design_fab_translation_z_pressed">6dp</dimen>
-    <dimen name="design_fab_image_size">24dp</dimen>
-    <dimen name="design_fab_size_normal">56dp</dimen>
-    <dimen name="design_fab_size_mini">40dp</dimen>
-    <dimen name="design_fab_border_width">0.5dp</dimen>
-
-    <!-- 5 * standard increment (56dp) -->
-    <dimen name="design_navigation_max_width">280dp</dimen>
-    <dimen name="design_navigation_elevation">16dp</dimen>
-    <dimen name="design_navigation_icon_padding">32dp</dimen>
-    <dimen name="design_navigation_icon_size">24dp</dimen>
-    <dimen name="design_navigation_separator_vertical_padding">8dp</dimen>
-    <dimen name="design_navigation_padding_bottom">8dp</dimen>
-
-    <dimen name="design_tab_scrollable_min_width">72dp</dimen>
-    <dimen name="design_tab_max_width">264dp</dimen>
-    <dimen name="design_tab_text_size">14sp</dimen>
-    <dimen name="design_tab_text_size_2line">12sp</dimen>
-
-    <dimen name="design_snackbar_min_width">-1px</dimen>
-    <dimen name="design_snackbar_max_width">-1px</dimen>
-    <dimen name="design_snackbar_elevation">6dp</dimen>
-    <dimen name="design_snackbar_background_corner_radius">0dp</dimen>
-
-    <dimen name="design_snackbar_padding_horizontal">12dp</dimen>
-    <dimen name="design_snackbar_padding_vertical">14dp</dimen>
-    <dimen name="design_snackbar_padding_vertical_2lines">24dp</dimen>
-
-    <!-- Extra spacing between the action and message views -->
-    <dimen name="design_snackbar_extra_spacing_horizontal">0dp</dimen>
-    <!-- The maximum width for a Snackbar's inline action. If the view is width than this then
-         the Snackbar will change to vertical stacking -->
-    <dimen name="design_snackbar_action_inline_max_width">128dp</dimen>
-
-    <dimen name="design_snackbar_text_size">14sp</dimen>
-
-    <dimen name="design_appbar_elevation">4dp</dimen>
-
-    <dimen name="design_bottom_sheet_modal_elevation">16dp</dimen>
-    <dimen name="design_bottom_sheet_peek_height_min">64dp</dimen>
-
-    <dimen name="design_bottom_navigation_height">56dp</dimen>
-    <dimen name="design_bottom_navigation_elevation">8dp</dimen>
-    <dimen name="design_bottom_navigation_shadow_height">1dp</dimen>
-    <dimen name="design_bottom_navigation_text_size">12sp</dimen>
-    <dimen name="design_bottom_navigation_active_text_size">14sp</dimen>
-    <dimen name="design_bottom_navigation_margin">8dp</dimen>
-    <dimen name="design_bottom_navigation_item_min_width">56dp</dimen>
-    <dimen name="design_bottom_navigation_item_max_width">96dp</dimen>
-    <dimen name="design_bottom_navigation_active_item_max_width">168dp</dimen>
-
-</resources>
diff --git a/design/res/values/ids.xml b/design/res/values/ids.xml
deleted file mode 100644
index ca90284..0000000
--- a/design/res/values/ids.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources>
-
-    <item name="view_offset_helper" type="id" />
-
-    <item name="textinput_error" type="id" />
-    <item name="textinput_counter" type="id" />
-
-</resources>
-
diff --git a/design/res/values/password_visibility.xml b/design/res/values/password_visibility.xml
deleted file mode 100644
index 1c85c1a..0000000
--- a/design/res/values/password_visibility.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Resources used in the password visibility anim, see @drawable/design_password_eye -->
-    <string name="path_password_eye_mask_visible" translatable="false">M2,4.27 L2,4.27 L4.54,1.73 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z</string>
-    <string name="path_password_eye_mask_strike_through" translatable="false">M2,4.27 L19.73,22 L22.27,19.46 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z</string>
-    <string name="path_password_eye" translatable="false">M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z</string>
-    <string name="path_password_strike_through" translatable="false">M3.27,4.27 L19.74,20.74</string>
-    <integer name="show_password_duration">200</integer>
-    <integer name="hide_password_duration">320</integer>
-
-</resources>
diff --git a/design/res/values/strings.xml b/design/res/values/strings.xml
deleted file mode 100644
index 43a84cd..0000000
--- a/design/res/values/strings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources>
-    <!-- The class name to the ScrollingChildBehavior required for AppBarLayout -->
-    <string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
-    <!-- The class name to the BottomSheetBehavior -->
-    <string name="bottom_sheet_behavior" translatable="false">android.support.design.widget.BottomSheetBehavior</string>
-    <!-- The text pattern for the character counter -->
-    <string name="character_counter_pattern" translatable="false">%1$d / %2$d</string>
-    <!-- Content description for the password visibility toggle button. [CHAR LIMIT=NONE] -->
-    <string name="password_toggle_content_description">Toggle password visibility</string>
-</resources>
-
diff --git a/design/res/values/styles.xml b/design/res/values/styles.xml
deleted file mode 100644
index bbb200d..0000000
--- a/design/res/values/styles.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources xmlns:tools="http://schemas.android.com/tools">
-
-    <style name="Widget.Design.FloatingActionButton" parent="android:Widget">
-        <item name="android:background">@drawable/design_fab_background</item>
-        <item name="backgroundTint">?attr/colorAccent</item>
-        <item name="fabSize">auto</item>
-        <item name="elevation">@dimen/design_fab_elevation</item>
-        <item name="pressedTranslationZ">@dimen/design_fab_translation_z_pressed</item>
-        <item name="rippleColor">?attr/colorControlHighlight</item>
-        <item name="borderWidth">@dimen/design_fab_border_width</item>
-    </style>
-
-    <style name="Widget.Design.ScrimInsetsFrameLayout" parent="">
-        <item name="insetForeground">#4000</item>
-    </style>
-
-    <style name="Widget.Design.NavigationView" parent="">
-        <item name="elevation">@dimen/design_navigation_elevation</item>
-        <item name="android:background">?android:attr/windowBackground</item>
-        <item name="android:fitsSystemWindows">true</item>
-        <item name="android:maxWidth">@dimen/design_navigation_max_width</item>
-    </style>
-
-    <style name="Widget.Design.TabLayout" parent="Base.Widget.Design.TabLayout">
-        <item name="tabGravity">fill</item>
-        <item name="tabMode">fixed</item>
-    </style>
-
-    <style name="Widget.Design.BottomNavigationView" parent="">
-        <item name="itemBackground">?attr/selectableItemBackgroundBorderless</item>
-        <item name="elevation">@dimen/design_bottom_navigation_elevation</item>
-    </style>
-
-    <style name="Base.Widget.Design.TabLayout" parent="android:Widget">
-        <item name="tabMaxWidth">@dimen/design_tab_max_width</item>
-        <item name="tabIndicatorColor">?attr/colorAccent</item>
-        <item name="tabIndicatorHeight">2dp</item>
-        <item name="tabPaddingStart">12dp</item>
-        <item name="tabPaddingEnd">12dp</item>
-        <item name="tabBackground">?attr/selectableItemBackground</item>
-        <item name="tabTextAppearance">@style/TextAppearance.Design.Tab</item>
-        <item name="tabSelectedTextColor">?android:textColorPrimary</item>
-    </style>
-
-    <style name="TextAppearance.Design.Tab" parent="TextAppearance.AppCompat.Button">
-        <item name="android:textSize">@dimen/design_tab_text_size</item>
-        <item name="android:textColor">?android:textColorSecondary</item>
-        <item name="textAllCaps">true</item>
-    </style>
-
-    <style name="Widget.Design.TextInputLayout" parent="android:Widget">
-        <item name="hintTextAppearance">@style/TextAppearance.Design.Hint</item>
-        <item name="errorTextAppearance">@style/TextAppearance.Design.Error</item>
-        <item name="counterTextAppearance">@style/TextAppearance.Design.Counter</item>
-        <item name="counterOverflowTextAppearance">@style/TextAppearance.Design.Counter.Overflow</item>
-        <item name="passwordToggleDrawable">@drawable/design_password_eye</item>
-        <item name="passwordToggleTint">@color/design_tint_password_toggle</item>
-        <item name="passwordToggleContentDescription">@string/password_toggle_content_description</item>
-    </style>
-
-    <style name="TextAppearance.Design.Hint" parent="TextAppearance.AppCompat.Caption">
-        <item name="android:textColor">?attr/colorControlActivated</item>
-    </style>
-
-    <style name="TextAppearance.Design.Error" parent="TextAppearance.AppCompat.Caption">
-        <item name="android:textColor">@color/design_error</item>
-    </style>
-
-    <style name="TextAppearance.Design.Counter" parent="TextAppearance.AppCompat.Caption"/>
-
-    <style name="TextAppearance.Design.Counter.Overflow" parent="TextAppearance.AppCompat.Caption">
-        <item name="android:textColor">@color/design_error</item>
-    </style>
-
-    <style name="TextAppearance.Design.Snackbar.Message" parent="android:TextAppearance">
-        <item name="android:textSize">@dimen/design_snackbar_text_size</item>
-        <item name="android:textColor">?android:textColorPrimary</item>
-    </style>
-
-    <style name="Widget.Design.Snackbar" parent="android:Widget">
-        <item name="android:minWidth">@dimen/design_snackbar_min_width</item>
-        <item name="android:maxWidth">@dimen/design_snackbar_max_width</item>
-        <item name="android:background">@drawable/design_snackbar_background</item>
-        <item name="android:paddingLeft">@dimen/design_snackbar_padding_horizontal</item>
-        <item name="android:paddingRight">@dimen/design_snackbar_padding_horizontal</item>
-        <item name="elevation">@dimen/design_snackbar_elevation</item>
-        <item name="maxActionInlineWidth">@dimen/design_snackbar_action_inline_max_width</item>
-    </style>
-
-    <style name="Widget.Design.CollapsingToolbar" parent="android:Widget">
-        <item name="expandedTitleMargin">32dp</item>
-        <item name="statusBarScrim">?attr/colorPrimaryDark</item>
-    </style>
-
-    <style name="Base.Widget.Design.AppBarLayout" parent="Base.V14.Widget.Design.AppBarLayout" />
-
-    <style name="Base.V14.Widget.Design.AppBarLayout" parent="android:Widget">
-        <item name="android:background">?attr/colorPrimary</item>
-    </style>
-
-    <style name="Widget.Design.AppBarLayout" parent="Base.Widget.Design.AppBarLayout">
-    </style>
-
-    <style name="Widget.Design.CoordinatorLayout" parent="@style/Widget.Support.CoordinatorLayout">
-        <item name="statusBarBackground">?attr/colorPrimaryDark</item>
-    </style>
-
-    <style name="TextAppearance.Design.CollapsingToolbar.Expanded" parent="TextAppearance.AppCompat.Display1">
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
-    </style>
-
-    <style name="Animation.Design.BottomSheetDialog" parent="Animation.AppCompat.Dialog">
-        <item name="android:windowEnterAnimation">@anim/design_bottom_sheet_slide_in</item>
-        <item name="android:windowExitAnimation">@anim/design_bottom_sheet_slide_out</item>
-    </style>
-
-    <style name="Widget.Design.BottomSheet.Modal" parent="android:Widget">
-        <item name="android:background">?android:attr/colorBackground</item>
-        <item tools:ignore="NewApi" name="android:elevation">@dimen/design_bottom_sheet_modal_elevation</item>
-        <item name="behavior_peekHeight">auto</item>
-        <item name="behavior_hideable">true</item>
-        <item name="behavior_skipCollapsed">false</item>
-    </style>
-
-</resources>
-
diff --git a/design/res/values/themes.xml b/design/res/values/themes.xml
deleted file mode 100644
index aa4c876..0000000
--- a/design/res/values/themes.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-<resources>
-
-    <style name="Theme.Design.BottomSheetDialog" parent="Theme.AppCompat.Dialog">
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:windowAnimationStyle">@style/Animation.Design.BottomSheetDialog</item>
-        <item name="bottomSheetStyle">@style/Widget.Design.BottomSheet.Modal</item>
-    </style>
-
-    <style name="Theme.Design.Light.BottomSheetDialog" parent="Theme.AppCompat.Light.Dialog">
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:windowAnimationStyle">@style/Animation.Design.BottomSheetDialog</item>
-        <item name="bottomSheetStyle">@style/Widget.Design.BottomSheet.Modal</item>
-    </style>
-
-    <style name="Theme.Design" parent="Theme.AppCompat">
-        <item name="textColorError">?attr/colorError</item>
-        <item name="coordinatorLayoutStyle">@style/Widget.Design.CoordinatorLayout</item>
-    </style>
-
-    <style name="Theme.Design.Light" parent="Theme.AppCompat.Light">
-        <item name="textColorError">?attr/colorError</item>
-        <item name="coordinatorLayoutStyle">@style/Widget.Design.CoordinatorLayout</item>
-    </style>
-
-    <style name="Theme.Design.NoActionBar">
-        <item name="windowActionBar">false</item>
-        <item name="windowNoTitle">true</item>
-    </style>
-
-    <style name="Theme.Design.Light.NoActionBar">
-        <item name="windowActionBar">false</item>
-        <item name="windowNoTitle">true</item>
-    </style>
-
-</resources>
diff --git a/design/src/android/support/design/internal/BaselineLayout.java b/design/src/android/support/design/internal/BaselineLayout.java
deleted file mode 100644
index 0bfdf24..0000000
--- a/design/src/android/support/design/internal/BaselineLayout.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * A simple ViewGroup that aligns all the views inside on a baseline. Note: bottom padding for this
- * view will be measured starting from the baseline.
- *
- * @hide
- */
-public class BaselineLayout extends ViewGroup {
-    private int mBaseline = -1;
-
-    public BaselineLayout(Context context) {
-        super(context, null, 0);
-    }
-
-    public BaselineLayout(Context context, AttributeSet attrs) {
-        super(context, attrs, 0);
-    }
-
-    public BaselineLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int count = getChildCount();
-        int maxWidth = 0;
-        int maxHeight = 0;
-        int maxChildBaseline = -1;
-        int maxChildDescent = -1;
-        int childState = 0;
-
-        for (int i = 0; i < count; i++) {
-            final View child = getChildAt(i);
-            if (child.getVisibility() == GONE) {
-                continue;
-            }
-
-            measureChild(child, widthMeasureSpec, heightMeasureSpec);
-            final int baseline = child.getBaseline();
-            if (baseline != -1) {
-                maxChildBaseline = Math.max(maxChildBaseline, baseline);
-                maxChildDescent = Math.max(maxChildDescent, child.getMeasuredHeight() - baseline);
-            }
-            maxWidth = Math.max(maxWidth, child.getMeasuredWidth());
-            maxHeight = Math.max(maxHeight, child.getMeasuredHeight());
-            childState = View.combineMeasuredStates(childState, child.getMeasuredState());
-        }
-        if (maxChildBaseline != -1) {
-            maxChildDescent = Math.max(maxChildDescent, getPaddingBottom());
-            maxHeight = Math.max(maxHeight, maxChildBaseline + maxChildDescent);
-            mBaseline = maxChildBaseline;
-        }
-        maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight());
-        maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth());
-        setMeasuredDimension(
-                View.resolveSizeAndState(maxWidth, widthMeasureSpec, childState),
-                View.resolveSizeAndState(maxHeight, heightMeasureSpec,
-                        childState << MEASURED_HEIGHT_STATE_SHIFT));
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        final int count = getChildCount();
-        final int parentLeft = getPaddingLeft();
-        final int parentRight = right - left - getPaddingRight();
-        final int parentContentWidth = parentRight - parentLeft;
-        final int parentTop = getPaddingTop();
-
-        for (int i = 0; i < count; i++) {
-            final View child = getChildAt(i);
-            if (child.getVisibility() == GONE) {
-                continue;
-            }
-
-            final int width = child.getMeasuredWidth();
-            final int height = child.getMeasuredHeight();
-
-            final int childLeft = parentLeft + (parentContentWidth - width) / 2;
-            final int childTop;
-            if (mBaseline != -1 && child.getBaseline() != -1) {
-                childTop = parentTop + mBaseline - child.getBaseline();
-            } else {
-                childTop = parentTop;
-            }
-
-            child.layout(childLeft, childTop, childLeft + width, childTop + height);
-        }
-    }
-
-    @Override
-    public int getBaseline() {
-        return mBaseline;
-    }
-}
diff --git a/design/src/android/support/design/internal/BottomNavigationItemView.java b/design/src/android/support/design/internal/BottomNavigationItemView.java
deleted file mode 100644
index fe5e636..0000000
--- a/design/src/android/support/design/internal/BottomNavigationItemView.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.design.R;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v4.view.PointerIconCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.view.menu.MenuView;
-import android.support.v7.widget.TooltipCompat;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class BottomNavigationItemView extends FrameLayout implements MenuView.ItemView {
-    public static final int INVALID_ITEM_POSITION = -1;
-
-    private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };
-
-    private final int mDefaultMargin;
-    private final int mShiftAmount;
-    private final float mScaleUpFactor;
-    private final float mScaleDownFactor;
-
-    private boolean mShiftingMode;
-
-    private ImageView mIcon;
-    private final TextView mSmallLabel;
-    private final TextView mLargeLabel;
-    private int mItemPosition = INVALID_ITEM_POSITION;
-
-    private MenuItemImpl mItemData;
-
-    private ColorStateList mIconTint;
-
-    public BottomNavigationItemView(@NonNull Context context) {
-        this(context, null);
-    }
-
-    public BottomNavigationItemView(@NonNull Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public BottomNavigationItemView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        final Resources res = getResources();
-        int inactiveLabelSize =
-                res.getDimensionPixelSize(R.dimen.design_bottom_navigation_text_size);
-        int activeLabelSize = res.getDimensionPixelSize(
-                R.dimen.design_bottom_navigation_active_text_size);
-        mDefaultMargin = res.getDimensionPixelSize(R.dimen.design_bottom_navigation_margin);
-        mShiftAmount = inactiveLabelSize - activeLabelSize;
-        mScaleUpFactor = 1f * activeLabelSize / inactiveLabelSize;
-        mScaleDownFactor = 1f * inactiveLabelSize / activeLabelSize;
-
-        LayoutInflater.from(context).inflate(R.layout.design_bottom_navigation_item, this, true);
-        setBackgroundResource(R.drawable.design_bottom_navigation_item_background);
-        mIcon = findViewById(R.id.icon);
-        mSmallLabel = findViewById(R.id.smallLabel);
-        mLargeLabel = findViewById(R.id.largeLabel);
-    }
-
-    @Override
-    public void initialize(MenuItemImpl itemData, int menuType) {
-        mItemData = itemData;
-        setCheckable(itemData.isCheckable());
-        setChecked(itemData.isChecked());
-        setEnabled(itemData.isEnabled());
-        setIcon(itemData.getIcon());
-        setTitle(itemData.getTitle());
-        setId(itemData.getItemId());
-        setContentDescription(itemData.getContentDescription());
-        TooltipCompat.setTooltipText(this, itemData.getTooltipText());
-    }
-
-    public void setItemPosition(int position) {
-        mItemPosition = position;
-    }
-
-    public int getItemPosition() {
-        return mItemPosition;
-    }
-
-    public void setShiftingMode(boolean enabled) {
-        mShiftingMode = enabled;
-    }
-
-    @Override
-    public MenuItemImpl getItemData() {
-        return mItemData;
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        mSmallLabel.setText(title);
-        mLargeLabel.setText(title);
-    }
-
-    @Override
-    public void setCheckable(boolean checkable) {
-        refreshDrawableState();
-    }
-
-    @Override
-    public void setChecked(boolean checked) {
-        mLargeLabel.setPivotX(mLargeLabel.getWidth() / 2);
-        mLargeLabel.setPivotY(mLargeLabel.getBaseline());
-        mSmallLabel.setPivotX(mSmallLabel.getWidth() / 2);
-        mSmallLabel.setPivotY(mSmallLabel.getBaseline());
-        if (mShiftingMode) {
-            if (checked) {
-                LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams();
-                iconParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
-                iconParams.topMargin = mDefaultMargin;
-                mIcon.setLayoutParams(iconParams);
-                mLargeLabel.setVisibility(VISIBLE);
-                mLargeLabel.setScaleX(1f);
-                mLargeLabel.setScaleY(1f);
-            } else {
-                LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams();
-                iconParams.gravity = Gravity.CENTER;
-                iconParams.topMargin = mDefaultMargin;
-                mIcon.setLayoutParams(iconParams);
-                mLargeLabel.setVisibility(INVISIBLE);
-                mLargeLabel.setScaleX(0.5f);
-                mLargeLabel.setScaleY(0.5f);
-            }
-            mSmallLabel.setVisibility(INVISIBLE);
-        } else {
-            if (checked) {
-                LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams();
-                iconParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
-                iconParams.topMargin = mDefaultMargin + mShiftAmount;
-                mIcon.setLayoutParams(iconParams);
-                mLargeLabel.setVisibility(VISIBLE);
-                mSmallLabel.setVisibility(INVISIBLE);
-
-                mLargeLabel.setScaleX(1f);
-                mLargeLabel.setScaleY(1f);
-                mSmallLabel.setScaleX(mScaleUpFactor);
-                mSmallLabel.setScaleY(mScaleUpFactor);
-            } else {
-                LayoutParams iconParams = (LayoutParams) mIcon.getLayoutParams();
-                iconParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
-                iconParams.topMargin = mDefaultMargin;
-                mIcon.setLayoutParams(iconParams);
-                mLargeLabel.setVisibility(INVISIBLE);
-                mSmallLabel.setVisibility(VISIBLE);
-
-                mLargeLabel.setScaleX(mScaleDownFactor);
-                mLargeLabel.setScaleY(mScaleDownFactor);
-                mSmallLabel.setScaleX(1f);
-                mSmallLabel.setScaleY(1f);
-            }
-        }
-
-        refreshDrawableState();
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        super.setEnabled(enabled);
-        mSmallLabel.setEnabled(enabled);
-        mLargeLabel.setEnabled(enabled);
-        mIcon.setEnabled(enabled);
-
-        if (enabled) {
-            ViewCompat.setPointerIcon(this,
-                    PointerIconCompat.getSystemIcon(getContext(), PointerIconCompat.TYPE_HAND));
-        } else {
-            ViewCompat.setPointerIcon(this, null);
-        }
-
-    }
-
-    @Override
-    public int[] onCreateDrawableState(final int extraSpace) {
-        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
-        if (mItemData != null && mItemData.isCheckable() && mItemData.isChecked()) {
-            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
-        }
-        return drawableState;
-    }
-
-    @Override
-    public void setShortcut(boolean showShortcut, char shortcutKey) {
-    }
-
-    @Override
-    public void setIcon(Drawable icon) {
-        if (icon != null) {
-            Drawable.ConstantState state = icon.getConstantState();
-            icon = DrawableCompat.wrap(state == null ? icon : state.newDrawable()).mutate();
-            DrawableCompat.setTintList(icon, mIconTint);
-        }
-        mIcon.setImageDrawable(icon);
-    }
-
-    @Override
-    public boolean prefersCondensedTitle() {
-        return false;
-    }
-
-    @Override
-    public boolean showsIcon() {
-        return true;
-    }
-
-    public void setIconTintList(ColorStateList tint) {
-        mIconTint = tint;
-        if (mItemData != null) {
-            // Update the icon so that the tint takes effect
-            setIcon(mItemData.getIcon());
-        }
-    }
-
-    public void setTextColor(ColorStateList color) {
-        mSmallLabel.setTextColor(color);
-        mLargeLabel.setTextColor(color);
-    }
-
-    public void setItemBackground(int background) {
-        Drawable backgroundDrawable = background == 0
-                ? null : ContextCompat.getDrawable(getContext(), background);
-        ViewCompat.setBackground(this, backgroundDrawable);
-    }
-}
diff --git a/design/src/android/support/design/internal/BottomNavigationMenu.java b/design/src/android/support/design/internal/BottomNavigationMenu.java
deleted file mode 100644
index a86d2ad..0000000
--- a/design/src/android/support/design/internal/BottomNavigationMenu.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.support.annotation.RestrictTo;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.view.MenuItem;
-import android.view.SubMenu;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public final class BottomNavigationMenu extends MenuBuilder {
-    public static final int MAX_ITEM_COUNT = 5;
-
-    public BottomNavigationMenu(Context context) {
-        super(context);
-    }
-
-    @Override
-    public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {
-        throw new UnsupportedOperationException("BottomNavigationView does not support submenus");
-    }
-
-    @Override
-    protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {
-        if (size() + 1 > MAX_ITEM_COUNT) {
-            throw new IllegalArgumentException(
-                    "Maximum number of items supported by BottomNavigationView is " + MAX_ITEM_COUNT
-                            + ". Limit can be checked with BottomNavigationView#getMaxItemCount()");
-        }
-        stopDispatchingItemsChanged();
-        final MenuItem item = super.addInternal(group, id, categoryOrder, title);
-        if (item instanceof MenuItemImpl) {
-            ((MenuItemImpl) item).setExclusiveCheckable(true);
-        }
-        startDispatchingItemsChanged();
-        return item;
-    }
-}
diff --git a/design/src/android/support/design/internal/BottomNavigationMenuView.java b/design/src/android/support/design/internal/BottomNavigationMenuView.java
deleted file mode 100644
index bf33454..0000000
--- a/design/src/android/support/design/internal/BottomNavigationMenuView.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.design.R;
-import android.support.transition.AutoTransition;
-import android.support.transition.TransitionManager;
-import android.support.transition.TransitionSet;
-import android.support.v4.util.Pools;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.animation.FastOutSlowInInterpolator;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.view.menu.MenuView;
-import android.util.AttributeSet;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * @hide For internal use only.
- */
-@RestrictTo(LIBRARY_GROUP)
-public class BottomNavigationMenuView extends ViewGroup implements MenuView {
-    private static final long ACTIVE_ANIMATION_DURATION_MS = 115L;
-
-    private final TransitionSet mSet;
-    private final int mInactiveItemMaxWidth;
-    private final int mInactiveItemMinWidth;
-    private final int mActiveItemMaxWidth;
-    private final int mItemHeight;
-    private final OnClickListener mOnClickListener;
-    private final Pools.Pool<BottomNavigationItemView> mItemPool = new Pools.SynchronizedPool<>(5);
-
-    private boolean mShiftingMode = true;
-
-    private BottomNavigationItemView[] mButtons;
-    private int mSelectedItemId = 0;
-    private int mSelectedItemPosition = 0;
-    private ColorStateList mItemIconTint;
-    private ColorStateList mItemTextColor;
-    private int mItemBackgroundRes;
-    private int[] mTempChildWidths;
-
-    private BottomNavigationPresenter mPresenter;
-    private MenuBuilder mMenu;
-
-    public BottomNavigationMenuView(Context context) {
-        this(context, null);
-    }
-
-    public BottomNavigationMenuView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        final Resources res = getResources();
-        mInactiveItemMaxWidth = res.getDimensionPixelSize(
-                R.dimen.design_bottom_navigation_item_max_width);
-        mInactiveItemMinWidth = res.getDimensionPixelSize(
-                R.dimen.design_bottom_navigation_item_min_width);
-        mActiveItemMaxWidth = res.getDimensionPixelSize(
-                R.dimen.design_bottom_navigation_active_item_max_width);
-        mItemHeight = res.getDimensionPixelSize(R.dimen.design_bottom_navigation_height);
-
-        mSet = new AutoTransition();
-        mSet.setOrdering(TransitionSet.ORDERING_TOGETHER);
-        mSet.setDuration(ACTIVE_ANIMATION_DURATION_MS);
-        mSet.setInterpolator(new FastOutSlowInInterpolator());
-        mSet.addTransition(new TextScale());
-
-        mOnClickListener = new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                final BottomNavigationItemView itemView = (BottomNavigationItemView) v;
-                MenuItem item = itemView.getItemData();
-                if (!mMenu.performItemAction(item, mPresenter, 0)) {
-                    item.setChecked(true);
-                }
-            }
-        };
-        mTempChildWidths = new int[BottomNavigationMenu.MAX_ITEM_COUNT];
-    }
-
-    @Override
-    public void initialize(MenuBuilder menu) {
-        mMenu = menu;
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int width = MeasureSpec.getSize(widthMeasureSpec);
-        final int count = getChildCount();
-
-        final int heightSpec = MeasureSpec.makeMeasureSpec(mItemHeight, MeasureSpec.EXACTLY);
-
-        if (mShiftingMode) {
-            final int inactiveCount = count - 1;
-            final int activeMaxAvailable = width - inactiveCount * mInactiveItemMinWidth;
-            final int activeWidth = Math.min(activeMaxAvailable, mActiveItemMaxWidth);
-            final int inactiveMaxAvailable = (width - activeWidth) / inactiveCount;
-            final int inactiveWidth = Math.min(inactiveMaxAvailable, mInactiveItemMaxWidth);
-            int extra = width - activeWidth - inactiveWidth * inactiveCount;
-            for (int i = 0; i < count; i++) {
-                mTempChildWidths[i] = (i == mSelectedItemPosition) ? activeWidth : inactiveWidth;
-                if (extra > 0) {
-                    mTempChildWidths[i]++;
-                    extra--;
-                }
-            }
-        } else {
-            final int maxAvailable = width / (count == 0 ? 1 : count);
-            final int childWidth = Math.min(maxAvailable, mActiveItemMaxWidth);
-            int extra = width - childWidth * count;
-            for (int i = 0; i < count; i++) {
-                mTempChildWidths[i] = childWidth;
-                if (extra > 0) {
-                    mTempChildWidths[i]++;
-                    extra--;
-                }
-            }
-        }
-
-        int totalWidth = 0;
-        for (int i = 0; i < count; i++) {
-            final View child = getChildAt(i);
-            if (child.getVisibility() == GONE) {
-                continue;
-            }
-            child.measure(MeasureSpec.makeMeasureSpec(mTempChildWidths[i], MeasureSpec.EXACTLY),
-                    heightSpec);
-            ViewGroup.LayoutParams params = child.getLayoutParams();
-            params.width = child.getMeasuredWidth();
-            totalWidth += child.getMeasuredWidth();
-        }
-        setMeasuredDimension(
-                View.resolveSizeAndState(totalWidth,
-                        MeasureSpec.makeMeasureSpec(totalWidth, MeasureSpec.EXACTLY), 0),
-                View.resolveSizeAndState(mItemHeight, heightSpec, 0));
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        final int count = getChildCount();
-        final int width = right - left;
-        final int height = bottom - top;
-        int used = 0;
-        for (int i = 0; i < count; i++) {
-            final View child = getChildAt(i);
-            if (child.getVisibility() == GONE) {
-                continue;
-            }
-            if (ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL) {
-                child.layout(width - used - child.getMeasuredWidth(), 0, width - used, height);
-            } else {
-                child.layout(used, 0, child.getMeasuredWidth() + used, height);
-            }
-            used += child.getMeasuredWidth();
-        }
-    }
-
-    @Override
-    public int getWindowAnimations() {
-        return 0;
-    }
-
-    /**
-     * Sets the tint which is applied to the menu items' icons.
-     *
-     * @param tint the tint to apply
-     */
-    public void setIconTintList(ColorStateList tint) {
-        mItemIconTint = tint;
-        if (mButtons == null) return;
-        for (BottomNavigationItemView item : mButtons) {
-            item.setIconTintList(tint);
-        }
-    }
-
-    /**
-     * Returns the tint which is applied to menu items' icons.
-     *
-     * @return the ColorStateList that is used to tint menu items' icons
-     */
-    @Nullable
-    public ColorStateList getIconTintList() {
-        return mItemIconTint;
-    }
-
-    /**
-     * Sets the text color to be used on menu items.
-     *
-     * @param color the ColorStateList used for menu items' text.
-     */
-    public void setItemTextColor(ColorStateList color) {
-        mItemTextColor = color;
-        if (mButtons == null) return;
-        for (BottomNavigationItemView item : mButtons) {
-            item.setTextColor(color);
-        }
-    }
-
-    /**
-     * Returns the text color used on menu items.
-     *
-     * @return the ColorStateList used for menu items' text
-     */
-    public ColorStateList getItemTextColor() {
-        return mItemTextColor;
-    }
-
-    /**
-     * Sets the resource ID to be used for item background.
-     *
-     * @param background the resource ID of the background
-     */
-    public void setItemBackgroundRes(int background) {
-        mItemBackgroundRes = background;
-        if (mButtons == null) return;
-        for (BottomNavigationItemView item : mButtons) {
-            item.setItemBackground(background);
-        }
-    }
-
-    /**
-     * Returns the resource ID for the background of the menu items.
-     *
-     * @return the resource ID for the background
-     */
-    public int getItemBackgroundRes() {
-        return mItemBackgroundRes;
-    }
-
-    public void setPresenter(BottomNavigationPresenter presenter) {
-        mPresenter = presenter;
-    }
-
-    public void buildMenuView() {
-        removeAllViews();
-        if (mButtons != null) {
-            for (BottomNavigationItemView item : mButtons) {
-                mItemPool.release(item);
-            }
-        }
-        if (mMenu.size() == 0) {
-            mSelectedItemId = 0;
-            mSelectedItemPosition = 0;
-            mButtons = null;
-            return;
-        }
-        mButtons = new BottomNavigationItemView[mMenu.size()];
-        mShiftingMode = mMenu.size() > 3;
-        for (int i = 0; i < mMenu.size(); i++) {
-            mPresenter.setUpdateSuspended(true);
-            mMenu.getItem(i).setCheckable(true);
-            mPresenter.setUpdateSuspended(false);
-            BottomNavigationItemView child = getNewItem();
-            mButtons[i] = child;
-            child.setIconTintList(mItemIconTint);
-            child.setTextColor(mItemTextColor);
-            child.setItemBackground(mItemBackgroundRes);
-            child.setShiftingMode(mShiftingMode);
-            child.initialize((MenuItemImpl) mMenu.getItem(i), 0);
-            child.setItemPosition(i);
-            child.setOnClickListener(mOnClickListener);
-            addView(child);
-        }
-        mSelectedItemPosition = Math.min(mMenu.size() - 1, mSelectedItemPosition);
-        mMenu.getItem(mSelectedItemPosition).setChecked(true);
-    }
-
-    public void updateMenuView() {
-        final int menuSize = mMenu.size();
-        if (menuSize != mButtons.length) {
-            // The size has changed. Rebuild menu view from scratch.
-            buildMenuView();
-            return;
-        }
-        int previousSelectedId = mSelectedItemId;
-
-        for (int i = 0; i < menuSize; i++) {
-            MenuItem item = mMenu.getItem(i);
-            if (item.isChecked()) {
-                mSelectedItemId = item.getItemId();
-                mSelectedItemPosition = i;
-            }
-        }
-        if (previousSelectedId != mSelectedItemId) {
-            // Note: this has to be called before BottomNavigationItemView#initialize().
-            TransitionManager.beginDelayedTransition(this, mSet);
-        }
-
-        for (int i = 0; i < menuSize; i++) {
-            mPresenter.setUpdateSuspended(true);
-            mButtons[i].initialize((MenuItemImpl) mMenu.getItem(i), 0);
-            mPresenter.setUpdateSuspended(false);
-        }
-
-    }
-
-    private BottomNavigationItemView getNewItem() {
-        BottomNavigationItemView item = mItemPool.acquire();
-        if (item == null) {
-            item = new BottomNavigationItemView(getContext());
-        }
-        return item;
-    }
-
-    public int getSelectedItemId() {
-        return mSelectedItemId;
-    }
-
-    void tryRestoreSelectedItemId(int itemId) {
-        final int size = mMenu.size();
-        for (int i = 0; i < size; i++) {
-            MenuItem item = mMenu.getItem(i);
-            if (itemId == item.getItemId()) {
-                mSelectedItemId = itemId;
-                mSelectedItemPosition = i;
-                item.setChecked(true);
-                break;
-            }
-        }
-    }
-}
diff --git a/design/src/android/support/design/internal/BottomNavigationPresenter.java b/design/src/android/support/design/internal/BottomNavigationPresenter.java
deleted file mode 100644
index 1343a4b..0000000
--- a/design/src/android/support/design/internal/BottomNavigationPresenter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.view.menu.MenuPresenter;
-import android.support.v7.view.menu.MenuView;
-import android.support.v7.view.menu.SubMenuBuilder;
-import android.view.ViewGroup;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class BottomNavigationPresenter implements MenuPresenter {
-    private MenuBuilder mMenu;
-    private BottomNavigationMenuView mMenuView;
-    private boolean mUpdateSuspended = false;
-    private int mId;
-
-    public void setBottomNavigationMenuView(BottomNavigationMenuView menuView) {
-        mMenuView = menuView;
-    }
-
-    @Override
-    public void initForMenu(Context context, MenuBuilder menu) {
-        mMenuView.initialize(mMenu);
-        mMenu = menu;
-    }
-
-    @Override
-    public MenuView getMenuView(ViewGroup root) {
-        return mMenuView;
-    }
-
-    @Override
-    public void updateMenuView(boolean cleared) {
-        if (mUpdateSuspended) return;
-        if (cleared) {
-            mMenuView.buildMenuView();
-        } else {
-            mMenuView.updateMenuView();
-        }
-    }
-
-    @Override
-    public void setCallback(Callback cb) {}
-
-    @Override
-    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
-        return false;
-    }
-
-    @Override
-    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {}
-
-    @Override
-    public boolean flagActionItems() {
-        return false;
-    }
-
-    @Override
-    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {
-        return false;
-    }
-
-    @Override
-    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {
-        return false;
-    }
-
-    public void setId(int id) {
-        mId = id;
-    }
-
-    @Override
-    public int getId() {
-        return mId;
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        SavedState savedState = new SavedState();
-        savedState.selectedItemId = mMenuView.getSelectedItemId();
-        return savedState;
-    }
-
-    @Override
-    public void onRestoreInstanceState(Parcelable state) {
-        if (state instanceof SavedState) {
-            mMenuView.tryRestoreSelectedItemId(((SavedState) state).selectedItemId);
-        }
-    }
-
-    public void setUpdateSuspended(boolean updateSuspended) {
-        mUpdateSuspended = updateSuspended;
-    }
-
-    static class SavedState implements Parcelable {
-        int selectedItemId;
-
-        SavedState() {}
-
-        SavedState(Parcel in) {
-            selectedItemId = in.readInt();
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(@NonNull Parcel out, int flags) {
-            out.writeInt(selectedItemId);
-        }
-
-        public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in);
-            }
-
-            @Override
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-}
diff --git a/design/src/android/support/design/internal/ForegroundLinearLayout.java b/design/src/android/support/design/internal/ForegroundLinearLayout.java
deleted file mode 100644
index 6d90503..0000000
--- a/design/src/android/support/design/internal/ForegroundLinearLayout.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.design.R;
-import android.support.v7.widget.LinearLayoutCompat;
-import android.util.AttributeSet;
-import android.view.Gravity;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class ForegroundLinearLayout extends LinearLayoutCompat {
-
-    private Drawable mForeground;
-
-    private final Rect mSelfBounds = new Rect();
-
-    private final Rect mOverlayBounds = new Rect();
-
-    private int mForegroundGravity = Gravity.FILL;
-
-    protected boolean mForegroundInPadding = true;
-
-    boolean mForegroundBoundsChanged = false;
-
-    public ForegroundLinearLayout(Context context) {
-        this(context, null);
-    }
-
-    public ForegroundLinearLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public ForegroundLinearLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundLinearLayout,
-                defStyle, 0);
-
-        mForegroundGravity = a.getInt(
-                R.styleable.ForegroundLinearLayout_android_foregroundGravity, mForegroundGravity);
-
-        final Drawable d = a.getDrawable(R.styleable.ForegroundLinearLayout_android_foreground);
-        if (d != null) {
-            setForeground(d);
-        }
-
-        mForegroundInPadding = a.getBoolean(
-                R.styleable.ForegroundLinearLayout_foregroundInsidePadding, true);
-
-        a.recycle();
-    }
-
-    /**
-     * Describes how the foreground is positioned.
-     *
-     * @return foreground gravity.
-     * @see #setForegroundGravity(int)
-     */
-    @Override
-    public int getForegroundGravity() {
-        return mForegroundGravity;
-    }
-
-    /**
-     * Describes how the foreground is positioned. Defaults to START and TOP.
-     *
-     * @param foregroundGravity See {@link android.view.Gravity}
-     * @see #getForegroundGravity()
-     */
-    @Override
-    public void setForegroundGravity(int foregroundGravity) {
-        if (mForegroundGravity != foregroundGravity) {
-            if ((foregroundGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) {
-                foregroundGravity |= Gravity.START;
-            }
-
-            if ((foregroundGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {
-                foregroundGravity |= Gravity.TOP;
-            }
-
-            mForegroundGravity = foregroundGravity;
-
-            if (mForegroundGravity == Gravity.FILL && mForeground != null) {
-                Rect padding = new Rect();
-                mForeground.getPadding(padding);
-            }
-
-            requestLayout();
-        }
-    }
-
-    @Override
-    protected boolean verifyDrawable(Drawable who) {
-        return super.verifyDrawable(who) || (who == mForeground);
-    }
-
-    @RequiresApi(11)
-    @Override
-    public void jumpDrawablesToCurrentState() {
-        super.jumpDrawablesToCurrentState();
-        if (mForeground != null) {
-            mForeground.jumpToCurrentState();
-        }
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        super.drawableStateChanged();
-        if (mForeground != null && mForeground.isStateful()) {
-            mForeground.setState(getDrawableState());
-        }
-    }
-
-    /**
-     * Supply a Drawable that is to be rendered on top of all of the child
-     * views in the frame layout.  Any padding in the Drawable will be taken
-     * into account by ensuring that the children are inset to be placed
-     * inside of the padding area.
-     *
-     * @param drawable The Drawable to be drawn on top of the children.
-     */
-    @Override
-    public void setForeground(Drawable drawable) {
-        if (mForeground != drawable) {
-            if (mForeground != null) {
-                mForeground.setCallback(null);
-                unscheduleDrawable(mForeground);
-            }
-
-            mForeground = drawable;
-
-            if (drawable != null) {
-                setWillNotDraw(false);
-                drawable.setCallback(this);
-                if (drawable.isStateful()) {
-                    drawable.setState(getDrawableState());
-                }
-                if (mForegroundGravity == Gravity.FILL) {
-                    Rect padding = new Rect();
-                    drawable.getPadding(padding);
-                }
-            } else {
-                setWillNotDraw(true);
-            }
-            requestLayout();
-            invalidate();
-        }
-    }
-
-    /**
-     * Returns the drawable used as the foreground of this FrameLayout. The
-     * foreground drawable, if non-null, is always drawn on top of the children.
-     *
-     * @return A Drawable or null if no foreground was set.
-     */
-    @Override
-    public Drawable getForeground() {
-        return mForeground;
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        mForegroundBoundsChanged |= changed;
-    }
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-        mForegroundBoundsChanged = true;
-    }
-
-    @Override
-    public void draw(@NonNull Canvas canvas) {
-        super.draw(canvas);
-
-        if (mForeground != null) {
-            final Drawable foreground = mForeground;
-
-            if (mForegroundBoundsChanged) {
-                mForegroundBoundsChanged = false;
-                final Rect selfBounds = mSelfBounds;
-                final Rect overlayBounds = mOverlayBounds;
-
-                final int w = getRight() - getLeft();
-                final int h = getBottom() - getTop();
-
-                if (mForegroundInPadding) {
-                    selfBounds.set(0, 0, w, h);
-                } else {
-                    selfBounds.set(getPaddingLeft(), getPaddingTop(),
-                            w - getPaddingRight(), h - getPaddingBottom());
-                }
-
-                Gravity.apply(mForegroundGravity, foreground.getIntrinsicWidth(),
-                        foreground.getIntrinsicHeight(), selfBounds, overlayBounds);
-                foreground.setBounds(overlayBounds);
-            }
-
-            foreground.draw(canvas);
-        }
-    }
-
-    @RequiresApi(21)
-    @Override
-    public void drawableHotspotChanged(float x, float y) {
-        super.drawableHotspotChanged(x, y);
-        if (mForeground != null) {
-            mForeground.setHotspot(x, y);
-        }
-    }
-
-}
diff --git a/design/src/android/support/design/internal/NavigationMenu.java b/design/src/android/support/design/internal/NavigationMenu.java
deleted file mode 100644
index a0ec5e0..0000000
--- a/design/src/android/support/design/internal/NavigationMenu.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.support.annotation.RestrictTo;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.view.menu.SubMenuBuilder;
-import android.view.SubMenu;
-
-/**
- * This is a {@link MenuBuilder} that returns an instance of {@link NavigationSubMenu} instead of
- * {@link SubMenuBuilder} when a sub menu is created.
- *
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class NavigationMenu extends MenuBuilder {
-
-    public NavigationMenu(Context context) {
-        super(context);
-    }
-
-    @Override
-    public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {
-        final MenuItemImpl item = (MenuItemImpl) addInternal(group, id, categoryOrder, title);
-        final SubMenuBuilder subMenu = new NavigationSubMenu(getContext(), this, item);
-        item.setSubMenu(subMenu);
-        return subMenu;
-    }
-
-}
diff --git a/design/src/android/support/design/internal/NavigationMenuItemView.java b/design/src/android/support/design/internal/NavigationMenuItemView.java
deleted file mode 100644
index eea9e90..0000000
--- a/design/src/android/support/design/internal/NavigationMenuItemView.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
-import android.support.annotation.RestrictTo;
-import android.support.design.R;
-import android.support.v4.content.res.ResourcesCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v4.view.AccessibilityDelegateCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.accessibility.AccessibilityEventCompat;
-import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
-import android.support.v4.widget.TextViewCompat;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.view.menu.MenuView;
-import android.support.v7.widget.TooltipCompat;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewStub;
-import android.widget.CheckedTextView;
-import android.widget.FrameLayout;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class NavigationMenuItemView extends ForegroundLinearLayout implements MenuView.ItemView {
-
-    private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
-
-    private final int mIconSize;
-
-    private boolean mNeedsEmptyIcon;
-
-    boolean mCheckable;
-
-    private final CheckedTextView mTextView;
-
-    private FrameLayout mActionArea;
-
-    private MenuItemImpl mItemData;
-
-    private ColorStateList mIconTintList;
-
-    private boolean mHasIconTintList;
-
-    private Drawable mEmptyDrawable;
-
-    private final AccessibilityDelegateCompat mAccessibilityDelegate
-            = new AccessibilityDelegateCompat() {
-
-        @Override
-        public void onInitializeAccessibilityNodeInfo(View host,
-                AccessibilityNodeInfoCompat info) {
-            super.onInitializeAccessibilityNodeInfo(host, info);
-            info.setCheckable(mCheckable);
-        }
-
-    };
-
-    public NavigationMenuItemView(Context context) {
-        this(context, null);
-    }
-
-    public NavigationMenuItemView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public NavigationMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        setOrientation(HORIZONTAL);
-        LayoutInflater.from(context).inflate(R.layout.design_navigation_menu_item, this, true);
-        mIconSize = context.getResources().getDimensionPixelSize(
-                R.dimen.design_navigation_icon_size);
-        mTextView = findViewById(R.id.design_menu_item_text);
-        mTextView.setDuplicateParentStateEnabled(true);
-        ViewCompat.setAccessibilityDelegate(mTextView, mAccessibilityDelegate);
-    }
-
-    @Override
-    public void initialize(MenuItemImpl itemData, int menuType) {
-        mItemData = itemData;
-
-        setVisibility(itemData.isVisible() ? VISIBLE : GONE);
-
-        if (getBackground() == null) {
-            ViewCompat.setBackground(this, createDefaultBackground());
-        }
-
-        setCheckable(itemData.isCheckable());
-        setChecked(itemData.isChecked());
-        setEnabled(itemData.isEnabled());
-        setTitle(itemData.getTitle());
-        setIcon(itemData.getIcon());
-        setActionView(itemData.getActionView());
-        setContentDescription(itemData.getContentDescription());
-        TooltipCompat.setTooltipText(this, itemData.getTooltipText());
-        adjustAppearance();
-    }
-
-    private boolean shouldExpandActionArea() {
-        return mItemData.getTitle() == null &&
-                mItemData.getIcon() == null &&
-                mItemData.getActionView() != null;
-    }
-
-    private void adjustAppearance() {
-        if (shouldExpandActionArea()) {
-            // Expand the actionView area
-            mTextView.setVisibility(View.GONE);
-            if (mActionArea != null) {
-                LayoutParams params = (LayoutParams) mActionArea.getLayoutParams();
-                params.width = LayoutParams.MATCH_PARENT;
-                mActionArea.setLayoutParams(params);
-            }
-        } else {
-            mTextView.setVisibility(View.VISIBLE);
-            if (mActionArea != null) {
-                LayoutParams params = (LayoutParams) mActionArea.getLayoutParams();
-                params.width = LayoutParams.WRAP_CONTENT;
-                mActionArea.setLayoutParams(params);
-            }
-        }
-    }
-
-    public void recycle() {
-        if (mActionArea != null) {
-            mActionArea.removeAllViews();
-        }
-        mTextView.setCompoundDrawables(null, null, null, null);
-    }
-
-    private void setActionView(View actionView) {
-        if (actionView != null) {
-            if (mActionArea == null) {
-                mActionArea = (FrameLayout) ((ViewStub) findViewById(
-                        R.id.design_menu_item_action_area_stub)).inflate();
-            }
-            mActionArea.removeAllViews();
-            mActionArea.addView(actionView);
-        }
-    }
-
-    private StateListDrawable createDefaultBackground() {
-        TypedValue value = new TypedValue();
-        if (getContext().getTheme().resolveAttribute(
-                android.support.v7.appcompat.R.attr.colorControlHighlight, value, true)) {
-            StateListDrawable drawable = new StateListDrawable();
-            drawable.addState(CHECKED_STATE_SET, new ColorDrawable(value.data));
-            drawable.addState(EMPTY_STATE_SET, new ColorDrawable(Color.TRANSPARENT));
-            return drawable;
-        }
-        return null;
-    }
-
-    @Override
-    public MenuItemImpl getItemData() {
-        return mItemData;
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        mTextView.setText(title);
-    }
-
-    @Override
-    public void setCheckable(boolean checkable) {
-        refreshDrawableState();
-        if (mCheckable != checkable) {
-            mCheckable = checkable;
-            mAccessibilityDelegate.sendAccessibilityEvent(mTextView,
-                    AccessibilityEventCompat.TYPE_WINDOW_CONTENT_CHANGED);
-        }
-    }
-
-    @Override
-    public void setChecked(boolean checked) {
-        refreshDrawableState();
-        mTextView.setChecked(checked);
-    }
-
-    @Override
-    public void setShortcut(boolean showShortcut, char shortcutKey) {
-    }
-
-    @Override
-    public void setIcon(Drawable icon) {
-        if (icon != null) {
-            if (mHasIconTintList) {
-                Drawable.ConstantState state = icon.getConstantState();
-                icon = DrawableCompat.wrap(state == null ? icon : state.newDrawable()).mutate();
-                DrawableCompat.setTintList(icon, mIconTintList);
-            }
-            icon.setBounds(0, 0, mIconSize, mIconSize);
-        } else if (mNeedsEmptyIcon) {
-            if (mEmptyDrawable == null) {
-                mEmptyDrawable = ResourcesCompat.getDrawable(getResources(),
-                        R.drawable.navigation_empty_icon, getContext().getTheme());
-                if (mEmptyDrawable != null) {
-                    mEmptyDrawable.setBounds(0, 0, mIconSize, mIconSize);
-                }
-            }
-            icon = mEmptyDrawable;
-        }
-        TextViewCompat.setCompoundDrawablesRelative(mTextView, icon, null, null, null);
-    }
-
-    @Override
-    public boolean prefersCondensedTitle() {
-        return false;
-    }
-
-    @Override
-    public boolean showsIcon() {
-        return true;
-    }
-
-    @Override
-    protected int[] onCreateDrawableState(int extraSpace) {
-        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
-        if (mItemData != null && mItemData.isCheckable() && mItemData.isChecked()) {
-            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
-        }
-        return drawableState;
-    }
-
-    void setIconTintList(ColorStateList tintList) {
-        mIconTintList = tintList;
-        mHasIconTintList = mIconTintList != null;
-        if (mItemData != null) {
-            // Update the icon so that the tint takes effect
-            setIcon(mItemData.getIcon());
-        }
-    }
-
-    public void setTextAppearance(int textAppearance) {
-        TextViewCompat.setTextAppearance(mTextView, textAppearance);
-    }
-
-    public void setTextColor(ColorStateList colors) {
-        mTextView.setTextColor(colors);
-    }
-
-    public void setNeedsEmptyIcon(boolean needsEmptyIcon) {
-        mNeedsEmptyIcon = needsEmptyIcon;
-    }
-
-}
diff --git a/design/src/android/support/design/internal/NavigationMenuPresenter.java b/design/src/android/support/design/internal/NavigationMenuPresenter.java
deleted file mode 100644
index 98ad468..0000000
--- a/design/src/android/support/design/internal/NavigationMenuPresenter.java
+++ /dev/null
@@ -1,686 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.StyleRes;
-import android.support.design.R;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.WindowInsetsCompat;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.view.menu.MenuPresenter;
-import android.support.v7.view.menu.MenuView;
-import android.support.v7.view.menu.SubMenuBuilder;
-import android.support.v7.widget.RecyclerView;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.SubMenu;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class NavigationMenuPresenter implements MenuPresenter {
-
-    private static final String STATE_HIERARCHY = "android:menu:list";
-    private static final String STATE_ADAPTER = "android:menu:adapter";
-    private static final String STATE_HEADER = "android:menu:header";
-
-    private NavigationMenuView mMenuView;
-    LinearLayout mHeaderLayout;
-
-    private Callback mCallback;
-    MenuBuilder mMenu;
-    private int mId;
-
-    NavigationMenuAdapter mAdapter;
-    LayoutInflater mLayoutInflater;
-
-    int mTextAppearance;
-    boolean mTextAppearanceSet;
-    ColorStateList mTextColor;
-    ColorStateList mIconTintList;
-    Drawable mItemBackground;
-
-    /**
-     * Padding to be inserted at the top of the list to avoid the first menu item
-     * from being placed underneath the status bar.
-     */
-    private int mPaddingTopDefault;
-
-    /**
-     * Padding for separators between items
-     */
-    int mPaddingSeparator;
-
-    @Override
-    public void initForMenu(Context context, MenuBuilder menu) {
-        mLayoutInflater = LayoutInflater.from(context);
-        mMenu = menu;
-        Resources res = context.getResources();
-        mPaddingSeparator = res.getDimensionPixelOffset(
-                R.dimen.design_navigation_separator_vertical_padding);
-    }
-
-    @Override
-    public MenuView getMenuView(ViewGroup root) {
-        if (mMenuView == null) {
-            mMenuView = (NavigationMenuView) mLayoutInflater.inflate(
-                    R.layout.design_navigation_menu, root, false);
-            if (mAdapter == null) {
-                mAdapter = new NavigationMenuAdapter();
-            }
-            mHeaderLayout = (LinearLayout) mLayoutInflater
-                    .inflate(R.layout.design_navigation_item_header,
-                            mMenuView, false);
-            mMenuView.setAdapter(mAdapter);
-        }
-        return mMenuView;
-    }
-
-    @Override
-    public void updateMenuView(boolean cleared) {
-        if (mAdapter != null) {
-            mAdapter.update();
-        }
-    }
-
-    @Override
-    public void setCallback(Callback cb) {
-        mCallback = cb;
-    }
-
-    @Override
-    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
-        return false;
-    }
-
-    @Override
-    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
-        if (mCallback != null) {
-            mCallback.onCloseMenu(menu, allMenusAreClosing);
-        }
-    }
-
-    @Override
-    public boolean flagActionItems() {
-        return false;
-    }
-
-    @Override
-    public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {
-        return false;
-    }
-
-    @Override
-    public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {
-        return false;
-    }
-
-    @Override
-    public int getId() {
-        return mId;
-    }
-
-    public void setId(int id) {
-        mId = id;
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        if (Build.VERSION.SDK_INT >= 11) {
-            // API 9-10 does not support ClassLoaderCreator, therefore things can crash if they're
-            // loaded via different loaders. Rather than crash we just won't save state on those
-            // platforms
-            final Bundle state = new Bundle();
-            if (mMenuView != null) {
-                SparseArray<Parcelable> hierarchy = new SparseArray<>();
-                mMenuView.saveHierarchyState(hierarchy);
-                state.putSparseParcelableArray(STATE_HIERARCHY, hierarchy);
-            }
-            if (mAdapter != null) {
-                state.putBundle(STATE_ADAPTER, mAdapter.createInstanceState());
-            }
-            if (mHeaderLayout != null) {
-                SparseArray<Parcelable> header = new SparseArray<>();
-                mHeaderLayout.saveHierarchyState(header);
-                state.putSparseParcelableArray(STATE_HEADER, header);
-            }
-            return state;
-        }
-        return null;
-    }
-
-    @Override
-    public void onRestoreInstanceState(final Parcelable parcelable) {
-        if (parcelable instanceof Bundle) {
-            Bundle state = (Bundle) parcelable;
-            SparseArray<Parcelable> hierarchy = state.getSparseParcelableArray(STATE_HIERARCHY);
-            if (hierarchy != null) {
-                mMenuView.restoreHierarchyState(hierarchy);
-            }
-            Bundle adapterState = state.getBundle(STATE_ADAPTER);
-            if (adapterState != null) {
-                mAdapter.restoreInstanceState(adapterState);
-            }
-            SparseArray<Parcelable> header = state.getSparseParcelableArray(STATE_HEADER);
-            if (header != null) {
-                mHeaderLayout.restoreHierarchyState(header);
-            }
-        }
-    }
-
-    public void setCheckedItem(MenuItemImpl item) {
-        mAdapter.setCheckedItem(item);
-    }
-
-    public View inflateHeaderView(@LayoutRes int res) {
-        View view = mLayoutInflater.inflate(res, mHeaderLayout, false);
-        addHeaderView(view);
-        return view;
-    }
-
-    public void addHeaderView(@NonNull View view) {
-        mHeaderLayout.addView(view);
-        // The padding on top should be cleared.
-        mMenuView.setPadding(0, 0, 0, mMenuView.getPaddingBottom());
-    }
-
-    public void removeHeaderView(@NonNull View view) {
-        mHeaderLayout.removeView(view);
-        if (mHeaderLayout.getChildCount() == 0) {
-            mMenuView.setPadding(0, mPaddingTopDefault, 0, mMenuView.getPaddingBottom());
-        }
-    }
-
-    public int getHeaderCount() {
-        return mHeaderLayout.getChildCount();
-    }
-
-    public View getHeaderView(int index) {
-        return mHeaderLayout.getChildAt(index);
-    }
-
-    @Nullable
-    public ColorStateList getItemTintList() {
-        return mIconTintList;
-    }
-
-    public void setItemIconTintList(@Nullable ColorStateList tint) {
-        mIconTintList = tint;
-        updateMenuView(false);
-    }
-
-    @Nullable
-    public ColorStateList getItemTextColor() {
-        return mTextColor;
-    }
-
-    public void setItemTextColor(@Nullable ColorStateList textColor) {
-        mTextColor = textColor;
-        updateMenuView(false);
-    }
-
-    public void setItemTextAppearance(@StyleRes int resId) {
-        mTextAppearance = resId;
-        mTextAppearanceSet = true;
-        updateMenuView(false);
-    }
-
-    @Nullable
-    public Drawable getItemBackground() {
-        return mItemBackground;
-    }
-
-    public void setItemBackground(@Nullable Drawable itemBackground) {
-        mItemBackground = itemBackground;
-        updateMenuView(false);
-    }
-
-    public void setUpdateSuspended(boolean updateSuspended) {
-        if (mAdapter != null) {
-            mAdapter.setUpdateSuspended(updateSuspended);
-        }
-    }
-
-    public void dispatchApplyWindowInsets(WindowInsetsCompat insets) {
-        int top = insets.getSystemWindowInsetTop();
-        if (mPaddingTopDefault != top) {
-            mPaddingTopDefault = top;
-            if (mHeaderLayout.getChildCount() == 0) {
-                mMenuView.setPadding(0, mPaddingTopDefault, 0, mMenuView.getPaddingBottom());
-            }
-        }
-        ViewCompat.dispatchApplyWindowInsets(mHeaderLayout, insets);
-    }
-
-    private abstract static class ViewHolder extends RecyclerView.ViewHolder {
-
-        public ViewHolder(View itemView) {
-            super(itemView);
-        }
-
-    }
-
-    private static class NormalViewHolder extends ViewHolder {
-
-        public NormalViewHolder(LayoutInflater inflater, ViewGroup parent,
-                View.OnClickListener listener) {
-            super(inflater.inflate(R.layout.design_navigation_item, parent, false));
-            itemView.setOnClickListener(listener);
-        }
-
-    }
-
-    private static class SubheaderViewHolder extends ViewHolder {
-
-        public SubheaderViewHolder(LayoutInflater inflater, ViewGroup parent) {
-            super(inflater.inflate(R.layout.design_navigation_item_subheader, parent, false));
-        }
-
-    }
-
-    private static class SeparatorViewHolder extends ViewHolder {
-
-        public SeparatorViewHolder(LayoutInflater inflater, ViewGroup parent) {
-            super(inflater.inflate(R.layout.design_navigation_item_separator, parent, false));
-        }
-
-    }
-
-    private static class HeaderViewHolder extends ViewHolder {
-
-        public HeaderViewHolder(View itemView) {
-            super(itemView);
-        }
-
-    }
-
-    /**
-     * Handles click events for the menu items. The items has to be {@link NavigationMenuItemView}.
-     */
-    final View.OnClickListener mOnClickListener = new View.OnClickListener() {
-
-        @Override
-        public void onClick(View v) {
-            NavigationMenuItemView itemView = (NavigationMenuItemView) v;
-            setUpdateSuspended(true);
-            MenuItemImpl item = itemView.getItemData();
-            boolean result = mMenu.performItemAction(item, NavigationMenuPresenter.this, 0);
-            if (item != null && item.isCheckable() && result) {
-                mAdapter.setCheckedItem(item);
-            }
-            setUpdateSuspended(false);
-            updateMenuView(false);
-        }
-
-    };
-
-    private class NavigationMenuAdapter extends RecyclerView.Adapter<ViewHolder> {
-
-        private static final String STATE_CHECKED_ITEM = "android:menu:checked";
-
-        private static final String STATE_ACTION_VIEWS = "android:menu:action_views";
-        private static final int VIEW_TYPE_NORMAL = 0;
-        private static final int VIEW_TYPE_SUBHEADER = 1;
-        private static final int VIEW_TYPE_SEPARATOR = 2;
-        private static final int VIEW_TYPE_HEADER = 3;
-
-        private final ArrayList<NavigationMenuItem> mItems = new ArrayList<>();
-        private MenuItemImpl mCheckedItem;
-        private boolean mUpdateSuspended;
-
-        NavigationMenuAdapter() {
-            prepareMenuItems();
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public int getItemCount() {
-            return mItems.size();
-        }
-
-        @Override
-        public int getItemViewType(int position) {
-            NavigationMenuItem item = mItems.get(position);
-            if (item instanceof NavigationMenuSeparatorItem) {
-                return VIEW_TYPE_SEPARATOR;
-            } else if (item instanceof NavigationMenuHeaderItem) {
-                return VIEW_TYPE_HEADER;
-            } else if (item instanceof NavigationMenuTextItem) {
-                NavigationMenuTextItem textItem = (NavigationMenuTextItem) item;
-                if (textItem.getMenuItem().hasSubMenu()) {
-                    return VIEW_TYPE_SUBHEADER;
-                } else {
-                    return VIEW_TYPE_NORMAL;
-                }
-            }
-            throw new RuntimeException("Unknown item type.");
-        }
-
-        @Override
-        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-            switch (viewType) {
-                case VIEW_TYPE_NORMAL:
-                    return new NormalViewHolder(mLayoutInflater, parent, mOnClickListener);
-                case VIEW_TYPE_SUBHEADER:
-                    return new SubheaderViewHolder(mLayoutInflater, parent);
-                case VIEW_TYPE_SEPARATOR:
-                    return new SeparatorViewHolder(mLayoutInflater, parent);
-                case VIEW_TYPE_HEADER:
-                    return new HeaderViewHolder(mHeaderLayout);
-            }
-            return null;
-        }
-
-        @Override
-        public void onBindViewHolder(ViewHolder holder, int position) {
-            switch (getItemViewType(position)) {
-                case VIEW_TYPE_NORMAL: {
-                    NavigationMenuItemView itemView = (NavigationMenuItemView) holder.itemView;
-                    itemView.setIconTintList(mIconTintList);
-                    if (mTextAppearanceSet) {
-                        itemView.setTextAppearance(mTextAppearance);
-                    }
-                    if (mTextColor != null) {
-                        itemView.setTextColor(mTextColor);
-                    }
-                    ViewCompat.setBackground(itemView, mItemBackground != null ?
-                            mItemBackground.getConstantState().newDrawable() : null);
-                    NavigationMenuTextItem item = (NavigationMenuTextItem) mItems.get(position);
-                    itemView.setNeedsEmptyIcon(item.needsEmptyIcon);
-                    itemView.initialize(item.getMenuItem(), 0);
-                    break;
-                }
-                case VIEW_TYPE_SUBHEADER: {
-                    TextView subHeader = (TextView) holder.itemView;
-                    NavigationMenuTextItem item = (NavigationMenuTextItem) mItems.get(position);
-                    subHeader.setText(item.getMenuItem().getTitle());
-                    break;
-                }
-                case VIEW_TYPE_SEPARATOR: {
-                    NavigationMenuSeparatorItem item =
-                            (NavigationMenuSeparatorItem) mItems.get(position);
-                    holder.itemView.setPadding(0, item.getPaddingTop(), 0,
-                            item.getPaddingBottom());
-                    break;
-                }
-                case VIEW_TYPE_HEADER: {
-                    break;
-                }
-            }
-
-        }
-
-        @Override
-        public void onViewRecycled(ViewHolder holder) {
-            if (holder instanceof NormalViewHolder) {
-                ((NavigationMenuItemView) holder.itemView).recycle();
-            }
-        }
-
-        public void update() {
-            prepareMenuItems();
-            notifyDataSetChanged();
-        }
-
-        /**
-         * Flattens the visible menu items of {@link #mMenu} into {@link #mItems},
-         * while inserting separators between items when necessary.
-         */
-        private void prepareMenuItems() {
-            if (mUpdateSuspended) {
-                return;
-            }
-            mUpdateSuspended = true;
-            mItems.clear();
-            mItems.add(new NavigationMenuHeaderItem());
-
-            int currentGroupId = -1;
-            int currentGroupStart = 0;
-            boolean currentGroupHasIcon = false;
-            for (int i = 0, totalSize = mMenu.getVisibleItems().size(); i < totalSize; i++) {
-                MenuItemImpl item = mMenu.getVisibleItems().get(i);
-                if (item.isChecked()) {
-                    setCheckedItem(item);
-                }
-                if (item.isCheckable()) {
-                    item.setExclusiveCheckable(false);
-                }
-                if (item.hasSubMenu()) {
-                    SubMenu subMenu = item.getSubMenu();
-                    if (subMenu.hasVisibleItems()) {
-                        if (i != 0) {
-                            mItems.add(new NavigationMenuSeparatorItem(mPaddingSeparator, 0));
-                        }
-                        mItems.add(new NavigationMenuTextItem(item));
-                        boolean subMenuHasIcon = false;
-                        int subMenuStart = mItems.size();
-                        for (int j = 0, size = subMenu.size(); j < size; j++) {
-                            MenuItemImpl subMenuItem = (MenuItemImpl) subMenu.getItem(j);
-                            if (subMenuItem.isVisible()) {
-                                if (!subMenuHasIcon && subMenuItem.getIcon() != null) {
-                                    subMenuHasIcon = true;
-                                }
-                                if (subMenuItem.isCheckable()) {
-                                    subMenuItem.setExclusiveCheckable(false);
-                                }
-                                if (item.isChecked()) {
-                                    setCheckedItem(item);
-                                }
-                                mItems.add(new NavigationMenuTextItem(subMenuItem));
-                            }
-                        }
-                        if (subMenuHasIcon) {
-                            appendTransparentIconIfMissing(subMenuStart, mItems.size());
-                        }
-                    }
-                } else {
-                    int groupId = item.getGroupId();
-                    if (groupId != currentGroupId) { // first item in group
-                        currentGroupStart = mItems.size();
-                        currentGroupHasIcon = item.getIcon() != null;
-                        if (i != 0) {
-                            currentGroupStart++;
-                            mItems.add(new NavigationMenuSeparatorItem(
-                                    mPaddingSeparator, mPaddingSeparator));
-                        }
-                    } else if (!currentGroupHasIcon && item.getIcon() != null) {
-                        currentGroupHasIcon = true;
-                        appendTransparentIconIfMissing(currentGroupStart, mItems.size());
-                    }
-                    NavigationMenuTextItem textItem = new NavigationMenuTextItem(item);
-                    textItem.needsEmptyIcon = currentGroupHasIcon;
-                    mItems.add(textItem);
-                    currentGroupId = groupId;
-                }
-            }
-            mUpdateSuspended = false;
-        }
-
-        private void appendTransparentIconIfMissing(int startIndex, int endIndex) {
-            for (int i = startIndex; i < endIndex; i++) {
-                NavigationMenuTextItem textItem = (NavigationMenuTextItem) mItems.get(i);
-                textItem.needsEmptyIcon = true;
-            }
-        }
-
-        public void setCheckedItem(MenuItemImpl checkedItem) {
-            if (mCheckedItem == checkedItem || !checkedItem.isCheckable()) {
-                return;
-            }
-            if (mCheckedItem != null) {
-                mCheckedItem.setChecked(false);
-            }
-            mCheckedItem = checkedItem;
-            checkedItem.setChecked(true);
-        }
-
-        public Bundle createInstanceState() {
-            Bundle state = new Bundle();
-            if (mCheckedItem != null) {
-                state.putInt(STATE_CHECKED_ITEM, mCheckedItem.getItemId());
-            }
-            // Store the states of the action views.
-            SparseArray<ParcelableSparseArray> actionViewStates = new SparseArray<>();
-            for (int i = 0, size = mItems.size(); i < size; i++) {
-                NavigationMenuItem navigationMenuItem = mItems.get(i);
-                if (navigationMenuItem instanceof NavigationMenuTextItem) {
-                    MenuItemImpl item = ((NavigationMenuTextItem) navigationMenuItem).getMenuItem();
-                    View actionView = item != null ? item.getActionView() : null;
-                    if (actionView != null) {
-                        ParcelableSparseArray container = new ParcelableSparseArray();
-                        actionView.saveHierarchyState(container);
-                        actionViewStates.put(item.getItemId(), container);
-                    }
-                }
-            }
-            state.putSparseParcelableArray(STATE_ACTION_VIEWS, actionViewStates);
-            return state;
-        }
-
-        public void restoreInstanceState(Bundle state) {
-            int checkedItem = state.getInt(STATE_CHECKED_ITEM, 0);
-            if (checkedItem != 0) {
-                mUpdateSuspended = true;
-                for (int i = 0, size = mItems.size(); i < size; i++) {
-                    NavigationMenuItem item = mItems.get(i);
-                    if (item instanceof NavigationMenuTextItem) {
-                        MenuItemImpl menuItem = ((NavigationMenuTextItem) item).getMenuItem();
-                        if (menuItem != null && menuItem.getItemId() == checkedItem) {
-                            setCheckedItem(menuItem);
-                            break;
-                        }
-                    }
-                }
-                mUpdateSuspended = false;
-                prepareMenuItems();
-            }
-            // Restore the states of the action views.
-            SparseArray<ParcelableSparseArray> actionViewStates = state
-                    .getSparseParcelableArray(STATE_ACTION_VIEWS);
-            if (actionViewStates != null) {
-                for (int i = 0, size = mItems.size(); i < size; i++) {
-                    NavigationMenuItem navigationMenuItem = mItems.get(i);
-                    if (!(navigationMenuItem instanceof NavigationMenuTextItem)) {
-                        continue;
-                    }
-                    MenuItemImpl item = ((NavigationMenuTextItem) navigationMenuItem).getMenuItem();
-                    if (item == null) {
-                        continue;
-                    }
-                    View actionView = item.getActionView();
-                    if (actionView == null) {
-                        continue;
-                    }
-                    ParcelableSparseArray container = actionViewStates.get(item.getItemId());
-                    if (container == null) {
-                        continue;
-                    }
-                    actionView.restoreHierarchyState(container);
-                }
-            }
-        }
-
-        public void setUpdateSuspended(boolean updateSuspended) {
-            mUpdateSuspended = updateSuspended;
-        }
-
-    }
-
-    /**
-     * Unified data model for all sorts of navigation menu items.
-     */
-    private interface NavigationMenuItem {
-    }
-
-    /**
-     * Normal or subheader items.
-     */
-    private static class NavigationMenuTextItem implements NavigationMenuItem {
-
-        private final MenuItemImpl mMenuItem;
-
-        boolean needsEmptyIcon;
-
-        NavigationMenuTextItem(MenuItemImpl item) {
-            mMenuItem = item;
-        }
-
-        public MenuItemImpl getMenuItem() {
-            return mMenuItem;
-        }
-
-    }
-
-    /**
-     * Separator items.
-     */
-    private static class NavigationMenuSeparatorItem implements NavigationMenuItem {
-
-        private final int mPaddingTop;
-
-        private final int mPaddingBottom;
-
-        public NavigationMenuSeparatorItem(int paddingTop, int paddingBottom) {
-            mPaddingTop = paddingTop;
-            mPaddingBottom = paddingBottom;
-        }
-
-        public int getPaddingTop() {
-            return mPaddingTop;
-        }
-
-        public int getPaddingBottom() {
-            return mPaddingBottom;
-        }
-
-    }
-
-    /**
-     * Header (not subheader) items.
-     */
-    private static class NavigationMenuHeaderItem implements NavigationMenuItem {
-        NavigationMenuHeaderItem() {
-        }
-        // The actual content is hold by NavigationMenuPresenter#mHeaderLayout.
-    }
-
-}
diff --git a/design/src/android/support/design/internal/NavigationMenuView.java b/design/src/android/support/design/internal/NavigationMenuView.java
deleted file mode 100644
index 711f71e..0000000
--- a/design/src/android/support/design/internal/NavigationMenuView.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.support.annotation.RestrictTo;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuView;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.util.AttributeSet;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class NavigationMenuView extends RecyclerView implements MenuView {
-
-    public NavigationMenuView(Context context) {
-        this(context, null);
-    }
-
-    public NavigationMenuView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public NavigationMenuView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
-    }
-
-    @Override
-    public void initialize(MenuBuilder menu) {
-
-    }
-
-    @Override
-    public int getWindowAnimations() {
-        return 0;
-    }
-
-}
diff --git a/design/src/android/support/design/internal/NavigationSubMenu.java b/design/src/android/support/design/internal/NavigationSubMenu.java
deleted file mode 100644
index 1ff1e4f..0000000
--- a/design/src/android/support/design/internal/NavigationSubMenu.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.support.annotation.RestrictTo;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.view.menu.SubMenuBuilder;
-
-/**
- * This is a {@link SubMenuBuilder} that it notifies the parent {@link NavigationMenu} of its menu
- * updates.
- *
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class NavigationSubMenu extends SubMenuBuilder {
-
-    public NavigationSubMenu(Context context, NavigationMenu menu, MenuItemImpl item) {
-        super(context, menu, item);
-    }
-
-    @Override
-    public void onItemsChanged(boolean structureChanged) {
-        super.onItemsChanged(structureChanged);
-        ((MenuBuilder) getParentMenu()).onItemsChanged(structureChanged);
-    }
-
-}
diff --git a/design/src/android/support/design/internal/ParcelableSparseArray.java b/design/src/android/support/design/internal/ParcelableSparseArray.java
deleted file mode 100644
index b29000e..0000000
--- a/design/src/android/support/design/internal/ParcelableSparseArray.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.RestrictTo;
-import android.util.SparseArray;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class ParcelableSparseArray extends SparseArray<Parcelable> implements Parcelable {
-
-    public ParcelableSparseArray() {
-        super();
-    }
-
-    public ParcelableSparseArray(Parcel source, ClassLoader loader) {
-        super();
-        int size = source.readInt();
-        int[] keys = new int[size];
-        source.readIntArray(keys);
-        Parcelable[] values = source.readParcelableArray(loader);
-        for (int i = 0; i < size; ++i) {
-            put(keys[i], values[i]);
-        }
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int flags) {
-        int size = size();
-        int[] keys = new int[size];
-        Parcelable[] values = new Parcelable[size];
-        for (int i = 0; i < size; ++i) {
-            keys[i] = keyAt(i);
-            values[i] = valueAt(i);
-        }
-        parcel.writeInt(size);
-        parcel.writeIntArray(keys);
-        parcel.writeParcelableArray(values, flags);
-    }
-
-    public static final Creator<ParcelableSparseArray> CREATOR =
-            new ClassLoaderCreator<ParcelableSparseArray>() {
-                @Override
-                public ParcelableSparseArray createFromParcel(Parcel source, ClassLoader loader) {
-                    return new ParcelableSparseArray(source, loader);
-                }
-
-                @Override
-                public ParcelableSparseArray createFromParcel(Parcel source) {
-                    return new ParcelableSparseArray(source, null);
-                }
-
-                @Override
-                public ParcelableSparseArray[] newArray(int size) {
-                    return new ParcelableSparseArray[size];
-                }
-            };
-}
diff --git a/design/src/android/support/design/internal/ScrimInsetsFrameLayout.java b/design/src/android/support/design/internal/ScrimInsetsFrameLayout.java
deleted file mode 100644
index 38f5b29..0000000
--- a/design/src/android/support/design/internal/ScrimInsetsFrameLayout.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.design.R;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.WindowInsetsCompat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.FrameLayout;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class ScrimInsetsFrameLayout extends FrameLayout {
-
-    Drawable mInsetForeground;
-
-    Rect mInsets;
-
-    private Rect mTempRect = new Rect();
-
-    public ScrimInsetsFrameLayout(Context context) {
-        this(context, null);
-    }
-
-    public ScrimInsetsFrameLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public ScrimInsetsFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        final TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.ScrimInsetsFrameLayout, defStyleAttr,
-                R.style.Widget_Design_ScrimInsetsFrameLayout);
-        mInsetForeground = a.getDrawable(R.styleable.ScrimInsetsFrameLayout_insetForeground);
-        a.recycle();
-        setWillNotDraw(true); // No need to draw until the insets are adjusted
-
-        ViewCompat.setOnApplyWindowInsetsListener(this,
-                new android.support.v4.view.OnApplyWindowInsetsListener() {
-                    @Override
-                    public WindowInsetsCompat onApplyWindowInsets(View v,
-                            WindowInsetsCompat insets) {
-                        if (null == mInsets) {
-                            mInsets = new Rect();
-                        }
-                        mInsets.set(insets.getSystemWindowInsetLeft(),
-                                insets.getSystemWindowInsetTop(),
-                                insets.getSystemWindowInsetRight(),
-                                insets.getSystemWindowInsetBottom());
-                        onInsetsChanged(insets);
-                        setWillNotDraw(!insets.hasSystemWindowInsets() || mInsetForeground == null);
-                        ViewCompat.postInvalidateOnAnimation(ScrimInsetsFrameLayout.this);
-                        return insets.consumeSystemWindowInsets();
-                    }
-                });
-    }
-
-    @Override
-    public void draw(@NonNull Canvas canvas) {
-        super.draw(canvas);
-
-        int width = getWidth();
-        int height = getHeight();
-        if (mInsets != null && mInsetForeground != null) {
-            int sc = canvas.save();
-            canvas.translate(getScrollX(), getScrollY());
-
-            // Top
-            mTempRect.set(0, 0, width, mInsets.top);
-            mInsetForeground.setBounds(mTempRect);
-            mInsetForeground.draw(canvas);
-
-            // Bottom
-            mTempRect.set(0, height - mInsets.bottom, width, height);
-            mInsetForeground.setBounds(mTempRect);
-            mInsetForeground.draw(canvas);
-
-            // Left
-            mTempRect.set(0, mInsets.top, mInsets.left, height - mInsets.bottom);
-            mInsetForeground.setBounds(mTempRect);
-            mInsetForeground.draw(canvas);
-
-            // Right
-            mTempRect.set(width - mInsets.right, mInsets.top, width, height - mInsets.bottom);
-            mInsetForeground.setBounds(mTempRect);
-            mInsetForeground.draw(canvas);
-
-            canvas.restoreToCount(sc);
-        }
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        if (mInsetForeground != null) {
-            mInsetForeground.setCallback(this);
-        }
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        if (mInsetForeground != null) {
-            mInsetForeground.setCallback(null);
-        }
-    }
-
-    protected void onInsetsChanged(WindowInsetsCompat insets) {
-    }
-
-}
diff --git a/design/src/android/support/design/internal/SnackbarContentLayout.java b/design/src/android/support/design/internal/SnackbarContentLayout.java
deleted file mode 100644
index 2abf012..0000000
--- a/design/src/android/support/design/internal/SnackbarContentLayout.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.support.annotation.RestrictTo;
-import android.support.design.R;
-import android.support.design.widget.BaseTransientBottomBar;
-import android.support.v4.view.ViewCompat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class SnackbarContentLayout extends LinearLayout implements
-        BaseTransientBottomBar.ContentViewCallback {
-    private TextView mMessageView;
-    private Button mActionView;
-
-    private int mMaxWidth;
-    private int mMaxInlineActionWidth;
-
-    public SnackbarContentLayout(Context context) {
-        this(context, null);
-    }
-
-    public SnackbarContentLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SnackbarLayout);
-        mMaxWidth = a.getDimensionPixelSize(R.styleable.SnackbarLayout_android_maxWidth, -1);
-        mMaxInlineActionWidth = a.getDimensionPixelSize(
-                R.styleable.SnackbarLayout_maxActionInlineWidth, -1);
-        a.recycle();
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mMessageView = findViewById(R.id.snackbar_text);
-        mActionView = findViewById(R.id.snackbar_action);
-    }
-
-    public TextView getMessageView() {
-        return mMessageView;
-    }
-
-    public Button getActionView() {
-        return mActionView;
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        if (mMaxWidth > 0 && getMeasuredWidth() > mMaxWidth) {
-            widthMeasureSpec = MeasureSpec.makeMeasureSpec(mMaxWidth, MeasureSpec.EXACTLY);
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        }
-
-        final int multiLineVPadding = getResources().getDimensionPixelSize(
-                R.dimen.design_snackbar_padding_vertical_2lines);
-        final int singleLineVPadding = getResources().getDimensionPixelSize(
-                R.dimen.design_snackbar_padding_vertical);
-        final boolean isMultiLine = mMessageView.getLayout().getLineCount() > 1;
-
-        boolean remeasure = false;
-        if (isMultiLine && mMaxInlineActionWidth > 0
-                && mActionView.getMeasuredWidth() > mMaxInlineActionWidth) {
-            if (updateViewsWithinLayout(VERTICAL, multiLineVPadding,
-                    multiLineVPadding - singleLineVPadding)) {
-                remeasure = true;
-            }
-        } else {
-            final int messagePadding = isMultiLine ? multiLineVPadding : singleLineVPadding;
-            if (updateViewsWithinLayout(HORIZONTAL, messagePadding, messagePadding)) {
-                remeasure = true;
-            }
-        }
-
-        if (remeasure) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        }
-    }
-
-    private boolean updateViewsWithinLayout(final int orientation,
-            final int messagePadTop, final int messagePadBottom) {
-        boolean changed = false;
-        if (orientation != getOrientation()) {
-            setOrientation(orientation);
-            changed = true;
-        }
-        if (mMessageView.getPaddingTop() != messagePadTop
-                || mMessageView.getPaddingBottom() != messagePadBottom) {
-            updateTopBottomPadding(mMessageView, messagePadTop, messagePadBottom);
-            changed = true;
-        }
-        return changed;
-    }
-
-    private static void updateTopBottomPadding(View view, int topPadding, int bottomPadding) {
-        if (ViewCompat.isPaddingRelative(view)) {
-            ViewCompat.setPaddingRelative(view,
-                    ViewCompat.getPaddingStart(view), topPadding,
-                    ViewCompat.getPaddingEnd(view), bottomPadding);
-        } else {
-            view.setPadding(view.getPaddingLeft(), topPadding,
-                    view.getPaddingRight(), bottomPadding);
-        }
-    }
-
-    @Override
-    public void animateContentIn(int delay, int duration) {
-        mMessageView.setAlpha(0f);
-        mMessageView.animate().alpha(1f).setDuration(duration)
-                .setStartDelay(delay).start();
-
-        if (mActionView.getVisibility() == VISIBLE) {
-            mActionView.setAlpha(0f);
-            mActionView.animate().alpha(1f).setDuration(duration)
-                    .setStartDelay(delay).start();
-        }
-    }
-
-    @Override
-    public void animateContentOut(int delay, int duration) {
-        mMessageView.setAlpha(1f);
-        mMessageView.animate().alpha(0f).setDuration(duration)
-                .setStartDelay(delay).start();
-
-        if (mActionView.getVisibility() == VISIBLE) {
-            mActionView.setAlpha(1f);
-            mActionView.animate().alpha(0f).setDuration(duration)
-                    .setStartDelay(delay).start();
-        }
-    }
-}
diff --git a/design/src/android/support/design/internal/TextScale.java b/design/src/android/support/design/internal/TextScale.java
deleted file mode 100644
index 06c9472..0000000
--- a/design/src/android/support/design/internal/TextScale.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.internal;
-
-import android.animation.Animator;
-import android.animation.ValueAnimator;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.transition.Transition;
-import android.support.transition.TransitionValues;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import java.util.Map;
-
-/**
- * @hide
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-@RequiresApi(14)
-public class TextScale extends Transition {
-    private static final String PROPNAME_SCALE = "android:textscale:scale";
-
-    @Override
-    public void captureStartValues(TransitionValues transitionValues) {
-        captureValues(transitionValues);
-    }
-
-    @Override
-    public void captureEndValues(TransitionValues transitionValues) {
-        captureValues(transitionValues);
-    }
-
-    private void captureValues(TransitionValues transitionValues) {
-        if (transitionValues.view instanceof TextView) {
-            TextView textview = (TextView) transitionValues.view;
-            transitionValues.values.put(PROPNAME_SCALE, textview.getScaleX());
-        }
-    }
-
-    @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
-        if (startValues == null || endValues == null || !(startValues.view instanceof TextView)
-                || !(endValues.view instanceof TextView)) {
-            return null;
-        }
-        final TextView view = (TextView) endValues.view;
-        Map<String, Object> startVals = startValues.values;
-        Map<String, Object> endVals = endValues.values;
-        final float startSize = startVals.get(PROPNAME_SCALE) != null ? (float) startVals.get(
-                PROPNAME_SCALE) : 1f;
-        final float endSize = endVals.get(PROPNAME_SCALE) != null ? (float) endVals.get(
-                PROPNAME_SCALE) : 1f;
-        if (startSize == endSize) {
-            return null;
-        }
-
-        ValueAnimator animator = ValueAnimator.ofFloat(startSize, endSize);
-
-        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator valueAnimator) {
-                float animatedValue = (float) valueAnimator.getAnimatedValue();
-                view.setScaleX(animatedValue);
-                view.setScaleY(animatedValue);
-            }
-        });
-        return animator;
-    }
-}
diff --git a/design/src/android/support/design/internal/package-info.java b/design/src/android/support/design/internal/package-info.java
deleted file mode 100644
index 6b6f7bb..0000000
--- a/design/src/android/support/design/internal/package-info.java
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-package android.support.design.internal;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.support.annotation.RestrictTo;
diff --git a/design/src/android/support/design/widget/AppBarLayout.java b/design/src/android/support/design/widget/AppBarLayout.java
deleted file mode 100644
index 8304cd6..0000000
--- a/design/src/android/support/design/widget/AppBarLayout.java
+++ /dev/null
@@ -1,1474 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Rect;
-import android.os.Build;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
-import android.support.design.R;
-import android.support.v4.math.MathUtils;
-import android.support.v4.util.ObjectsCompat;
-import android.support.v4.view.AbsSavedState;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.WindowInsetsCompat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.Interpolator;
-import android.widget.LinearLayout;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * AppBarLayout is a vertical {@link LinearLayout} which implements many of the features of
- * material designs app bar concept, namely scrolling gestures.
- * <p>
- * Children should provide their desired scrolling behavior through
- * {@link LayoutParams#setScrollFlags(int)} and the associated layout xml attribute:
- * {@code app:layout_scrollFlags}.
- *
- * <p>
- * This view depends heavily on being used as a direct child within a {@link CoordinatorLayout}.
- * If you use AppBarLayout within a different {@link ViewGroup}, most of it's functionality will
- * not work.
- * <p>
- * AppBarLayout also requires a separate scrolling sibling in order to know when to scroll.
- * The binding is done through the {@link ScrollingViewBehavior} behavior class, meaning that you
- * should set your scrolling view's behavior to be an instance of {@link ScrollingViewBehavior}.
- * A string resource containing the full class name is available.
- *
- * <pre>
- * &lt;android.support.design.widget.CoordinatorLayout
- *         xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
- *         xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
- *         android:layout_width=&quot;match_parent&quot;
- *         android:layout_height=&quot;match_parent&quot;&gt;
- *
- *     &lt;android.support.v4.widget.NestedScrollView
- *             android:layout_width=&quot;match_parent&quot;
- *             android:layout_height=&quot;match_parent&quot;
- *             app:layout_behavior=&quot;@string/appbar_scrolling_view_behavior&quot;&gt;
- *
- *         &lt;!-- Your scrolling content --&gt;
- *
- *     &lt;/android.support.v4.widget.NestedScrollView&gt;
- *
- *     &lt;android.support.design.widget.AppBarLayout
- *             android:layout_height=&quot;wrap_content&quot;
- *             android:layout_width=&quot;match_parent&quot;&gt;
- *
- *         &lt;android.support.v7.widget.Toolbar
- *                 ...
- *                 app:layout_scrollFlags=&quot;scroll|enterAlways&quot;/&gt;
- *
- *         &lt;android.support.design.widget.TabLayout
- *                 ...
- *                 app:layout_scrollFlags=&quot;scroll|enterAlways&quot;/&gt;
- *
- *     &lt;/android.support.design.widget.AppBarLayout&gt;
- *
- * &lt;/android.support.design.widget.CoordinatorLayout&gt;
- * </pre>
- *
- * @see <a href="http://www.google.com/design/spec/layout/structure.html#structure-app-bar">
- *     http://www.google.com/design/spec/layout/structure.html#structure-app-bar</a>
- */
-@CoordinatorLayout.DefaultBehavior(AppBarLayout.Behavior.class)
-public class AppBarLayout extends LinearLayout {
-
-    static final int PENDING_ACTION_NONE = 0x0;
-    static final int PENDING_ACTION_EXPANDED = 0x1;
-    static final int PENDING_ACTION_COLLAPSED = 0x2;
-    static final int PENDING_ACTION_ANIMATE_ENABLED = 0x4;
-    static final int PENDING_ACTION_FORCE = 0x8;
-
-    /**
-     * Interface definition for a callback to be invoked when an {@link AppBarLayout}'s vertical
-     * offset changes.
-     */
-    public interface OnOffsetChangedListener {
-        /**
-         * Called when the {@link AppBarLayout}'s layout offset has been changed. This allows
-         * child views to implement custom behavior based on the offset (for instance pinning a
-         * view at a certain y value).
-         *
-         * @param appBarLayout the {@link AppBarLayout} which offset has changed
-         * @param verticalOffset the vertical offset for the parent {@link AppBarLayout}, in px
-         */
-        void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset);
-    }
-
-    private static final int INVALID_SCROLL_RANGE = -1;
-
-    private int mTotalScrollRange = INVALID_SCROLL_RANGE;
-    private int mDownPreScrollRange = INVALID_SCROLL_RANGE;
-    private int mDownScrollRange = INVALID_SCROLL_RANGE;
-
-    private boolean mHaveChildWithInterpolator;
-
-    private int mPendingAction = PENDING_ACTION_NONE;
-
-    private WindowInsetsCompat mLastInsets;
-
-    private List<OnOffsetChangedListener> mListeners;
-
-    private boolean mCollapsible;
-    private boolean mCollapsed;
-
-    private int[] mTmpStatesArray;
-
-    public AppBarLayout(Context context) {
-        this(context, null);
-    }
-
-    public AppBarLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setOrientation(VERTICAL);
-
-        ThemeUtils.checkAppCompatTheme(context);
-
-        if (Build.VERSION.SDK_INT >= 21) {
-            // Use the bounds view outline provider so that we cast a shadow, even without a
-            // background
-            ViewUtilsLollipop.setBoundsViewOutlineProvider(this);
-
-            // If we're running on API 21+, we should reset any state list animator from our
-            // default style
-            ViewUtilsLollipop.setStateListAnimatorFromAttrs(this, attrs, 0,
-                    R.style.Widget_Design_AppBarLayout);
-        }
-
-        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AppBarLayout,
-                0, R.style.Widget_Design_AppBarLayout);
-        ViewCompat.setBackground(this, a.getDrawable(R.styleable.AppBarLayout_android_background));
-        if (a.hasValue(R.styleable.AppBarLayout_expanded)) {
-            setExpanded(a.getBoolean(R.styleable.AppBarLayout_expanded, false), false, false);
-        }
-        if (Build.VERSION.SDK_INT >= 21 && a.hasValue(R.styleable.AppBarLayout_elevation)) {
-            ViewUtilsLollipop.setDefaultAppBarLayoutStateListAnimator(
-                    this, a.getDimensionPixelSize(R.styleable.AppBarLayout_elevation, 0));
-        }
-        if (Build.VERSION.SDK_INT >= 26) {
-            // In O+, we have these values set in the style. Since there is no defStyleAttr for
-            // AppBarLayout at the AppCompat level, check for these attributes here.
-            if (a.hasValue(R.styleable.AppBarLayout_android_keyboardNavigationCluster)) {
-                this.setKeyboardNavigationCluster(a.getBoolean(
-                        R.styleable.AppBarLayout_android_keyboardNavigationCluster, false));
-            }
-            if (a.hasValue(R.styleable.AppBarLayout_android_touchscreenBlocksFocus)) {
-                this.setTouchscreenBlocksFocus(a.getBoolean(
-                        R.styleable.AppBarLayout_android_touchscreenBlocksFocus, false));
-            }
-        }
-        a.recycle();
-
-        ViewCompat.setOnApplyWindowInsetsListener(this,
-                new android.support.v4.view.OnApplyWindowInsetsListener() {
-                    @Override
-                    public WindowInsetsCompat onApplyWindowInsets(View v,
-                            WindowInsetsCompat insets) {
-                        return onWindowInsetChanged(insets);
-                    }
-                });
-    }
-
-    /**
-     * Add a listener that will be called when the offset of this {@link AppBarLayout} changes.
-     *
-     * @param listener The listener that will be called when the offset changes.]
-     *
-     * @see #removeOnOffsetChangedListener(OnOffsetChangedListener)
-     */
-    public void addOnOffsetChangedListener(OnOffsetChangedListener listener) {
-        if (mListeners == null) {
-            mListeners = new ArrayList<>();
-        }
-        if (listener != null && !mListeners.contains(listener)) {
-            mListeners.add(listener);
-        }
-    }
-
-    /**
-     * Remove the previously added {@link OnOffsetChangedListener}.
-     *
-     * @param listener the listener to remove.
-     */
-    public void removeOnOffsetChangedListener(OnOffsetChangedListener listener) {
-        if (mListeners != null && listener != null) {
-            mListeners.remove(listener);
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        invalidateScrollRanges();
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        super.onLayout(changed, l, t, r, b);
-        invalidateScrollRanges();
-
-        mHaveChildWithInterpolator = false;
-        for (int i = 0, z = getChildCount(); i < z; i++) {
-            final View child = getChildAt(i);
-            final LayoutParams childLp = (LayoutParams) child.getLayoutParams();
-            final Interpolator interpolator = childLp.getScrollInterpolator();
-
-            if (interpolator != null) {
-                mHaveChildWithInterpolator = true;
-                break;
-            }
-        }
-
-        updateCollapsible();
-    }
-
-    private void updateCollapsible() {
-        boolean haveCollapsibleChild = false;
-        for (int i = 0, z = getChildCount(); i < z; i++) {
-            if (((LayoutParams) getChildAt(i).getLayoutParams()).isCollapsible()) {
-                haveCollapsibleChild = true;
-                break;
-            }
-        }
-        setCollapsibleState(haveCollapsibleChild);
-    }
-
-    private void invalidateScrollRanges() {
-        // Invalidate the scroll ranges
-        mTotalScrollRange = INVALID_SCROLL_RANGE;
-        mDownPreScrollRange = INVALID_SCROLL_RANGE;
-        mDownScrollRange = INVALID_SCROLL_RANGE;
-    }
-
-    @Override
-    public void setOrientation(int orientation) {
-        if (orientation != VERTICAL) {
-            throw new IllegalArgumentException("AppBarLayout is always vertical and does"
-                    + " not support horizontal orientation");
-        }
-        super.setOrientation(orientation);
-    }
-
-    /**
-     * Sets whether this {@link AppBarLayout} is expanded or not, animating if it has already
-     * been laid out.
-     *
-     * <p>As with {@link AppBarLayout}'s scrolling, this method relies on this layout being a
-     * direct child of a {@link CoordinatorLayout}.</p>
-     *
-     * @param expanded true if the layout should be fully expanded, false if it should
-     *                 be fully collapsed
-     *
-     * @attr ref android.support.design.R.styleable#AppBarLayout_expanded
-     */
-    public void setExpanded(boolean expanded) {
-        setExpanded(expanded, ViewCompat.isLaidOut(this));
-    }
-
-    /**
-     * Sets whether this {@link AppBarLayout} is expanded or not.
-     *
-     * <p>As with {@link AppBarLayout}'s scrolling, this method relies on this layout being a
-     * direct child of a {@link CoordinatorLayout}.</p>
-     *
-     * @param expanded true if the layout should be fully expanded, false if it should
-     *                 be fully collapsed
-     * @param animate Whether to animate to the new state
-     *
-     * @attr ref android.support.design.R.styleable#AppBarLayout_expanded
-     */
-    public void setExpanded(boolean expanded, boolean animate) {
-        setExpanded(expanded, animate, true);
-    }
-
-    private void setExpanded(boolean expanded, boolean animate, boolean force) {
-        mPendingAction = (expanded ? PENDING_ACTION_EXPANDED : PENDING_ACTION_COLLAPSED)
-                | (animate ? PENDING_ACTION_ANIMATE_ENABLED : 0)
-                | (force ? PENDING_ACTION_FORCE : 0);
-        requestLayout();
-    }
-
-    @Override
-    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
-        return p instanceof LayoutParams;
-    }
-
-    @Override
-    protected LayoutParams generateDefaultLayoutParams() {
-        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
-    }
-
-    @Override
-    public LayoutParams generateLayoutParams(AttributeSet attrs) {
-        return new LayoutParams(getContext(), attrs);
-    }
-
-    @Override
-    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        if (Build.VERSION.SDK_INT >= 19 && p instanceof LinearLayout.LayoutParams) {
-            return new LayoutParams((LinearLayout.LayoutParams) p);
-        } else if (p instanceof MarginLayoutParams) {
-            return new LayoutParams((MarginLayoutParams) p);
-        }
-        return new LayoutParams(p);
-    }
-
-    boolean hasChildWithInterpolator() {
-        return mHaveChildWithInterpolator;
-    }
-
-    /**
-     * Returns the scroll range of all children.
-     *
-     * @return the scroll range in px
-     */
-    public final int getTotalScrollRange() {
-        if (mTotalScrollRange != INVALID_SCROLL_RANGE) {
-            return mTotalScrollRange;
-        }
-
-        int range = 0;
-        for (int i = 0, z = getChildCount(); i < z; i++) {
-            final View child = getChildAt(i);
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            final int childHeight = child.getMeasuredHeight();
-            final int flags = lp.mScrollFlags;
-
-            if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) {
-                // We're set to scroll so add the child's height
-                range += childHeight + lp.topMargin + lp.bottomMargin;
-
-                if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) {
-                    // For a collapsing scroll, we to take the collapsed height into account.
-                    // We also break straight away since later views can't scroll beneath
-                    // us
-                    range -= ViewCompat.getMinimumHeight(child);
-                    break;
-                }
-            } else {
-                // As soon as a view doesn't have the scroll flag, we end the range calculation.
-                // This is because views below can not scroll under a fixed view.
-                break;
-            }
-        }
-        return mTotalScrollRange = Math.max(0, range - getTopInset());
-    }
-
-    boolean hasScrollableChildren() {
-        return getTotalScrollRange() != 0;
-    }
-
-    /**
-     * Return the scroll range when scrolling up from a nested pre-scroll.
-     */
-    int getUpNestedPreScrollRange() {
-        return getTotalScrollRange();
-    }
-
-    /**
-     * Return the scroll range when scrolling down from a nested pre-scroll.
-     */
-    int getDownNestedPreScrollRange() {
-        if (mDownPreScrollRange != INVALID_SCROLL_RANGE) {
-            // If we already have a valid value, return it
-            return mDownPreScrollRange;
-        }
-
-        int range = 0;
-        for (int i = getChildCount() - 1; i >= 0; i--) {
-            final View child = getChildAt(i);
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            final int childHeight = child.getMeasuredHeight();
-            final int flags = lp.mScrollFlags;
-
-            if ((flags & LayoutParams.FLAG_QUICK_RETURN) == LayoutParams.FLAG_QUICK_RETURN) {
-                // First take the margin into account
-                range += lp.topMargin + lp.bottomMargin;
-                // The view has the quick return flag combination...
-                if ((flags & LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED) != 0) {
-                    // If they're set to enter collapsed, use the minimum height
-                    range += ViewCompat.getMinimumHeight(child);
-                } else if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) {
-                    // Only enter by the amount of the collapsed height
-                    range += childHeight - ViewCompat.getMinimumHeight(child);
-                } else {
-                    // Else use the full height (minus the top inset)
-                    range += childHeight - getTopInset();
-                }
-            } else if (range > 0) {
-                // If we've hit an non-quick return scrollable view, and we've already hit a
-                // quick return view, return now
-                break;
-            }
-        }
-        return mDownPreScrollRange = Math.max(0, range);
-    }
-
-    /**
-     * Return the scroll range when scrolling down from a nested scroll.
-     */
-    int getDownNestedScrollRange() {
-        if (mDownScrollRange != INVALID_SCROLL_RANGE) {
-            // If we already have a valid value, return it
-            return mDownScrollRange;
-        }
-
-        int range = 0;
-        for (int i = 0, z = getChildCount(); i < z; i++) {
-            final View child = getChildAt(i);
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            int childHeight = child.getMeasuredHeight();
-            childHeight += lp.topMargin + lp.bottomMargin;
-
-            final int flags = lp.mScrollFlags;
-
-            if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) {
-                // We're set to scroll so add the child's height
-                range += childHeight;
-
-                if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) {
-                    // For a collapsing exit scroll, we to take the collapsed height into account.
-                    // We also break the range straight away since later views can't scroll
-                    // beneath us
-                    range -= ViewCompat.getMinimumHeight(child) + getTopInset();
-                    break;
-                }
-            } else {
-                // As soon as a view doesn't have the scroll flag, we end the range calculation.
-                // This is because views below can not scroll under a fixed view.
-                break;
-            }
-        }
-        return mDownScrollRange = Math.max(0, range);
-    }
-
-    void dispatchOffsetUpdates(int offset) {
-        // Iterate backwards through the list so that most recently added listeners
-        // get the first chance to decide
-        if (mListeners != null) {
-            for (int i = 0, z = mListeners.size(); i < z; i++) {
-                final OnOffsetChangedListener listener = mListeners.get(i);
-                if (listener != null) {
-                    listener.onOffsetChanged(this, offset);
-                }
-            }
-        }
-    }
-
-    final int getMinimumHeightForVisibleOverlappingContent() {
-        final int topInset = getTopInset();
-        final int minHeight = ViewCompat.getMinimumHeight(this);
-        if (minHeight != 0) {
-            // If this layout has a min height, use it (doubled)
-            return (minHeight * 2) + topInset;
-        }
-
-        // Otherwise, we'll use twice the min height of our last child
-        final int childCount = getChildCount();
-        final int lastChildMinHeight = childCount >= 1
-                ? ViewCompat.getMinimumHeight(getChildAt(childCount - 1)) : 0;
-        if (lastChildMinHeight != 0) {
-            return (lastChildMinHeight * 2) + topInset;
-        }
-
-        // If we reach here then we don't have a min height explicitly set. Instead we'll take a
-        // guess at 1/3 of our height being visible
-        return getHeight() / 3;
-    }
-
-    @Override
-    protected int[] onCreateDrawableState(int extraSpace) {
-        if (mTmpStatesArray == null) {
-            // Note that we can't allocate this at the class level (in declaration) since
-            // some paths in super View constructor are going to call this method before
-            // that
-            mTmpStatesArray = new int[2];
-        }
-        final int[] extraStates = mTmpStatesArray;
-        final int[] states = super.onCreateDrawableState(extraSpace + extraStates.length);
-
-        extraStates[0] = mCollapsible ? R.attr.state_collapsible : -R.attr.state_collapsible;
-        extraStates[1] = mCollapsible && mCollapsed
-                ? R.attr.state_collapsed : -R.attr.state_collapsed;
-
-        return mergeDrawableStates(states, extraStates);
-    }
-
-    /**
-     * Sets whether the AppBarLayout has collapsible children or not.
-     *
-     * @return true if the collapsible state changed
-     */
-    private boolean setCollapsibleState(boolean collapsible) {
-        if (mCollapsible != collapsible) {
-            mCollapsible = collapsible;
-            refreshDrawableState();
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Sets whether the AppBarLayout is in a collapsed state or not.
-     *
-     * @return true if the collapsed state changed
-     */
-    boolean setCollapsedState(boolean collapsed) {
-        if (mCollapsed != collapsed) {
-            mCollapsed = collapsed;
-            refreshDrawableState();
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @deprecated target elevation is now deprecated. AppBarLayout's elevation is now
-     * controlled via a {@link android.animation.StateListAnimator}. If a target
-     * elevation is set, either by this method or the {@code app:elevation} attribute,
-     * a new state list animator is created which uses the given {@code elevation} value.
-     *
-     * @attr ref android.support.design.R.styleable#AppBarLayout_elevation
-     */
-    @Deprecated
-    public void setTargetElevation(float elevation) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            ViewUtilsLollipop.setDefaultAppBarLayoutStateListAnimator(this, elevation);
-        }
-    }
-
-    /**
-     * @deprecated target elevation is now deprecated. AppBarLayout's elevation is now
-     * controlled via a {@link android.animation.StateListAnimator}. This method now
-     * always returns 0.
-     */
-    @Deprecated
-    public float getTargetElevation() {
-        return 0;
-    }
-
-    int getPendingAction() {
-        return mPendingAction;
-    }
-
-    void resetPendingAction() {
-        mPendingAction = PENDING_ACTION_NONE;
-    }
-
-    @VisibleForTesting
-    final int getTopInset() {
-        return mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0;
-    }
-
-    WindowInsetsCompat onWindowInsetChanged(final WindowInsetsCompat insets) {
-        WindowInsetsCompat newInsets = null;
-
-        if (ViewCompat.getFitsSystemWindows(this)) {
-            // If we're set to fit system windows, keep the insets
-            newInsets = insets;
-        }
-
-        // If our insets have changed, keep them and invalidate the scroll ranges...
-        if (!ObjectsCompat.equals(mLastInsets, newInsets)) {
-            mLastInsets = newInsets;
-            invalidateScrollRanges();
-        }
-
-        return insets;
-    }
-
-    public static class LayoutParams extends LinearLayout.LayoutParams {
-
-        /** @hide */
-        @RestrictTo(LIBRARY_GROUP)
-        @IntDef(flag=true, value={
-                SCROLL_FLAG_SCROLL,
-                SCROLL_FLAG_EXIT_UNTIL_COLLAPSED,
-                SCROLL_FLAG_ENTER_ALWAYS,
-                SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED,
-                SCROLL_FLAG_SNAP
-        })
-        @Retention(RetentionPolicy.SOURCE)
-        public @interface ScrollFlags {}
-
-        /**
-         * The view will be scroll in direct relation to scroll events. This flag needs to be
-         * set for any of the other flags to take effect. If any sibling views
-         * before this one do not have this flag, then this value has no effect.
-         */
-        public static final int SCROLL_FLAG_SCROLL = 0x1;
-
-        /**
-         * When exiting (scrolling off screen) the view will be scrolled until it is
-         * 'collapsed'. The collapsed height is defined by the view's minimum height.
-         *
-         * @see ViewCompat#getMinimumHeight(View)
-         * @see View#setMinimumHeight(int)
-         */
-        public static final int SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 0x2;
-
-        /**
-         * When entering (scrolling on screen) the view will scroll on any downwards
-         * scroll event, regardless of whether the scrolling view is also scrolling. This
-         * is commonly referred to as the 'quick return' pattern.
-         */
-        public static final int SCROLL_FLAG_ENTER_ALWAYS = 0x4;
-
-        /**
-         * An additional flag for 'enterAlways' which modifies the returning view to
-         * only initially scroll back to it's collapsed height. Once the scrolling view has
-         * reached the end of it's scroll range, the remainder of this view will be scrolled
-         * into view. The collapsed height is defined by the view's minimum height.
-         *
-         * @see ViewCompat#getMinimumHeight(View)
-         * @see View#setMinimumHeight(int)
-         */
-        public static final int SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED = 0x8;
-
-        /**
-         * Upon a scroll ending, if the view is only partially visible then it will be snapped
-         * and scrolled to it's closest edge. For example, if the view only has it's bottom 25%
-         * displayed, it will be scrolled off screen completely. Conversely, if it's bottom 75%
-         * is visible then it will be scrolled fully into view.
-         */
-        public static final int SCROLL_FLAG_SNAP = 0x10;
-
-        /**
-         * Internal flags which allows quick checking features
-         */
-        static final int FLAG_QUICK_RETURN = SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS;
-        static final int FLAG_SNAP = SCROLL_FLAG_SCROLL | SCROLL_FLAG_SNAP;
-        static final int COLLAPSIBLE_FLAGS = SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
-                | SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED;
-
-        int mScrollFlags = SCROLL_FLAG_SCROLL;
-        Interpolator mScrollInterpolator;
-
-        public LayoutParams(Context c, AttributeSet attrs) {
-            super(c, attrs);
-            TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.AppBarLayout_Layout);
-            mScrollFlags = a.getInt(R.styleable.AppBarLayout_Layout_layout_scrollFlags, 0);
-            if (a.hasValue(R.styleable.AppBarLayout_Layout_layout_scrollInterpolator)) {
-                int resId = a.getResourceId(
-                        R.styleable.AppBarLayout_Layout_layout_scrollInterpolator, 0);
-                mScrollInterpolator = android.view.animation.AnimationUtils.loadInterpolator(
-                        c, resId);
-            }
-            a.recycle();
-        }
-
-        public LayoutParams(int width, int height) {
-            super(width, height);
-        }
-
-        public LayoutParams(int width, int height, float weight) {
-            super(width, height, weight);
-        }
-
-        public LayoutParams(ViewGroup.LayoutParams p) {
-            super(p);
-        }
-
-        public LayoutParams(MarginLayoutParams source) {
-            super(source);
-        }
-
-        @RequiresApi(19)
-        public LayoutParams(LinearLayout.LayoutParams source) {
-            // The copy constructor called here only exists on API 19+.
-            super(source);
-        }
-
-        @RequiresApi(19)
-        public LayoutParams(LayoutParams source) {
-            // The copy constructor called here only exists on API 19+.
-            super(source);
-            mScrollFlags = source.mScrollFlags;
-            mScrollInterpolator = source.mScrollInterpolator;
-        }
-
-        /**
-         * Set the scrolling flags.
-         *
-         * @param flags bitwise int of {@link #SCROLL_FLAG_SCROLL},
-         *             {@link #SCROLL_FLAG_EXIT_UNTIL_COLLAPSED}, {@link #SCROLL_FLAG_ENTER_ALWAYS},
-         *             {@link #SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED} and {@link #SCROLL_FLAG_SNAP }.
-         *
-         * @see #getScrollFlags()
-         *
-         * @attr ref android.support.design.R.styleable#AppBarLayout_Layout_layout_scrollFlags
-         */
-        public void setScrollFlags(@ScrollFlags int flags) {
-            mScrollFlags = flags;
-        }
-
-        /**
-         * Returns the scrolling flags.
-         *
-         * @see #setScrollFlags(int)
-         *
-         * @attr ref android.support.design.R.styleable#AppBarLayout_Layout_layout_scrollFlags
-         */
-        @ScrollFlags
-        public int getScrollFlags() {
-            return mScrollFlags;
-        }
-
-        /**
-         * Set the interpolator to when scrolling the view associated with this
-         * {@link LayoutParams}.
-         *
-         * @param interpolator the interpolator to use, or null to use normal 1-to-1 scrolling.
-         *
-         * @attr ref android.support.design.R.styleable#AppBarLayout_Layout_layout_scrollInterpolator
-         * @see #getScrollInterpolator()
-         */
-        public void setScrollInterpolator(Interpolator interpolator) {
-            mScrollInterpolator = interpolator;
-        }
-
-        /**
-         * Returns the {@link Interpolator} being used for scrolling the view associated with this
-         * {@link LayoutParams}. Null indicates 'normal' 1-to-1 scrolling.
-         *
-         * @attr ref android.support.design.R.styleable#AppBarLayout_Layout_layout_scrollInterpolator
-         * @see #setScrollInterpolator(Interpolator)
-         */
-        public Interpolator getScrollInterpolator() {
-            return mScrollInterpolator;
-        }
-
-        /**
-         * Returns true if the scroll flags are compatible for 'collapsing'
-         */
-        boolean isCollapsible() {
-            return (mScrollFlags & SCROLL_FLAG_SCROLL) == SCROLL_FLAG_SCROLL
-                    && (mScrollFlags & COLLAPSIBLE_FLAGS) != 0;
-        }
-    }
-
-    /**
-     * The default {@link Behavior} for {@link AppBarLayout}. Implements the necessary nested
-     * scroll handling with offsetting.
-     */
-    public static class Behavior extends HeaderBehavior<AppBarLayout> {
-        private static final int MAX_OFFSET_ANIMATION_DURATION = 600; // ms
-        private static final int INVALID_POSITION = -1;
-
-        /**
-         * Callback to allow control over any {@link AppBarLayout} dragging.
-         */
-        public static abstract class DragCallback {
-            /**
-             * Allows control over whether the given {@link AppBarLayout} can be dragged or not.
-             *
-             * <p>Dragging is defined as a direct touch on the AppBarLayout with movement. This
-             * call does not affect any nested scrolling.</p>
-             *
-             * @return true if we are in a position to scroll the AppBarLayout via a drag, false
-             *         if not.
-             */
-            public abstract boolean canDrag(@NonNull AppBarLayout appBarLayout);
-        }
-
-        private int mOffsetDelta;
-        private ValueAnimator mOffsetAnimator;
-
-        private int mOffsetToChildIndexOnLayout = INVALID_POSITION;
-        private boolean mOffsetToChildIndexOnLayoutIsMinHeight;
-        private float mOffsetToChildIndexOnLayoutPerc;
-
-        private WeakReference<View> mLastNestedScrollingChildRef;
-        private DragCallback mOnDragCallback;
-
-        public Behavior() {}
-
-        public Behavior(Context context, AttributeSet attrs) {
-            super(context, attrs);
-        }
-
-        @Override
-        public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child,
-                View directTargetChild, View target, int nestedScrollAxes, int type) {
-            // Return true if we're nested scrolling vertically, and we have scrollable children
-            // and the scrolling view is big enough to scroll
-            final boolean started = (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0
-                    && child.hasScrollableChildren()
-                    && parent.getHeight() - directTargetChild.getHeight() <= child.getHeight();
-
-            if (started && mOffsetAnimator != null) {
-                // Cancel any offset animation
-                mOffsetAnimator.cancel();
-            }
-
-            // A new nested scroll has started so clear out the previous ref
-            mLastNestedScrollingChildRef = null;
-
-            return started;
-        }
-
-        @Override
-        public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,
-                View target, int dx, int dy, int[] consumed, int type) {
-            if (dy != 0) {
-                int min, max;
-                if (dy < 0) {
-                    // We're scrolling down
-                    min = -child.getTotalScrollRange();
-                    max = min + child.getDownNestedPreScrollRange();
-                } else {
-                    // We're scrolling up
-                    min = -child.getUpNestedPreScrollRange();
-                    max = 0;
-                }
-                if (min != max) {
-                    consumed[1] = scroll(coordinatorLayout, child, dy, min, max);
-                }
-            }
-        }
-
-        @Override
-        public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,
-                View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed,
-                int type) {
-            if (dyUnconsumed < 0) {
-                // If the scrolling view is scrolling down but not consuming, it's probably be at
-                // the top of it's content
-                scroll(coordinatorLayout, child, dyUnconsumed,
-                        -child.getDownNestedScrollRange(), 0);
-            }
-        }
-
-        @Override
-        public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout abl,
-                View target, int type) {
-            if (type == ViewCompat.TYPE_TOUCH) {
-                // If we haven't been flung then let's see if the current view has been set to snap
-                snapToChildIfNeeded(coordinatorLayout, abl);
-            }
-
-            // Keep a reference to the previous nested scrolling child
-            mLastNestedScrollingChildRef = new WeakReference<>(target);
-        }
-
-        /**
-         * Set a callback to control any {@link AppBarLayout} dragging.
-         *
-         * @param callback the callback to use, or {@code null} to use the default behavior.
-         */
-        public void setDragCallback(@Nullable DragCallback callback) {
-            mOnDragCallback = callback;
-        }
-
-        private void animateOffsetTo(final CoordinatorLayout coordinatorLayout,
-                final AppBarLayout child, final int offset, float velocity) {
-            final int distance = Math.abs(getTopBottomOffsetForScrollingSibling() - offset);
-
-            final int duration;
-            velocity = Math.abs(velocity);
-            if (velocity > 0) {
-                duration = 3 * Math.round(1000 * (distance / velocity));
-            } else {
-                final float distanceRatio = (float) distance / child.getHeight();
-                duration = (int) ((distanceRatio + 1) * 150);
-            }
-
-            animateOffsetWithDuration(coordinatorLayout, child, offset, duration);
-        }
-
-        private void animateOffsetWithDuration(final CoordinatorLayout coordinatorLayout,
-                final AppBarLayout child, final int offset, final int duration) {
-            final int currentOffset = getTopBottomOffsetForScrollingSibling();
-            if (currentOffset == offset) {
-                if (mOffsetAnimator != null && mOffsetAnimator.isRunning()) {
-                    mOffsetAnimator.cancel();
-                }
-                return;
-            }
-
-            if (mOffsetAnimator == null) {
-                mOffsetAnimator = new ValueAnimator();
-                mOffsetAnimator.setInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR);
-                mOffsetAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                    @Override
-                    public void onAnimationUpdate(ValueAnimator animation) {
-                        setHeaderTopBottomOffset(coordinatorLayout, child,
-                                (int) animation.getAnimatedValue());
-                    }
-                });
-            } else {
-                mOffsetAnimator.cancel();
-            }
-
-            mOffsetAnimator.setDuration(Math.min(duration, MAX_OFFSET_ANIMATION_DURATION));
-            mOffsetAnimator.setIntValues(currentOffset, offset);
-            mOffsetAnimator.start();
-        }
-
-        private int getChildIndexOnOffset(AppBarLayout abl, final int offset) {
-            for (int i = 0, count = abl.getChildCount(); i < count; i++) {
-                View child = abl.getChildAt(i);
-                if (child.getTop() <= -offset && child.getBottom() >= -offset) {
-                    return i;
-                }
-            }
-            return -1;
-        }
-
-        private void snapToChildIfNeeded(CoordinatorLayout coordinatorLayout, AppBarLayout abl) {
-            final int offset = getTopBottomOffsetForScrollingSibling();
-            final int offsetChildIndex = getChildIndexOnOffset(abl, offset);
-            if (offsetChildIndex >= 0) {
-                final View offsetChild = abl.getChildAt(offsetChildIndex);
-                final LayoutParams lp = (LayoutParams) offsetChild.getLayoutParams();
-                final int flags = lp.getScrollFlags();
-
-                if ((flags & LayoutParams.FLAG_SNAP) == LayoutParams.FLAG_SNAP) {
-                    // We're set the snap, so animate the offset to the nearest edge
-                    int snapTop = -offsetChild.getTop();
-                    int snapBottom = -offsetChild.getBottom();
-
-                    if (offsetChildIndex == abl.getChildCount() - 1) {
-                        // If this is the last child, we need to take the top inset into account
-                        snapBottom += abl.getTopInset();
-                    }
-
-                    if (checkFlag(flags, LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED)) {
-                        // If the view is set only exit until it is collapsed, we'll abide by that
-                        snapBottom += ViewCompat.getMinimumHeight(offsetChild);
-                    } else if (checkFlag(flags, LayoutParams.FLAG_QUICK_RETURN
-                            | LayoutParams.SCROLL_FLAG_ENTER_ALWAYS)) {
-                        // If it's set to always enter collapsed, it actually has two states. We
-                        // select the state and then snap within the state
-                        final int seam = snapBottom + ViewCompat.getMinimumHeight(offsetChild);
-                        if (offset < seam) {
-                            snapTop = seam;
-                        } else {
-                            snapBottom = seam;
-                        }
-                    }
-
-                    final int newOffset = offset < (snapBottom + snapTop) / 2
-                            ? snapBottom
-                            : snapTop;
-                    animateOffsetTo(coordinatorLayout, abl,
-                            MathUtils.clamp(newOffset, -abl.getTotalScrollRange(), 0), 0);
-                }
-            }
-        }
-
-        private static boolean checkFlag(final int flags, final int check) {
-            return (flags & check) == check;
-        }
-
-        @Override
-        public boolean onMeasureChild(CoordinatorLayout parent, AppBarLayout child,
-                int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec,
-                int heightUsed) {
-            final CoordinatorLayout.LayoutParams lp =
-                    (CoordinatorLayout.LayoutParams) child.getLayoutParams();
-            if (lp.height == CoordinatorLayout.LayoutParams.WRAP_CONTENT) {
-                // If the view is set to wrap on it's height, CoordinatorLayout by default will
-                // cap the view at the CoL's height. Since the AppBarLayout can scroll, this isn't
-                // what we actually want, so we measure it ourselves with an unspecified spec to
-                // allow the child to be larger than it's parent
-                parent.onMeasureChild(child, parentWidthMeasureSpec, widthUsed,
-                        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), heightUsed);
-                return true;
-            }
-
-            // Let the parent handle it as normal
-            return super.onMeasureChild(parent, child, parentWidthMeasureSpec, widthUsed,
-                    parentHeightMeasureSpec, heightUsed);
-        }
-
-        @Override
-        public boolean onLayoutChild(CoordinatorLayout parent, AppBarLayout abl,
-                int layoutDirection) {
-            boolean handled = super.onLayoutChild(parent, abl, layoutDirection);
-
-            // The priority for for actions here is (first which is true wins):
-            // 1. forced pending actions
-            // 2. offsets for restorations
-            // 3. non-forced pending actions
-            final int pendingAction = abl.getPendingAction();
-            if (mOffsetToChildIndexOnLayout >= 0 && (pendingAction & PENDING_ACTION_FORCE) == 0) {
-                View child = abl.getChildAt(mOffsetToChildIndexOnLayout);
-                int offset = -child.getBottom();
-                if (mOffsetToChildIndexOnLayoutIsMinHeight) {
-                    offset += ViewCompat.getMinimumHeight(child) + abl.getTopInset();
-                } else {
-                    offset += Math.round(child.getHeight() * mOffsetToChildIndexOnLayoutPerc);
-                }
-                setHeaderTopBottomOffset(parent, abl, offset);
-            } else if (pendingAction != PENDING_ACTION_NONE) {
-                final boolean animate = (pendingAction & PENDING_ACTION_ANIMATE_ENABLED) != 0;
-                if ((pendingAction & PENDING_ACTION_COLLAPSED) != 0) {
-                    final int offset = -abl.getUpNestedPreScrollRange();
-                    if (animate) {
-                        animateOffsetTo(parent, abl, offset, 0);
-                    } else {
-                        setHeaderTopBottomOffset(parent, abl, offset);
-                    }
-                } else if ((pendingAction & PENDING_ACTION_EXPANDED) != 0) {
-                    if (animate) {
-                        animateOffsetTo(parent, abl, 0, 0);
-                    } else {
-                        setHeaderTopBottomOffset(parent, abl, 0);
-                    }
-                }
-            }
-
-            // Finally reset any pending states
-            abl.resetPendingAction();
-            mOffsetToChildIndexOnLayout = INVALID_POSITION;
-
-            // We may have changed size, so let's constrain the top and bottom offset correctly,
-            // just in case we're out of the bounds
-            setTopAndBottomOffset(
-                    MathUtils.clamp(getTopAndBottomOffset(), -abl.getTotalScrollRange(), 0));
-
-            // Update the AppBarLayout's drawable state for any elevation changes.
-            // This is needed so that the elevation is set in the first layout, so that
-            // we don't get a visual elevation jump pre-N (due to the draw dispatch skip)
-            updateAppBarLayoutDrawableState(parent, abl, getTopAndBottomOffset(), 0, true);
-
-            // Make sure we dispatch the offset update
-            abl.dispatchOffsetUpdates(getTopAndBottomOffset());
-
-            return handled;
-        }
-
-        @Override
-        boolean canDragView(AppBarLayout view) {
-            if (mOnDragCallback != null) {
-                // If there is a drag callback set, it's in control
-                return mOnDragCallback.canDrag(view);
-            }
-
-            // Else we'll use the default behaviour of seeing if it can scroll down
-            if (mLastNestedScrollingChildRef != null) {
-                // If we have a reference to a scrolling view, check it
-                final View scrollingView = mLastNestedScrollingChildRef.get();
-                return scrollingView != null && scrollingView.isShown()
-                        && !scrollingView.canScrollVertically(-1);
-            } else {
-                // Otherwise we assume that the scrolling view hasn't been scrolled and can drag.
-                return true;
-            }
-        }
-
-        @Override
-        void onFlingFinished(CoordinatorLayout parent, AppBarLayout layout) {
-            // At the end of a manual fling, check to see if we need to snap to the edge-child
-            snapToChildIfNeeded(parent, layout);
-        }
-
-        @Override
-        int getMaxDragOffset(AppBarLayout view) {
-            return -view.getDownNestedScrollRange();
-        }
-
-        @Override
-        int getScrollRangeForDragFling(AppBarLayout view) {
-            return view.getTotalScrollRange();
-        }
-
-        @Override
-        int setHeaderTopBottomOffset(CoordinatorLayout coordinatorLayout,
-                AppBarLayout appBarLayout, int newOffset, int minOffset, int maxOffset) {
-            final int curOffset = getTopBottomOffsetForScrollingSibling();
-            int consumed = 0;
-
-            if (minOffset != 0 && curOffset >= minOffset && curOffset <= maxOffset) {
-                // If we have some scrolling range, and we're currently within the min and max
-                // offsets, calculate a new offset
-                newOffset = MathUtils.clamp(newOffset, minOffset, maxOffset);
-                if (curOffset != newOffset) {
-                    final int interpolatedOffset = appBarLayout.hasChildWithInterpolator()
-                            ? interpolateOffset(appBarLayout, newOffset)
-                            : newOffset;
-
-                    final boolean offsetChanged = setTopAndBottomOffset(interpolatedOffset);
-
-                    // Update how much dy we have consumed
-                    consumed = curOffset - newOffset;
-                    // Update the stored sibling offset
-                    mOffsetDelta = newOffset - interpolatedOffset;
-
-                    if (!offsetChanged && appBarLayout.hasChildWithInterpolator()) {
-                        // If the offset hasn't changed and we're using an interpolated scroll
-                        // then we need to keep any dependent views updated. CoL will do this for
-                        // us when we move, but we need to do it manually when we don't (as an
-                        // interpolated scroll may finish early).
-                        coordinatorLayout.dispatchDependentViewsChanged(appBarLayout);
-                    }
-
-                    // Dispatch the updates to any listeners
-                    appBarLayout.dispatchOffsetUpdates(getTopAndBottomOffset());
-
-                    // Update the AppBarLayout's drawable state (for any elevation changes)
-                    updateAppBarLayoutDrawableState(coordinatorLayout, appBarLayout, newOffset,
-                            newOffset < curOffset ? -1 : 1, false);
-                }
-            } else {
-                // Reset the offset delta
-                mOffsetDelta = 0;
-            }
-
-            return consumed;
-        }
-
-        @VisibleForTesting
-        boolean isOffsetAnimatorRunning() {
-            return mOffsetAnimator != null && mOffsetAnimator.isRunning();
-        }
-
-        private int interpolateOffset(AppBarLayout layout, final int offset) {
-            final int absOffset = Math.abs(offset);
-
-            for (int i = 0, z = layout.getChildCount(); i < z; i++) {
-                final View child = layout.getChildAt(i);
-                final AppBarLayout.LayoutParams childLp = (LayoutParams) child.getLayoutParams();
-                final Interpolator interpolator = childLp.getScrollInterpolator();
-
-                if (absOffset >= child.getTop() && absOffset <= child.getBottom()) {
-                    if (interpolator != null) {
-                        int childScrollableHeight = 0;
-                        final int flags = childLp.getScrollFlags();
-                        if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) {
-                            // We're set to scroll so add the child's height plus margin
-                            childScrollableHeight += child.getHeight() + childLp.topMargin
-                                    + childLp.bottomMargin;
-
-                            if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) {
-                                // For a collapsing scroll, we to take the collapsed height
-                                // into account.
-                                childScrollableHeight -= ViewCompat.getMinimumHeight(child);
-                            }
-                        }
-
-                        if (ViewCompat.getFitsSystemWindows(child)) {
-                            childScrollableHeight -= layout.getTopInset();
-                        }
-
-                        if (childScrollableHeight > 0) {
-                            final int offsetForView = absOffset - child.getTop();
-                            final int interpolatedDiff = Math.round(childScrollableHeight *
-                                    interpolator.getInterpolation(
-                                            offsetForView / (float) childScrollableHeight));
-
-                            return Integer.signum(offset) * (child.getTop() + interpolatedDiff);
-                        }
-                    }
-
-                    // If we get to here then the view on the offset isn't suitable for interpolated
-                    // scrolling. So break out of the loop
-                    break;
-                }
-            }
-
-            return offset;
-        }
-
-        private void updateAppBarLayoutDrawableState(final CoordinatorLayout parent,
-                final AppBarLayout layout, final int offset, final int direction,
-                final boolean forceJump) {
-            final View child = getAppBarChildOnOffset(layout, offset);
-            if (child != null) {
-                final AppBarLayout.LayoutParams childLp = (LayoutParams) child.getLayoutParams();
-                final int flags = childLp.getScrollFlags();
-                boolean collapsed = false;
-
-                if ((flags & LayoutParams.SCROLL_FLAG_SCROLL) != 0) {
-                    final int minHeight = ViewCompat.getMinimumHeight(child);
-
-                    if (direction > 0 && (flags & (LayoutParams.SCROLL_FLAG_ENTER_ALWAYS
-                            | LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED)) != 0) {
-                        // We're set to enter always collapsed so we are only collapsed when
-                        // being scrolled down, and in a collapsed offset
-                        collapsed = -offset >= child.getBottom() - minHeight - layout.getTopInset();
-                    } else if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) != 0) {
-                        // We're set to exit until collapsed, so any offset which results in
-                        // the minimum height (or less) being shown is collapsed
-                        collapsed = -offset >= child.getBottom() - minHeight - layout.getTopInset();
-                    }
-                }
-
-                final boolean changed = layout.setCollapsedState(collapsed);
-
-                if (Build.VERSION.SDK_INT >= 11 && (forceJump
-                        || (changed && shouldJumpElevationState(parent, layout)))) {
-                    // If the collapsed state changed, we may need to
-                    // jump to the current state if we have an overlapping view
-                    layout.jumpDrawablesToCurrentState();
-                }
-            }
-        }
-
-        private boolean shouldJumpElevationState(CoordinatorLayout parent, AppBarLayout layout) {
-            // We should jump the elevated state if we have a dependent scrolling view which has
-            // an overlapping top (i.e. overlaps us)
-            final List<View> dependencies = parent.getDependents(layout);
-            for (int i = 0, size = dependencies.size(); i < size; i++) {
-                final View dependency = dependencies.get(i);
-                final CoordinatorLayout.LayoutParams lp =
-                        (CoordinatorLayout.LayoutParams) dependency.getLayoutParams();
-                final CoordinatorLayout.Behavior behavior = lp.getBehavior();
-
-                if (behavior instanceof ScrollingViewBehavior) {
-                    return ((ScrollingViewBehavior) behavior).getOverlayTop() != 0;
-                }
-            }
-            return false;
-        }
-
-        private static View getAppBarChildOnOffset(final AppBarLayout layout, final int offset) {
-            final int absOffset = Math.abs(offset);
-            for (int i = 0, z = layout.getChildCount(); i < z; i++) {
-                final View child = layout.getChildAt(i);
-                if (absOffset >= child.getTop() && absOffset <= child.getBottom()) {
-                    return child;
-                }
-            }
-            return null;
-        }
-
-        @Override
-        int getTopBottomOffsetForScrollingSibling() {
-            return getTopAndBottomOffset() + mOffsetDelta;
-        }
-
-        @Override
-        public Parcelable onSaveInstanceState(CoordinatorLayout parent, AppBarLayout abl) {
-            final Parcelable superState = super.onSaveInstanceState(parent, abl);
-            final int offset = getTopAndBottomOffset();
-
-            // Try and find the first visible child...
-            for (int i = 0, count = abl.getChildCount(); i < count; i++) {
-                View child = abl.getChildAt(i);
-                final int visBottom = child.getBottom() + offset;
-
-                if (child.getTop() + offset <= 0 && visBottom >= 0) {
-                    final SavedState ss = new SavedState(superState);
-                    ss.firstVisibleChildIndex = i;
-                    ss.firstVisibleChildAtMinimumHeight =
-                            visBottom == (ViewCompat.getMinimumHeight(child) + abl.getTopInset());
-                    ss.firstVisibleChildPercentageShown = visBottom / (float) child.getHeight();
-                    return ss;
-                }
-            }
-
-            // Else we'll just return the super state
-            return superState;
-        }
-
-        @Override
-        public void onRestoreInstanceState(CoordinatorLayout parent, AppBarLayout appBarLayout,
-                Parcelable state) {
-            if (state instanceof SavedState) {
-                final SavedState ss = (SavedState) state;
-                super.onRestoreInstanceState(parent, appBarLayout, ss.getSuperState());
-                mOffsetToChildIndexOnLayout = ss.firstVisibleChildIndex;
-                mOffsetToChildIndexOnLayoutPerc = ss.firstVisibleChildPercentageShown;
-                mOffsetToChildIndexOnLayoutIsMinHeight = ss.firstVisibleChildAtMinimumHeight;
-            } else {
-                super.onRestoreInstanceState(parent, appBarLayout, state);
-                mOffsetToChildIndexOnLayout = INVALID_POSITION;
-            }
-        }
-
-        protected static class SavedState extends AbsSavedState {
-            int firstVisibleChildIndex;
-            float firstVisibleChildPercentageShown;
-            boolean firstVisibleChildAtMinimumHeight;
-
-            public SavedState(Parcel source, ClassLoader loader) {
-                super(source, loader);
-                firstVisibleChildIndex = source.readInt();
-                firstVisibleChildPercentageShown = source.readFloat();
-                firstVisibleChildAtMinimumHeight = source.readByte() != 0;
-            }
-
-            public SavedState(Parcelable superState) {
-                super(superState);
-            }
-
-            @Override
-            public void writeToParcel(Parcel dest, int flags) {
-                super.writeToParcel(dest, flags);
-                dest.writeInt(firstVisibleChildIndex);
-                dest.writeFloat(firstVisibleChildPercentageShown);
-                dest.writeByte((byte) (firstVisibleChildAtMinimumHeight ? 1 : 0));
-            }
-
-            public static final Creator<SavedState> CREATOR = new ClassLoaderCreator<SavedState>() {
-                @Override
-                public SavedState createFromParcel(Parcel source, ClassLoader loader) {
-                    return new SavedState(source, loader);
-                }
-
-                @Override
-                public SavedState createFromParcel(Parcel source) {
-                    return new SavedState(source, null);
-                }
-
-                @Override
-                public SavedState[] newArray(int size) {
-                    return new SavedState[size];
-                }
-            };
-        }
-    }
-
-    /**
-     * Behavior which should be used by {@link View}s which can scroll vertically and support
-     * nested scrolling to automatically scroll any {@link AppBarLayout} siblings.
-     */
-    public static class ScrollingViewBehavior extends HeaderScrollingViewBehavior {
-
-        public ScrollingViewBehavior() {}
-
-        public ScrollingViewBehavior(Context context, AttributeSet attrs) {
-            super(context, attrs);
-
-            final TypedArray a = context.obtainStyledAttributes(attrs,
-                    R.styleable.ScrollingViewBehavior_Layout);
-            setOverlayTop(a.getDimensionPixelSize(
-                    R.styleable.ScrollingViewBehavior_Layout_behavior_overlapTop, 0));
-            a.recycle();
-        }
-
-        @Override
-        public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
-            // We depend on any AppBarLayouts
-            return dependency instanceof AppBarLayout;
-        }
-
-        @Override
-        public boolean onDependentViewChanged(CoordinatorLayout parent, View child,
-                View dependency) {
-            offsetChildAsNeeded(parent, child, dependency);
-            return false;
-        }
-
-        @Override
-        public boolean onRequestChildRectangleOnScreen(CoordinatorLayout parent, View child,
-                Rect rectangle, boolean immediate) {
-            final AppBarLayout header = findFirstDependency(parent.getDependencies(child));
-            if (header != null) {
-                // Offset the rect by the child's left/top
-                rectangle.offset(child.getLeft(), child.getTop());
-
-                final Rect parentRect = mTempRect1;
-                parentRect.set(0, 0, parent.getWidth(), parent.getHeight());
-
-                if (!parentRect.contains(rectangle)) {
-                    // If the rectangle can not be fully seen the visible bounds, collapse
-                    // the AppBarLayout
-                    header.setExpanded(false, !immediate);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        private void offsetChildAsNeeded(CoordinatorLayout parent, View child, View dependency) {
-            final CoordinatorLayout.Behavior behavior =
-                    ((CoordinatorLayout.LayoutParams) dependency.getLayoutParams()).getBehavior();
-            if (behavior instanceof Behavior) {
-                // Offset the child, pinning it to the bottom the header-dependency, maintaining
-                // any vertical gap and overlap
-                final Behavior ablBehavior = (Behavior) behavior;
-                ViewCompat.offsetTopAndBottom(child, (dependency.getBottom() - child.getTop())
-                        + ablBehavior.mOffsetDelta
-                        + getVerticalLayoutGap()
-                        - getOverlapPixelsForOffset(dependency));
-            }
-        }
-
-        @Override
-        float getOverlapRatioForOffset(final View header) {
-            if (header instanceof AppBarLayout) {
-                final AppBarLayout abl = (AppBarLayout) header;
-                final int totalScrollRange = abl.getTotalScrollRange();
-                final int preScrollDown = abl.getDownNestedPreScrollRange();
-                final int offset = getAppBarLayoutOffset(abl);
-
-                if (preScrollDown != 0 && (totalScrollRange + offset) <= preScrollDown) {
-                    // If we're in a pre-scroll down. Don't use the offset at all.
-                    return 0;
-                } else {
-                    final int availScrollRange = totalScrollRange - preScrollDown;
-                    if (availScrollRange != 0) {
-                        // Else we'll use a interpolated ratio of the overlap, depending on offset
-                        return 1f + (offset / (float) availScrollRange);
-                    }
-                }
-            }
-            return 0f;
-        }
-
-        private static int getAppBarLayoutOffset(AppBarLayout abl) {
-            final CoordinatorLayout.Behavior behavior =
-                    ((CoordinatorLayout.LayoutParams) abl.getLayoutParams()).getBehavior();
-            if (behavior instanceof Behavior) {
-                return ((Behavior) behavior).getTopBottomOffsetForScrollingSibling();
-            }
-            return 0;
-        }
-
-        @Override
-        AppBarLayout findFirstDependency(List<View> views) {
-            for (int i = 0, z = views.size(); i < z; i++) {
-                View view = views.get(i);
-                if (view instanceof AppBarLayout) {
-                    return (AppBarLayout) view;
-                }
-            }
-            return null;
-        }
-
-        @Override
-        int getScrollRange(View v) {
-            if (v instanceof AppBarLayout) {
-                return ((AppBarLayout) v).getTotalScrollRange();
-            } else {
-                return super.getScrollRange(v);
-            }
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/BaseTransientBottomBar.java b/design/src/android/support/design/widget/BaseTransientBottomBar.java
deleted file mode 100644
index 18c9ef9..0000000
--- a/design/src/android/support/design/widget/BaseTransientBottomBar.java
+++ /dev/null
@@ -1,753 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static android.support.design.widget.AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.os.Build;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.design.R;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.WindowInsetsCompat;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.view.accessibility.AccessibilityManager;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.widget.FrameLayout;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Base class for lightweight transient bars that are displayed along the bottom edge of the
- * application window.
- *
- * @param <B> The transient bottom bar subclass.
- */
-public abstract class BaseTransientBottomBar<B extends BaseTransientBottomBar<B>> {
-    /**
-     * Base class for {@link BaseTransientBottomBar} callbacks.
-     *
-     * @param <B> The transient bottom bar subclass.
-     * @see BaseTransientBottomBar#addCallback(BaseCallback)
-     */
-    public abstract static class BaseCallback<B> {
-        /** Indicates that the Snackbar was dismissed via a swipe.*/
-        public static final int DISMISS_EVENT_SWIPE = 0;
-        /** Indicates that the Snackbar was dismissed via an action click.*/
-        public static final int DISMISS_EVENT_ACTION = 1;
-        /** Indicates that the Snackbar was dismissed via a timeout.*/
-        public static final int DISMISS_EVENT_TIMEOUT = 2;
-        /** Indicates that the Snackbar was dismissed via a call to {@link #dismiss()}.*/
-        public static final int DISMISS_EVENT_MANUAL = 3;
-        /** Indicates that the Snackbar was dismissed from a new Snackbar being shown.*/
-        public static final int DISMISS_EVENT_CONSECUTIVE = 4;
-
-        /** @hide */
-        @RestrictTo(LIBRARY_GROUP)
-        @IntDef({DISMISS_EVENT_SWIPE, DISMISS_EVENT_ACTION, DISMISS_EVENT_TIMEOUT,
-                DISMISS_EVENT_MANUAL, DISMISS_EVENT_CONSECUTIVE})
-        @Retention(RetentionPolicy.SOURCE)
-        public @interface DismissEvent {}
-
-        /**
-         * Called when the given {@link BaseTransientBottomBar} has been dismissed, either
-         * through a time-out, having been manually dismissed, or an action being clicked.
-         *
-         * @param transientBottomBar The transient bottom bar which has been dismissed.
-         * @param event The event which caused the dismissal. One of either:
-         *              {@link #DISMISS_EVENT_SWIPE}, {@link #DISMISS_EVENT_ACTION},
-         *              {@link #DISMISS_EVENT_TIMEOUT}, {@link #DISMISS_EVENT_MANUAL} or
-         *              {@link #DISMISS_EVENT_CONSECUTIVE}.
-         *
-         * @see BaseTransientBottomBar#dismiss()
-         */
-        public void onDismissed(B transientBottomBar, @DismissEvent int event) {
-            // empty
-        }
-
-        /**
-         * Called when the given {@link BaseTransientBottomBar} is visible.
-         *
-         * @param transientBottomBar The transient bottom bar which is now visible.
-         * @see BaseTransientBottomBar#show()
-         */
-        public void onShown(B transientBottomBar) {
-            // empty
-        }
-    }
-
-    /**
-     * Interface that defines the behavior of the main content of a transient bottom bar.
-     */
-    public interface ContentViewCallback {
-        /**
-         * Animates the content of the transient bottom bar in.
-         *
-         * @param delay Animation delay.
-         * @param duration Animation duration.
-         */
-        void animateContentIn(int delay, int duration);
-
-        /**
-         * Animates the content of the transient bottom bar out.
-         *
-         * @param delay Animation delay.
-         * @param duration Animation duration.
-         */
-        void animateContentOut(int delay, int duration);
-    }
-
-    /**
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    @IntDef({LENGTH_INDEFINITE, LENGTH_SHORT, LENGTH_LONG})
-    @IntRange(from = 1)
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface Duration {}
-
-    /**
-     * Show the Snackbar indefinitely. This means that the Snackbar will be displayed from the time
-     * that is {@link #show() shown} until either it is dismissed, or another Snackbar is shown.
-     *
-     * @see #setDuration
-     */
-    public static final int LENGTH_INDEFINITE = -2;
-
-    /**
-     * Show the Snackbar for a short period of time.
-     *
-     * @see #setDuration
-     */
-    public static final int LENGTH_SHORT = -1;
-
-    /**
-     * Show the Snackbar for a long period of time.
-     *
-     * @see #setDuration
-     */
-    public static final int LENGTH_LONG = 0;
-
-    static final int ANIMATION_DURATION = 250;
-    static final int ANIMATION_FADE_DURATION = 180;
-
-    static final Handler sHandler;
-    static final int MSG_SHOW = 0;
-    static final int MSG_DISMISS = 1;
-
-    // On JB/KK versions of the platform sometimes View.setTranslationY does not
-    // result in layout / draw pass, and CoordinatorLayout relies on a draw pass to
-    // happen to sync vertical positioning of all its child views
-    private static final boolean USE_OFFSET_API = (Build.VERSION.SDK_INT >= 16)
-            && (Build.VERSION.SDK_INT <= 19);
-
-    static {
-        sHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
-            @Override
-            public boolean handleMessage(Message message) {
-                switch (message.what) {
-                    case MSG_SHOW:
-                        ((BaseTransientBottomBar) message.obj).showView();
-                        return true;
-                    case MSG_DISMISS:
-                        ((BaseTransientBottomBar) message.obj).hideView(message.arg1);
-                        return true;
-                }
-                return false;
-            }
-        });
-    }
-
-    private final ViewGroup mTargetParent;
-    private final Context mContext;
-    final SnackbarBaseLayout mView;
-    private final ContentViewCallback mContentViewCallback;
-    private int mDuration;
-
-    private List<BaseCallback<B>> mCallbacks;
-
-    private final AccessibilityManager mAccessibilityManager;
-
-    /**
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    interface OnLayoutChangeListener {
-        void onLayoutChange(View view, int left, int top, int right, int bottom);
-    }
-
-    /**
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    interface OnAttachStateChangeListener {
-        void onViewAttachedToWindow(View v);
-        void onViewDetachedFromWindow(View v);
-    }
-
-    /**
-     * Constructor for the transient bottom bar.
-     *
-     * @param parent The parent for this transient bottom bar.
-     * @param content The content view for this transient bottom bar.
-     * @param contentViewCallback The content view callback for this transient bottom bar.
-     */
-    protected BaseTransientBottomBar(@NonNull ViewGroup parent, @NonNull View content,
-            @NonNull ContentViewCallback contentViewCallback) {
-        if (parent == null) {
-            throw new IllegalArgumentException("Transient bottom bar must have non-null parent");
-        }
-        if (content == null) {
-            throw new IllegalArgumentException("Transient bottom bar must have non-null content");
-        }
-        if (contentViewCallback == null) {
-            throw new IllegalArgumentException("Transient bottom bar must have non-null callback");
-        }
-
-        mTargetParent = parent;
-        mContentViewCallback = contentViewCallback;
-        mContext = parent.getContext();
-
-        ThemeUtils.checkAppCompatTheme(mContext);
-
-        LayoutInflater inflater = LayoutInflater.from(mContext);
-        // Note that for backwards compatibility reasons we inflate a layout that is defined
-        // in the extending Snackbar class. This is to prevent breakage of apps that have custom
-        // coordinator layout behaviors that depend on that layout.
-        mView = (SnackbarBaseLayout) inflater.inflate(
-                R.layout.design_layout_snackbar, mTargetParent, false);
-        mView.addView(content);
-
-        ViewCompat.setAccessibilityLiveRegion(mView,
-                ViewCompat.ACCESSIBILITY_LIVE_REGION_POLITE);
-        ViewCompat.setImportantForAccessibility(mView,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
-
-        // Make sure that we fit system windows and have a listener to apply any insets
-        ViewCompat.setFitsSystemWindows(mView, true);
-        ViewCompat.setOnApplyWindowInsetsListener(mView,
-                new android.support.v4.view.OnApplyWindowInsetsListener() {
-                    @Override
-                    public WindowInsetsCompat onApplyWindowInsets(View v,
-                            WindowInsetsCompat insets) {
-                        // Copy over the bottom inset as padding so that we're displayed
-                        // above the navigation bar
-                        v.setPadding(v.getPaddingLeft(), v.getPaddingTop(),
-                                v.getPaddingRight(), insets.getSystemWindowInsetBottom());
-                        return insets;
-                    }
-                });
-
-        mAccessibilityManager = (AccessibilityManager)
-                mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
-    }
-
-    /**
-     * Set how long to show the view for.
-     *
-     * @param duration either be one of the predefined lengths:
-     *                 {@link #LENGTH_SHORT}, {@link #LENGTH_LONG}, or a custom duration
-     *                 in milliseconds.
-     */
-    @NonNull
-    public B setDuration(@Duration int duration) {
-        mDuration = duration;
-        return (B) this;
-    }
-
-    /**
-     * Return the duration.
-     *
-     * @see #setDuration
-     */
-    @Duration
-    public int getDuration() {
-        return mDuration;
-    }
-
-    /**
-     * Returns the {@link BaseTransientBottomBar}'s context.
-     */
-    @NonNull
-    public Context getContext() {
-        return mContext;
-    }
-
-    /**
-     * Returns the {@link BaseTransientBottomBar}'s view.
-     */
-    @NonNull
-    public View getView() {
-        return mView;
-    }
-
-    /**
-     * Show the {@link BaseTransientBottomBar}.
-     */
-    public void show() {
-        SnackbarManager.getInstance().show(mDuration, mManagerCallback);
-    }
-
-    /**
-     * Dismiss the {@link BaseTransientBottomBar}.
-     */
-    public void dismiss() {
-        dispatchDismiss(BaseCallback.DISMISS_EVENT_MANUAL);
-    }
-
-    void dispatchDismiss(@BaseCallback.DismissEvent int event) {
-        SnackbarManager.getInstance().dismiss(mManagerCallback, event);
-    }
-
-    /**
-     * Adds the specified callback to the list of callbacks that will be notified of transient
-     * bottom bar events.
-     *
-     * @param callback Callback to notify when transient bottom bar events occur.
-     * @see #removeCallback(BaseCallback)
-     */
-    @NonNull
-    public B addCallback(@NonNull BaseCallback<B> callback) {
-        if (callback == null) {
-            return (B) this;
-        }
-        if (mCallbacks == null) {
-            mCallbacks = new ArrayList<BaseCallback<B>>();
-        }
-        mCallbacks.add(callback);
-        return (B) this;
-    }
-
-    /**
-     * Removes the specified callback from the list of callbacks that will be notified of transient
-     * bottom bar events.
-     *
-     * @param callback Callback to remove from being notified of transient bottom bar events
-     * @see #addCallback(BaseCallback)
-     */
-    @NonNull
-    public B removeCallback(@NonNull BaseCallback<B> callback) {
-        if (callback == null) {
-            return (B) this;
-        }
-        if (mCallbacks == null) {
-            // This can happen if this method is called before the first call to addCallback
-            return (B) this;
-        }
-        mCallbacks.remove(callback);
-        return (B) this;
-    }
-
-    /**
-     * Return whether this {@link BaseTransientBottomBar} is currently being shown.
-     */
-    public boolean isShown() {
-        return SnackbarManager.getInstance().isCurrent(mManagerCallback);
-    }
-
-    /**
-     * Returns whether this {@link BaseTransientBottomBar} is currently being shown, or is queued
-     * to be shown next.
-     */
-    public boolean isShownOrQueued() {
-        return SnackbarManager.getInstance().isCurrentOrNext(mManagerCallback);
-    }
-
-    final SnackbarManager.Callback mManagerCallback = new SnackbarManager.Callback() {
-        @Override
-        public void show() {
-            sHandler.sendMessage(sHandler.obtainMessage(MSG_SHOW, BaseTransientBottomBar.this));
-        }
-
-        @Override
-        public void dismiss(int event) {
-            sHandler.sendMessage(sHandler.obtainMessage(MSG_DISMISS, event, 0,
-                    BaseTransientBottomBar.this));
-        }
-    };
-
-    final void showView() {
-        if (mView.getParent() == null) {
-            final ViewGroup.LayoutParams lp = mView.getLayoutParams();
-
-            if (lp instanceof CoordinatorLayout.LayoutParams) {
-                // If our LayoutParams are from a CoordinatorLayout, we'll setup our Behavior
-                final CoordinatorLayout.LayoutParams clp = (CoordinatorLayout.LayoutParams) lp;
-
-                final Behavior behavior = new Behavior();
-                behavior.setStartAlphaSwipeDistance(0.1f);
-                behavior.setEndAlphaSwipeDistance(0.6f);
-                behavior.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_START_TO_END);
-                behavior.setListener(new SwipeDismissBehavior.OnDismissListener() {
-                    @Override
-                    public void onDismiss(View view) {
-                        view.setVisibility(View.GONE);
-                        dispatchDismiss(BaseCallback.DISMISS_EVENT_SWIPE);
-                    }
-
-                    @Override
-                    public void onDragStateChanged(int state) {
-                        switch (state) {
-                            case SwipeDismissBehavior.STATE_DRAGGING:
-                            case SwipeDismissBehavior.STATE_SETTLING:
-                                // If the view is being dragged or settling, pause the timeout
-                                SnackbarManager.getInstance().pauseTimeout(mManagerCallback);
-                                break;
-                            case SwipeDismissBehavior.STATE_IDLE:
-                                // If the view has been released and is idle, restore the timeout
-                                SnackbarManager.getInstance()
-                                        .restoreTimeoutIfPaused(mManagerCallback);
-                                break;
-                        }
-                    }
-                });
-                clp.setBehavior(behavior);
-                // Also set the inset edge so that views can dodge the bar correctly
-                clp.insetEdge = Gravity.BOTTOM;
-            }
-
-            mTargetParent.addView(mView);
-        }
-
-        mView.setOnAttachStateChangeListener(
-                new BaseTransientBottomBar.OnAttachStateChangeListener() {
-                @Override
-                public void onViewAttachedToWindow(View v) {}
-
-                @Override
-                public void onViewDetachedFromWindow(View v) {
-                    if (isShownOrQueued()) {
-                        // If we haven't already been dismissed then this event is coming from a
-                        // non-user initiated action. Hence we need to make sure that we callback
-                        // and keep our state up to date. We need to post the call since
-                        // removeView() will call through to onDetachedFromWindow and thus overflow.
-                        sHandler.post(new Runnable() {
-                            @Override
-                            public void run() {
-                                onViewHidden(BaseCallback.DISMISS_EVENT_MANUAL);
-                            }
-                        });
-                    }
-                }
-            });
-
-        if (ViewCompat.isLaidOut(mView)) {
-            if (shouldAnimate()) {
-                // If animations are enabled, animate it in
-                animateViewIn();
-            } else {
-                // Else if anims are disabled just call back now
-                onViewShown();
-            }
-        } else {
-            // Otherwise, add one of our layout change listeners and show it in when laid out
-            mView.setOnLayoutChangeListener(new BaseTransientBottomBar.OnLayoutChangeListener() {
-                @Override
-                public void onLayoutChange(View view, int left, int top, int right, int bottom) {
-                    mView.setOnLayoutChangeListener(null);
-
-                    if (shouldAnimate()) {
-                        // If animations are enabled, animate it in
-                        animateViewIn();
-                    } else {
-                        // Else if anims are disabled just call back now
-                        onViewShown();
-                    }
-                }
-            });
-        }
-    }
-
-    void animateViewIn() {
-        if (Build.VERSION.SDK_INT >= 12) {
-            final int viewHeight = mView.getHeight();
-            if (USE_OFFSET_API) {
-                ViewCompat.offsetTopAndBottom(mView, viewHeight);
-            } else {
-                mView.setTranslationY(viewHeight);
-            }
-            final ValueAnimator animator = new ValueAnimator();
-            animator.setIntValues(viewHeight, 0);
-            animator.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
-            animator.setDuration(ANIMATION_DURATION);
-            animator.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animator) {
-                    mContentViewCallback.animateContentIn(
-                            ANIMATION_DURATION - ANIMATION_FADE_DURATION,
-                            ANIMATION_FADE_DURATION);
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animator) {
-                    onViewShown();
-                }
-            });
-            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                private int mPreviousAnimatedIntValue = viewHeight;
-
-                @Override
-                public void onAnimationUpdate(ValueAnimator animator) {
-                    int currentAnimatedIntValue = (int) animator.getAnimatedValue();
-                    if (USE_OFFSET_API) {
-                        ViewCompat.offsetTopAndBottom(mView,
-                                currentAnimatedIntValue - mPreviousAnimatedIntValue);
-                    } else {
-                        mView.setTranslationY(currentAnimatedIntValue);
-                    }
-                    mPreviousAnimatedIntValue = currentAnimatedIntValue;
-                }
-            });
-            animator.start();
-        } else {
-            final Animation anim = AnimationUtils.loadAnimation(mView.getContext(),
-                    R.anim.design_snackbar_in);
-            anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
-            anim.setDuration(ANIMATION_DURATION);
-            anim.setAnimationListener(new Animation.AnimationListener() {
-                @Override
-                public void onAnimationEnd(Animation animation) {
-                    onViewShown();
-                }
-
-                @Override
-                public void onAnimationStart(Animation animation) {}
-
-                @Override
-                public void onAnimationRepeat(Animation animation) {}
-            });
-            mView.startAnimation(anim);
-        }
-    }
-
-    private void animateViewOut(final int event) {
-        if (Build.VERSION.SDK_INT >= 12) {
-            final ValueAnimator animator = new ValueAnimator();
-            animator.setIntValues(0, mView.getHeight());
-            animator.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
-            animator.setDuration(ANIMATION_DURATION);
-            animator.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animator) {
-                    mContentViewCallback.animateContentOut(0, ANIMATION_FADE_DURATION);
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animator) {
-                    onViewHidden(event);
-                }
-            });
-            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                private int mPreviousAnimatedIntValue = 0;
-
-                @Override
-                public void onAnimationUpdate(ValueAnimator animator) {
-                    int currentAnimatedIntValue = (int) animator.getAnimatedValue();
-                    if (USE_OFFSET_API) {
-                        ViewCompat.offsetTopAndBottom(mView,
-                                currentAnimatedIntValue - mPreviousAnimatedIntValue);
-                    } else {
-                        mView.setTranslationY(currentAnimatedIntValue);
-                    }
-                    mPreviousAnimatedIntValue = currentAnimatedIntValue;
-                }
-            });
-            animator.start();
-        } else {
-            final Animation anim = AnimationUtils.loadAnimation(mView.getContext(),
-                    R.anim.design_snackbar_out);
-            anim.setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR);
-            anim.setDuration(ANIMATION_DURATION);
-            anim.setAnimationListener(new Animation.AnimationListener() {
-                @Override
-                public void onAnimationEnd(Animation animation) {
-                    onViewHidden(event);
-                }
-
-                @Override
-                public void onAnimationStart(Animation animation) {}
-
-                @Override
-                public void onAnimationRepeat(Animation animation) {}
-            });
-            mView.startAnimation(anim);
-        }
-    }
-
-    final void hideView(@BaseCallback.DismissEvent final int event) {
-        if (shouldAnimate() && mView.getVisibility() == View.VISIBLE) {
-            animateViewOut(event);
-        } else {
-            // If anims are disabled or the view isn't visible, just call back now
-            onViewHidden(event);
-        }
-    }
-
-    void onViewShown() {
-        SnackbarManager.getInstance().onShown(mManagerCallback);
-        if (mCallbacks != null) {
-            // Notify the callbacks. Do that from the end of the list so that if a callback
-            // removes itself as the result of being called, it won't mess up with our iteration
-            int callbackCount = mCallbacks.size();
-            for (int i = callbackCount - 1; i >= 0; i--) {
-                mCallbacks.get(i).onShown((B) this);
-            }
-        }
-    }
-
-    void onViewHidden(int event) {
-        // First tell the SnackbarManager that it has been dismissed
-        SnackbarManager.getInstance().onDismissed(mManagerCallback);
-        if (mCallbacks != null) {
-            // Notify the callbacks. Do that from the end of the list so that if a callback
-            // removes itself as the result of being called, it won't mess up with our iteration
-            int callbackCount = mCallbacks.size();
-            for (int i = callbackCount - 1; i >= 0; i--) {
-                mCallbacks.get(i).onDismissed((B) this, event);
-            }
-        }
-        if (Build.VERSION.SDK_INT < 11) {
-            // We need to hide the Snackbar on pre-v11 since it uses an old style Animation.
-            // ViewGroup has special handling in removeView() when getAnimation() != null in
-            // that it waits. This then means that the calculated insets are wrong and the
-            // any dodging views do not return. We workaround it by setting the view to gone while
-            // ViewGroup actually gets around to removing it.
-            mView.setVisibility(View.GONE);
-        }
-        // Lastly, hide and remove the view from the parent (if attached)
-        final ViewParent parent = mView.getParent();
-        if (parent instanceof ViewGroup) {
-            ((ViewGroup) parent).removeView(mView);
-        }
-    }
-
-    /**
-     * Returns true if we should animate the Snackbar view in/out.
-     */
-    boolean shouldAnimate() {
-        return !mAccessibilityManager.isEnabled();
-    }
-
-    /**
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    static class SnackbarBaseLayout extends FrameLayout {
-        private BaseTransientBottomBar.OnLayoutChangeListener mOnLayoutChangeListener;
-        private BaseTransientBottomBar.OnAttachStateChangeListener mOnAttachStateChangeListener;
-
-        SnackbarBaseLayout(Context context) {
-            this(context, null);
-        }
-
-        SnackbarBaseLayout(Context context, AttributeSet attrs) {
-            super(context, attrs);
-            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SnackbarLayout);
-            if (a.hasValue(R.styleable.SnackbarLayout_elevation)) {
-                ViewCompat.setElevation(this, a.getDimensionPixelSize(
-                        R.styleable.SnackbarLayout_elevation, 0));
-            }
-            a.recycle();
-
-            setClickable(true);
-        }
-
-        @Override
-        protected void onLayout(boolean changed, int l, int t, int r, int b) {
-            super.onLayout(changed, l, t, r, b);
-            if (mOnLayoutChangeListener != null) {
-                mOnLayoutChangeListener.onLayoutChange(this, l, t, r, b);
-            }
-        }
-
-        @Override
-        protected void onAttachedToWindow() {
-            super.onAttachedToWindow();
-            if (mOnAttachStateChangeListener != null) {
-                mOnAttachStateChangeListener.onViewAttachedToWindow(this);
-            }
-
-            ViewCompat.requestApplyInsets(this);
-        }
-
-        @Override
-        protected void onDetachedFromWindow() {
-            super.onDetachedFromWindow();
-            if (mOnAttachStateChangeListener != null) {
-                mOnAttachStateChangeListener.onViewDetachedFromWindow(this);
-            }
-        }
-
-        void setOnLayoutChangeListener(
-                BaseTransientBottomBar.OnLayoutChangeListener onLayoutChangeListener) {
-            mOnLayoutChangeListener = onLayoutChangeListener;
-        }
-
-        void setOnAttachStateChangeListener(
-                BaseTransientBottomBar.OnAttachStateChangeListener listener) {
-            mOnAttachStateChangeListener = listener;
-        }
-    }
-
-    final class Behavior extends SwipeDismissBehavior<SnackbarBaseLayout> {
-        @Override
-        public boolean canSwipeDismissView(View child) {
-            return child instanceof SnackbarBaseLayout;
-        }
-
-        @Override
-        public boolean onInterceptTouchEvent(CoordinatorLayout parent, SnackbarBaseLayout child,
-                MotionEvent event) {
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_DOWN:
-                    // We want to make sure that we disable any Snackbar timeouts if the user is
-                    // currently touching the Snackbar. We restore the timeout when complete
-                    if (parent.isPointInChildBounds(child, (int) event.getX(),
-                            (int) event.getY())) {
-                        SnackbarManager.getInstance().pauseTimeout(mManagerCallback);
-                    }
-                    break;
-                case MotionEvent.ACTION_UP:
-                case MotionEvent.ACTION_CANCEL:
-                    SnackbarManager.getInstance().restoreTimeoutIfPaused(mManagerCallback);
-                    break;
-            }
-            return super.onInterceptTouchEvent(parent, child, event);
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/BottomNavigationView.java b/design/src/android/support/design/widget/BottomNavigationView.java
deleted file mode 100644
index 61dba87..0000000
--- a/design/src/android/support/design/widget/BottomNavigationView.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.design.R;
-import android.support.design.internal.BottomNavigationMenu;
-import android.support.design.internal.BottomNavigationMenuView;
-import android.support.design.internal.BottomNavigationPresenter;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.AbsSavedState;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.content.res.AppCompatResources;
-import android.support.v7.view.SupportMenuInflater;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.widget.TintTypedArray;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-/**
- * <p>
- * Represents a standard bottom navigation bar for application. It is an implementation of
- * <a href="https://material.google.com/components/bottom-navigation.html">material design bottom
- * navigation</a>.
- * </p>
- *
- * <p>
- * Bottom navigation bars make it easy for users to explore and switch between top-level views in
- * a single tap. It should be used when application has three to five top-level destinations.
- * </p>
- *
- * <p>
- * The bar contents can be populated by specifying a menu resource file. Each menu item title, icon
- * and enabled state will be used for displaying bottom navigation bar items. Menu items can also be
- * used for programmatically selecting which destination is currently active. It can be done using
- * {@code MenuItem#setChecked(true)}
- * </p>
- *
- * <pre>
- * layout resource file:
- * &lt;android.support.design.widget.BottomNavigationView
- *     xmlns:android="http://schemas.android.com/apk/res/android"
- *     xmlns:app="http://schemas.android.com/apk/res-auto"
- *     android:id="@+id/navigation"
- *     android:layout_width="match_parent"
- *     android:layout_height="56dp"
- *     android:layout_gravity="start"
- *     app:menu="@menu/my_navigation_items" /&gt;
- *
- * res/menu/my_navigation_items.xml:
- * &lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
- *     &lt;item android:id="@+id/action_search"
- *          android:title="@string/menu_search"
- *          android:icon="@drawable/ic_search" /&gt;
- *     &lt;item android:id="@+id/action_settings"
- *          android:title="@string/menu_settings"
- *          android:icon="@drawable/ic_add" /&gt;
- *     &lt;item android:id="@+id/action_navigation"
- *          android:title="@string/menu_navigation"
- *          android:icon="@drawable/ic_action_navigation_menu" /&gt;
- * &lt;/menu&gt;
- * </pre>
- */
-public class BottomNavigationView extends FrameLayout {
-
-    private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
-    private static final int[] DISABLED_STATE_SET = {-android.R.attr.state_enabled};
-
-    private static final int MENU_PRESENTER_ID = 1;
-
-    private final MenuBuilder mMenu;
-    private final BottomNavigationMenuView mMenuView;
-    private final BottomNavigationPresenter mPresenter = new BottomNavigationPresenter();
-    private MenuInflater mMenuInflater;
-
-    private OnNavigationItemSelectedListener mSelectedListener;
-    private OnNavigationItemReselectedListener mReselectedListener;
-
-    public BottomNavigationView(Context context) {
-        this(context, null);
-    }
-
-    public BottomNavigationView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public BottomNavigationView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        ThemeUtils.checkAppCompatTheme(context);
-
-        // Create the menu
-        mMenu = new BottomNavigationMenu(context);
-
-        mMenuView = new BottomNavigationMenuView(context);
-        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
-                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-        params.gravity = Gravity.CENTER;
-        mMenuView.setLayoutParams(params);
-
-        mPresenter.setBottomNavigationMenuView(mMenuView);
-        mPresenter.setId(MENU_PRESENTER_ID);
-        mMenuView.setPresenter(mPresenter);
-        mMenu.addMenuPresenter(mPresenter);
-        mPresenter.initForMenu(getContext(), mMenu);
-
-        // Custom attributes
-        TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
-                R.styleable.BottomNavigationView, defStyleAttr,
-                R.style.Widget_Design_BottomNavigationView);
-
-        if (a.hasValue(R.styleable.BottomNavigationView_itemIconTint)) {
-            mMenuView.setIconTintList(
-                    a.getColorStateList(R.styleable.BottomNavigationView_itemIconTint));
-        } else {
-            mMenuView.setIconTintList(
-                    createDefaultColorStateList(android.R.attr.textColorSecondary));
-        }
-        if (a.hasValue(R.styleable.BottomNavigationView_itemTextColor)) {
-            mMenuView.setItemTextColor(
-                    a.getColorStateList(R.styleable.BottomNavigationView_itemTextColor));
-        } else {
-            mMenuView.setItemTextColor(
-                    createDefaultColorStateList(android.R.attr.textColorSecondary));
-        }
-        if (a.hasValue(R.styleable.BottomNavigationView_elevation)) {
-            ViewCompat.setElevation(this, a.getDimensionPixelSize(
-                    R.styleable.BottomNavigationView_elevation, 0));
-        }
-
-        int itemBackground = a.getResourceId(R.styleable.BottomNavigationView_itemBackground, 0);
-        mMenuView.setItemBackgroundRes(itemBackground);
-
-        if (a.hasValue(R.styleable.BottomNavigationView_menu)) {
-            inflateMenu(a.getResourceId(R.styleable.BottomNavigationView_menu, 0));
-        }
-        a.recycle();
-
-        addView(mMenuView, params);
-        if (Build.VERSION.SDK_INT < 21) {
-            addCompatibilityTopDivider(context);
-        }
-
-        mMenu.setCallback(new MenuBuilder.Callback() {
-            @Override
-            public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
-                if (mReselectedListener != null && item.getItemId() == getSelectedItemId()) {
-                    mReselectedListener.onNavigationItemReselected(item);
-                    return true; // item is already selected
-                }
-                return mSelectedListener != null
-                        && !mSelectedListener.onNavigationItemSelected(item);
-            }
-
-            @Override
-            public void onMenuModeChange(MenuBuilder menu) {}
-        });
-    }
-
-    /**
-     * Set a listener that will be notified when a bottom navigation item is selected. This listener
-     * will also be notified when the currently selected item is reselected, unless an
-     * {@link OnNavigationItemReselectedListener} has also been set.
-     *
-     * @param listener The listener to notify
-     *
-     * @see #setOnNavigationItemReselectedListener(OnNavigationItemReselectedListener)
-     */
-    public void setOnNavigationItemSelectedListener(
-            @Nullable OnNavigationItemSelectedListener listener) {
-        mSelectedListener = listener;
-    }
-
-    /**
-     * Set a listener that will be notified when the currently selected bottom navigation item is
-     * reselected. This does not require an {@link OnNavigationItemSelectedListener} to be set.
-     *
-     * @param listener The listener to notify
-     *
-     * @see #setOnNavigationItemSelectedListener(OnNavigationItemSelectedListener)
-     */
-    public void setOnNavigationItemReselectedListener(
-            @Nullable OnNavigationItemReselectedListener listener) {
-        mReselectedListener = listener;
-    }
-
-    /**
-     * Returns the {@link Menu} instance associated with this bottom navigation bar.
-     */
-    @NonNull
-    public Menu getMenu() {
-        return mMenu;
-    }
-
-    /**
-     * Inflate a menu resource into this navigation view.
-     *
-     * <p>Existing items in the menu will not be modified or removed.</p>
-     *
-     * @param resId ID of a menu resource to inflate
-     */
-    public void inflateMenu(int resId) {
-        mPresenter.setUpdateSuspended(true);
-        getMenuInflater().inflate(resId, mMenu);
-        mPresenter.setUpdateSuspended(false);
-        mPresenter.updateMenuView(true);
-    }
-
-    /**
-     * @return The maximum number of items that can be shown in BottomNavigationView.
-     */
-    public int getMaxItemCount() {
-        return BottomNavigationMenu.MAX_ITEM_COUNT;
-    }
-
-    /**
-     * Returns the tint which is applied to our menu items' icons.
-     *
-     * @see #setItemIconTintList(ColorStateList)
-     *
-     * @attr ref R.styleable#BottomNavigationView_itemIconTint
-     */
-    @Nullable
-    public ColorStateList getItemIconTintList() {
-        return mMenuView.getIconTintList();
-    }
-
-    /**
-     * Set the tint which is applied to our menu items' icons.
-     *
-     * @param tint the tint to apply.
-     *
-     * @attr ref R.styleable#BottomNavigationView_itemIconTint
-     */
-    public void setItemIconTintList(@Nullable ColorStateList tint) {
-        mMenuView.setIconTintList(tint);
-    }
-
-    /**
-     * Returns colors used for the different states (normal, selected, focused, etc.) of the menu
-     * item text.
-     *
-     * @see #setItemTextColor(ColorStateList)
-     *
-     * @return the ColorStateList of colors used for the different states of the menu items text.
-     *
-     * @attr ref R.styleable#BottomNavigationView_itemTextColor
-     */
-    @Nullable
-    public ColorStateList getItemTextColor() {
-        return mMenuView.getItemTextColor();
-    }
-
-    /**
-     * Set the colors to use for the different states (normal, selected, focused, etc.) of the menu
-     * item text.
-     *
-     * @see #getItemTextColor()
-     *
-     * @attr ref R.styleable#BottomNavigationView_itemTextColor
-     */
-    public void setItemTextColor(@Nullable ColorStateList textColor) {
-        mMenuView.setItemTextColor(textColor);
-    }
-
-    /**
-     * Returns the background resource of the menu items.
-     *
-     * @see #setItemBackgroundResource(int)
-     *
-     * @attr ref R.styleable#BottomNavigationView_itemBackground
-     */
-    @DrawableRes
-    public int getItemBackgroundResource() {
-        return mMenuView.getItemBackgroundRes();
-    }
-
-    /**
-     * Set the background of our menu items to the given resource.
-     *
-     * @param resId The identifier of the resource.
-     *
-     * @attr ref R.styleable#BottomNavigationView_itemBackground
-     */
-    public void setItemBackgroundResource(@DrawableRes int resId) {
-        mMenuView.setItemBackgroundRes(resId);
-    }
-
-    /**
-     * Returns the currently selected menu item ID, or zero if there is no menu.
-     *
-     * @see #setSelectedItemId(int)
-     */
-    @IdRes
-    public int getSelectedItemId() {
-        return mMenuView.getSelectedItemId();
-    }
-
-    /**
-     * Set the selected menu item ID. This behaves the same as tapping on an item.
-     *
-     * @param itemId The menu item ID. If no item has this ID, the current selection is unchanged.
-     *
-     * @see #getSelectedItemId()
-     */
-    public void setSelectedItemId(@IdRes int itemId) {
-        MenuItem item = mMenu.findItem(itemId);
-        if (item != null) {
-            if (!mMenu.performItemAction(item, mPresenter, 0)) {
-                item.setChecked(true);
-            }
-        }
-    }
-
-    /**
-     * Listener for handling selection events on bottom navigation items.
-     */
-    public interface OnNavigationItemSelectedListener {
-
-        /**
-         * Called when an item in the bottom navigation menu is selected.
-         *
-         * @param item The selected item
-         *
-         * @return true to display the item as the selected item and false if the item should not
-         *         be selected. Consider setting non-selectable items as disabled preemptively to
-         *         make them appear non-interactive.
-         */
-        boolean onNavigationItemSelected(@NonNull MenuItem item);
-    }
-
-    /**
-     * Listener for handling reselection events on bottom navigation items.
-     */
-    public interface OnNavigationItemReselectedListener {
-
-        /**
-         * Called when the currently selected item in the bottom navigation menu is selected again.
-         *
-         * @param item The selected item
-         */
-        void onNavigationItemReselected(@NonNull MenuItem item);
-    }
-
-    private void addCompatibilityTopDivider(Context context) {
-        View divider = new View(context);
-        divider.setBackgroundColor(
-                ContextCompat.getColor(context, R.color.design_bottom_navigation_shadow_color));
-        FrameLayout.LayoutParams dividerParams = new FrameLayout.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                getResources().getDimensionPixelSize(
-                        R.dimen.design_bottom_navigation_shadow_height));
-        divider.setLayoutParams(dividerParams);
-        addView(divider);
-    }
-
-    private MenuInflater getMenuInflater() {
-        if (mMenuInflater == null) {
-            mMenuInflater = new SupportMenuInflater(getContext());
-        }
-        return mMenuInflater;
-    }
-
-    private ColorStateList createDefaultColorStateList(int baseColorThemeAttr) {
-        final TypedValue value = new TypedValue();
-        if (!getContext().getTheme().resolveAttribute(baseColorThemeAttr, value, true)) {
-            return null;
-        }
-        ColorStateList baseColor = AppCompatResources.getColorStateList(
-                getContext(), value.resourceId);
-        if (!getContext().getTheme().resolveAttribute(
-                android.support.v7.appcompat.R.attr.colorPrimary, value, true)) {
-            return null;
-        }
-        int colorPrimary = value.data;
-        int defaultColor = baseColor.getDefaultColor();
-        return new ColorStateList(new int[][]{
-                DISABLED_STATE_SET,
-                CHECKED_STATE_SET,
-                EMPTY_STATE_SET
-        }, new int[]{
-                baseColor.getColorForState(DISABLED_STATE_SET, defaultColor),
-                colorPrimary,
-                defaultColor
-        });
-    }
-
-    @Override
-    protected Parcelable onSaveInstanceState() {
-        Parcelable superState = super.onSaveInstanceState();
-        SavedState savedState = new SavedState(superState);
-        savedState.menuPresenterState = new Bundle();
-        mMenu.savePresenterStates(savedState.menuPresenterState);
-        return savedState;
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Parcelable state) {
-        if (!(state instanceof SavedState)) {
-            super.onRestoreInstanceState(state);
-            return;
-        }
-        SavedState savedState = (SavedState) state;
-        super.onRestoreInstanceState(savedState.getSuperState());
-        mMenu.restorePresenterStates(savedState.menuPresenterState);
-    }
-
-    static class SavedState extends AbsSavedState {
-        Bundle menuPresenterState;
-
-        public SavedState(Parcelable superState) {
-            super(superState);
-        }
-
-        public SavedState(Parcel source, ClassLoader loader) {
-            super(source, loader);
-            readFromParcel(source, loader);
-        }
-
-        @Override
-        public void writeToParcel(@NonNull Parcel out, int flags) {
-            super.writeToParcel(out, flags);
-            out.writeBundle(menuPresenterState);
-        }
-
-        private void readFromParcel(Parcel in, ClassLoader loader) {
-            menuPresenterState = in.readBundle(loader);
-        }
-
-        public static final Creator<SavedState> CREATOR = new ClassLoaderCreator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(Parcel in, ClassLoader loader) {
-                return new SavedState(in, loader);
-            }
-
-            @Override
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in, null);
-            }
-
-            @Override
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-}
diff --git a/design/src/android/support/design/widget/BottomSheetBehavior.java b/design/src/android/support/design/widget/BottomSheetBehavior.java
deleted file mode 100644
index 00ce8f9..0000000
--- a/design/src/android/support/design/widget/BottomSheetBehavior.java
+++ /dev/null
@@ -1,829 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
-import android.support.design.R;
-import android.support.v4.math.MathUtils;
-import android.support.v4.view.AbsSavedState;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.ViewDragHelper;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
-
-
-/**
- * An interaction behavior plugin for a child view of {@link CoordinatorLayout} to make it work as
- * a bottom sheet.
- */
-public class BottomSheetBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
-
-    /**
-     * Callback for monitoring events about bottom sheets.
-     */
-    public abstract static class BottomSheetCallback {
-
-        /**
-         * Called when the bottom sheet changes its state.
-         *
-         * @param bottomSheet The bottom sheet view.
-         * @param newState    The new state. This will be one of {@link #STATE_DRAGGING},
-         *                    {@link #STATE_SETTLING}, {@link #STATE_EXPANDED},
-         *                    {@link #STATE_COLLAPSED}, or {@link #STATE_HIDDEN}.
-         */
-        public abstract void onStateChanged(@NonNull View bottomSheet, @State int newState);
-
-        /**
-         * Called when the bottom sheet is being dragged.
-         *
-         * @param bottomSheet The bottom sheet view.
-         * @param slideOffset The new offset of this bottom sheet within [-1,1] range. Offset
-         *                    increases as this bottom sheet is moving upward. From 0 to 1 the sheet
-         *                    is between collapsed and expanded states and from -1 to 0 it is
-         *                    between hidden and collapsed states.
-         */
-        public abstract void onSlide(@NonNull View bottomSheet, float slideOffset);
-    }
-
-    /**
-     * The bottom sheet is dragging.
-     */
-    public static final int STATE_DRAGGING = 1;
-
-    /**
-     * The bottom sheet is settling.
-     */
-    public static final int STATE_SETTLING = 2;
-
-    /**
-     * The bottom sheet is expanded.
-     */
-    public static final int STATE_EXPANDED = 3;
-
-    /**
-     * The bottom sheet is collapsed.
-     */
-    public static final int STATE_COLLAPSED = 4;
-
-    /**
-     * The bottom sheet is hidden.
-     */
-    public static final int STATE_HIDDEN = 5;
-
-    /** @hide */
-    @RestrictTo(LIBRARY_GROUP)
-    @IntDef({STATE_EXPANDED, STATE_COLLAPSED, STATE_DRAGGING, STATE_SETTLING, STATE_HIDDEN})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface State {}
-
-    /**
-     * Peek at the 16:9 ratio keyline of its parent.
-     *
-     * <p>This can be used as a parameter for {@link #setPeekHeight(int)}.
-     * {@link #getPeekHeight()} will return this when the value is set.</p>
-     */
-    public static final int PEEK_HEIGHT_AUTO = -1;
-
-    private static final float HIDE_THRESHOLD = 0.5f;
-
-    private static final float HIDE_FRICTION = 0.1f;
-
-    private float mMaximumVelocity;
-
-    private int mPeekHeight;
-
-    private boolean mPeekHeightAuto;
-
-    private int mPeekHeightMin;
-
-    int mMinOffset;
-
-    int mMaxOffset;
-
-    boolean mHideable;
-
-    private boolean mSkipCollapsed;
-
-    @State
-    int mState = STATE_COLLAPSED;
-
-    ViewDragHelper mViewDragHelper;
-
-    private boolean mIgnoreEvents;
-
-    private int mLastNestedScrollDy;
-
-    private boolean mNestedScrolled;
-
-    int mParentHeight;
-
-    WeakReference<V> mViewRef;
-
-    WeakReference<View> mNestedScrollingChildRef;
-
-    private BottomSheetCallback mCallback;
-
-    private VelocityTracker mVelocityTracker;
-
-    int mActivePointerId;
-
-    private int mInitialY;
-
-    boolean mTouchingScrollingChild;
-
-    /**
-     * Default constructor for instantiating BottomSheetBehaviors.
-     */
-    public BottomSheetBehavior() {
-    }
-
-    /**
-     * Default constructor for inflating BottomSheetBehaviors from layout.
-     *
-     * @param context The {@link Context}.
-     * @param attrs   The {@link AttributeSet}.
-     */
-    public BottomSheetBehavior(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.BottomSheetBehavior_Layout);
-        TypedValue value = a.peekValue(R.styleable.BottomSheetBehavior_Layout_behavior_peekHeight);
-        if (value != null && value.data == PEEK_HEIGHT_AUTO) {
-            setPeekHeight(value.data);
-        } else {
-            setPeekHeight(a.getDimensionPixelSize(
-                    R.styleable.BottomSheetBehavior_Layout_behavior_peekHeight, PEEK_HEIGHT_AUTO));
-        }
-        setHideable(a.getBoolean(R.styleable.BottomSheetBehavior_Layout_behavior_hideable, false));
-        setSkipCollapsed(a.getBoolean(R.styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed,
-                false));
-        a.recycle();
-        ViewConfiguration configuration = ViewConfiguration.get(context);
-        mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState(CoordinatorLayout parent, V child) {
-        return new SavedState(super.onSaveInstanceState(parent, child), mState);
-    }
-
-    @Override
-    public void onRestoreInstanceState(CoordinatorLayout parent, V child, Parcelable state) {
-        SavedState ss = (SavedState) state;
-        super.onRestoreInstanceState(parent, child, ss.getSuperState());
-        // Intermediate states are restored as collapsed state
-        if (ss.state == STATE_DRAGGING || ss.state == STATE_SETTLING) {
-            mState = STATE_COLLAPSED;
-        } else {
-            mState = ss.state;
-        }
-    }
-
-    @Override
-    public boolean onLayoutChild(CoordinatorLayout parent, V child, int layoutDirection) {
-        if (ViewCompat.getFitsSystemWindows(parent) && !ViewCompat.getFitsSystemWindows(child)) {
-            ViewCompat.setFitsSystemWindows(child, true);
-        }
-        int savedTop = child.getTop();
-        // First let the parent lay it out
-        parent.onLayoutChild(child, layoutDirection);
-        // Offset the bottom sheet
-        mParentHeight = parent.getHeight();
-        int peekHeight;
-        if (mPeekHeightAuto) {
-            if (mPeekHeightMin == 0) {
-                mPeekHeightMin = parent.getResources().getDimensionPixelSize(
-                        R.dimen.design_bottom_sheet_peek_height_min);
-            }
-            peekHeight = Math.max(mPeekHeightMin, mParentHeight - parent.getWidth() * 9 / 16);
-        } else {
-            peekHeight = mPeekHeight;
-        }
-        mMinOffset = Math.max(0, mParentHeight - child.getHeight());
-        mMaxOffset = Math.max(mParentHeight - peekHeight, mMinOffset);
-        if (mState == STATE_EXPANDED) {
-            ViewCompat.offsetTopAndBottom(child, mMinOffset);
-        } else if (mHideable && mState == STATE_HIDDEN) {
-            ViewCompat.offsetTopAndBottom(child, mParentHeight);
-        } else if (mState == STATE_COLLAPSED) {
-            ViewCompat.offsetTopAndBottom(child, mMaxOffset);
-        } else if (mState == STATE_DRAGGING || mState == STATE_SETTLING) {
-            ViewCompat.offsetTopAndBottom(child, savedTop - child.getTop());
-        }
-        if (mViewDragHelper == null) {
-            mViewDragHelper = ViewDragHelper.create(parent, mDragCallback);
-        }
-        mViewRef = new WeakReference<>(child);
-        mNestedScrollingChildRef = new WeakReference<>(findScrollingChild(child));
-        return true;
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
-        if (!child.isShown()) {
-            mIgnoreEvents = true;
-            return false;
-        }
-        int action = event.getActionMasked();
-        // Record the velocity
-        if (action == MotionEvent.ACTION_DOWN) {
-            reset();
-        }
-        if (mVelocityTracker == null) {
-            mVelocityTracker = VelocityTracker.obtain();
-        }
-        mVelocityTracker.addMovement(event);
-        switch (action) {
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_CANCEL:
-                mTouchingScrollingChild = false;
-                mActivePointerId = MotionEvent.INVALID_POINTER_ID;
-                // Reset the ignore flag
-                if (mIgnoreEvents) {
-                    mIgnoreEvents = false;
-                    return false;
-                }
-                break;
-            case MotionEvent.ACTION_DOWN:
-                int initialX = (int) event.getX();
-                mInitialY = (int) event.getY();
-                View scroll = mNestedScrollingChildRef != null
-                        ? mNestedScrollingChildRef.get() : null;
-                if (scroll != null && parent.isPointInChildBounds(scroll, initialX, mInitialY)) {
-                    mActivePointerId = event.getPointerId(event.getActionIndex());
-                    mTouchingScrollingChild = true;
-                }
-                mIgnoreEvents = mActivePointerId == MotionEvent.INVALID_POINTER_ID &&
-                        !parent.isPointInChildBounds(child, initialX, mInitialY);
-                break;
-        }
-        if (!mIgnoreEvents && mViewDragHelper.shouldInterceptTouchEvent(event)) {
-            return true;
-        }
-        // We have to handle cases that the ViewDragHelper does not capture the bottom sheet because
-        // it is not the top most view of its parent. This is not necessary when the touch event is
-        // happening over the scrolling content as nested scrolling logic handles that case.
-        View scroll = mNestedScrollingChildRef.get();
-        return action == MotionEvent.ACTION_MOVE && scroll != null &&
-                !mIgnoreEvents && mState != STATE_DRAGGING &&
-                !parent.isPointInChildBounds(scroll, (int) event.getX(), (int) event.getY()) &&
-                Math.abs(mInitialY - event.getY()) > mViewDragHelper.getTouchSlop();
-    }
-
-    @Override
-    public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
-        if (!child.isShown()) {
-            return false;
-        }
-        int action = event.getActionMasked();
-        if (mState == STATE_DRAGGING && action == MotionEvent.ACTION_DOWN) {
-            return true;
-        }
-        if (mViewDragHelper != null) {
-            mViewDragHelper.processTouchEvent(event);
-        }
-        // Record the velocity
-        if (action == MotionEvent.ACTION_DOWN) {
-            reset();
-        }
-        if (mVelocityTracker == null) {
-            mVelocityTracker = VelocityTracker.obtain();
-        }
-        mVelocityTracker.addMovement(event);
-        // The ViewDragHelper tries to capture only the top-most View. We have to explicitly tell it
-        // to capture the bottom sheet in case it is not captured and the touch slop is passed.
-        if (action == MotionEvent.ACTION_MOVE && !mIgnoreEvents) {
-            if (Math.abs(mInitialY - event.getY()) > mViewDragHelper.getTouchSlop()) {
-                mViewDragHelper.captureChildView(child, event.getPointerId(event.getActionIndex()));
-            }
-        }
-        return !mIgnoreEvents;
-    }
-
-    @Override
-    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, V child,
-            View directTargetChild, View target, int nestedScrollAxes) {
-        mLastNestedScrollDy = 0;
-        mNestedScrolled = false;
-        return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0;
-    }
-
-    @Override
-    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target, int dx,
-            int dy, int[] consumed) {
-        View scrollingChild = mNestedScrollingChildRef.get();
-        if (target != scrollingChild) {
-            return;
-        }
-        int currentTop = child.getTop();
-        int newTop = currentTop - dy;
-        if (dy > 0) { // Upward
-            if (newTop < mMinOffset) {
-                consumed[1] = currentTop - mMinOffset;
-                ViewCompat.offsetTopAndBottom(child, -consumed[1]);
-                setStateInternal(STATE_EXPANDED);
-            } else {
-                consumed[1] = dy;
-                ViewCompat.offsetTopAndBottom(child, -dy);
-                setStateInternal(STATE_DRAGGING);
-            }
-        } else if (dy < 0) { // Downward
-            if (!target.canScrollVertically(-1)) {
-                if (newTop <= mMaxOffset || mHideable) {
-                    consumed[1] = dy;
-                    ViewCompat.offsetTopAndBottom(child, -dy);
-                    setStateInternal(STATE_DRAGGING);
-                } else {
-                    consumed[1] = currentTop - mMaxOffset;
-                    ViewCompat.offsetTopAndBottom(child, -consumed[1]);
-                    setStateInternal(STATE_COLLAPSED);
-                }
-            }
-        }
-        dispatchOnSlide(child.getTop());
-        mLastNestedScrollDy = dy;
-        mNestedScrolled = true;
-    }
-
-    @Override
-    public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target) {
-        if (child.getTop() == mMinOffset) {
-            setStateInternal(STATE_EXPANDED);
-            return;
-        }
-        if (mNestedScrollingChildRef == null || target != mNestedScrollingChildRef.get()
-                || !mNestedScrolled) {
-            return;
-        }
-        int top;
-        int targetState;
-        if (mLastNestedScrollDy > 0) {
-            top = mMinOffset;
-            targetState = STATE_EXPANDED;
-        } else if (mHideable && shouldHide(child, getYVelocity())) {
-            top = mParentHeight;
-            targetState = STATE_HIDDEN;
-        } else if (mLastNestedScrollDy == 0) {
-            int currentTop = child.getTop();
-            if (Math.abs(currentTop - mMinOffset) < Math.abs(currentTop - mMaxOffset)) {
-                top = mMinOffset;
-                targetState = STATE_EXPANDED;
-            } else {
-                top = mMaxOffset;
-                targetState = STATE_COLLAPSED;
-            }
-        } else {
-            top = mMaxOffset;
-            targetState = STATE_COLLAPSED;
-        }
-        if (mViewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
-            setStateInternal(STATE_SETTLING);
-            ViewCompat.postOnAnimation(child, new SettleRunnable(child, targetState));
-        } else {
-            setStateInternal(targetState);
-        }
-        mNestedScrolled = false;
-    }
-
-    @Override
-    public boolean onNestedPreFling(CoordinatorLayout coordinatorLayout, V child, View target,
-            float velocityX, float velocityY) {
-        return target == mNestedScrollingChildRef.get() &&
-                (mState != STATE_EXPANDED ||
-                        super.onNestedPreFling(coordinatorLayout, child, target,
-                                velocityX, velocityY));
-    }
-
-    /**
-     * Sets the height of the bottom sheet when it is collapsed.
-     *
-     * @param peekHeight The height of the collapsed bottom sheet in pixels, or
-     *                   {@link #PEEK_HEIGHT_AUTO} to configure the sheet to peek automatically
-     *                   at 16:9 ratio keyline.
-     * @attr ref android.support.design.R.styleable#BottomSheetBehavior_Layout_behavior_peekHeight
-     */
-    public final void setPeekHeight(int peekHeight) {
-        boolean layout = false;
-        if (peekHeight == PEEK_HEIGHT_AUTO) {
-            if (!mPeekHeightAuto) {
-                mPeekHeightAuto = true;
-                layout = true;
-            }
-        } else if (mPeekHeightAuto || mPeekHeight != peekHeight) {
-            mPeekHeightAuto = false;
-            mPeekHeight = Math.max(0, peekHeight);
-            mMaxOffset = mParentHeight - peekHeight;
-            layout = true;
-        }
-        if (layout && mState == STATE_COLLAPSED && mViewRef != null) {
-            V view = mViewRef.get();
-            if (view != null) {
-                view.requestLayout();
-            }
-        }
-    }
-
-    /**
-     * Gets the height of the bottom sheet when it is collapsed.
-     *
-     * @return The height of the collapsed bottom sheet in pixels, or {@link #PEEK_HEIGHT_AUTO}
-     *         if the sheet is configured to peek automatically at 16:9 ratio keyline
-     * @attr ref android.support.design.R.styleable#BottomSheetBehavior_Layout_behavior_peekHeight
-     */
-    public final int getPeekHeight() {
-        return mPeekHeightAuto ? PEEK_HEIGHT_AUTO : mPeekHeight;
-    }
-
-    /**
-     * Sets whether this bottom sheet can hide when it is swiped down.
-     *
-     * @param hideable {@code true} to make this bottom sheet hideable.
-     * @attr ref android.support.design.R.styleable#BottomSheetBehavior_Layout_behavior_hideable
-     */
-    public void setHideable(boolean hideable) {
-        mHideable = hideable;
-    }
-
-    /**
-     * Gets whether this bottom sheet can hide when it is swiped down.
-     *
-     * @return {@code true} if this bottom sheet can hide.
-     * @attr ref android.support.design.R.styleable#BottomSheetBehavior_Layout_behavior_hideable
-     */
-    public boolean isHideable() {
-        return mHideable;
-    }
-
-    /**
-     * Sets whether this bottom sheet should skip the collapsed state when it is being hidden
-     * after it is expanded once. Setting this to true has no effect unless the sheet is hideable.
-     *
-     * @param skipCollapsed True if the bottom sheet should skip the collapsed state.
-     * @attr ref android.support.design.R.styleable#BottomSheetBehavior_Layout_behavior_skipCollapsed
-     */
-    public void setSkipCollapsed(boolean skipCollapsed) {
-        mSkipCollapsed = skipCollapsed;
-    }
-
-    /**
-     * Sets whether this bottom sheet should skip the collapsed state when it is being hidden
-     * after it is expanded once.
-     *
-     * @return Whether the bottom sheet should skip the collapsed state.
-     * @attr ref android.support.design.R.styleable#BottomSheetBehavior_Layout_behavior_skipCollapsed
-     */
-    public boolean getSkipCollapsed() {
-        return mSkipCollapsed;
-    }
-
-    /**
-     * Sets a callback to be notified of bottom sheet events.
-     *
-     * @param callback The callback to notify when bottom sheet events occur.
-     */
-    public void setBottomSheetCallback(BottomSheetCallback callback) {
-        mCallback = callback;
-    }
-
-    /**
-     * Sets the state of the bottom sheet. The bottom sheet will transition to that state with
-     * animation.
-     *
-     * @param state One of {@link #STATE_COLLAPSED}, {@link #STATE_EXPANDED}, or
-     *              {@link #STATE_HIDDEN}.
-     */
-    public final void setState(final @State int state) {
-        if (state == mState) {
-            return;
-        }
-        if (mViewRef == null) {
-            // The view is not laid out yet; modify mState and let onLayoutChild handle it later
-            if (state == STATE_COLLAPSED || state == STATE_EXPANDED ||
-                    (mHideable && state == STATE_HIDDEN)) {
-                mState = state;
-            }
-            return;
-        }
-        final V child = mViewRef.get();
-        if (child == null) {
-            return;
-        }
-        // Start the animation; wait until a pending layout if there is one.
-        ViewParent parent = child.getParent();
-        if (parent != null && parent.isLayoutRequested() && ViewCompat.isAttachedToWindow(child)) {
-            child.post(new Runnable() {
-                @Override
-                public void run() {
-                    startSettlingAnimation(child, state);
-                }
-            });
-        } else {
-            startSettlingAnimation(child, state);
-        }
-    }
-
-    /**
-     * Gets the current state of the bottom sheet.
-     *
-     * @return One of {@link #STATE_EXPANDED}, {@link #STATE_COLLAPSED}, {@link #STATE_DRAGGING},
-     * {@link #STATE_SETTLING}, and {@link #STATE_HIDDEN}.
-     */
-    @State
-    public final int getState() {
-        return mState;
-    }
-
-    void setStateInternal(@State int state) {
-        if (mState == state) {
-            return;
-        }
-        mState = state;
-        View bottomSheet = mViewRef.get();
-        if (bottomSheet != null && mCallback != null) {
-            mCallback.onStateChanged(bottomSheet, state);
-        }
-    }
-
-    private void reset() {
-        mActivePointerId = ViewDragHelper.INVALID_POINTER;
-        if (mVelocityTracker != null) {
-            mVelocityTracker.recycle();
-            mVelocityTracker = null;
-        }
-    }
-
-    boolean shouldHide(View child, float yvel) {
-        if (mSkipCollapsed) {
-            return true;
-        }
-        if (child.getTop() < mMaxOffset) {
-            // It should not hide, but collapse.
-            return false;
-        }
-        final float newTop = child.getTop() + yvel * HIDE_FRICTION;
-        return Math.abs(newTop - mMaxOffset) / (float) mPeekHeight > HIDE_THRESHOLD;
-    }
-
-    @VisibleForTesting
-    View findScrollingChild(View view) {
-        if (ViewCompat.isNestedScrollingEnabled(view)) {
-            return view;
-        }
-        if (view instanceof ViewGroup) {
-            ViewGroup group = (ViewGroup) view;
-            for (int i = 0, count = group.getChildCount(); i < count; i++) {
-                View scrollingChild = findScrollingChild(group.getChildAt(i));
-                if (scrollingChild != null) {
-                    return scrollingChild;
-                }
-            }
-        }
-        return null;
-    }
-
-    private float getYVelocity() {
-        mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
-        return mVelocityTracker.getYVelocity(mActivePointerId);
-    }
-
-    void startSettlingAnimation(View child, int state) {
-        int top;
-        if (state == STATE_COLLAPSED) {
-            top = mMaxOffset;
-        } else if (state == STATE_EXPANDED) {
-            top = mMinOffset;
-        } else if (mHideable && state == STATE_HIDDEN) {
-            top = mParentHeight;
-        } else {
-            throw new IllegalArgumentException("Illegal state argument: " + state);
-        }
-        if (mViewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
-            setStateInternal(STATE_SETTLING);
-            ViewCompat.postOnAnimation(child, new SettleRunnable(child, state));
-        } else {
-            setStateInternal(state);
-        }
-    }
-
-    private final ViewDragHelper.Callback mDragCallback = new ViewDragHelper.Callback() {
-
-        @Override
-        public boolean tryCaptureView(View child, int pointerId) {
-            if (mState == STATE_DRAGGING) {
-                return false;
-            }
-            if (mTouchingScrollingChild) {
-                return false;
-            }
-            if (mState == STATE_EXPANDED && mActivePointerId == pointerId) {
-                View scroll = mNestedScrollingChildRef.get();
-                if (scroll != null && scroll.canScrollVertically(-1)) {
-                    // Let the content scroll up
-                    return false;
-                }
-            }
-            return mViewRef != null && mViewRef.get() == child;
-        }
-
-        @Override
-        public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
-            dispatchOnSlide(top);
-        }
-
-        @Override
-        public void onViewDragStateChanged(int state) {
-            if (state == ViewDragHelper.STATE_DRAGGING) {
-                setStateInternal(STATE_DRAGGING);
-            }
-        }
-
-        @Override
-        public void onViewReleased(View releasedChild, float xvel, float yvel) {
-            int top;
-            @State int targetState;
-            if (yvel < 0) { // Moving up
-                top = mMinOffset;
-                targetState = STATE_EXPANDED;
-            } else if (mHideable && shouldHide(releasedChild, yvel)) {
-                top = mParentHeight;
-                targetState = STATE_HIDDEN;
-            } else if (yvel == 0.f) {
-                int currentTop = releasedChild.getTop();
-                if (Math.abs(currentTop - mMinOffset) < Math.abs(currentTop - mMaxOffset)) {
-                    top = mMinOffset;
-                    targetState = STATE_EXPANDED;
-                } else {
-                    top = mMaxOffset;
-                    targetState = STATE_COLLAPSED;
-                }
-            } else {
-                top = mMaxOffset;
-                targetState = STATE_COLLAPSED;
-            }
-            if (mViewDragHelper.settleCapturedViewAt(releasedChild.getLeft(), top)) {
-                setStateInternal(STATE_SETTLING);
-                ViewCompat.postOnAnimation(releasedChild,
-                        new SettleRunnable(releasedChild, targetState));
-            } else {
-                setStateInternal(targetState);
-            }
-        }
-
-        @Override
-        public int clampViewPositionVertical(View child, int top, int dy) {
-            return MathUtils.clamp(top, mMinOffset, mHideable ? mParentHeight : mMaxOffset);
-        }
-
-        @Override
-        public int clampViewPositionHorizontal(View child, int left, int dx) {
-            return child.getLeft();
-        }
-
-        @Override
-        public int getViewVerticalDragRange(View child) {
-            if (mHideable) {
-                return mParentHeight - mMinOffset;
-            } else {
-                return mMaxOffset - mMinOffset;
-            }
-        }
-    };
-
-    void dispatchOnSlide(int top) {
-        View bottomSheet = mViewRef.get();
-        if (bottomSheet != null && mCallback != null) {
-            if (top > mMaxOffset) {
-                mCallback.onSlide(bottomSheet, (float) (mMaxOffset - top) /
-                        (mParentHeight - mMaxOffset));
-            } else {
-                mCallback.onSlide(bottomSheet,
-                        (float) (mMaxOffset - top) / ((mMaxOffset - mMinOffset)));
-            }
-        }
-    }
-
-    @VisibleForTesting
-    int getPeekHeightMin() {
-        return mPeekHeightMin;
-    }
-
-    private class SettleRunnable implements Runnable {
-
-        private final View mView;
-
-        @State
-        private final int mTargetState;
-
-        SettleRunnable(View view, @State int targetState) {
-            mView = view;
-            mTargetState = targetState;
-        }
-
-        @Override
-        public void run() {
-            if (mViewDragHelper != null && mViewDragHelper.continueSettling(true)) {
-                ViewCompat.postOnAnimation(mView, this);
-            } else {
-                setStateInternal(mTargetState);
-            }
-        }
-    }
-
-    protected static class SavedState extends AbsSavedState {
-        @State
-        final int state;
-
-        public SavedState(Parcel source) {
-            this(source, null);
-        }
-
-        public SavedState(Parcel source, ClassLoader loader) {
-            super(source, loader);
-            //noinspection ResourceType
-            state = source.readInt();
-        }
-
-        public SavedState(Parcelable superState, @State int state) {
-            super(superState);
-            this.state = state;
-        }
-
-        @Override
-        public void writeToParcel(Parcel out, int flags) {
-            super.writeToParcel(out, flags);
-            out.writeInt(state);
-        }
-
-        public static final Creator<SavedState> CREATOR = new ClassLoaderCreator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(Parcel in, ClassLoader loader) {
-                return new SavedState(in, loader);
-            }
-
-            @Override
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in, null);
-            }
-
-            @Override
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-
-    /**
-     * A utility function to get the {@link BottomSheetBehavior} associated with the {@code view}.
-     *
-     * @param view The {@link View} with {@link BottomSheetBehavior}.
-     * @return The {@link BottomSheetBehavior} associated with the {@code view}.
-     */
-    @SuppressWarnings("unchecked")
-    public static <V extends View> BottomSheetBehavior<V> from(V view) {
-        ViewGroup.LayoutParams params = view.getLayoutParams();
-        if (!(params instanceof CoordinatorLayout.LayoutParams)) {
-            throw new IllegalArgumentException("The view is not a child of CoordinatorLayout");
-        }
-        CoordinatorLayout.Behavior behavior = ((CoordinatorLayout.LayoutParams) params)
-                .getBehavior();
-        if (!(behavior instanceof BottomSheetBehavior)) {
-            throw new IllegalArgumentException(
-                    "The view is not associated with BottomSheetBehavior");
-        }
-        return (BottomSheetBehavior<V>) behavior;
-    }
-
-}
diff --git a/design/src/android/support/design/widget/BottomSheetDialog.java b/design/src/android/support/design/widget/BottomSheetDialog.java
deleted file mode 100644
index 19b5782..0000000
--- a/design/src/android/support/design/widget/BottomSheetDialog.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.os.Build;
-import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.StyleRes;
-import android.support.design.R;
-import android.support.v4.view.AccessibilityDelegateCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
-import android.support.v7.app.AppCompatDialog;
-import android.util.TypedValue;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-
-/**
- * Base class for {@link android.app.Dialog}s styled as a bottom sheet.
- */
-public class BottomSheetDialog extends AppCompatDialog {
-
-    private BottomSheetBehavior<FrameLayout> mBehavior;
-
-    boolean mCancelable = true;
-    private boolean mCanceledOnTouchOutside = true;
-    private boolean mCanceledOnTouchOutsideSet;
-
-    public BottomSheetDialog(@NonNull Context context) {
-        this(context, 0);
-    }
-
-    public BottomSheetDialog(@NonNull Context context, @StyleRes int theme) {
-        super(context, getThemeResId(context, theme));
-        // We hide the title bar for any style configuration. Otherwise, there will be a gap
-        // above the bottom sheet when it is expanded.
-        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
-    }
-
-    protected BottomSheetDialog(@NonNull Context context, boolean cancelable,
-            OnCancelListener cancelListener) {
-        super(context, cancelable, cancelListener);
-        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
-        mCancelable = cancelable;
-    }
-
-    @Override
-    public void setContentView(@LayoutRes int layoutResId) {
-        super.setContentView(wrapInBottomSheet(layoutResId, null, null));
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        Window window = getWindow();
-        if (window != null) {
-            if (Build.VERSION.SDK_INT >= 21) {
-                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
-                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
-            }
-            window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
-                    ViewGroup.LayoutParams.MATCH_PARENT);
-        }
-    }
-
-    @Override
-    public void setContentView(View view) {
-        super.setContentView(wrapInBottomSheet(0, view, null));
-    }
-
-    @Override
-    public void setContentView(View view, ViewGroup.LayoutParams params) {
-        super.setContentView(wrapInBottomSheet(0, view, params));
-    }
-
-    @Override
-    public void setCancelable(boolean cancelable) {
-        super.setCancelable(cancelable);
-        if (mCancelable != cancelable) {
-            mCancelable = cancelable;
-            if (mBehavior != null) {
-                mBehavior.setHideable(cancelable);
-            }
-        }
-    }
-
-    @Override
-    protected void onStart() {
-        super.onStart();
-        if (mBehavior != null) {
-            mBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
-        }
-    }
-
-    @Override
-    public void setCanceledOnTouchOutside(boolean cancel) {
-        super.setCanceledOnTouchOutside(cancel);
-        if (cancel && !mCancelable) {
-            mCancelable = true;
-        }
-        mCanceledOnTouchOutside = cancel;
-        mCanceledOnTouchOutsideSet = true;
-    }
-
-    private View wrapInBottomSheet(int layoutResId, View view, ViewGroup.LayoutParams params) {
-        final FrameLayout container = (FrameLayout) View.inflate(getContext(),
-                R.layout.design_bottom_sheet_dialog, null);
-        final CoordinatorLayout coordinator =
-                (CoordinatorLayout) container.findViewById(R.id.coordinator);
-        if (layoutResId != 0 && view == null) {
-            view = getLayoutInflater().inflate(layoutResId, coordinator, false);
-        }
-        FrameLayout bottomSheet = (FrameLayout) coordinator.findViewById(R.id.design_bottom_sheet);
-        mBehavior = BottomSheetBehavior.from(bottomSheet);
-        mBehavior.setBottomSheetCallback(mBottomSheetCallback);
-        mBehavior.setHideable(mCancelable);
-        if (params == null) {
-            bottomSheet.addView(view);
-        } else {
-            bottomSheet.addView(view, params);
-        }
-        // We treat the CoordinatorLayout as outside the dialog though it is technically inside
-        coordinator.findViewById(R.id.touch_outside).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                if (mCancelable && isShowing() && shouldWindowCloseOnTouchOutside()) {
-                    cancel();
-                }
-            }
-        });
-        // Handle accessibility events
-        ViewCompat.setAccessibilityDelegate(bottomSheet, new AccessibilityDelegateCompat() {
-            @Override
-            public void onInitializeAccessibilityNodeInfo(View host,
-                    AccessibilityNodeInfoCompat info) {
-                super.onInitializeAccessibilityNodeInfo(host, info);
-                if (mCancelable) {
-                    info.addAction(AccessibilityNodeInfoCompat.ACTION_DISMISS);
-                    info.setDismissable(true);
-                } else {
-                    info.setDismissable(false);
-                }
-            }
-
-            @Override
-            public boolean performAccessibilityAction(View host, int action, Bundle args) {
-                if (action == AccessibilityNodeInfoCompat.ACTION_DISMISS && mCancelable) {
-                    cancel();
-                    return true;
-                }
-                return super.performAccessibilityAction(host, action, args);
-            }
-        });
-        bottomSheet.setOnTouchListener(new View.OnTouchListener() {
-            @Override
-            public boolean onTouch(View view, MotionEvent event) {
-                // Consume the event and prevent it from falling through
-                return true;
-            }
-        });
-        return container;
-    }
-
-    boolean shouldWindowCloseOnTouchOutside() {
-        if (!mCanceledOnTouchOutsideSet) {
-            if (Build.VERSION.SDK_INT < 11) {
-                mCanceledOnTouchOutside = true;
-            } else {
-                TypedArray a = getContext().obtainStyledAttributes(
-                        new int[]{android.R.attr.windowCloseOnTouchOutside});
-                mCanceledOnTouchOutside = a.getBoolean(0, true);
-                a.recycle();
-            }
-            mCanceledOnTouchOutsideSet = true;
-        }
-        return mCanceledOnTouchOutside;
-    }
-
-    private static int getThemeResId(Context context, int themeId) {
-        if (themeId == 0) {
-            // If the provided theme is 0, then retrieve the dialogTheme from our theme
-            TypedValue outValue = new TypedValue();
-            if (context.getTheme().resolveAttribute(
-                    R.attr.bottomSheetDialogTheme, outValue, true)) {
-                themeId = outValue.resourceId;
-            } else {
-                // bottomSheetDialogTheme is not provided; we default to our light theme
-                themeId = R.style.Theme_Design_Light_BottomSheetDialog;
-            }
-        }
-        return themeId;
-    }
-
-    private BottomSheetBehavior.BottomSheetCallback mBottomSheetCallback
-            = new BottomSheetBehavior.BottomSheetCallback() {
-        @Override
-        public void onStateChanged(@NonNull View bottomSheet,
-                @BottomSheetBehavior.State int newState) {
-            if (newState == BottomSheetBehavior.STATE_HIDDEN) {
-                cancel();
-            }
-        }
-
-        @Override
-        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
-        }
-    };
-
-}
diff --git a/design/src/android/support/design/widget/BottomSheetDialogFragment.java b/design/src/android/support/design/widget/BottomSheetDialogFragment.java
deleted file mode 100644
index 8842988..0000000
--- a/design/src/android/support/design/widget/BottomSheetDialogFragment.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.app.Dialog;
-import android.os.Bundle;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.app.AppCompatDialogFragment;
-
-/**
- * Modal bottom sheet. This is a version of {@link DialogFragment} that shows a bottom sheet
- * using {@link BottomSheetDialog} instead of a floating dialog.
- */
-public class BottomSheetDialogFragment extends AppCompatDialogFragment {
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        return new BottomSheetDialog(getContext(), getTheme());
-    }
-
-}
diff --git a/design/src/android/support/design/widget/CheckableImageButton.java b/design/src/android/support/design/widget/CheckableImageButton.java
deleted file mode 100644
index f274581..0000000
--- a/design/src/android/support/design/widget/CheckableImageButton.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.support.annotation.RestrictTo;
-import android.support.v4.view.AccessibilityDelegateCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.accessibility.AccessibilityEventCompat;
-import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
-import android.support.v7.widget.AppCompatImageButton;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.Checkable;
-
-/**
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP)
-public class CheckableImageButton extends AppCompatImageButton implements Checkable {
-
-    private static final int[] DRAWABLE_STATE_CHECKED = new int[]{android.R.attr.state_checked};
-
-    private boolean mChecked;
-
-    public CheckableImageButton(Context context) {
-        this(context, null);
-    }
-
-    public CheckableImageButton(Context context, AttributeSet attrs) {
-        this(context, attrs, android.support.v7.appcompat.R.attr.imageButtonStyle);
-    }
-
-    public CheckableImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        ViewCompat.setAccessibilityDelegate(this, new AccessibilityDelegateCompat() {
-            @Override
-            public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
-                super.onInitializeAccessibilityEvent(host, event);
-                event.setChecked(isChecked());
-            }
-
-            @Override
-            public void onInitializeAccessibilityNodeInfo(View host,
-                    AccessibilityNodeInfoCompat info) {
-                super.onInitializeAccessibilityNodeInfo(host, info);
-                info.setCheckable(true);
-                info.setChecked(isChecked());
-            }
-        });
-    }
-
-    @Override
-    public void setChecked(boolean checked) {
-        if (mChecked != checked) {
-            mChecked = checked;
-            refreshDrawableState();
-            sendAccessibilityEvent(
-                    AccessibilityEventCompat.TYPE_WINDOW_CONTENT_CHANGED);
-        }
-    }
-
-    @Override
-    public boolean isChecked() {
-        return mChecked;
-    }
-
-    @Override
-    public void toggle() {
-        setChecked(!mChecked);
-    }
-
-    @Override
-    public int[] onCreateDrawableState(int extraSpace) {
-        if (mChecked) {
-            return mergeDrawableStates(
-                    super.onCreateDrawableState(extraSpace + DRAWABLE_STATE_CHECKED.length),
-                    DRAWABLE_STATE_CHECKED);
-        } else {
-            return super.onCreateDrawableState(extraSpace);
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/CollapsingTextHelper.java b/design/src/android/support/design/widget/CollapsingTextHelper.java
deleted file mode 100644
index a33cabc..0000000
--- a/design/src/android/support/design/widget/CollapsingTextHelper.java
+++ /dev/null
@@ -1,723 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Typeface;
-import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.v4.math.MathUtils;
-import android.support.v4.text.TextDirectionHeuristicsCompat;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.widget.TintTypedArray;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.view.Gravity;
-import android.view.View;
-import android.view.animation.Interpolator;
-
-final class CollapsingTextHelper {
-
-    // Pre-JB-MR2 doesn't support HW accelerated canvas scaled text so we will workaround it
-    // by using our own texture
-    private static final boolean USE_SCALING_TEXTURE = Build.VERSION.SDK_INT < 18;
-
-    private static final boolean DEBUG_DRAW = false;
-    private static final Paint DEBUG_DRAW_PAINT;
-    static {
-        DEBUG_DRAW_PAINT = DEBUG_DRAW ? new Paint() : null;
-        if (DEBUG_DRAW_PAINT != null) {
-            DEBUG_DRAW_PAINT.setAntiAlias(true);
-            DEBUG_DRAW_PAINT.setColor(Color.MAGENTA);
-        }
-    }
-
-    private final View mView;
-
-    private boolean mDrawTitle;
-    private float mExpandedFraction;
-
-    private final Rect mExpandedBounds;
-    private final Rect mCollapsedBounds;
-    private final RectF mCurrentBounds;
-    private int mExpandedTextGravity = Gravity.CENTER_VERTICAL;
-    private int mCollapsedTextGravity = Gravity.CENTER_VERTICAL;
-    private float mExpandedTextSize = 15;
-    private float mCollapsedTextSize = 15;
-    private ColorStateList mExpandedTextColor;
-    private ColorStateList mCollapsedTextColor;
-
-    private float mExpandedDrawY;
-    private float mCollapsedDrawY;
-    private float mExpandedDrawX;
-    private float mCollapsedDrawX;
-    private float mCurrentDrawX;
-    private float mCurrentDrawY;
-    private Typeface mCollapsedTypeface;
-    private Typeface mExpandedTypeface;
-    private Typeface mCurrentTypeface;
-
-    private CharSequence mText;
-    private CharSequence mTextToDraw;
-    private boolean mIsRtl;
-
-    private boolean mUseTexture;
-    private Bitmap mExpandedTitleTexture;
-    private Paint mTexturePaint;
-    private float mTextureAscent;
-    private float mTextureDescent;
-
-    private float mScale;
-    private float mCurrentTextSize;
-
-    private int[] mState;
-
-    private boolean mBoundsChanged;
-
-    private final TextPaint mTextPaint;
-
-    private Interpolator mPositionInterpolator;
-    private Interpolator mTextSizeInterpolator;
-
-    private float mCollapsedShadowRadius, mCollapsedShadowDx, mCollapsedShadowDy;
-    private int mCollapsedShadowColor;
-
-    private float mExpandedShadowRadius, mExpandedShadowDx, mExpandedShadowDy;
-    private int mExpandedShadowColor;
-
-    public CollapsingTextHelper(View view) {
-        mView = view;
-
-        mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
-
-        mCollapsedBounds = new Rect();
-        mExpandedBounds = new Rect();
-        mCurrentBounds = new RectF();
-    }
-
-    void setTextSizeInterpolator(Interpolator interpolator) {
-        mTextSizeInterpolator = interpolator;
-        recalculate();
-    }
-
-    void setPositionInterpolator(Interpolator interpolator) {
-        mPositionInterpolator = interpolator;
-        recalculate();
-    }
-
-    void setExpandedTextSize(float textSize) {
-        if (mExpandedTextSize != textSize) {
-            mExpandedTextSize = textSize;
-            recalculate();
-        }
-    }
-
-    void setCollapsedTextSize(float textSize) {
-        if (mCollapsedTextSize != textSize) {
-            mCollapsedTextSize = textSize;
-            recalculate();
-        }
-    }
-
-    void setCollapsedTextColor(ColorStateList textColor) {
-        if (mCollapsedTextColor != textColor) {
-            mCollapsedTextColor = textColor;
-            recalculate();
-        }
-    }
-
-    void setExpandedTextColor(ColorStateList textColor) {
-        if (mExpandedTextColor != textColor) {
-            mExpandedTextColor = textColor;
-            recalculate();
-        }
-    }
-
-    void setExpandedBounds(int left, int top, int right, int bottom) {
-        if (!rectEquals(mExpandedBounds, left, top, right, bottom)) {
-            mExpandedBounds.set(left, top, right, bottom);
-            mBoundsChanged = true;
-            onBoundsChanged();
-        }
-    }
-
-    void setCollapsedBounds(int left, int top, int right, int bottom) {
-        if (!rectEquals(mCollapsedBounds, left, top, right, bottom)) {
-            mCollapsedBounds.set(left, top, right, bottom);
-            mBoundsChanged = true;
-            onBoundsChanged();
-        }
-    }
-
-    void onBoundsChanged() {
-        mDrawTitle = mCollapsedBounds.width() > 0 && mCollapsedBounds.height() > 0
-                && mExpandedBounds.width() > 0 && mExpandedBounds.height() > 0;
-    }
-
-    void setExpandedTextGravity(int gravity) {
-        if (mExpandedTextGravity != gravity) {
-            mExpandedTextGravity = gravity;
-            recalculate();
-        }
-    }
-
-    int getExpandedTextGravity() {
-        return mExpandedTextGravity;
-    }
-
-    void setCollapsedTextGravity(int gravity) {
-        if (mCollapsedTextGravity != gravity) {
-            mCollapsedTextGravity = gravity;
-            recalculate();
-        }
-    }
-
-    int getCollapsedTextGravity() {
-        return mCollapsedTextGravity;
-    }
-
-    void setCollapsedTextAppearance(int resId) {
-        TintTypedArray a = TintTypedArray.obtainStyledAttributes(mView.getContext(), resId,
-                android.support.v7.appcompat.R.styleable.TextAppearance);
-        if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor)) {
-            mCollapsedTextColor = a.getColorStateList(
-                    android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor);
-        }
-        if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize)) {
-            mCollapsedTextSize = a.getDimensionPixelSize(
-                    android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize,
-                    (int) mCollapsedTextSize);
-        }
-        mCollapsedShadowColor = a.getInt(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowColor, 0);
-        mCollapsedShadowDx = a.getFloat(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDx, 0);
-        mCollapsedShadowDy = a.getFloat(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDy, 0);
-        mCollapsedShadowRadius = a.getFloat(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowRadius, 0);
-        a.recycle();
-
-        if (Build.VERSION.SDK_INT >= 16) {
-            mCollapsedTypeface = readFontFamilyTypeface(resId);
-        }
-
-        recalculate();
-    }
-
-    void setExpandedTextAppearance(int resId) {
-        TintTypedArray a = TintTypedArray.obtainStyledAttributes(mView.getContext(), resId,
-                android.support.v7.appcompat.R.styleable.TextAppearance);
-        if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor)) {
-            mExpandedTextColor = a.getColorStateList(
-                    android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor);
-        }
-        if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize)) {
-            mExpandedTextSize = a.getDimensionPixelSize(
-                    android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize,
-                    (int) mExpandedTextSize);
-        }
-        mExpandedShadowColor = a.getInt(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowColor, 0);
-        mExpandedShadowDx = a.getFloat(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDx, 0);
-        mExpandedShadowDy = a.getFloat(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDy, 0);
-        mExpandedShadowRadius = a.getFloat(
-                android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowRadius, 0);
-        a.recycle();
-
-        if (Build.VERSION.SDK_INT >= 16) {
-            mExpandedTypeface = readFontFamilyTypeface(resId);
-        }
-
-        recalculate();
-    }
-
-    private Typeface readFontFamilyTypeface(int resId) {
-        final TypedArray a = mView.getContext().obtainStyledAttributes(resId,
-                new int[]{android.R.attr.fontFamily});
-        try {
-            final String family = a.getString(0);
-            if (family != null) {
-                return Typeface.create(family, Typeface.NORMAL);
-            }
-        } finally {
-            a.recycle();
-        }
-        return null;
-    }
-
-    void setCollapsedTypeface(Typeface typeface) {
-        if (areTypefacesDifferent(mCollapsedTypeface, typeface)) {
-            mCollapsedTypeface = typeface;
-            recalculate();
-        }
-    }
-
-    void setExpandedTypeface(Typeface typeface) {
-        if (areTypefacesDifferent(mExpandedTypeface, typeface)) {
-            mExpandedTypeface = typeface;
-            recalculate();
-        }
-    }
-
-    void setTypefaces(Typeface typeface) {
-        mCollapsedTypeface = mExpandedTypeface = typeface;
-        recalculate();
-    }
-
-    Typeface getCollapsedTypeface() {
-        return mCollapsedTypeface != null ? mCollapsedTypeface : Typeface.DEFAULT;
-    }
-
-    Typeface getExpandedTypeface() {
-        return mExpandedTypeface != null ? mExpandedTypeface : Typeface.DEFAULT;
-    }
-
-    /**
-     * Set the value indicating the current scroll value. This decides how much of the
-     * background will be displayed, as well as the title metrics/positioning.
-     *
-     * A value of {@code 0.0} indicates that the layout is fully expanded.
-     * A value of {@code 1.0} indicates that the layout is fully collapsed.
-     */
-    void setExpansionFraction(float fraction) {
-        fraction = MathUtils.clamp(fraction, 0f, 1f);
-
-        if (fraction != mExpandedFraction) {
-            mExpandedFraction = fraction;
-            calculateCurrentOffsets();
-        }
-    }
-
-    final boolean setState(final int[] state) {
-        mState = state;
-
-        if (isStateful()) {
-            recalculate();
-            return true;
-        }
-
-        return false;
-    }
-
-    final boolean isStateful() {
-        return (mCollapsedTextColor != null && mCollapsedTextColor.isStateful())
-                || (mExpandedTextColor != null && mExpandedTextColor.isStateful());
-    }
-
-    float getExpansionFraction() {
-        return mExpandedFraction;
-    }
-
-    float getCollapsedTextSize() {
-        return mCollapsedTextSize;
-    }
-
-    float getExpandedTextSize() {
-        return mExpandedTextSize;
-    }
-
-    private void calculateCurrentOffsets() {
-        calculateOffsets(mExpandedFraction);
-    }
-
-    private void calculateOffsets(final float fraction) {
-        interpolateBounds(fraction);
-        mCurrentDrawX = lerp(mExpandedDrawX, mCollapsedDrawX, fraction,
-                mPositionInterpolator);
-        mCurrentDrawY = lerp(mExpandedDrawY, mCollapsedDrawY, fraction,
-                mPositionInterpolator);
-
-        setInterpolatedTextSize(lerp(mExpandedTextSize, mCollapsedTextSize,
-                fraction, mTextSizeInterpolator));
-
-        if (mCollapsedTextColor != mExpandedTextColor) {
-            // If the collapsed and expanded text colors are different, blend them based on the
-            // fraction
-            mTextPaint.setColor(blendColors(
-                    getCurrentExpandedTextColor(), getCurrentCollapsedTextColor(), fraction));
-        } else {
-            mTextPaint.setColor(getCurrentCollapsedTextColor());
-        }
-
-        mTextPaint.setShadowLayer(
-                lerp(mExpandedShadowRadius, mCollapsedShadowRadius, fraction, null),
-                lerp(mExpandedShadowDx, mCollapsedShadowDx, fraction, null),
-                lerp(mExpandedShadowDy, mCollapsedShadowDy, fraction, null),
-                blendColors(mExpandedShadowColor, mCollapsedShadowColor, fraction));
-
-        ViewCompat.postInvalidateOnAnimation(mView);
-    }
-
-    @ColorInt
-    private int getCurrentExpandedTextColor() {
-        if (mState != null) {
-            return mExpandedTextColor.getColorForState(mState, 0);
-        } else {
-            return mExpandedTextColor.getDefaultColor();
-        }
-    }
-
-    @ColorInt
-    private int getCurrentCollapsedTextColor() {
-        if (mState != null) {
-            return mCollapsedTextColor.getColorForState(mState, 0);
-        } else {
-            return mCollapsedTextColor.getDefaultColor();
-        }
-    }
-
-    private void calculateBaseOffsets() {
-        final float currentTextSize = mCurrentTextSize;
-
-        // We then calculate the collapsed text size, using the same logic
-        calculateUsingTextSize(mCollapsedTextSize);
-        float width = mTextToDraw != null ?
-                mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()) : 0;
-        final int collapsedAbsGravity = GravityCompat.getAbsoluteGravity(mCollapsedTextGravity,
-                mIsRtl ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
-        switch (collapsedAbsGravity & Gravity.VERTICAL_GRAVITY_MASK) {
-            case Gravity.BOTTOM:
-                mCollapsedDrawY = mCollapsedBounds.bottom;
-                break;
-            case Gravity.TOP:
-                mCollapsedDrawY = mCollapsedBounds.top - mTextPaint.ascent();
-                break;
-            case Gravity.CENTER_VERTICAL:
-            default:
-                float textHeight = mTextPaint.descent() - mTextPaint.ascent();
-                float textOffset = (textHeight / 2) - mTextPaint.descent();
-                mCollapsedDrawY = mCollapsedBounds.centerY() + textOffset;
-                break;
-        }
-        switch (collapsedAbsGravity & GravityCompat.RELATIVE_HORIZONTAL_GRAVITY_MASK) {
-            case Gravity.CENTER_HORIZONTAL:
-                mCollapsedDrawX = mCollapsedBounds.centerX() - (width / 2);
-                break;
-            case Gravity.RIGHT:
-                mCollapsedDrawX = mCollapsedBounds.right - width;
-                break;
-            case Gravity.LEFT:
-            default:
-                mCollapsedDrawX = mCollapsedBounds.left;
-                break;
-        }
-
-        calculateUsingTextSize(mExpandedTextSize);
-        width = mTextToDraw != null
-                ? mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()) : 0;
-        final int expandedAbsGravity = GravityCompat.getAbsoluteGravity(mExpandedTextGravity,
-                mIsRtl ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
-        switch (expandedAbsGravity & Gravity.VERTICAL_GRAVITY_MASK) {
-            case Gravity.BOTTOM:
-                mExpandedDrawY = mExpandedBounds.bottom;
-                break;
-            case Gravity.TOP:
-                mExpandedDrawY = mExpandedBounds.top - mTextPaint.ascent();
-                break;
-            case Gravity.CENTER_VERTICAL:
-            default:
-                float textHeight = mTextPaint.descent() - mTextPaint.ascent();
-                float textOffset = (textHeight / 2) - mTextPaint.descent();
-                mExpandedDrawY = mExpandedBounds.centerY() + textOffset;
-                break;
-        }
-        switch (expandedAbsGravity & GravityCompat.RELATIVE_HORIZONTAL_GRAVITY_MASK) {
-            case Gravity.CENTER_HORIZONTAL:
-                mExpandedDrawX = mExpandedBounds.centerX() - (width / 2);
-                break;
-            case Gravity.RIGHT:
-                mExpandedDrawX = mExpandedBounds.right - width;
-                break;
-            case Gravity.LEFT:
-            default:
-                mExpandedDrawX = mExpandedBounds.left;
-                break;
-        }
-
-        // The bounds have changed so we need to clear the texture
-        clearTexture();
-        // Now reset the text size back to the original
-        setInterpolatedTextSize(currentTextSize);
-    }
-
-    private void interpolateBounds(float fraction) {
-        mCurrentBounds.left = lerp(mExpandedBounds.left, mCollapsedBounds.left,
-                fraction, mPositionInterpolator);
-        mCurrentBounds.top = lerp(mExpandedDrawY, mCollapsedDrawY,
-                fraction, mPositionInterpolator);
-        mCurrentBounds.right = lerp(mExpandedBounds.right, mCollapsedBounds.right,
-                fraction, mPositionInterpolator);
-        mCurrentBounds.bottom = lerp(mExpandedBounds.bottom, mCollapsedBounds.bottom,
-                fraction, mPositionInterpolator);
-    }
-
-    public void draw(Canvas canvas) {
-        final int saveCount = canvas.save();
-
-        if (mTextToDraw != null && mDrawTitle) {
-            float x = mCurrentDrawX;
-            float y = mCurrentDrawY;
-
-            final boolean drawTexture = mUseTexture && mExpandedTitleTexture != null;
-
-            final float ascent;
-            final float descent;
-            if (drawTexture) {
-                ascent = mTextureAscent * mScale;
-                descent = mTextureDescent * mScale;
-            } else {
-                ascent = mTextPaint.ascent() * mScale;
-                descent = mTextPaint.descent() * mScale;
-            }
-
-            if (DEBUG_DRAW) {
-                // Just a debug tool, which drawn a magenta rect in the text bounds
-                canvas.drawRect(mCurrentBounds.left, y + ascent, mCurrentBounds.right, y + descent,
-                        DEBUG_DRAW_PAINT);
-            }
-
-            if (drawTexture) {
-                y += ascent;
-            }
-
-            if (mScale != 1f) {
-                canvas.scale(mScale, mScale, x, y);
-            }
-
-            if (drawTexture) {
-                // If we should use a texture, draw it instead of text
-                canvas.drawBitmap(mExpandedTitleTexture, x, y, mTexturePaint);
-            } else {
-                canvas.drawText(mTextToDraw, 0, mTextToDraw.length(), x, y, mTextPaint);
-            }
-        }
-
-        canvas.restoreToCount(saveCount);
-    }
-
-    private boolean calculateIsRtl(CharSequence text) {
-        final boolean defaultIsRtl = ViewCompat.getLayoutDirection(mView)
-                == ViewCompat.LAYOUT_DIRECTION_RTL;
-        return (defaultIsRtl
-                ? TextDirectionHeuristicsCompat.FIRSTSTRONG_RTL
-                : TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR).isRtl(text, 0, text.length());
-    }
-
-    private void setInterpolatedTextSize(float textSize) {
-        calculateUsingTextSize(textSize);
-
-        // Use our texture if the scale isn't 1.0
-        mUseTexture = USE_SCALING_TEXTURE && mScale != 1f;
-
-        if (mUseTexture) {
-            // Make sure we have an expanded texture if needed
-            ensureExpandedTexture();
-        }
-
-        ViewCompat.postInvalidateOnAnimation(mView);
-    }
-
-    private boolean areTypefacesDifferent(Typeface first, Typeface second) {
-        return (first != null && !first.equals(second)) || (first == null && second != null);
-    }
-
-    private void calculateUsingTextSize(final float textSize) {
-        if (mText == null) return;
-
-        final float collapsedWidth = mCollapsedBounds.width();
-        final float expandedWidth = mExpandedBounds.width();
-
-        final float availableWidth;
-        final float newTextSize;
-        boolean updateDrawText = false;
-
-        if (isClose(textSize, mCollapsedTextSize)) {
-            newTextSize = mCollapsedTextSize;
-            mScale = 1f;
-            if (areTypefacesDifferent(mCurrentTypeface, mCollapsedTypeface)) {
-                mCurrentTypeface = mCollapsedTypeface;
-                updateDrawText = true;
-            }
-            availableWidth = collapsedWidth;
-        } else {
-            newTextSize = mExpandedTextSize;
-            if (areTypefacesDifferent(mCurrentTypeface, mExpandedTypeface)) {
-                mCurrentTypeface = mExpandedTypeface;
-                updateDrawText = true;
-            }
-            if (isClose(textSize, mExpandedTextSize)) {
-                // If we're close to the expanded text size, snap to it and use a scale of 1
-                mScale = 1f;
-            } else {
-                // Else, we'll scale down from the expanded text size
-                mScale = textSize / mExpandedTextSize;
-            }
-
-            final float textSizeRatio = mCollapsedTextSize / mExpandedTextSize;
-            // This is the size of the expanded bounds when it is scaled to match the
-            // collapsed text size
-            final float scaledDownWidth = expandedWidth * textSizeRatio;
-
-            if (scaledDownWidth > collapsedWidth) {
-                // If the scaled down size is larger than the actual collapsed width, we need to
-                // cap the available width so that when the expanded text scales down, it matches
-                // the collapsed width
-                availableWidth = Math.min(collapsedWidth / textSizeRatio, expandedWidth);
-            } else {
-                // Otherwise we'll just use the expanded width
-                availableWidth = expandedWidth;
-            }
-        }
-
-        if (availableWidth > 0) {
-            updateDrawText = (mCurrentTextSize != newTextSize) || mBoundsChanged || updateDrawText;
-            mCurrentTextSize = newTextSize;
-            mBoundsChanged = false;
-        }
-
-        if (mTextToDraw == null || updateDrawText) {
-            mTextPaint.setTextSize(mCurrentTextSize);
-            mTextPaint.setTypeface(mCurrentTypeface);
-            // Use linear text scaling if we're scaling the canvas
-            mTextPaint.setLinearText(mScale != 1f);
-
-            // If we don't currently have text to draw, or the text size has changed, ellipsize...
-            final CharSequence title = TextUtils.ellipsize(mText, mTextPaint,
-                    availableWidth, TextUtils.TruncateAt.END);
-            if (!TextUtils.equals(title, mTextToDraw)) {
-                mTextToDraw = title;
-                mIsRtl = calculateIsRtl(mTextToDraw);
-            }
-        }
-    }
-
-    private void ensureExpandedTexture() {
-        if (mExpandedTitleTexture != null || mExpandedBounds.isEmpty()
-                || TextUtils.isEmpty(mTextToDraw)) {
-            return;
-        }
-
-        calculateOffsets(0f);
-        mTextureAscent = mTextPaint.ascent();
-        mTextureDescent = mTextPaint.descent();
-
-        final int w = Math.round(mTextPaint.measureText(mTextToDraw, 0, mTextToDraw.length()));
-        final int h = Math.round(mTextureDescent - mTextureAscent);
-
-        if (w <= 0 || h <= 0) {
-            return; // If the width or height are 0, return
-        }
-
-        mExpandedTitleTexture = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
-
-        Canvas c = new Canvas(mExpandedTitleTexture);
-        c.drawText(mTextToDraw, 0, mTextToDraw.length(), 0, h - mTextPaint.descent(), mTextPaint);
-
-        if (mTexturePaint == null) {
-            // Make sure we have a paint
-            mTexturePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
-        }
-    }
-
-    public void recalculate() {
-        if (mView.getHeight() > 0 && mView.getWidth() > 0) {
-            // If we've already been laid out, calculate everything now otherwise we'll wait
-            // until a layout
-            calculateBaseOffsets();
-            calculateCurrentOffsets();
-        }
-    }
-
-    /**
-     * Set the title to display
-     *
-     * @param text
-     */
-    void setText(CharSequence text) {
-        if (text == null || !text.equals(mText)) {
-            mText = text;
-            mTextToDraw = null;
-            clearTexture();
-            recalculate();
-        }
-    }
-
-    CharSequence getText() {
-        return mText;
-    }
-
-    private void clearTexture() {
-        if (mExpandedTitleTexture != null) {
-            mExpandedTitleTexture.recycle();
-            mExpandedTitleTexture = null;
-        }
-    }
-
-    /**
-     * Returns true if {@code value} is 'close' to it's closest decimal value. Close is currently
-     * defined as it's difference being < 0.001.
-     */
-    private static boolean isClose(float value, float targetValue) {
-        return Math.abs(value - targetValue) < 0.001f;
-    }
-
-    ColorStateList getExpandedTextColor() {
-        return mExpandedTextColor;
-    }
-
-    ColorStateList getCollapsedTextColor() {
-        return mCollapsedTextColor;
-    }
-
-    /**
-     * Blend {@code color1} and {@code color2} using the given ratio.
-     *
-     * @param ratio of which to blend. 0.0 will return {@code color1}, 0.5 will give an even blend,
-     *              1.0 will return {@code color2}.
-     */
-    private static int blendColors(int color1, int color2, float ratio) {
-        final float inverseRatio = 1f - ratio;
-        float a = (Color.alpha(color1) * inverseRatio) + (Color.alpha(color2) * ratio);
-        float r = (Color.red(color1) * inverseRatio) + (Color.red(color2) * ratio);
-        float g = (Color.green(color1) * inverseRatio) + (Color.green(color2) * ratio);
-        float b = (Color.blue(color1) * inverseRatio) + (Color.blue(color2) * ratio);
-        return Color.argb((int) a, (int) r, (int) g, (int) b);
-    }
-
-    private static float lerp(float startValue, float endValue, float fraction,
-            Interpolator interpolator) {
-        if (interpolator != null) {
-            fraction = interpolator.getInterpolation(fraction);
-        }
-        return AnimationUtils.lerp(startValue, endValue, fraction);
-    }
-
-    private static boolean rectEquals(Rect r, int left, int top, int right, int bottom) {
-        return !(r.left != left || r.top != top || r.right != right || r.bottom != bottom);
-    }
-}
diff --git a/design/src/android/support/design/widget/CollapsingToolbarLayout.java b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
deleted file mode 100644
index 8c9b7d4..0000000
--- a/design/src/android/support/design/widget/CollapsingToolbarLayout.java
+++ /dev/null
@@ -1,1308 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.StyleRes;
-import android.support.design.R;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v4.math.MathUtils;
-import android.support.v4.util.ObjectsCompat;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.WindowInsetsCompat;
-import android.support.v4.widget.ViewGroupUtils;
-import android.support.v7.widget.Toolbar;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.widget.FrameLayout;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * CollapsingToolbarLayout is a wrapper for {@link Toolbar} which implements a collapsing app bar.
- * It is designed to be used as a direct child of a {@link AppBarLayout}.
- * CollapsingToolbarLayout contains the following features:
- *
- * <h4>Collapsing title</h4>
- * A title which is larger when the layout is fully visible but collapses and becomes smaller as
- * the layout is scrolled off screen. You can set the title to display via
- * {@link #setTitle(CharSequence)}. The title appearance can be tweaked via the
- * {@code collapsedTextAppearance} and {@code expandedTextAppearance} attributes.
- *
- * <h4>Content scrim</h4>
- * A full-bleed scrim which is show or hidden when the scroll position has hit a certain threshold.
- * You can change this via {@link #setContentScrim(Drawable)}.
- *
- * <h4>Status bar scrim</h4>
- * A scrim which is show or hidden behind the status bar when the scroll position has hit a certain
- * threshold. You can change this via {@link #setStatusBarScrim(Drawable)}. This only works
- * on {@link android.os.Build.VERSION_CODES#LOLLIPOP LOLLIPOP} devices when we set to fit system
- * windows.
- *
- * <h4>Parallax scrolling children</h4>
- * Child views can opt to be scrolled within this layout in a parallax fashion.
- * See {@link LayoutParams#COLLAPSE_MODE_PARALLAX} and
- * {@link LayoutParams#setParallaxMultiplier(float)}.
- *
- * <h4>Pinned position children</h4>
- * Child views can opt to be pinned in space globally. This is useful when implementing a
- * collapsing as it allows the {@link Toolbar} to be fixed in place even though this layout is
- * moving. See {@link LayoutParams#COLLAPSE_MODE_PIN}.
- *
- * <p><strong>Do not manually add views to the Toolbar at run time</strong>.
- * We will add a 'dummy view' to the Toolbar which allows us to work out the available space
- * for the title. This can interfere with any views which you add.</p>
- *
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleTextAppearance
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleTextAppearance
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_contentScrim
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMargin
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginStart
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginEnd
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginBottom
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_statusBarScrim
- * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_toolbarId
- */
-public class CollapsingToolbarLayout extends FrameLayout {
-
-    private static final int DEFAULT_SCRIM_ANIMATION_DURATION = 600;
-
-    private boolean mRefreshToolbar = true;
-    private int mToolbarId;
-    private Toolbar mToolbar;
-    private View mToolbarDirectChild;
-    private View mDummyView;
-
-    private int mExpandedMarginStart;
-    private int mExpandedMarginTop;
-    private int mExpandedMarginEnd;
-    private int mExpandedMarginBottom;
-
-    private final Rect mTmpRect = new Rect();
-    final CollapsingTextHelper mCollapsingTextHelper;
-    private boolean mCollapsingTitleEnabled;
-    private boolean mDrawCollapsingTitle;
-
-    private Drawable mContentScrim;
-    Drawable mStatusBarScrim;
-    private int mScrimAlpha;
-    private boolean mScrimsAreShown;
-    private ValueAnimator mScrimAnimator;
-    private long mScrimAnimationDuration;
-    private int mScrimVisibleHeightTrigger = -1;
-
-    private AppBarLayout.OnOffsetChangedListener mOnOffsetChangedListener;
-
-    int mCurrentOffset;
-
-    WindowInsetsCompat mLastInsets;
-
-    public CollapsingToolbarLayout(Context context) {
-        this(context, null);
-    }
-
-    public CollapsingToolbarLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public CollapsingToolbarLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        ThemeUtils.checkAppCompatTheme(context);
-
-        mCollapsingTextHelper = new CollapsingTextHelper(this);
-        mCollapsingTextHelper.setTextSizeInterpolator(AnimationUtils.DECELERATE_INTERPOLATOR);
-
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.CollapsingToolbarLayout, defStyleAttr,
-                R.style.Widget_Design_CollapsingToolbar);
-
-        mCollapsingTextHelper.setExpandedTextGravity(
-                a.getInt(R.styleable.CollapsingToolbarLayout_expandedTitleGravity,
-                        GravityCompat.START | Gravity.BOTTOM));
-        mCollapsingTextHelper.setCollapsedTextGravity(
-                a.getInt(R.styleable.CollapsingToolbarLayout_collapsedTitleGravity,
-                        GravityCompat.START | Gravity.CENTER_VERTICAL));
-
-        mExpandedMarginStart = mExpandedMarginTop = mExpandedMarginEnd = mExpandedMarginBottom =
-                a.getDimensionPixelSize(R.styleable.CollapsingToolbarLayout_expandedTitleMargin, 0);
-
-        if (a.hasValue(R.styleable.CollapsingToolbarLayout_expandedTitleMarginStart)) {
-            mExpandedMarginStart = a.getDimensionPixelSize(
-                    R.styleable.CollapsingToolbarLayout_expandedTitleMarginStart, 0);
-        }
-        if (a.hasValue(R.styleable.CollapsingToolbarLayout_expandedTitleMarginEnd)) {
-            mExpandedMarginEnd = a.getDimensionPixelSize(
-                    R.styleable.CollapsingToolbarLayout_expandedTitleMarginEnd, 0);
-        }
-        if (a.hasValue(R.styleable.CollapsingToolbarLayout_expandedTitleMarginTop)) {
-            mExpandedMarginTop = a.getDimensionPixelSize(
-                    R.styleable.CollapsingToolbarLayout_expandedTitleMarginTop, 0);
-        }
-        if (a.hasValue(R.styleable.CollapsingToolbarLayout_expandedTitleMarginBottom)) {
-            mExpandedMarginBottom = a.getDimensionPixelSize(
-                    R.styleable.CollapsingToolbarLayout_expandedTitleMarginBottom, 0);
-        }
-
-        mCollapsingTitleEnabled = a.getBoolean(
-                R.styleable.CollapsingToolbarLayout_titleEnabled, true);
-        setTitle(a.getText(R.styleable.CollapsingToolbarLayout_title));
-
-        // First load the default text appearances
-        mCollapsingTextHelper.setExpandedTextAppearance(
-                R.style.TextAppearance_Design_CollapsingToolbar_Expanded);
-        mCollapsingTextHelper.setCollapsedTextAppearance(
-                android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Widget_ActionBar_Title);
-
-        // Now overlay any custom text appearances
-        if (a.hasValue(R.styleable.CollapsingToolbarLayout_expandedTitleTextAppearance)) {
-            mCollapsingTextHelper.setExpandedTextAppearance(
-                    a.getResourceId(
-                            R.styleable.CollapsingToolbarLayout_expandedTitleTextAppearance, 0));
-        }
-        if (a.hasValue(R.styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance)) {
-            mCollapsingTextHelper.setCollapsedTextAppearance(
-                    a.getResourceId(
-                            R.styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance, 0));
-        }
-
-        mScrimVisibleHeightTrigger = a.getDimensionPixelSize(
-                R.styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger, -1);
-
-        mScrimAnimationDuration = a.getInt(
-                R.styleable.CollapsingToolbarLayout_scrimAnimationDuration,
-                DEFAULT_SCRIM_ANIMATION_DURATION);
-
-        setContentScrim(a.getDrawable(R.styleable.CollapsingToolbarLayout_contentScrim));
-        setStatusBarScrim(a.getDrawable(R.styleable.CollapsingToolbarLayout_statusBarScrim));
-
-        mToolbarId = a.getResourceId(R.styleable.CollapsingToolbarLayout_toolbarId, -1);
-
-        a.recycle();
-
-        setWillNotDraw(false);
-
-        ViewCompat.setOnApplyWindowInsetsListener(this,
-                new android.support.v4.view.OnApplyWindowInsetsListener() {
-                    @Override
-                    public WindowInsetsCompat onApplyWindowInsets(View v,
-                            WindowInsetsCompat insets) {
-                        return onWindowInsetChanged(insets);
-                    }
-                });
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-
-        // Add an OnOffsetChangedListener if possible
-        final ViewParent parent = getParent();
-        if (parent instanceof AppBarLayout) {
-            // Copy over from the ABL whether we should fit system windows
-            ViewCompat.setFitsSystemWindows(this, ViewCompat.getFitsSystemWindows((View) parent));
-
-            if (mOnOffsetChangedListener == null) {
-                mOnOffsetChangedListener = new OffsetUpdateListener();
-            }
-            ((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener);
-
-            // We're attached, so lets request an inset dispatch
-            ViewCompat.requestApplyInsets(this);
-        }
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        // Remove our OnOffsetChangedListener if possible and it exists
-        final ViewParent parent = getParent();
-        if (mOnOffsetChangedListener != null && parent instanceof AppBarLayout) {
-            ((AppBarLayout) parent).removeOnOffsetChangedListener(mOnOffsetChangedListener);
-        }
-
-        super.onDetachedFromWindow();
-    }
-
-    WindowInsetsCompat onWindowInsetChanged(final WindowInsetsCompat insets) {
-        WindowInsetsCompat newInsets = null;
-
-        if (ViewCompat.getFitsSystemWindows(this)) {
-            // If we're set to fit system windows, keep the insets
-            newInsets = insets;
-        }
-
-        // If our insets have changed, keep them and invalidate the scroll ranges...
-        if (!ObjectsCompat.equals(mLastInsets, newInsets)) {
-            mLastInsets = newInsets;
-            requestLayout();
-        }
-
-        // Consume the insets. This is done so that child views with fitSystemWindows=true do not
-        // get the default padding functionality from View
-        return insets.consumeSystemWindowInsets();
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        super.draw(canvas);
-
-        // If we don't have a toolbar, the scrim will be not be drawn in drawChild() below.
-        // Instead, we draw it here, before our collapsing text.
-        ensureToolbar();
-        if (mToolbar == null && mContentScrim != null && mScrimAlpha > 0) {
-            mContentScrim.mutate().setAlpha(mScrimAlpha);
-            mContentScrim.draw(canvas);
-        }
-
-        // Let the collapsing text helper draw its text
-        if (mCollapsingTitleEnabled && mDrawCollapsingTitle) {
-            mCollapsingTextHelper.draw(canvas);
-        }
-
-        // Now draw the status bar scrim
-        if (mStatusBarScrim != null && mScrimAlpha > 0) {
-            final int topInset = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0;
-            if (topInset > 0) {
-                mStatusBarScrim.setBounds(0, -mCurrentOffset, getWidth(),
-                        topInset - mCurrentOffset);
-                mStatusBarScrim.mutate().setAlpha(mScrimAlpha);
-                mStatusBarScrim.draw(canvas);
-            }
-        }
-    }
-
-    @Override
-    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
-        // This is a little weird. Our scrim needs to be behind the Toolbar (if it is present),
-        // but in front of any other children which are behind it. To do this we intercept the
-        // drawChild() call, and draw our scrim just before the Toolbar is drawn
-        boolean invalidated = false;
-        if (mContentScrim != null && mScrimAlpha > 0 && isToolbarChild(child)) {
-            mContentScrim.mutate().setAlpha(mScrimAlpha);
-            mContentScrim.draw(canvas);
-            invalidated = true;
-        }
-        return super.drawChild(canvas, child, drawingTime) || invalidated;
-    }
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-        if (mContentScrim != null) {
-            mContentScrim.setBounds(0, 0, w, h);
-        }
-    }
-
-    private void ensureToolbar() {
-        if (!mRefreshToolbar) {
-            return;
-        }
-
-        // First clear out the current Toolbar
-        mToolbar = null;
-        mToolbarDirectChild = null;
-
-        if (mToolbarId != -1) {
-            // If we have an ID set, try and find it and it's direct parent to us
-            mToolbar = findViewById(mToolbarId);
-            if (mToolbar != null) {
-                mToolbarDirectChild = findDirectChild(mToolbar);
-            }
-        }
-
-        if (mToolbar == null) {
-            // If we don't have an ID, or couldn't find a Toolbar with the correct ID, try and find
-            // one from our direct children
-            Toolbar toolbar = null;
-            for (int i = 0, count = getChildCount(); i < count; i++) {
-                final View child = getChildAt(i);
-                if (child instanceof Toolbar) {
-                    toolbar = (Toolbar) child;
-                    break;
-                }
-            }
-            mToolbar = toolbar;
-        }
-
-        updateDummyView();
-        mRefreshToolbar = false;
-    }
-
-    private boolean isToolbarChild(View child) {
-        return (mToolbarDirectChild == null || mToolbarDirectChild == this)
-                ? child == mToolbar
-                : child == mToolbarDirectChild;
-    }
-
-    /**
-     * Returns the direct child of this layout, which itself is the ancestor of the
-     * given view.
-     */
-    private View findDirectChild(final View descendant) {
-        View directChild = descendant;
-        for (ViewParent p = descendant.getParent(); p != this && p != null; p = p.getParent()) {
-            if (p instanceof View) {
-                directChild = (View) p;
-            }
-        }
-        return directChild;
-    }
-
-    private void updateDummyView() {
-        if (!mCollapsingTitleEnabled && mDummyView != null) {
-            // If we have a dummy view and we have our title disabled, remove it from its parent
-            final ViewParent parent = mDummyView.getParent();
-            if (parent instanceof ViewGroup) {
-                ((ViewGroup) parent).removeView(mDummyView);
-            }
-        }
-        if (mCollapsingTitleEnabled && mToolbar != null) {
-            if (mDummyView == null) {
-                mDummyView = new View(getContext());
-            }
-            if (mDummyView.getParent() == null) {
-                mToolbar.addView(mDummyView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-            }
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        ensureToolbar();
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        final int mode = MeasureSpec.getMode(heightMeasureSpec);
-        final int topInset = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0;
-        if (mode == MeasureSpec.UNSPECIFIED && topInset > 0) {
-            // If we have a top inset and we're set to wrap_content height we need to make sure
-            // we add the top inset to our height, therefore we re-measure
-            heightMeasureSpec = MeasureSpec.makeMeasureSpec(
-                    getMeasuredHeight() + topInset, MeasureSpec.EXACTLY);
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        }
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-
-        if (mLastInsets != null) {
-            // Shift down any views which are not set to fit system windows
-            final int insetTop = mLastInsets.getSystemWindowInsetTop();
-            for (int i = 0, z = getChildCount(); i < z; i++) {
-                final View child = getChildAt(i);
-                if (!ViewCompat.getFitsSystemWindows(child)) {
-                    if (child.getTop() < insetTop) {
-                        // If the child isn't set to fit system windows but is drawing within
-                        // the inset offset it down
-                        ViewCompat.offsetTopAndBottom(child, insetTop);
-                    }
-                }
-            }
-        }
-
-        // Update the collapsed bounds by getting it's transformed bounds
-        if (mCollapsingTitleEnabled && mDummyView != null) {
-            // We only draw the title if the dummy view is being displayed (Toolbar removes
-            // views if there is no space)
-            mDrawCollapsingTitle = ViewCompat.isAttachedToWindow(mDummyView)
-                    && mDummyView.getVisibility() == VISIBLE;
-
-            if (mDrawCollapsingTitle) {
-                final boolean isRtl = ViewCompat.getLayoutDirection(this)
-                        == ViewCompat.LAYOUT_DIRECTION_RTL;
-
-                // Update the collapsed bounds
-                final int maxOffset = getMaxOffsetForPinChild(
-                        mToolbarDirectChild != null ? mToolbarDirectChild : mToolbar);
-                ViewGroupUtils.getDescendantRect(this, mDummyView, mTmpRect);
-                mCollapsingTextHelper.setCollapsedBounds(
-                        mTmpRect.left + (isRtl
-                                ? mToolbar.getTitleMarginEnd()
-                                : mToolbar.getTitleMarginStart()),
-                        mTmpRect.top + maxOffset + mToolbar.getTitleMarginTop(),
-                        mTmpRect.right + (isRtl
-                                ? mToolbar.getTitleMarginStart()
-                                : mToolbar.getTitleMarginEnd()),
-                        mTmpRect.bottom + maxOffset - mToolbar.getTitleMarginBottom());
-
-                // Update the expanded bounds
-                mCollapsingTextHelper.setExpandedBounds(
-                        isRtl ? mExpandedMarginEnd : mExpandedMarginStart,
-                        mTmpRect.top + mExpandedMarginTop,
-                        right - left - (isRtl ? mExpandedMarginStart : mExpandedMarginEnd),
-                        bottom - top - mExpandedMarginBottom);
-                // Now recalculate using the new bounds
-                mCollapsingTextHelper.recalculate();
-            }
-        }
-
-        // Update our child view offset helpers. This needs to be done after the title has been
-        // setup, so that any Toolbars are in their original position
-        for (int i = 0, z = getChildCount(); i < z; i++) {
-            getViewOffsetHelper(getChildAt(i)).onViewLayout();
-        }
-
-        // Finally, set our minimum height to enable proper AppBarLayout collapsing
-        if (mToolbar != null) {
-            if (mCollapsingTitleEnabled && TextUtils.isEmpty(mCollapsingTextHelper.getText())) {
-                // If we do not currently have a title, try and grab it from the Toolbar
-                mCollapsingTextHelper.setText(mToolbar.getTitle());
-            }
-            if (mToolbarDirectChild == null || mToolbarDirectChild == this) {
-                setMinimumHeight(getHeightWithMargins(mToolbar));
-            } else {
-                setMinimumHeight(getHeightWithMargins(mToolbarDirectChild));
-            }
-        }
-
-        updateScrimVisibility();
-    }
-
-    private static int getHeightWithMargins(@NonNull final View view) {
-        final ViewGroup.LayoutParams lp = view.getLayoutParams();
-        if (lp instanceof MarginLayoutParams) {
-            final MarginLayoutParams mlp = (MarginLayoutParams) lp;
-            return view.getHeight() + mlp.topMargin + mlp.bottomMargin;
-        }
-        return view.getHeight();
-    }
-
-    static ViewOffsetHelper getViewOffsetHelper(View view) {
-        ViewOffsetHelper offsetHelper = (ViewOffsetHelper) view.getTag(R.id.view_offset_helper);
-        if (offsetHelper == null) {
-            offsetHelper = new ViewOffsetHelper(view);
-            view.setTag(R.id.view_offset_helper, offsetHelper);
-        }
-        return offsetHelper;
-    }
-
-    /**
-     * Sets the title to be displayed by this view, if enabled.
-     *
-     * @see #setTitleEnabled(boolean)
-     * @see #getTitle()
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_title
-     */
-    public void setTitle(@Nullable CharSequence title) {
-        mCollapsingTextHelper.setText(title);
-    }
-
-    /**
-     * Returns the title currently being displayed by this view. If the title is not enabled, then
-     * this will return {@code null}.
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_title
-     */
-    @Nullable
-    public CharSequence getTitle() {
-        return mCollapsingTitleEnabled ? mCollapsingTextHelper.getText() : null;
-    }
-
-    /**
-     * Sets whether this view should display its own title.
-     *
-     * <p>The title displayed by this view will shrink and grow based on the scroll offset.</p>
-     *
-     * @see #setTitle(CharSequence)
-     * @see #isTitleEnabled()
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_titleEnabled
-     */
-    public void setTitleEnabled(boolean enabled) {
-        if (enabled != mCollapsingTitleEnabled) {
-            mCollapsingTitleEnabled = enabled;
-            updateDummyView();
-            requestLayout();
-        }
-    }
-
-    /**
-     * Returns whether this view is currently displaying its own title.
-     *
-     * @see #setTitleEnabled(boolean)
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_titleEnabled
-     */
-    public boolean isTitleEnabled() {
-        return mCollapsingTitleEnabled;
-    }
-
-    /**
-     * Set whether the content scrim and/or status bar scrim should be shown or not. Any change
-     * in the vertical scroll may overwrite this value. Any visibility change will be animated if
-     * this view has already been laid out.
-     *
-     * @param shown whether the scrims should be shown
-     *
-     * @see #getStatusBarScrim()
-     * @see #getContentScrim()
-     */
-    public void setScrimsShown(boolean shown) {
-        setScrimsShown(shown, ViewCompat.isLaidOut(this) && !isInEditMode());
-    }
-
-    /**
-     * Set whether the content scrim and/or status bar scrim should be shown or not. Any change
-     * in the vertical scroll may overwrite this value.
-     *
-     * @param shown whether the scrims should be shown
-     * @param animate whether to animate the visibility change
-     *
-     * @see #getStatusBarScrim()
-     * @see #getContentScrim()
-     */
-    public void setScrimsShown(boolean shown, boolean animate) {
-        if (mScrimsAreShown != shown) {
-            if (animate) {
-                animateScrim(shown ? 0xFF : 0x0);
-            } else {
-                setScrimAlpha(shown ? 0xFF : 0x0);
-            }
-            mScrimsAreShown = shown;
-        }
-    }
-
-    private void animateScrim(int targetAlpha) {
-        ensureToolbar();
-        if (mScrimAnimator == null) {
-            mScrimAnimator = new ValueAnimator();
-            mScrimAnimator.setDuration(mScrimAnimationDuration);
-            mScrimAnimator.setInterpolator(
-                    targetAlpha > mScrimAlpha
-                            ? AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR
-                            : AnimationUtils.LINEAR_OUT_SLOW_IN_INTERPOLATOR);
-            mScrimAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animator) {
-                    setScrimAlpha((int) animator.getAnimatedValue());
-                }
-            });
-        } else if (mScrimAnimator.isRunning()) {
-            mScrimAnimator.cancel();
-        }
-
-        mScrimAnimator.setIntValues(mScrimAlpha, targetAlpha);
-        mScrimAnimator.start();
-    }
-
-    void setScrimAlpha(int alpha) {
-        if (alpha != mScrimAlpha) {
-            final Drawable contentScrim = mContentScrim;
-            if (contentScrim != null && mToolbar != null) {
-                ViewCompat.postInvalidateOnAnimation(mToolbar);
-            }
-            mScrimAlpha = alpha;
-            ViewCompat.postInvalidateOnAnimation(CollapsingToolbarLayout.this);
-        }
-    }
-
-    int getScrimAlpha() {
-        return mScrimAlpha;
-    }
-
-    /**
-     * Set the drawable to use for the content scrim from resources. Providing null will disable
-     * the scrim functionality.
-     *
-     * @param drawable the drawable to display
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_contentScrim
-     * @see #getContentScrim()
-     */
-    public void setContentScrim(@Nullable Drawable drawable) {
-        if (mContentScrim != drawable) {
-            if (mContentScrim != null) {
-                mContentScrim.setCallback(null);
-            }
-            mContentScrim = drawable != null ? drawable.mutate() : null;
-            if (mContentScrim != null) {
-                mContentScrim.setBounds(0, 0, getWidth(), getHeight());
-                mContentScrim.setCallback(this);
-                mContentScrim.setAlpha(mScrimAlpha);
-            }
-            ViewCompat.postInvalidateOnAnimation(this);
-        }
-    }
-
-    /**
-     * Set the color to use for the content scrim.
-     *
-     * @param color the color to display
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_contentScrim
-     * @see #getContentScrim()
-     */
-    public void setContentScrimColor(@ColorInt int color) {
-        setContentScrim(new ColorDrawable(color));
-    }
-
-    /**
-     * Set the drawable to use for the content scrim from resources.
-     *
-     * @param resId drawable resource id
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_contentScrim
-     * @see #getContentScrim()
-     */
-    public void setContentScrimResource(@DrawableRes int resId) {
-        setContentScrim(ContextCompat.getDrawable(getContext(), resId));
-
-    }
-
-    /**
-     * Returns the drawable which is used for the foreground scrim.
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_contentScrim
-     * @see #setContentScrim(Drawable)
-     */
-    @Nullable
-    public Drawable getContentScrim() {
-        return mContentScrim;
-    }
-
-    /**
-     * Set the drawable to use for the status bar scrim from resources.
-     * Providing null will disable the scrim functionality.
-     *
-     * <p>This scrim is only shown when we have been given a top system inset.</p>
-     *
-     * @param drawable the drawable to display
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_statusBarScrim
-     * @see #getStatusBarScrim()
-     */
-    public void setStatusBarScrim(@Nullable Drawable drawable) {
-        if (mStatusBarScrim != drawable) {
-            if (mStatusBarScrim != null) {
-                mStatusBarScrim.setCallback(null);
-            }
-            mStatusBarScrim = drawable != null ? drawable.mutate() : null;
-            if (mStatusBarScrim != null) {
-                if (mStatusBarScrim.isStateful()) {
-                    mStatusBarScrim.setState(getDrawableState());
-                }
-                DrawableCompat.setLayoutDirection(mStatusBarScrim,
-                        ViewCompat.getLayoutDirection(this));
-                mStatusBarScrim.setVisible(getVisibility() == VISIBLE, false);
-                mStatusBarScrim.setCallback(this);
-                mStatusBarScrim.setAlpha(mScrimAlpha);
-            }
-            ViewCompat.postInvalidateOnAnimation(this);
-        }
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        super.drawableStateChanged();
-
-        final int[] state = getDrawableState();
-        boolean changed = false;
-
-        Drawable d = mStatusBarScrim;
-        if (d != null && d.isStateful()) {
-            changed |= d.setState(state);
-        }
-        d = mContentScrim;
-        if (d != null && d.isStateful()) {
-            changed |= d.setState(state);
-        }
-        if (mCollapsingTextHelper != null) {
-            changed |= mCollapsingTextHelper.setState(state);
-        }
-
-        if (changed) {
-            invalidate();
-        }
-    }
-
-    @Override
-    protected boolean verifyDrawable(Drawable who) {
-        return super.verifyDrawable(who) || who == mContentScrim || who == mStatusBarScrim;
-    }
-
-    @Override
-    public void setVisibility(int visibility) {
-        super.setVisibility(visibility);
-
-        final boolean visible = visibility == VISIBLE;
-        if (mStatusBarScrim != null && mStatusBarScrim.isVisible() != visible) {
-            mStatusBarScrim.setVisible(visible, false);
-        }
-        if (mContentScrim != null && mContentScrim.isVisible() != visible) {
-            mContentScrim.setVisible(visible, false);
-        }
-    }
-
-    /**
-     * Set the color to use for the status bar scrim.
-     *
-     * <p>This scrim is only shown when we have been given a top system inset.</p>
-     *
-     * @param color the color to display
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_statusBarScrim
-     * @see #getStatusBarScrim()
-     */
-    public void setStatusBarScrimColor(@ColorInt int color) {
-        setStatusBarScrim(new ColorDrawable(color));
-    }
-
-    /**
-     * Set the drawable to use for the content scrim from resources.
-     *
-     * @param resId drawable resource id
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_statusBarScrim
-     * @see #getStatusBarScrim()
-     */
-    public void setStatusBarScrimResource(@DrawableRes int resId) {
-        setStatusBarScrim(ContextCompat.getDrawable(getContext(), resId));
-    }
-
-    /**
-     * Returns the drawable which is used for the status bar scrim.
-     *
-     * @attr ref R.styleable#CollapsingToolbarLayout_statusBarScrim
-     * @see #setStatusBarScrim(Drawable)
-     */
-    @Nullable
-    public Drawable getStatusBarScrim() {
-        return mStatusBarScrim;
-    }
-
-    /**
-     * Sets the text color and size for the collapsed title from the specified
-     * TextAppearance resource.
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleTextAppearance
-     */
-    public void setCollapsedTitleTextAppearance(@StyleRes int resId) {
-        mCollapsingTextHelper.setCollapsedTextAppearance(resId);
-    }
-
-    /**
-     * Sets the text color of the collapsed title.
-     *
-     * @param color The new text color in ARGB format
-     */
-    public void setCollapsedTitleTextColor(@ColorInt int color) {
-        setCollapsedTitleTextColor(ColorStateList.valueOf(color));
-    }
-
-    /**
-     * Sets the text colors of the collapsed title.
-     *
-     * @param colors ColorStateList containing the new text colors
-     */
-    public void setCollapsedTitleTextColor(@NonNull ColorStateList colors) {
-        mCollapsingTextHelper.setCollapsedTextColor(colors);
-    }
-
-    /**
-     * Sets the horizontal alignment of the collapsed title and the vertical gravity that will
-     * be used when there is extra space in the collapsed bounds beyond what is required for
-     * the title itself.
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleGravity
-     */
-    public void setCollapsedTitleGravity(int gravity) {
-        mCollapsingTextHelper.setCollapsedTextGravity(gravity);
-    }
-
-    /**
-     * Returns the horizontal and vertical alignment for title when collapsed.
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_collapsedTitleGravity
-     */
-    public int getCollapsedTitleGravity() {
-        return mCollapsingTextHelper.getCollapsedTextGravity();
-    }
-
-    /**
-     * Sets the text color and size for the expanded title from the specified
-     * TextAppearance resource.
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleTextAppearance
-     */
-    public void setExpandedTitleTextAppearance(@StyleRes int resId) {
-        mCollapsingTextHelper.setExpandedTextAppearance(resId);
-    }
-
-    /**
-     * Sets the text color of the expanded title.
-     *
-     * @param color The new text color in ARGB format
-     */
-    public void setExpandedTitleColor(@ColorInt int color) {
-        setExpandedTitleTextColor(ColorStateList.valueOf(color));
-    }
-
-    /**
-     * Sets the text colors of the expanded title.
-     *
-     * @param colors ColorStateList containing the new text colors
-     */
-    public void setExpandedTitleTextColor(@NonNull ColorStateList colors) {
-        mCollapsingTextHelper.setExpandedTextColor(colors);
-    }
-
-    /**
-     * Sets the horizontal alignment of the expanded title and the vertical gravity that will
-     * be used when there is extra space in the expanded bounds beyond what is required for
-     * the title itself.
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleGravity
-     */
-    public void setExpandedTitleGravity(int gravity) {
-        mCollapsingTextHelper.setExpandedTextGravity(gravity);
-    }
-
-    /**
-     * Returns the horizontal and vertical alignment for title when expanded.
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleGravity
-     */
-    public int getExpandedTitleGravity() {
-        return mCollapsingTextHelper.getExpandedTextGravity();
-    }
-
-    /**
-     * Set the typeface to use for the collapsed title.
-     *
-     * @param typeface typeface to use, or {@code null} to use the default.
-     */
-    public void setCollapsedTitleTypeface(@Nullable Typeface typeface) {
-        mCollapsingTextHelper.setCollapsedTypeface(typeface);
-    }
-
-    /**
-     * Returns the typeface used for the collapsed title.
-     */
-    @NonNull
-    public Typeface getCollapsedTitleTypeface() {
-        return mCollapsingTextHelper.getCollapsedTypeface();
-    }
-
-    /**
-     * Set the typeface to use for the expanded title.
-     *
-     * @param typeface typeface to use, or {@code null} to use the default.
-     */
-    public void setExpandedTitleTypeface(@Nullable Typeface typeface) {
-        mCollapsingTextHelper.setExpandedTypeface(typeface);
-    }
-
-    /**
-     * Returns the typeface used for the expanded title.
-     */
-    @NonNull
-    public Typeface getExpandedTitleTypeface() {
-        return mCollapsingTextHelper.getExpandedTypeface();
-    }
-
-    /**
-     * Sets the expanded title margins.
-     *
-     * @param start the starting title margin in pixels
-     * @param top the top title margin in pixels
-     * @param end the ending title margin in pixels
-     * @param bottom the bottom title margin in pixels
-     *
-     * @see #getExpandedTitleMarginStart()
-     * @see #getExpandedTitleMarginTop()
-     * @see #getExpandedTitleMarginEnd()
-     * @see #getExpandedTitleMarginBottom()
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMargin
-     */
-    public void setExpandedTitleMargin(int start, int top, int end, int bottom) {
-        mExpandedMarginStart = start;
-        mExpandedMarginTop = top;
-        mExpandedMarginEnd = end;
-        mExpandedMarginBottom = bottom;
-        requestLayout();
-    }
-
-    /**
-     * @return the starting expanded title margin in pixels
-     *
-     * @see #setExpandedTitleMarginStart(int)
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginStart
-     */
-    public int getExpandedTitleMarginStart() {
-        return mExpandedMarginStart;
-    }
-
-    /**
-     * Sets the starting expanded title margin in pixels.
-     *
-     * @param margin the starting title margin in pixels
-     * @see #getExpandedTitleMarginStart()
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginStart
-     */
-    public void setExpandedTitleMarginStart(int margin) {
-        mExpandedMarginStart = margin;
-        requestLayout();
-    }
-
-    /**
-     * @return the top expanded title margin in pixels
-     * @see #setExpandedTitleMarginTop(int)
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginTop
-     */
-    public int getExpandedTitleMarginTop() {
-        return mExpandedMarginTop;
-    }
-
-    /**
-     * Sets the top expanded title margin in pixels.
-     *
-     * @param margin the top title margin in pixels
-     * @see #getExpandedTitleMarginTop()
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginTop
-     */
-    public void setExpandedTitleMarginTop(int margin) {
-        mExpandedMarginTop = margin;
-        requestLayout();
-    }
-
-    /**
-     * @return the ending expanded title margin in pixels
-     * @see #setExpandedTitleMarginEnd(int)
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginEnd
-     */
-    public int getExpandedTitleMarginEnd() {
-        return mExpandedMarginEnd;
-    }
-
-    /**
-     * Sets the ending expanded title margin in pixels.
-     *
-     * @param margin the ending title margin in pixels
-     * @see #getExpandedTitleMarginEnd()
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginEnd
-     */
-    public void setExpandedTitleMarginEnd(int margin) {
-        mExpandedMarginEnd = margin;
-        requestLayout();
-    }
-
-    /**
-     * @return the bottom expanded title margin in pixels
-     * @see #setExpandedTitleMarginBottom(int)
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginBottom
-     */
-    public int getExpandedTitleMarginBottom() {
-        return mExpandedMarginBottom;
-    }
-
-    /**
-     * Sets the bottom expanded title margin in pixels.
-     *
-     * @param margin the bottom title margin in pixels
-     * @see #getExpandedTitleMarginBottom()
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_expandedTitleMarginBottom
-     */
-    public void setExpandedTitleMarginBottom(int margin) {
-        mExpandedMarginBottom = margin;
-        requestLayout();
-    }
-
-    /**
-     * Set the amount of visible height in pixels used to define when to trigger a scrim
-     * visibility change.
-     *
-     * <p>If the visible height of this view is less than the given value, the scrims will be
-     * made visible, otherwise they are hidden.</p>
-     *
-     * @param height value in pixels used to define when to trigger a scrim visibility change
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_scrimVisibleHeightTrigger
-     */
-    public void setScrimVisibleHeightTrigger(@IntRange(from = 0) final int height) {
-        if (mScrimVisibleHeightTrigger != height) {
-            mScrimVisibleHeightTrigger = height;
-            // Update the scrim visibility
-            updateScrimVisibility();
-        }
-    }
-
-    /**
-     * Returns the amount of visible height in pixels used to define when to trigger a scrim
-     * visibility change.
-     *
-     * @see #setScrimVisibleHeightTrigger(int)
-     */
-    public int getScrimVisibleHeightTrigger() {
-        if (mScrimVisibleHeightTrigger >= 0) {
-            // If we have one explicitly set, return it
-            return mScrimVisibleHeightTrigger;
-        }
-
-        // Otherwise we'll use the default computed value
-        final int insetTop = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0;
-
-        final int minHeight = ViewCompat.getMinimumHeight(this);
-        if (minHeight > 0) {
-            // If we have a minHeight set, lets use 2 * minHeight (capped at our height)
-            return Math.min((minHeight * 2) + insetTop, getHeight());
-        }
-
-        // If we reach here then we don't have a min height set. Instead we'll take a
-        // guess at 1/3 of our height being visible
-        return getHeight() / 3;
-    }
-
-    /**
-     * Set the duration used for scrim visibility animations.
-     *
-     * @param duration the duration to use in milliseconds
-     *
-     * @attr ref android.support.design.R.styleable#CollapsingToolbarLayout_scrimAnimationDuration
-     */
-    public void setScrimAnimationDuration(@IntRange(from = 0) final long duration) {
-        mScrimAnimationDuration = duration;
-    }
-
-    /**
-     * Returns the duration in milliseconds used for scrim visibility animations.
-     */
-    public long getScrimAnimationDuration() {
-        return mScrimAnimationDuration;
-    }
-
-    @Override
-    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
-        return p instanceof LayoutParams;
-    }
-
-    @Override
-    protected LayoutParams generateDefaultLayoutParams() {
-        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-    }
-
-    @Override
-    public FrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs) {
-        return new LayoutParams(getContext(), attrs);
-    }
-
-    @Override
-    protected FrameLayout.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        return new LayoutParams(p);
-    }
-
-    public static class LayoutParams extends FrameLayout.LayoutParams {
-
-        private static final float DEFAULT_PARALLAX_MULTIPLIER = 0.5f;
-
-        /** @hide */
-        @RestrictTo(LIBRARY_GROUP)
-        @IntDef({
-                COLLAPSE_MODE_OFF,
-                COLLAPSE_MODE_PIN,
-                COLLAPSE_MODE_PARALLAX
-        })
-        @Retention(RetentionPolicy.SOURCE)
-        @interface CollapseMode {}
-
-        /**
-         * The view will act as normal with no collapsing behavior.
-         */
-        public static final int COLLAPSE_MODE_OFF = 0;
-
-        /**
-         * The view will pin in place until it reaches the bottom of the
-         * {@link CollapsingToolbarLayout}.
-         */
-        public static final int COLLAPSE_MODE_PIN = 1;
-
-        /**
-         * The view will scroll in a parallax fashion. See {@link #setParallaxMultiplier(float)}
-         * to change the multiplier used.
-         */
-        public static final int COLLAPSE_MODE_PARALLAX = 2;
-
-        int mCollapseMode = COLLAPSE_MODE_OFF;
-        float mParallaxMult = DEFAULT_PARALLAX_MULTIPLIER;
-
-        public LayoutParams(Context c, AttributeSet attrs) {
-            super(c, attrs);
-
-            TypedArray a = c.obtainStyledAttributes(attrs,
-                    R.styleable.CollapsingToolbarLayout_Layout);
-            mCollapseMode = a.getInt(
-                    R.styleable.CollapsingToolbarLayout_Layout_layout_collapseMode,
-                    COLLAPSE_MODE_OFF);
-            setParallaxMultiplier(a.getFloat(
-                    R.styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier,
-                    DEFAULT_PARALLAX_MULTIPLIER));
-            a.recycle();
-        }
-
-        public LayoutParams(int width, int height) {
-            super(width, height);
-        }
-
-        public LayoutParams(int width, int height, int gravity) {
-            super(width, height, gravity);
-        }
-
-        public LayoutParams(ViewGroup.LayoutParams p) {
-            super(p);
-        }
-
-        public LayoutParams(MarginLayoutParams source) {
-            super(source);
-        }
-
-        @RequiresApi(19)
-        public LayoutParams(FrameLayout.LayoutParams source) {
-            // The copy constructor called here only exists on API 19+.
-            super(source);
-        }
-
-        /**
-         * Set the collapse mode.
-         *
-         * @param collapseMode one of {@link #COLLAPSE_MODE_OFF}, {@link #COLLAPSE_MODE_PIN}
-         *                     or {@link #COLLAPSE_MODE_PARALLAX}.
-         */
-        public void setCollapseMode(@CollapseMode int collapseMode) {
-            mCollapseMode = collapseMode;
-        }
-
-        /**
-         * Returns the requested collapse mode.
-         *
-         * @return the current mode. One of {@link #COLLAPSE_MODE_OFF}, {@link #COLLAPSE_MODE_PIN}
-         * or {@link #COLLAPSE_MODE_PARALLAX}.
-         */
-        @CollapseMode
-        public int getCollapseMode() {
-            return mCollapseMode;
-        }
-
-        /**
-         * Set the parallax scroll multiplier used in conjunction with
-         * {@link #COLLAPSE_MODE_PARALLAX}. A value of {@code 0.0} indicates no movement at all,
-         * {@code 1.0f} indicates normal scroll movement.
-         *
-         * @param multiplier the multiplier.
-         *
-         * @see #getParallaxMultiplier()
-         */
-        public void setParallaxMultiplier(float multiplier) {
-            mParallaxMult = multiplier;
-        }
-
-        /**
-         * Returns the parallax scroll multiplier used in conjunction with
-         * {@link #COLLAPSE_MODE_PARALLAX}.
-         *
-         * @see #setParallaxMultiplier(float)
-         */
-        public float getParallaxMultiplier() {
-            return mParallaxMult;
-        }
-    }
-
-    /**
-     * Show or hide the scrims if needed
-     */
-    final void updateScrimVisibility() {
-        if (mContentScrim != null || mStatusBarScrim != null) {
-            setScrimsShown(getHeight() + mCurrentOffset < getScrimVisibleHeightTrigger());
-        }
-    }
-
-    final int getMaxOffsetForPinChild(View child) {
-        final ViewOffsetHelper offsetHelper = getViewOffsetHelper(child);
-        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-        return getHeight()
-                - offsetHelper.getLayoutTop()
-                - child.getHeight()
-                - lp.bottomMargin;
-    }
-
-    private class OffsetUpdateListener implements AppBarLayout.OnOffsetChangedListener {
-        OffsetUpdateListener() {
-        }
-
-        @Override
-        public void onOffsetChanged(AppBarLayout layout, int verticalOffset) {
-            mCurrentOffset = verticalOffset;
-
-            final int insetTop = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0;
-
-            for (int i = 0, z = getChildCount(); i < z; i++) {
-                final View child = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-                final ViewOffsetHelper offsetHelper = getViewOffsetHelper(child);
-
-                switch (lp.mCollapseMode) {
-                    case LayoutParams.COLLAPSE_MODE_PIN:
-                        offsetHelper.setTopAndBottomOffset(MathUtils.clamp(
-                                -verticalOffset, 0, getMaxOffsetForPinChild(child)));
-                        break;
-                    case LayoutParams.COLLAPSE_MODE_PARALLAX:
-                        offsetHelper.setTopAndBottomOffset(
-                                Math.round(-verticalOffset * lp.mParallaxMult));
-                        break;
-                }
-            }
-
-            // Show or hide the scrims if needed
-            updateScrimVisibility();
-
-            if (mStatusBarScrim != null && insetTop > 0) {
-                ViewCompat.postInvalidateOnAnimation(CollapsingToolbarLayout.this);
-            }
-
-            // Update the collapsing text's fraction
-            final int expandRange = getHeight() - ViewCompat.getMinimumHeight(
-                    CollapsingToolbarLayout.this) - insetTop;
-            mCollapsingTextHelper.setExpansionFraction(
-                    Math.abs(verticalOffset) / (float) expandRange);
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/DrawableUtils.java b/design/src/android/support/design/widget/DrawableUtils.java
deleted file mode 100644
index df1c04b..0000000
--- a/design/src/android/support/design/widget/DrawableUtils.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.DrawableContainer;
-import android.util.Log;
-
-import java.lang.reflect.Method;
-
-/**
- * Caution. Gross hacks ahead.
- */
-class DrawableUtils {
-
-    private static final String LOG_TAG = "DrawableUtils";
-
-    private static Method sSetConstantStateMethod;
-    private static boolean sSetConstantStateMethodFetched;
-
-    private DrawableUtils() {}
-
-    static boolean setContainerConstantState(DrawableContainer drawable,
-            Drawable.ConstantState constantState) {
-        // We can use getDeclaredMethod() on v9+
-        return setContainerConstantStateV9(drawable, constantState);
-    }
-
-    private static boolean setContainerConstantStateV9(DrawableContainer drawable,
-            Drawable.ConstantState constantState) {
-        if (!sSetConstantStateMethodFetched) {
-            try {
-                sSetConstantStateMethod = DrawableContainer.class.getDeclaredMethod(
-                        "setConstantState", DrawableContainer.DrawableContainerState.class);
-                sSetConstantStateMethod.setAccessible(true);
-            } catch (NoSuchMethodException e) {
-                Log.e(LOG_TAG, "Could not fetch setConstantState(). Oh well.");
-            }
-            sSetConstantStateMethodFetched = true;
-        }
-        if (sSetConstantStateMethod != null) {
-            try {
-                sSetConstantStateMethod.invoke(drawable, constantState);
-                return true;
-            } catch (Exception e) {
-                Log.e(LOG_TAG, "Could not invoke setConstantState(). Oh well.");
-            }
-        }
-        return false;
-    }
-}
diff --git a/design/src/android/support/design/widget/FloatingActionButton.java b/design/src/android/support/design/widget/FloatingActionButton.java
deleted file mode 100644
index f37b379..0000000
--- a/design/src/android/support/design/widget/FloatingActionButton.java
+++ /dev/null
@@ -1,870 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
-import android.support.design.R;
-import android.support.design.widget.FloatingActionButtonImpl.InternalVisibilityChangedListener;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.ViewGroupUtils;
-import android.support.v7.widget.AppCompatImageHelper;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.List;
-
-/**
- * Floating action buttons are used for a special type of promoted action. They are distinguished
- * by a circled icon floating above the UI and have special motion behaviors related to morphing,
- * launching, and the transferring anchor point.
- *
- * <p>Floating action buttons come in two sizes: the default and the mini. The size can be
- * controlled with the {@code fabSize} attribute.</p>
- *
- * <p>As this class descends from {@link ImageView}, you can control the icon which is displayed
- * via {@link #setImageDrawable(Drawable)}.</p>
- *
- * <p>The background color of this view defaults to the your theme's {@code colorAccent}. If you
- * wish to change this at runtime then you can do so via
- * {@link #setBackgroundTintList(ColorStateList)}.</p>
- */
-@CoordinatorLayout.DefaultBehavior(FloatingActionButton.Behavior.class)
-public class FloatingActionButton extends VisibilityAwareImageButton {
-
-    private static final String LOG_TAG = "FloatingActionButton";
-
-    /**
-     * Callback to be invoked when the visibility of a FloatingActionButton changes.
-     */
-    public abstract static class OnVisibilityChangedListener {
-        /**
-         * Called when a FloatingActionButton has been
-         * {@link #show(OnVisibilityChangedListener) shown}.
-         *
-         * @param fab the FloatingActionButton that was shown.
-         */
-        public void onShown(FloatingActionButton fab) {}
-
-        /**
-         * Called when a FloatingActionButton has been
-         * {@link #hide(OnVisibilityChangedListener) hidden}.
-         *
-         * @param fab the FloatingActionButton that was hidden.
-         */
-        public void onHidden(FloatingActionButton fab) {}
-    }
-
-    // These values must match those in the attrs declaration
-
-    /**
-     * The mini sized button. Will always been smaller than {@link #SIZE_NORMAL}.
-     *
-     * @see #setSize(int)
-     */
-    public static final int SIZE_MINI = 1;
-
-    /**
-     * The normal sized button. Will always been larger than {@link #SIZE_MINI}.
-     *
-     * @see #setSize(int)
-     */
-    public static final int SIZE_NORMAL = 0;
-
-    /**
-     * Size which will change based on the window size. For small sized windows
-     * (largest screen dimension < 470dp) this will select a small sized button, and for
-     * larger sized windows it will select a larger size.
-     *
-     * @see #setSize(int)
-     */
-    public static final int SIZE_AUTO = -1;
-
-    /**
-     * Indicates that FloatingActionButton should not have a custom size.
-     */
-    public static final int NO_CUSTOM_SIZE = 0;
-
-    /**
-     * The switch point for the largest screen edge where SIZE_AUTO switches from mini to normal.
-     */
-    private static final int AUTO_MINI_LARGEST_SCREEN_WIDTH = 470;
-
-    /** @hide */
-    @RestrictTo(LIBRARY_GROUP)
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef({SIZE_MINI, SIZE_NORMAL, SIZE_AUTO})
-    public @interface Size {}
-
-    private ColorStateList mBackgroundTint;
-    private PorterDuff.Mode mBackgroundTintMode;
-
-    private int mBorderWidth;
-    private int mRippleColor;
-    private int mSize;
-    private int mCustomSize;
-    int mImagePadding;
-    private int mMaxImageSize;
-
-    boolean mCompatPadding;
-    final Rect mShadowPadding = new Rect();
-    private final Rect mTouchArea = new Rect();
-
-    private AppCompatImageHelper mImageHelper;
-
-    private FloatingActionButtonImpl mImpl;
-
-    public FloatingActionButton(Context context) {
-        this(context, null);
-    }
-
-    public FloatingActionButton(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public FloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        ThemeUtils.checkAppCompatTheme(context);
-
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.FloatingActionButton, defStyleAttr,
-                R.style.Widget_Design_FloatingActionButton);
-        mBackgroundTint = a.getColorStateList(R.styleable.FloatingActionButton_backgroundTint);
-        mBackgroundTintMode = ViewUtils.parseTintMode(a.getInt(
-                R.styleable.FloatingActionButton_backgroundTintMode, -1), null);
-        mRippleColor = a.getColor(R.styleable.FloatingActionButton_rippleColor, 0);
-        mSize = a.getInt(R.styleable.FloatingActionButton_fabSize, SIZE_AUTO);
-        mCustomSize = a.getDimensionPixelSize(R.styleable.FloatingActionButton_fabCustomSize,
-                    0);
-        mBorderWidth = a.getDimensionPixelSize(R.styleable.FloatingActionButton_borderWidth, 0);
-        final float elevation = a.getDimension(R.styleable.FloatingActionButton_elevation, 0f);
-        final float pressedTranslationZ = a.getDimension(
-                R.styleable.FloatingActionButton_pressedTranslationZ, 0f);
-        mCompatPadding = a.getBoolean(R.styleable.FloatingActionButton_useCompatPadding, false);
-        a.recycle();
-
-        mImageHelper = new AppCompatImageHelper(this);
-        mImageHelper.loadFromAttributes(attrs, defStyleAttr);
-
-        mMaxImageSize = (int) getResources().getDimension(R.dimen.design_fab_image_size);
-
-        getImpl().setBackgroundDrawable(mBackgroundTint, mBackgroundTintMode,
-                mRippleColor, mBorderWidth);
-        getImpl().setElevation(elevation);
-        getImpl().setPressedTranslationZ(pressedTranslationZ);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int preferredSize = getSizeDimension();
-
-        mImagePadding = (preferredSize - mMaxImageSize) / 2;
-        getImpl().updatePadding();
-
-        final int w = resolveAdjustedSize(preferredSize, widthMeasureSpec);
-        final int h = resolveAdjustedSize(preferredSize, heightMeasureSpec);
-
-        // As we want to stay circular, we set both dimensions to be the
-        // smallest resolved dimension
-        final int d = Math.min(w, h);
-
-        // We add the shadow's padding to the measured dimension
-        setMeasuredDimension(
-                d + mShadowPadding.left + mShadowPadding.right,
-                d + mShadowPadding.top + mShadowPadding.bottom);
-    }
-
-    /**
-     * Returns the ripple color for this button.
-     *
-     * @return the ARGB color used for the ripple
-     * @see #setRippleColor(int)
-     */
-    @ColorInt
-    public int getRippleColor() {
-        return mRippleColor;
-    }
-
-    /**
-     * Sets the ripple color for this button.
-     *
-     * <p>When running on devices with KitKat or below, we draw this color as a filled circle
-     * rather than a ripple.</p>
-     *
-     * @param color ARGB color to use for the ripple
-     * @attr ref android.support.design.R.styleable#FloatingActionButton_rippleColor
-     * @see #getRippleColor()
-     */
-    public void setRippleColor(@ColorInt int color) {
-        if (mRippleColor != color) {
-            mRippleColor = color;
-            getImpl().setRippleColor(color);
-        }
-    }
-
-    /**
-     * Returns the tint applied to the background drawable, if specified.
-     *
-     * @return the tint applied to the background drawable
-     * @see #setBackgroundTintList(ColorStateList)
-     */
-    @Nullable
-    @Override
-    public ColorStateList getBackgroundTintList() {
-        return mBackgroundTint;
-    }
-
-    /**
-     * Applies a tint to the background drawable. Does not modify the current tint
-     * mode, which is {@link PorterDuff.Mode#SRC_IN} by default.
-     *
-     * @param tint the tint to apply, may be {@code null} to clear tint
-     */
-    @Override
-    public void setBackgroundTintList(@Nullable ColorStateList tint) {
-        if (mBackgroundTint != tint) {
-            mBackgroundTint = tint;
-            getImpl().setBackgroundTintList(tint);
-        }
-    }
-
-    /**
-     * Returns the blending mode used to apply the tint to the background
-     * drawable, if specified.
-     *
-     * @return the blending mode used to apply the tint to the background
-     *         drawable
-     * @see #setBackgroundTintMode(PorterDuff.Mode)
-     */
-    @Nullable
-    @Override
-    public PorterDuff.Mode getBackgroundTintMode() {
-        return mBackgroundTintMode;
-    }
-
-    /**
-     * Specifies the blending mode used to apply the tint specified by
-     * {@link #setBackgroundTintList(ColorStateList)}} to the background
-     * drawable. The default mode is {@link PorterDuff.Mode#SRC_IN}.
-     *
-     * @param tintMode the blending mode used to apply the tint, may be
-     *                 {@code null} to clear tint
-     */
-    @Override
-    public void setBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (mBackgroundTintMode != tintMode) {
-            mBackgroundTintMode = tintMode;
-            getImpl().setBackgroundTintMode(tintMode);
-        }
-    }
-
-    @Override
-    public void setBackgroundDrawable(Drawable background) {
-        Log.i(LOG_TAG, "Setting a custom background is not supported.");
-    }
-
-    @Override
-    public void setBackgroundResource(int resid) {
-        Log.i(LOG_TAG, "Setting a custom background is not supported.");
-    }
-
-    @Override
-    public void setBackgroundColor(int color) {
-        Log.i(LOG_TAG, "Setting a custom background is not supported.");
-    }
-
-    @Override
-    public void setImageResource(@DrawableRes int resId) {
-        // Intercept this call and instead retrieve the Drawable via the image helper
-        mImageHelper.setImageResource(resId);
-    }
-
-    /**
-     * Shows the button.
-     * <p>This method will animate the button show if the view has already been laid out.</p>
-     */
-    public void show() {
-        show(null);
-    }
-
-    /**
-     * Shows the button.
-     * <p>This method will animate the button show if the view has already been laid out.</p>
-     *
-     * @param listener the listener to notify when this view is shown
-     */
-    public void show(@Nullable final OnVisibilityChangedListener listener) {
-        show(listener, true);
-    }
-
-    void show(OnVisibilityChangedListener listener, boolean fromUser) {
-        getImpl().show(wrapOnVisibilityChangedListener(listener), fromUser);
-    }
-
-    /**
-     * Hides the button.
-     * <p>This method will animate the button hide if the view has already been laid out.</p>
-     */
-    public void hide() {
-        hide(null);
-    }
-
-    /**
-     * Hides the button.
-     * <p>This method will animate the button hide if the view has already been laid out.</p>
-     *
-     * @param listener the listener to notify when this view is hidden
-     */
-    public void hide(@Nullable OnVisibilityChangedListener listener) {
-        hide(listener, true);
-    }
-
-    void hide(@Nullable OnVisibilityChangedListener listener, boolean fromUser) {
-        getImpl().hide(wrapOnVisibilityChangedListener(listener), fromUser);
-    }
-
-    /**
-     * Set whether FloatingActionButton should add inner padding on platforms Lollipop and after,
-     * to ensure consistent dimensions on all platforms.
-     *
-     * @param useCompatPadding true if FloatingActionButton is adding inner padding on platforms
-     *                         Lollipop and after, to ensure consistent dimensions on all platforms.
-     *
-     * @attr ref android.support.design.R.styleable#FloatingActionButton_useCompatPadding
-     * @see #getUseCompatPadding()
-     */
-    public void setUseCompatPadding(boolean useCompatPadding) {
-        if (mCompatPadding != useCompatPadding) {
-            mCompatPadding = useCompatPadding;
-            getImpl().onCompatShadowChanged();
-        }
-    }
-
-    /**
-     * Returns whether FloatingActionButton will add inner padding on platforms Lollipop and after.
-     *
-     * @return true if FloatingActionButton is adding inner padding on platforms Lollipop and after,
-     * to ensure consistent dimensions on all platforms.
-     *
-     * @attr ref android.support.design.R.styleable#FloatingActionButton_useCompatPadding
-     * @see #setUseCompatPadding(boolean)
-     */
-    public boolean getUseCompatPadding() {
-        return mCompatPadding;
-    }
-
-    /**
-     * Sets the size of the button.
-     *
-     * <p>The options relate to the options available on the material design specification.
-     * {@link #SIZE_NORMAL} is larger than {@link #SIZE_MINI}. {@link #SIZE_AUTO} will choose
-     * an appropriate size based on the screen size.</p>
-     *
-     * @param size one of {@link #SIZE_NORMAL}, {@link #SIZE_MINI} or {@link #SIZE_AUTO}
-     *
-     * @attr ref android.support.design.R.styleable#FloatingActionButton_fabSize
-     */
-    public void setSize(@Size int size) {
-        if (size != mSize) {
-            mSize = size;
-            requestLayout();
-        }
-    }
-
-    /**
-     * Returns the chosen size for this button.
-     *
-     * @return one of {@link #SIZE_NORMAL}, {@link #SIZE_MINI} or {@link #SIZE_AUTO}
-     * @see #setSize(int)
-     */
-    @Size
-    public int getSize() {
-        return mSize;
-    }
-
-    @Nullable
-    private InternalVisibilityChangedListener wrapOnVisibilityChangedListener(
-            @Nullable final OnVisibilityChangedListener listener) {
-        if (listener == null) {
-            return null;
-        }
-
-        return new InternalVisibilityChangedListener() {
-            @Override
-            public void onShown() {
-                listener.onShown(FloatingActionButton.this);
-            }
-
-            @Override
-            public void onHidden() {
-                listener.onHidden(FloatingActionButton.this);
-            }
-        };
-    }
-
-    /**
-     * Sets the size of the button to be a custom value in pixels. If set to
-     * {@link #NO_CUSTOM_SIZE}, custom size will not be used and size will be calculated according
-     * to {@link #setSize(int)} method.
-     *
-     * @param size preferred size in pixels, or zero
-     *
-     * @attr ref android.support.design.R.styleable#FloatingActionButton_fabCustomSize
-     */
-    public void setCustomSize(int size) {
-        if (size < 0) {
-            throw new IllegalArgumentException("Custom size should be non-negative.");
-        }
-        mCustomSize = size;
-    }
-
-    /**
-     * Returns the custom size for this button.
-     *
-     * @return size in pixels, or {@link #NO_CUSTOM_SIZE}
-     */
-    public int getCustomSize() {
-        return mCustomSize;
-    }
-
-    int getSizeDimension() {
-        return getSizeDimension(mSize);
-    }
-
-    private int getSizeDimension(@Size final int size) {
-        final Resources res = getResources();
-        // If custom size is set, return it
-        if (mCustomSize != NO_CUSTOM_SIZE) {
-            return mCustomSize;
-        }
-        switch (size) {
-            case SIZE_AUTO:
-                // If we're set to auto, grab the size from resources and refresh
-                final int width = res.getConfiguration().screenWidthDp;
-                final int height = res.getConfiguration().screenHeightDp;
-                return Math.max(width, height) < AUTO_MINI_LARGEST_SCREEN_WIDTH
-                        ? getSizeDimension(SIZE_MINI)
-                        : getSizeDimension(SIZE_NORMAL);
-            case SIZE_MINI:
-                return res.getDimensionPixelSize(R.dimen.design_fab_size_mini);
-            case SIZE_NORMAL:
-            default:
-                return res.getDimensionPixelSize(R.dimen.design_fab_size_normal);
-        }
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        getImpl().onAttachedToWindow();
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        getImpl().onDetachedFromWindow();
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        super.drawableStateChanged();
-        getImpl().onDrawableStateChanged(getDrawableState());
-    }
-
-    @Override
-    public void jumpDrawablesToCurrentState() {
-        super.jumpDrawablesToCurrentState();
-        getImpl().jumpDrawableToCurrentState();
-    }
-
-    /**
-     * Return in {@code rect} the bounds of the actual floating action button content in view-local
-     * coordinates. This is defined as anything within any visible shadow.
-     *
-     * @return true if this view actually has been laid out and has a content rect, else false.
-     */
-    public boolean getContentRect(@NonNull Rect rect) {
-        if (ViewCompat.isLaidOut(this)) {
-            rect.set(0, 0, getWidth(), getHeight());
-            rect.left += mShadowPadding.left;
-            rect.top += mShadowPadding.top;
-            rect.right -= mShadowPadding.right;
-            rect.bottom -= mShadowPadding.bottom;
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns the FloatingActionButton's background, minus any compatible shadow implementation.
-     */
-    @NonNull
-    public Drawable getContentBackground() {
-        return getImpl().getContentBackground();
-    }
-
-    private static int resolveAdjustedSize(int desiredSize, int measureSpec) {
-        int result = desiredSize;
-        int specMode = MeasureSpec.getMode(measureSpec);
-        int specSize = MeasureSpec.getSize(measureSpec);
-        switch (specMode) {
-            case MeasureSpec.UNSPECIFIED:
-                // Parent says we can be as big as we want. Just don't be larger
-                // than max size imposed on ourselves.
-                result = desiredSize;
-                break;
-            case MeasureSpec.AT_MOST:
-                // Parent says we can be as big as we want, up to specSize.
-                // Don't be larger than specSize, and don't be larger than
-                // the max size imposed on ourselves.
-                result = Math.min(desiredSize, specSize);
-                break;
-            case MeasureSpec.EXACTLY:
-                // No choice. Do what we are told.
-                result = specSize;
-                break;
-        }
-        return result;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        switch (ev.getAction()) {
-            case MotionEvent.ACTION_DOWN:
-                // Skipping the gesture if it doesn't start in in the FAB 'content' area
-                if (getContentRect(mTouchArea)
-                        && !mTouchArea.contains((int) ev.getX(), (int) ev.getY())) {
-                    return false;
-                }
-                break;
-        }
-        return super.onTouchEvent(ev);
-    }
-
-    /**
-     * Behavior designed for use with {@link FloatingActionButton} instances. Its main function
-     * is to move {@link FloatingActionButton} views so that any displayed {@link Snackbar}s do
-     * not cover them.
-     */
-    public static class Behavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
-        private static final boolean AUTO_HIDE_DEFAULT = true;
-
-        private Rect mTmpRect;
-        private OnVisibilityChangedListener mInternalAutoHideListener;
-        private boolean mAutoHideEnabled;
-
-        public Behavior() {
-            super();
-            mAutoHideEnabled = AUTO_HIDE_DEFAULT;
-        }
-
-        public Behavior(Context context, AttributeSet attrs) {
-            super(context, attrs);
-            TypedArray a = context.obtainStyledAttributes(attrs,
-                    R.styleable.FloatingActionButton_Behavior_Layout);
-            mAutoHideEnabled = a.getBoolean(
-                    R.styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide,
-                    AUTO_HIDE_DEFAULT);
-            a.recycle();
-        }
-
-        /**
-         * Sets whether the associated FloatingActionButton automatically hides when there is
-         * not enough space to be displayed. This works with {@link AppBarLayout}
-         * and {@link BottomSheetBehavior}.
-         *
-         * @attr ref android.support.design.R.styleable#FloatingActionButton_Behavior_Layout_behavior_autoHide
-         * @param autoHide true to enable automatic hiding
-         */
-        public void setAutoHideEnabled(boolean autoHide) {
-            mAutoHideEnabled = autoHide;
-        }
-
-        /**
-         * Returns whether the associated FloatingActionButton automatically hides when there is
-         * not enough space to be displayed.
-         *
-         * @attr ref android.support.design.R.styleable#FloatingActionButton_Behavior_Layout_behavior_autoHide
-         * @return true if enabled
-         */
-        public boolean isAutoHideEnabled() {
-            return mAutoHideEnabled;
-        }
-
-        @Override
-        public void onAttachedToLayoutParams(@NonNull CoordinatorLayout.LayoutParams lp) {
-            if (lp.dodgeInsetEdges == Gravity.NO_GRAVITY) {
-                // If the developer hasn't set dodgeInsetEdges, lets set it to BOTTOM so that
-                // we dodge any Snackbars
-                lp.dodgeInsetEdges = Gravity.BOTTOM;
-            }
-        }
-
-        @Override
-        public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child,
-                View dependency) {
-            if (dependency instanceof AppBarLayout) {
-                // If we're depending on an AppBarLayout we will show/hide it automatically
-                // if the FAB is anchored to the AppBarLayout
-                updateFabVisibilityForAppBarLayout(parent, (AppBarLayout) dependency, child);
-            } else if (isBottomSheet(dependency)) {
-                updateFabVisibilityForBottomSheet(dependency, child);
-            }
-            return false;
-        }
-
-        private static boolean isBottomSheet(@NonNull View view) {
-            final ViewGroup.LayoutParams lp = view.getLayoutParams();
-            if (lp instanceof CoordinatorLayout.LayoutParams) {
-                return ((CoordinatorLayout.LayoutParams) lp)
-                        .getBehavior() instanceof BottomSheetBehavior;
-            }
-            return false;
-        }
-
-        @VisibleForTesting
-        void setInternalAutoHideListener(OnVisibilityChangedListener listener) {
-            mInternalAutoHideListener = listener;
-        }
-
-        private boolean shouldUpdateVisibility(View dependency, FloatingActionButton child) {
-            final CoordinatorLayout.LayoutParams lp =
-                    (CoordinatorLayout.LayoutParams) child.getLayoutParams();
-            if (!mAutoHideEnabled) {
-                return false;
-            }
-
-            if (lp.getAnchorId() != dependency.getId()) {
-                // The anchor ID doesn't match the dependency, so we won't automatically
-                // show/hide the FAB
-                return false;
-            }
-
-            //noinspection RedundantIfStatement
-            if (child.getUserSetVisibility() != VISIBLE) {
-                // The view isn't set to be visible so skip changing its visibility
-                return false;
-            }
-
-            return true;
-        }
-
-        private boolean updateFabVisibilityForAppBarLayout(CoordinatorLayout parent,
-                AppBarLayout appBarLayout, FloatingActionButton child) {
-            if (!shouldUpdateVisibility(appBarLayout, child)) {
-                return false;
-            }
-
-            if (mTmpRect == null) {
-                mTmpRect = new Rect();
-            }
-
-            // First, let's get the visible rect of the dependency
-            final Rect rect = mTmpRect;
-            ViewGroupUtils.getDescendantRect(parent, appBarLayout, rect);
-
-            if (rect.bottom <= appBarLayout.getMinimumHeightForVisibleOverlappingContent()) {
-                // If the anchor's bottom is below the seam, we'll animate our FAB out
-                child.hide(mInternalAutoHideListener, false);
-            } else {
-                // Else, we'll animate our FAB back in
-                child.show(mInternalAutoHideListener, false);
-            }
-            return true;
-        }
-
-        private boolean updateFabVisibilityForBottomSheet(View bottomSheet,
-                FloatingActionButton child) {
-            if (!shouldUpdateVisibility(bottomSheet, child)) {
-                return false;
-            }
-            CoordinatorLayout.LayoutParams lp =
-                    (CoordinatorLayout.LayoutParams) child.getLayoutParams();
-            if (bottomSheet.getTop() < child.getHeight() / 2 + lp.topMargin) {
-                child.hide(mInternalAutoHideListener, false);
-            } else {
-                child.show(mInternalAutoHideListener, false);
-            }
-            return true;
-        }
-
-        @Override
-        public boolean onLayoutChild(CoordinatorLayout parent, FloatingActionButton child,
-                int layoutDirection) {
-            // First, let's make sure that the visibility of the FAB is consistent
-            final List<View> dependencies = parent.getDependencies(child);
-            for (int i = 0, count = dependencies.size(); i < count; i++) {
-                final View dependency = dependencies.get(i);
-                if (dependency instanceof AppBarLayout) {
-                    if (updateFabVisibilityForAppBarLayout(
-                            parent, (AppBarLayout) dependency, child)) {
-                        break;
-                    }
-                } else if (isBottomSheet(dependency)) {
-                    if (updateFabVisibilityForBottomSheet(dependency, child)) {
-                        break;
-                    }
-                }
-            }
-            // Now let the CoordinatorLayout lay out the FAB
-            parent.onLayoutChild(child, layoutDirection);
-            // Now offset it if needed
-            offsetIfNeeded(parent, child);
-            return true;
-        }
-
-        @Override
-        public boolean getInsetDodgeRect(@NonNull CoordinatorLayout parent,
-                @NonNull FloatingActionButton child, @NonNull Rect rect) {
-            // Since we offset so that any internal shadow padding isn't shown, we need to make
-            // sure that the shadow isn't used for any dodge inset calculations
-            final Rect shadowPadding = child.mShadowPadding;
-            rect.set(child.getLeft() + shadowPadding.left,
-                    child.getTop() + shadowPadding.top,
-                    child.getRight() - shadowPadding.right,
-                    child.getBottom() - shadowPadding.bottom);
-            return true;
-        }
-
-        /**
-         * Pre-Lollipop we use padding so that the shadow has enough space to be drawn. This method
-         * offsets our layout position so that we're positioned correctly if we're on one of
-         * our parent's edges.
-         */
-        private void offsetIfNeeded(CoordinatorLayout parent, FloatingActionButton fab) {
-            final Rect padding = fab.mShadowPadding;
-
-            if (padding != null && padding.centerX() > 0 && padding.centerY() > 0) {
-                final CoordinatorLayout.LayoutParams lp =
-                        (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
-
-                int offsetTB = 0, offsetLR = 0;
-
-                if (fab.getRight() >= parent.getWidth() - lp.rightMargin) {
-                    // If we're on the right edge, shift it the right
-                    offsetLR = padding.right;
-                } else if (fab.getLeft() <= lp.leftMargin) {
-                    // If we're on the left edge, shift it the left
-                    offsetLR = -padding.left;
-                }
-                if (fab.getBottom() >= parent.getHeight() - lp.bottomMargin) {
-                    // If we're on the bottom edge, shift it down
-                    offsetTB = padding.bottom;
-                } else if (fab.getTop() <= lp.topMargin) {
-                    // If we're on the top edge, shift it up
-                    offsetTB = -padding.top;
-                }
-
-                if (offsetTB != 0) {
-                    ViewCompat.offsetTopAndBottom(fab, offsetTB);
-                }
-                if (offsetLR != 0) {
-                    ViewCompat.offsetLeftAndRight(fab, offsetLR);
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the backward compatible elevation of the FloatingActionButton.
-     *
-     * @return the backward compatible elevation in pixels.
-     * @attr ref android.support.design.R.styleable#FloatingActionButton_elevation
-     * @see #setCompatElevation(float)
-     */
-    public float getCompatElevation() {
-        return getImpl().getElevation();
-    }
-
-    /**
-     * Updates the backward compatible elevation of the FloatingActionButton.
-     *
-     * @param elevation The backward compatible elevation in pixels.
-     * @attr ref android.support.design.R.styleable#FloatingActionButton_elevation
-     * @see #getCompatElevation()
-     * @see #setUseCompatPadding(boolean)
-     */
-    public void setCompatElevation(float elevation) {
-        getImpl().setElevation(elevation);
-    }
-
-    private FloatingActionButtonImpl getImpl() {
-        if (mImpl == null) {
-            mImpl = createImpl();
-        }
-        return mImpl;
-    }
-
-    private FloatingActionButtonImpl createImpl() {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            return new FloatingActionButtonLollipop(this, new ShadowDelegateImpl());
-        } else {
-            return new FloatingActionButtonImpl(this, new ShadowDelegateImpl());
-        }
-    }
-
-    private class ShadowDelegateImpl implements ShadowViewDelegate {
-        ShadowDelegateImpl() {
-        }
-
-        @Override
-        public float getRadius() {
-            return getSizeDimension() / 2f;
-        }
-
-        @Override
-        public void setShadowPadding(int left, int top, int right, int bottom) {
-            mShadowPadding.set(left, top, right, bottom);
-            setPadding(left + mImagePadding, top + mImagePadding,
-                    right + mImagePadding, bottom + mImagePadding);
-        }
-
-        @Override
-        public void setBackgroundDrawable(Drawable background) {
-            FloatingActionButton.super.setBackgroundDrawable(background);
-        }
-
-        @Override
-        public boolean isCompatPaddingEnabled() {
-            return mCompatPadding;
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/HeaderBehavior.java b/design/src/android/support/design/widget/HeaderBehavior.java
deleted file mode 100644
index a5d0edf..0000000
--- a/design/src/android/support/design/widget/HeaderBehavior.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.support.design.widget.CoordinatorLayout.Behavior;
-import android.support.v4.math.MathUtils;
-import android.support.v4.view.ViewCompat;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.widget.OverScroller;
-
-/**
- * The {@link Behavior} for a view that sits vertically above scrolling a view.
- * See {@link HeaderScrollingViewBehavior}.
- */
-abstract class HeaderBehavior<V extends View> extends ViewOffsetBehavior<V> {
-
-    private static final int INVALID_POINTER = -1;
-
-    private Runnable mFlingRunnable;
-    OverScroller mScroller;
-
-    private boolean mIsBeingDragged;
-    private int mActivePointerId = INVALID_POINTER;
-    private int mLastMotionY;
-    private int mTouchSlop = -1;
-    private VelocityTracker mVelocityTracker;
-
-    public HeaderBehavior() {}
-
-    public HeaderBehavior(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent ev) {
-        if (mTouchSlop < 0) {
-            mTouchSlop = ViewConfiguration.get(parent.getContext()).getScaledTouchSlop();
-        }
-
-        final int action = ev.getAction();
-
-        // Shortcut since we're being dragged
-        if (action == MotionEvent.ACTION_MOVE && mIsBeingDragged) {
-            return true;
-        }
-
-        switch (ev.getActionMasked()) {
-            case MotionEvent.ACTION_DOWN: {
-                mIsBeingDragged = false;
-                final int x = (int) ev.getX();
-                final int y = (int) ev.getY();
-                if (canDragView(child) && parent.isPointInChildBounds(child, x, y)) {
-                    mLastMotionY = y;
-                    mActivePointerId = ev.getPointerId(0);
-                    ensureVelocityTracker();
-                }
-                break;
-            }
-
-            case MotionEvent.ACTION_MOVE: {
-                final int activePointerId = mActivePointerId;
-                if (activePointerId == INVALID_POINTER) {
-                    // If we don't have a valid id, the touch down wasn't on content.
-                    break;
-                }
-                final int pointerIndex = ev.findPointerIndex(activePointerId);
-                if (pointerIndex == -1) {
-                    break;
-                }
-
-                final int y = (int) ev.getY(pointerIndex);
-                final int yDiff = Math.abs(y - mLastMotionY);
-                if (yDiff > mTouchSlop) {
-                    mIsBeingDragged = true;
-                    mLastMotionY = y;
-                }
-                break;
-            }
-
-            case MotionEvent.ACTION_CANCEL:
-            case MotionEvent.ACTION_UP: {
-                mIsBeingDragged = false;
-                mActivePointerId = INVALID_POINTER;
-                if (mVelocityTracker != null) {
-                    mVelocityTracker.recycle();
-                    mVelocityTracker = null;
-                }
-                break;
-            }
-        }
-
-        if (mVelocityTracker != null) {
-            mVelocityTracker.addMovement(ev);
-        }
-
-        return mIsBeingDragged;
-    }
-
-    @Override
-    public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent ev) {
-        if (mTouchSlop < 0) {
-            mTouchSlop = ViewConfiguration.get(parent.getContext()).getScaledTouchSlop();
-        }
-
-        switch (ev.getActionMasked()) {
-            case MotionEvent.ACTION_DOWN: {
-                final int x = (int) ev.getX();
-                final int y = (int) ev.getY();
-
-                if (parent.isPointInChildBounds(child, x, y) && canDragView(child)) {
-                    mLastMotionY = y;
-                    mActivePointerId = ev.getPointerId(0);
-                    ensureVelocityTracker();
-                } else {
-                    return false;
-                }
-                break;
-            }
-
-            case MotionEvent.ACTION_MOVE: {
-                final int activePointerIndex = ev.findPointerIndex(mActivePointerId);
-                if (activePointerIndex == -1) {
-                    return false;
-                }
-
-                final int y = (int) ev.getY(activePointerIndex);
-                int dy = mLastMotionY - y;
-
-                if (!mIsBeingDragged && Math.abs(dy) > mTouchSlop) {
-                    mIsBeingDragged = true;
-                    if (dy > 0) {
-                        dy -= mTouchSlop;
-                    } else {
-                        dy += mTouchSlop;
-                    }
-                }
-
-                if (mIsBeingDragged) {
-                    mLastMotionY = y;
-                    // We're being dragged so scroll the ABL
-                    scroll(parent, child, dy, getMaxDragOffset(child), 0);
-                }
-                break;
-            }
-
-            case MotionEvent.ACTION_UP:
-                if (mVelocityTracker != null) {
-                    mVelocityTracker.addMovement(ev);
-                    mVelocityTracker.computeCurrentVelocity(1000);
-                    float yvel = mVelocityTracker.getYVelocity(mActivePointerId);
-                    fling(parent, child, -getScrollRangeForDragFling(child), 0, yvel);
-                }
-                // $FALLTHROUGH
-            case MotionEvent.ACTION_CANCEL: {
-                mIsBeingDragged = false;
-                mActivePointerId = INVALID_POINTER;
-                if (mVelocityTracker != null) {
-                    mVelocityTracker.recycle();
-                    mVelocityTracker = null;
-                }
-                break;
-            }
-        }
-
-        if (mVelocityTracker != null) {
-            mVelocityTracker.addMovement(ev);
-        }
-
-        return true;
-    }
-
-    int setHeaderTopBottomOffset(CoordinatorLayout parent, V header, int newOffset) {
-        return setHeaderTopBottomOffset(parent, header, newOffset,
-                Integer.MIN_VALUE, Integer.MAX_VALUE);
-    }
-
-    int setHeaderTopBottomOffset(CoordinatorLayout parent, V header, int newOffset,
-            int minOffset, int maxOffset) {
-        final int curOffset = getTopAndBottomOffset();
-        int consumed = 0;
-
-        if (minOffset != 0 && curOffset >= minOffset && curOffset <= maxOffset) {
-            // If we have some scrolling range, and we're currently within the min and max
-            // offsets, calculate a new offset
-            newOffset = MathUtils.clamp(newOffset, minOffset, maxOffset);
-
-            if (curOffset != newOffset) {
-                setTopAndBottomOffset(newOffset);
-                // Update how much dy we have consumed
-                consumed = curOffset - newOffset;
-            }
-        }
-
-        return consumed;
-    }
-
-    int getTopBottomOffsetForScrollingSibling() {
-        return getTopAndBottomOffset();
-    }
-
-    final int scroll(CoordinatorLayout coordinatorLayout, V header,
-            int dy, int minOffset, int maxOffset) {
-        return setHeaderTopBottomOffset(coordinatorLayout, header,
-                getTopBottomOffsetForScrollingSibling() - dy, minOffset, maxOffset);
-    }
-
-    final boolean fling(CoordinatorLayout coordinatorLayout, V layout, int minOffset,
-            int maxOffset, float velocityY) {
-        if (mFlingRunnable != null) {
-            layout.removeCallbacks(mFlingRunnable);
-            mFlingRunnable = null;
-        }
-
-        if (mScroller == null) {
-            mScroller = new OverScroller(layout.getContext());
-        }
-
-        mScroller.fling(
-                0, getTopAndBottomOffset(), // curr
-                0, Math.round(velocityY), // velocity.
-                0, 0, // x
-                minOffset, maxOffset); // y
-
-        if (mScroller.computeScrollOffset()) {
-            mFlingRunnable = new FlingRunnable(coordinatorLayout, layout);
-            ViewCompat.postOnAnimation(layout, mFlingRunnable);
-            return true;
-        } else {
-            onFlingFinished(coordinatorLayout, layout);
-            return false;
-        }
-    }
-
-    /**
-     * Called when a fling has finished, or the fling was initiated but there wasn't enough
-     * velocity to start it.
-     */
-    void onFlingFinished(CoordinatorLayout parent, V layout) {
-        // no-op
-    }
-
-    /**
-     * Return true if the view can be dragged.
-     */
-    boolean canDragView(V view) {
-        return false;
-    }
-
-    /**
-     * Returns the maximum px offset when {@code view} is being dragged.
-     */
-    int getMaxDragOffset(V view) {
-        return -view.getHeight();
-    }
-
-    int getScrollRangeForDragFling(V view) {
-        return view.getHeight();
-    }
-
-    private void ensureVelocityTracker() {
-        if (mVelocityTracker == null) {
-            mVelocityTracker = VelocityTracker.obtain();
-        }
-    }
-
-    private class FlingRunnable implements Runnable {
-        private final CoordinatorLayout mParent;
-        private final V mLayout;
-
-        FlingRunnable(CoordinatorLayout parent, V layout) {
-            mParent = parent;
-            mLayout = layout;
-        }
-
-        @Override
-        public void run() {
-            if (mLayout != null && mScroller != null) {
-                if (mScroller.computeScrollOffset()) {
-                    setHeaderTopBottomOffset(mParent, mLayout, mScroller.getCurrY());
-                    // Post ourselves so that we run on the next animation
-                    ViewCompat.postOnAnimation(mLayout, this);
-                } else {
-                    onFlingFinished(mParent, mLayout);
-                }
-            }
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/HeaderScrollingViewBehavior.java b/design/src/android/support/design/widget/HeaderScrollingViewBehavior.java
deleted file mode 100644
index 81ddde5..0000000
--- a/design/src/android/support/design/widget/HeaderScrollingViewBehavior.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.support.design.widget.CoordinatorLayout.Behavior;
-import android.support.v4.math.MathUtils;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.WindowInsetsCompat;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-
-import java.util.List;
-
-/**
- * The {@link Behavior} for a scrolling view that is positioned vertically below another view.
- * See {@link HeaderBehavior}.
- */
-abstract class HeaderScrollingViewBehavior extends ViewOffsetBehavior<View> {
-
-    final Rect mTempRect1 = new Rect();
-    final Rect mTempRect2 = new Rect();
-
-    private int mVerticalLayoutGap = 0;
-    private int mOverlayTop;
-
-    public HeaderScrollingViewBehavior() {}
-
-    public HeaderScrollingViewBehavior(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public boolean onMeasureChild(CoordinatorLayout parent, View child,
-            int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec,
-            int heightUsed) {
-        final int childLpHeight = child.getLayoutParams().height;
-        if (childLpHeight == ViewGroup.LayoutParams.MATCH_PARENT
-                || childLpHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {
-            // If the menu's height is set to match_parent/wrap_content then measure it
-            // with the maximum visible height
-
-            final List<View> dependencies = parent.getDependencies(child);
-            final View header = findFirstDependency(dependencies);
-            if (header != null) {
-                if (ViewCompat.getFitsSystemWindows(header)
-                        && !ViewCompat.getFitsSystemWindows(child)) {
-                    // If the header is fitting system windows then we need to also,
-                    // otherwise we'll get CoL's compatible measuring
-                    ViewCompat.setFitsSystemWindows(child, true);
-
-                    if (ViewCompat.getFitsSystemWindows(child)) {
-                        // If the set succeeded, trigger a new layout and return true
-                        child.requestLayout();
-                        return true;
-                    }
-                }
-
-                int availableHeight = View.MeasureSpec.getSize(parentHeightMeasureSpec);
-                if (availableHeight == 0) {
-                    // If the measure spec doesn't specify a size, use the current height
-                    availableHeight = parent.getHeight();
-                }
-
-                final int height = availableHeight - header.getMeasuredHeight()
-                        + getScrollRange(header);
-                final int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(height,
-                        childLpHeight == ViewGroup.LayoutParams.MATCH_PARENT
-                                ? View.MeasureSpec.EXACTLY
-                                : View.MeasureSpec.AT_MOST);
-
-                // Now measure the scrolling view with the correct height
-                parent.onMeasureChild(child, parentWidthMeasureSpec,
-                        widthUsed, heightMeasureSpec, heightUsed);
-
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    protected void layoutChild(final CoordinatorLayout parent, final View child,
-            final int layoutDirection) {
-        final List<View> dependencies = parent.getDependencies(child);
-        final View header = findFirstDependency(dependencies);
-
-        if (header != null) {
-            final CoordinatorLayout.LayoutParams lp =
-                    (CoordinatorLayout.LayoutParams) child.getLayoutParams();
-            final Rect available = mTempRect1;
-            available.set(parent.getPaddingLeft() + lp.leftMargin,
-                    header.getBottom() + lp.topMargin,
-                    parent.getWidth() - parent.getPaddingRight() - lp.rightMargin,
-                    parent.getHeight() + header.getBottom()
-                            - parent.getPaddingBottom() - lp.bottomMargin);
-
-            final WindowInsetsCompat parentInsets = parent.getLastWindowInsets();
-            if (parentInsets != null && ViewCompat.getFitsSystemWindows(parent)
-                    && !ViewCompat.getFitsSystemWindows(child)) {
-                // If we're set to handle insets but this child isn't, then it has been measured as
-                // if there are no insets. We need to lay it out to match horizontally.
-                // Top and bottom and already handled in the logic above
-                available.left += parentInsets.getSystemWindowInsetLeft();
-                available.right -= parentInsets.getSystemWindowInsetRight();
-            }
-
-            final Rect out = mTempRect2;
-            GravityCompat.apply(resolveGravity(lp.gravity), child.getMeasuredWidth(),
-                    child.getMeasuredHeight(), available, out, layoutDirection);
-
-            final int overlap = getOverlapPixelsForOffset(header);
-
-            child.layout(out.left, out.top - overlap, out.right, out.bottom - overlap);
-            mVerticalLayoutGap = out.top - header.getBottom();
-        } else {
-            // If we don't have a dependency, let super handle it
-            super.layoutChild(parent, child, layoutDirection);
-            mVerticalLayoutGap = 0;
-        }
-    }
-
-    float getOverlapRatioForOffset(final View header) {
-        return 1f;
-    }
-
-    final int getOverlapPixelsForOffset(final View header) {
-        return mOverlayTop == 0 ? 0 : MathUtils.clamp(
-                (int) (getOverlapRatioForOffset(header) * mOverlayTop), 0, mOverlayTop);
-    }
-
-    private static int resolveGravity(int gravity) {
-        return gravity == Gravity.NO_GRAVITY ? GravityCompat.START | Gravity.TOP : gravity;
-    }
-
-    abstract View findFirstDependency(List<View> views);
-
-    int getScrollRange(View v) {
-        return v.getMeasuredHeight();
-    }
-
-    /**
-     * The gap between the top of the scrolling view and the bottom of the header layout in pixels.
-     */
-    final int getVerticalLayoutGap() {
-        return mVerticalLayoutGap;
-    }
-
-    /**
-     * Set the distance that this view should overlap any {@link AppBarLayout}.
-     *
-     * @param overlayTop the distance in px
-     */
-    public final void setOverlayTop(int overlayTop) {
-        mOverlayTop = overlayTop;
-    }
-
-    /**
-     * Returns the distance that this view should overlap any {@link AppBarLayout}.
-     */
-    public final int getOverlayTop() {
-        return mOverlayTop;
-    }
-}
\ No newline at end of file
diff --git a/design/src/android/support/design/widget/NavigationView.java b/design/src/android/support/design/widget/NavigationView.java
deleted file mode 100644
index 8fc8c76..0000000
--- a/design/src/android/support/design/widget/NavigationView.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.StyleRes;
-import android.support.design.R;
-import android.support.design.internal.NavigationMenu;
-import android.support.design.internal.NavigationMenuPresenter;
-import android.support.design.internal.ScrimInsetsFrameLayout;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.AbsSavedState;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.WindowInsetsCompat;
-import android.support.v7.content.res.AppCompatResources;
-import android.support.v7.view.SupportMenuInflater;
-import android.support.v7.view.menu.MenuBuilder;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.support.v7.widget.TintTypedArray;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-
-/**
- * Represents a standard navigation menu for application. The menu contents can be populated
- * by a menu resource file.
- * <p>NavigationView is typically placed inside a {@link android.support.v4.widget.DrawerLayout}.
- * </p>
- * <pre>
- * &lt;android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
- *     xmlns:app="http://schemas.android.com/apk/res-auto"
- *     android:id="@+id/drawer_layout"
- *     android:layout_width="match_parent"
- *     android:layout_height="match_parent"
- *     android:fitsSystemWindows="true"&gt;
- *
- *     &lt;!-- Your contents --&gt;
- *
- *     &lt;android.support.design.widget.NavigationView
- *         android:id="@+id/navigation"
- *         android:layout_width="wrap_content"
- *         android:layout_height="match_parent"
- *         android:layout_gravity="start"
- *         app:menu="@menu/my_navigation_items" /&gt;
- * &lt;/android.support.v4.widget.DrawerLayout&gt;
- * </pre>
- */
-public class NavigationView extends ScrimInsetsFrameLayout {
-
-    private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
-    private static final int[] DISABLED_STATE_SET = {-android.R.attr.state_enabled};
-
-    private static final int PRESENTER_NAVIGATION_VIEW_ID = 1;
-
-    private final NavigationMenu mMenu;
-    private final NavigationMenuPresenter mPresenter = new NavigationMenuPresenter();
-
-    OnNavigationItemSelectedListener mListener;
-    private int mMaxWidth;
-
-    private MenuInflater mMenuInflater;
-
-    public NavigationView(Context context) {
-        this(context, null);
-    }
-
-    public NavigationView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public NavigationView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        ThemeUtils.checkAppCompatTheme(context);
-
-        // Create the menu
-        mMenu = new NavigationMenu(context);
-
-        // Custom attributes
-        TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
-                R.styleable.NavigationView, defStyleAttr,
-                R.style.Widget_Design_NavigationView);
-
-        ViewCompat.setBackground(
-                this, a.getDrawable(R.styleable.NavigationView_android_background));
-        if (a.hasValue(R.styleable.NavigationView_elevation)) {
-            ViewCompat.setElevation(this, a.getDimensionPixelSize(
-                    R.styleable.NavigationView_elevation, 0));
-        }
-        ViewCompat.setFitsSystemWindows(this,
-                a.getBoolean(R.styleable.NavigationView_android_fitsSystemWindows, false));
-
-        mMaxWidth = a.getDimensionPixelSize(R.styleable.NavigationView_android_maxWidth, 0);
-
-        final ColorStateList itemIconTint;
-        if (a.hasValue(R.styleable.NavigationView_itemIconTint)) {
-            itemIconTint = a.getColorStateList(R.styleable.NavigationView_itemIconTint);
-        } else {
-            itemIconTint = createDefaultColorStateList(android.R.attr.textColorSecondary);
-        }
-
-        boolean textAppearanceSet = false;
-        int textAppearance = 0;
-        if (a.hasValue(R.styleable.NavigationView_itemTextAppearance)) {
-            textAppearance = a.getResourceId(R.styleable.NavigationView_itemTextAppearance, 0);
-            textAppearanceSet = true;
-        }
-
-        ColorStateList itemTextColor = null;
-        if (a.hasValue(R.styleable.NavigationView_itemTextColor)) {
-            itemTextColor = a.getColorStateList(R.styleable.NavigationView_itemTextColor);
-        }
-
-        if (!textAppearanceSet && itemTextColor == null) {
-            // If there isn't a text appearance set, we'll use a default text color
-            itemTextColor = createDefaultColorStateList(android.R.attr.textColorPrimary);
-        }
-
-        final Drawable itemBackground = a.getDrawable(R.styleable.NavigationView_itemBackground);
-
-        mMenu.setCallback(new MenuBuilder.Callback() {
-            @Override
-            public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
-                return mListener != null && mListener.onNavigationItemSelected(item);
-            }
-
-            @Override
-            public void onMenuModeChange(MenuBuilder menu) {}
-        });
-        mPresenter.setId(PRESENTER_NAVIGATION_VIEW_ID);
-        mPresenter.initForMenu(context, mMenu);
-        mPresenter.setItemIconTintList(itemIconTint);
-        if (textAppearanceSet) {
-            mPresenter.setItemTextAppearance(textAppearance);
-        }
-        mPresenter.setItemTextColor(itemTextColor);
-        mPresenter.setItemBackground(itemBackground);
-        mMenu.addMenuPresenter(mPresenter);
-        addView((View) mPresenter.getMenuView(this));
-
-        if (a.hasValue(R.styleable.NavigationView_menu)) {
-            inflateMenu(a.getResourceId(R.styleable.NavigationView_menu, 0));
-        }
-
-        if (a.hasValue(R.styleable.NavigationView_headerLayout)) {
-            inflateHeaderView(a.getResourceId(R.styleable.NavigationView_headerLayout, 0));
-        }
-
-        a.recycle();
-    }
-
-    @Override
-    protected Parcelable onSaveInstanceState() {
-        Parcelable superState = super.onSaveInstanceState();
-        SavedState state = new SavedState(superState);
-        state.menuState = new Bundle();
-        mMenu.savePresenterStates(state.menuState);
-        return state;
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Parcelable savedState) {
-        if (!(savedState instanceof SavedState)) {
-            super.onRestoreInstanceState(savedState);
-            return;
-        }
-        SavedState state = (SavedState) savedState;
-        super.onRestoreInstanceState(state.getSuperState());
-        mMenu.restorePresenterStates(state.menuState);
-    }
-
-    /**
-     * Set a listener that will be notified when a menu item is selected.
-     *
-     * @param listener The listener to notify
-     */
-    public void setNavigationItemSelectedListener(
-            @Nullable OnNavigationItemSelectedListener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    protected void onMeasure(int widthSpec, int heightSpec) {
-        switch (MeasureSpec.getMode(widthSpec)) {
-            case MeasureSpec.EXACTLY:
-                // Nothing to do
-                break;
-            case MeasureSpec.AT_MOST:
-                widthSpec = MeasureSpec.makeMeasureSpec(
-                        Math.min(MeasureSpec.getSize(widthSpec), mMaxWidth), MeasureSpec.EXACTLY);
-                break;
-            case MeasureSpec.UNSPECIFIED:
-                widthSpec = MeasureSpec.makeMeasureSpec(mMaxWidth, MeasureSpec.EXACTLY);
-                break;
-        }
-        // Let super sort out the height
-        super.onMeasure(widthSpec, heightSpec);
-    }
-
-    /**
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    @Override
-    protected void onInsetsChanged(WindowInsetsCompat insets) {
-        mPresenter.dispatchApplyWindowInsets(insets);
-    }
-
-    /**
-     * Inflate a menu resource into this navigation view.
-     *
-     * <p>Existing items in the menu will not be modified or removed.</p>
-     *
-     * @param resId ID of a menu resource to inflate
-     */
-    public void inflateMenu(int resId) {
-        mPresenter.setUpdateSuspended(true);
-        getMenuInflater().inflate(resId, mMenu);
-        mPresenter.setUpdateSuspended(false);
-        mPresenter.updateMenuView(false);
-    }
-
-    /**
-     * Returns the {@link Menu} instance associated with this navigation view.
-     */
-    public Menu getMenu() {
-        return mMenu;
-    }
-
-    /**
-     * Inflates a View and add it as a header of the navigation menu.
-     *
-     * @param res The layout resource ID.
-     * @return a newly inflated View.
-     */
-    public View inflateHeaderView(@LayoutRes int res) {
-        return mPresenter.inflateHeaderView(res);
-    }
-
-    /**
-     * Adds a View as a header of the navigation menu.
-     *
-     * @param view The view to be added as a header of the navigation menu.
-     */
-    public void addHeaderView(@NonNull View view) {
-        mPresenter.addHeaderView(view);
-    }
-
-    /**
-     * Removes a previously-added header view.
-     *
-     * @param view The view to remove
-     */
-    public void removeHeaderView(@NonNull View view) {
-        mPresenter.removeHeaderView(view);
-    }
-
-    /**
-     * Gets the number of headers in this NavigationView.
-     *
-     * @return A positive integer representing the number of headers.
-     */
-    public int getHeaderCount() {
-        return mPresenter.getHeaderCount();
-    }
-
-    /**
-     * Gets the header view at the specified position.
-     *
-     * @param index The position at which to get the view from.
-     * @return The header view the specified position or null if the position does not exist in this
-     * NavigationView.
-     */
-    public View getHeaderView(int index) {
-        return mPresenter.getHeaderView(index);
-    }
-
-    /**
-     * Returns the tint which is applied to our menu items' icons.
-     *
-     * @see #setItemIconTintList(ColorStateList)
-     *
-     * @attr ref R.styleable#NavigationView_itemIconTint
-     */
-    @Nullable
-    public ColorStateList getItemIconTintList() {
-        return mPresenter.getItemTintList();
-    }
-
-    /**
-     * Set the tint which is applied to our menu items' icons.
-     *
-     * @param tint the tint to apply.
-     *
-     * @attr ref R.styleable#NavigationView_itemIconTint
-     */
-    public void setItemIconTintList(@Nullable ColorStateList tint) {
-        mPresenter.setItemIconTintList(tint);
-    }
-
-    /**
-     * Returns the tint which is applied to our menu items' icons.
-     *
-     * @see #setItemTextColor(ColorStateList)
-     *
-     * @attr ref R.styleable#NavigationView_itemTextColor
-     */
-    @Nullable
-    public ColorStateList getItemTextColor() {
-        return mPresenter.getItemTextColor();
-    }
-
-    /**
-     * Set the text color to be used on our menu items.
-     *
-     * @see #getItemTextColor()
-     *
-     * @attr ref R.styleable#NavigationView_itemTextColor
-     */
-    public void setItemTextColor(@Nullable ColorStateList textColor) {
-        mPresenter.setItemTextColor(textColor);
-    }
-
-    /**
-     * Returns the background drawable for our menu items.
-     *
-     * @see #setItemBackgroundResource(int)
-     *
-     * @attr ref R.styleable#NavigationView_itemBackground
-     */
-    @Nullable
-    public Drawable getItemBackground() {
-        return mPresenter.getItemBackground();
-    }
-
-    /**
-     * Set the background of our menu items to the given resource.
-     *
-     * @param resId The identifier of the resource.
-     *
-     * @attr ref R.styleable#NavigationView_itemBackground
-     */
-    public void setItemBackgroundResource(@DrawableRes int resId) {
-        setItemBackground(ContextCompat.getDrawable(getContext(), resId));
-    }
-
-    /**
-     * Set the background of our menu items to a given resource. The resource should refer to
-     * a Drawable object or null to use the default background set on this navigation menu.
-     *
-     * @attr ref R.styleable#NavigationView_itemBackground
-     */
-    public void setItemBackground(@Nullable Drawable itemBackground) {
-        mPresenter.setItemBackground(itemBackground);
-    }
-
-    /**
-     * Sets the currently checked item in this navigation menu.
-     *
-     * @param id The item ID of the currently checked item.
-     */
-    public void setCheckedItem(@IdRes int id) {
-        MenuItem item = mMenu.findItem(id);
-        if (item != null) {
-            mPresenter.setCheckedItem((MenuItemImpl) item);
-        }
-    }
-
-    /**
-     * Set the text appearance of the menu items to a given resource.
-     *
-     * @attr ref R.styleable#NavigationView_itemTextAppearance
-     */
-    public void setItemTextAppearance(@StyleRes int resId) {
-        mPresenter.setItemTextAppearance(resId);
-    }
-
-    private MenuInflater getMenuInflater() {
-        if (mMenuInflater == null) {
-            mMenuInflater = new SupportMenuInflater(getContext());
-        }
-        return mMenuInflater;
-    }
-
-    private ColorStateList createDefaultColorStateList(int baseColorThemeAttr) {
-        final TypedValue value = new TypedValue();
-        if (!getContext().getTheme().resolveAttribute(baseColorThemeAttr, value, true)) {
-            return null;
-        }
-        ColorStateList baseColor = AppCompatResources.getColorStateList(
-                getContext(), value.resourceId);
-        if (!getContext().getTheme().resolveAttribute(
-                    android.support.v7.appcompat.R.attr.colorPrimary, value, true)) {
-            return null;
-        }
-        int colorPrimary = value.data;
-        int defaultColor = baseColor.getDefaultColor();
-        return new ColorStateList(new int[][]{
-                DISABLED_STATE_SET,
-                CHECKED_STATE_SET,
-                EMPTY_STATE_SET
-        }, new int[]{
-                baseColor.getColorForState(DISABLED_STATE_SET, defaultColor),
-                colorPrimary,
-                defaultColor
-        });
-    }
-
-    /**
-     * Listener for handling events on navigation items.
-     */
-    public interface OnNavigationItemSelectedListener {
-
-        /**
-         * Called when an item in the navigation menu is selected.
-         *
-         * @param item The selected item
-         *
-         * @return true to display the item as the selected item
-         */
-        public boolean onNavigationItemSelected(@NonNull MenuItem item);
-    }
-
-    /**
-     * User interface state that is stored by NavigationView for implementing
-     * onSaveInstanceState().
-     */
-    public static class SavedState extends AbsSavedState {
-        public Bundle menuState;
-
-        public SavedState(Parcel in, ClassLoader loader) {
-            super(in, loader);
-            menuState = in.readBundle(loader);
-        }
-
-        public SavedState(Parcelable superState) {
-            super(superState);
-        }
-
-        @Override
-        public void writeToParcel(@NonNull Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeBundle(menuState);
-        }
-
-        public static final Creator<SavedState> CREATOR = new ClassLoaderCreator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(Parcel in, ClassLoader loader) {
-                return new SavedState(in, loader);
-            }
-
-            @Override
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in, null);
-            }
-
-            @Override
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-
-}
diff --git a/design/src/android/support/design/widget/Snackbar.java b/design/src/android/support/design/widget/Snackbar.java
deleted file mode 100644
index bd5ffba..0000000
--- a/design/src/android/support/design/widget/Snackbar.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.StringRes;
-import android.support.design.R;
-import android.support.design.internal.SnackbarContentLayout;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-/**
- * Snackbars provide lightweight feedback about an operation. They show a brief message at the
- * bottom of the screen on mobile and lower left on larger devices. Snackbars appear above all other
- * elements on screen and only one can be displayed at a time.
- * <p>
- * They automatically disappear after a timeout or after user interaction elsewhere on the screen,
- * particularly after interactions that summon a new surface or activity. Snackbars can be swiped
- * off screen.
- * <p>
- * Snackbars can contain an action which is set via
- * {@link #setAction(CharSequence, android.view.View.OnClickListener)}.
- * <p>
- * To be notified when a snackbar has been shown or dismissed, you can provide a {@link Callback}
- * via {@link BaseTransientBottomBar#addCallback(BaseCallback)}.</p>
- */
-public final class Snackbar extends BaseTransientBottomBar<Snackbar> {
-
-    /**
-     * Show the Snackbar indefinitely. This means that the Snackbar will be displayed from the time
-     * that is {@link #show() shown} until either it is dismissed, or another Snackbar is shown.
-     *
-     * @see #setDuration
-     */
-    public static final int LENGTH_INDEFINITE = BaseTransientBottomBar.LENGTH_INDEFINITE;
-
-    /**
-     * Show the Snackbar for a short period of time.
-     *
-     * @see #setDuration
-     */
-    public static final int LENGTH_SHORT = BaseTransientBottomBar.LENGTH_SHORT;
-
-    /**
-     * Show the Snackbar for a long period of time.
-     *
-     * @see #setDuration
-     */
-    public static final int LENGTH_LONG = BaseTransientBottomBar.LENGTH_LONG;
-
-    /**
-     * Callback class for {@link Snackbar} instances.
-     *
-     * Note: this class is here to provide backwards-compatible way for apps written before
-     * the existence of the base {@link BaseTransientBottomBar} class.
-     *
-     * @see BaseTransientBottomBar#addCallback(BaseCallback)
-     */
-    public static class Callback extends BaseCallback<Snackbar> {
-        /** Indicates that the Snackbar was dismissed via a swipe.*/
-        public static final int DISMISS_EVENT_SWIPE = BaseCallback.DISMISS_EVENT_SWIPE;
-        /** Indicates that the Snackbar was dismissed via an action click.*/
-        public static final int DISMISS_EVENT_ACTION = BaseCallback.DISMISS_EVENT_ACTION;
-        /** Indicates that the Snackbar was dismissed via a timeout.*/
-        public static final int DISMISS_EVENT_TIMEOUT = BaseCallback.DISMISS_EVENT_TIMEOUT;
-        /** Indicates that the Snackbar was dismissed via a call to {@link #dismiss()}.*/
-        public static final int DISMISS_EVENT_MANUAL = BaseCallback.DISMISS_EVENT_MANUAL;
-        /** Indicates that the Snackbar was dismissed from a new Snackbar being shown.*/
-        public static final int DISMISS_EVENT_CONSECUTIVE = BaseCallback.DISMISS_EVENT_CONSECUTIVE;
-
-        @Override
-        public void onShown(Snackbar sb) {
-            // Stub implementation to make API check happy.
-        }
-
-        @Override
-        public void onDismissed(Snackbar transientBottomBar, @DismissEvent int event) {
-            // Stub implementation to make API check happy.
-        }
-    }
-
-    @Nullable private BaseCallback<Snackbar> mCallback;
-
-    private Snackbar(ViewGroup parent, View content, ContentViewCallback contentViewCallback) {
-        super(parent, content, contentViewCallback);
-    }
-
-    /**
-     * Make a Snackbar to display a message
-     *
-     * <p>Snackbar will try and find a parent view to hold Snackbar's view from the value given
-     * to {@code view}. Snackbar will walk up the view tree trying to find a suitable parent,
-     * which is defined as a {@link CoordinatorLayout} or the window decor's content view,
-     * whichever comes first.
-     *
-     * <p>Having a {@link CoordinatorLayout} in your view hierarchy allows Snackbar to enable
-     * certain features, such as swipe-to-dismiss and automatically moving of widgets like
-     * {@link FloatingActionButton}.
-     *
-     * @param view     The view to find a parent from.
-     * @param text     The text to show.  Can be formatted text.
-     * @param duration How long to display the message.  Either {@link #LENGTH_SHORT} or {@link
-     *                 #LENGTH_LONG}
-     */
-    @NonNull
-    public static Snackbar make(@NonNull View view, @NonNull CharSequence text,
-            @Duration int duration) {
-        final ViewGroup parent = findSuitableParent(view);
-        if (parent == null) {
-            throw new IllegalArgumentException("No suitable parent found from the given view. "
-                    + "Please provide a valid view.");
-        }
-
-        final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
-        final SnackbarContentLayout content =
-                (SnackbarContentLayout) inflater.inflate(
-                        R.layout.design_layout_snackbar_include, parent, false);
-        final Snackbar snackbar = new Snackbar(parent, content, content);
-        snackbar.setText(text);
-        snackbar.setDuration(duration);
-        return snackbar;
-    }
-
-    /**
-     * Make a Snackbar to display a message.
-     *
-     * <p>Snackbar will try and find a parent view to hold Snackbar's view from the value given
-     * to {@code view}. Snackbar will walk up the view tree trying to find a suitable parent,
-     * which is defined as a {@link CoordinatorLayout} or the window decor's content view,
-     * whichever comes first.
-     *
-     * <p>Having a {@link CoordinatorLayout} in your view hierarchy allows Snackbar to enable
-     * certain features, such as swipe-to-dismiss and automatically moving of widgets like
-     * {@link FloatingActionButton}.
-     *
-     * @param view     The view to find a parent from.
-     * @param resId    The resource id of the string resource to use. Can be formatted text.
-     * @param duration How long to display the message.  Either {@link #LENGTH_SHORT} or {@link
-     *                 #LENGTH_LONG}
-     */
-    @NonNull
-    public static Snackbar make(@NonNull View view, @StringRes int resId, @Duration int duration) {
-        return make(view, view.getResources().getText(resId), duration);
-    }
-
-    private static ViewGroup findSuitableParent(View view) {
-        ViewGroup fallback = null;
-        do {
-            if (view instanceof CoordinatorLayout) {
-                // We've found a CoordinatorLayout, use it
-                return (ViewGroup) view;
-            } else if (view instanceof FrameLayout) {
-                if (view.getId() == android.R.id.content) {
-                    // If we've hit the decor content view, then we didn't find a CoL in the
-                    // hierarchy, so use it.
-                    return (ViewGroup) view;
-                } else {
-                    // It's not the content view but we'll use it as our fallback
-                    fallback = (ViewGroup) view;
-                }
-            }
-
-            if (view != null) {
-                // Else, we will loop and crawl up the view hierarchy and try to find a parent
-                final ViewParent parent = view.getParent();
-                view = parent instanceof View ? (View) parent : null;
-            }
-        } while (view != null);
-
-        // If we reach here then we didn't find a CoL or a suitable content view so we'll fallback
-        return fallback;
-    }
-
-    /**
-     * Update the text in this {@link Snackbar}.
-     *
-     * @param message The new text for this {@link BaseTransientBottomBar}.
-     */
-    @NonNull
-    public Snackbar setText(@NonNull CharSequence message) {
-        final SnackbarContentLayout contentLayout = (SnackbarContentLayout) mView.getChildAt(0);
-        final TextView tv = contentLayout.getMessageView();
-        tv.setText(message);
-        return this;
-    }
-
-    /**
-     * Update the text in this {@link Snackbar}.
-     *
-     * @param resId The new text for this {@link BaseTransientBottomBar}.
-     */
-    @NonNull
-    public Snackbar setText(@StringRes int resId) {
-        return setText(getContext().getText(resId));
-    }
-
-    /**
-     * Set the action to be displayed in this {@link BaseTransientBottomBar}.
-     *
-     * @param resId    String resource to display for the action
-     * @param listener callback to be invoked when the action is clicked
-     */
-    @NonNull
-    public Snackbar setAction(@StringRes int resId, View.OnClickListener listener) {
-        return setAction(getContext().getText(resId), listener);
-    }
-
-    /**
-     * Set the action to be displayed in this {@link BaseTransientBottomBar}.
-     *
-     * @param text     Text to display for the action
-     * @param listener callback to be invoked when the action is clicked
-     */
-    @NonNull
-    public Snackbar setAction(CharSequence text, final View.OnClickListener listener) {
-        final SnackbarContentLayout contentLayout = (SnackbarContentLayout) mView.getChildAt(0);
-        final TextView tv = contentLayout.getActionView();
-
-        if (TextUtils.isEmpty(text) || listener == null) {
-            tv.setVisibility(View.GONE);
-            tv.setOnClickListener(null);
-        } else {
-            tv.setVisibility(View.VISIBLE);
-            tv.setText(text);
-            tv.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    listener.onClick(view);
-                    // Now dismiss the Snackbar
-                    dispatchDismiss(BaseCallback.DISMISS_EVENT_ACTION);
-                }
-            });
-        }
-        return this;
-    }
-
-    /**
-     * Sets the text color of the action specified in
-     * {@link #setAction(CharSequence, View.OnClickListener)}.
-     */
-    @NonNull
-    public Snackbar setActionTextColor(ColorStateList colors) {
-        final SnackbarContentLayout contentLayout = (SnackbarContentLayout) mView.getChildAt(0);
-        final TextView tv = contentLayout.getActionView();
-        tv.setTextColor(colors);
-        return this;
-    }
-
-    /**
-     * Sets the text color of the action specified in
-     * {@link #setAction(CharSequence, View.OnClickListener)}.
-     */
-    @NonNull
-    public Snackbar setActionTextColor(@ColorInt int color) {
-        final SnackbarContentLayout contentLayout = (SnackbarContentLayout) mView.getChildAt(0);
-        final TextView tv = contentLayout.getActionView();
-        tv.setTextColor(color);
-        return this;
-    }
-
-    /**
-     * Set a callback to be called when this the visibility of this {@link Snackbar}
-     * changes. Note that this method is deprecated
-     * and you should use {@link #addCallback(BaseCallback)} to add a callback and
-     * {@link #removeCallback(BaseCallback)} to remove a registered callback.
-     *
-     * @param callback Callback to notify when transient bottom bar events occur.
-     * @deprecated Use {@link #addCallback(BaseCallback)}
-     * @see Callback
-     * @see #addCallback(BaseCallback)
-     * @see #removeCallback(BaseCallback)
-     */
-    @Deprecated
-    @NonNull
-    public Snackbar setCallback(Callback callback) {
-        // The logic in this method emulates what we had before support for multiple
-        // registered callbacks.
-        if (mCallback != null) {
-            removeCallback(mCallback);
-        }
-        if (callback != null) {
-            addCallback(callback);
-        }
-        // Update the deprecated field so that we can remove the passed callback the next
-        // time we're called
-        mCallback = callback;
-        return this;
-    }
-
-    /**
-     * @hide
-     *
-     * Note: this class is here to provide backwards-compatible way for apps written before
-     * the existence of the base {@link BaseTransientBottomBar} class.
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    public static final class SnackbarLayout extends BaseTransientBottomBar.SnackbarBaseLayout {
-        public SnackbarLayout(Context context) {
-            super(context);
-        }
-
-        public SnackbarLayout(Context context, AttributeSet attrs) {
-            super(context, attrs);
-        }
-
-        @Override
-        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-            // Work around our backwards-compatible refactoring of Snackbar and inner content
-            // being inflated against snackbar's parent (instead of against the snackbar itself).
-            // Every child that is width=MATCH_PARENT is remeasured again and given the full width
-            // minus the paddings.
-            int childCount = getChildCount();
-            int availableWidth = getMeasuredWidth() - getPaddingLeft() - getPaddingRight();
-            for (int i = 0; i < childCount; i++) {
-                View child = getChildAt(i);
-                if (child.getLayoutParams().width == ViewGroup.LayoutParams.MATCH_PARENT) {
-                    child.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.EXACTLY),
-                            MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(),
-                                    MeasureSpec.EXACTLY));
-                }
-            }
-        }
-    }
-}
-
diff --git a/design/src/android/support/design/widget/SnackbarManager.java b/design/src/android/support/design/widget/SnackbarManager.java
deleted file mode 100644
index 43892d3..0000000
--- a/design/src/android/support/design/widget/SnackbarManager.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-
-import java.lang.ref.WeakReference;
-
-/**
- * Manages {@link Snackbar}s.
- */
-class SnackbarManager {
-
-    static final int MSG_TIMEOUT = 0;
-
-    private static final int SHORT_DURATION_MS = 1500;
-    private static final int LONG_DURATION_MS = 2750;
-
-    private static SnackbarManager sSnackbarManager;
-
-    static SnackbarManager getInstance() {
-        if (sSnackbarManager == null) {
-            sSnackbarManager = new SnackbarManager();
-        }
-        return sSnackbarManager;
-    }
-
-    private final Object mLock;
-    private final Handler mHandler;
-
-    private SnackbarRecord mCurrentSnackbar;
-    private SnackbarRecord mNextSnackbar;
-
-    private SnackbarManager() {
-        mLock = new Object();
-        mHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
-            @Override
-            public boolean handleMessage(Message message) {
-                switch (message.what) {
-                    case MSG_TIMEOUT:
-                        handleTimeout((SnackbarRecord) message.obj);
-                        return true;
-                }
-                return false;
-            }
-        });
-    }
-
-    interface Callback {
-        void show();
-        void dismiss(int event);
-    }
-
-    public void show(int duration, Callback callback) {
-        synchronized (mLock) {
-            if (isCurrentSnackbarLocked(callback)) {
-                // Means that the callback is already in the queue. We'll just update the duration
-                mCurrentSnackbar.duration = duration;
-
-                // If this is the Snackbar currently being shown, call re-schedule it's
-                // timeout
-                mHandler.removeCallbacksAndMessages(mCurrentSnackbar);
-                scheduleTimeoutLocked(mCurrentSnackbar);
-                return;
-            } else if (isNextSnackbarLocked(callback)) {
-                // We'll just update the duration
-                mNextSnackbar.duration = duration;
-            } else {
-                // Else, we need to create a new record and queue it
-                mNextSnackbar = new SnackbarRecord(duration, callback);
-            }
-
-            if (mCurrentSnackbar != null && cancelSnackbarLocked(mCurrentSnackbar,
-                    Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE)) {
-                // If we currently have a Snackbar, try and cancel it and wait in line
-                return;
-            } else {
-                // Clear out the current snackbar
-                mCurrentSnackbar = null;
-                // Otherwise, just show it now
-                showNextSnackbarLocked();
-            }
-        }
-    }
-
-    public void dismiss(Callback callback, int event) {
-        synchronized (mLock) {
-            if (isCurrentSnackbarLocked(callback)) {
-                cancelSnackbarLocked(mCurrentSnackbar, event);
-            } else if (isNextSnackbarLocked(callback)) {
-                cancelSnackbarLocked(mNextSnackbar, event);
-            }
-        }
-    }
-
-    /**
-     * Should be called when a Snackbar is no longer displayed. This is after any exit
-     * animation has finished.
-     */
-    public void onDismissed(Callback callback) {
-        synchronized (mLock) {
-            if (isCurrentSnackbarLocked(callback)) {
-                // If the callback is from a Snackbar currently show, remove it and show a new one
-                mCurrentSnackbar = null;
-                if (mNextSnackbar != null) {
-                    showNextSnackbarLocked();
-                }
-            }
-        }
-    }
-
-    /**
-     * Should be called when a Snackbar is being shown. This is after any entrance animation has
-     * finished.
-     */
-    public void onShown(Callback callback) {
-        synchronized (mLock) {
-            if (isCurrentSnackbarLocked(callback)) {
-                scheduleTimeoutLocked(mCurrentSnackbar);
-            }
-        }
-    }
-
-    public void pauseTimeout(Callback callback) {
-        synchronized (mLock) {
-            if (isCurrentSnackbarLocked(callback) && !mCurrentSnackbar.paused) {
-                mCurrentSnackbar.paused = true;
-                mHandler.removeCallbacksAndMessages(mCurrentSnackbar);
-            }
-        }
-    }
-
-    public void restoreTimeoutIfPaused(Callback callback) {
-        synchronized (mLock) {
-            if (isCurrentSnackbarLocked(callback) && mCurrentSnackbar.paused) {
-                mCurrentSnackbar.paused = false;
-                scheduleTimeoutLocked(mCurrentSnackbar);
-            }
-        }
-    }
-
-    public boolean isCurrent(Callback callback) {
-        synchronized (mLock) {
-            return isCurrentSnackbarLocked(callback);
-        }
-    }
-
-    public boolean isCurrentOrNext(Callback callback) {
-        synchronized (mLock) {
-            return isCurrentSnackbarLocked(callback) || isNextSnackbarLocked(callback);
-        }
-    }
-
-    private static class SnackbarRecord {
-        final WeakReference<Callback> callback;
-        int duration;
-        boolean paused;
-
-        SnackbarRecord(int duration, Callback callback) {
-            this.callback = new WeakReference<>(callback);
-            this.duration = duration;
-        }
-
-        boolean isSnackbar(Callback callback) {
-            return callback != null && this.callback.get() == callback;
-        }
-    }
-
-    private void showNextSnackbarLocked() {
-        if (mNextSnackbar != null) {
-            mCurrentSnackbar = mNextSnackbar;
-            mNextSnackbar = null;
-
-            final Callback callback = mCurrentSnackbar.callback.get();
-            if (callback != null) {
-                callback.show();
-            } else {
-                // The callback doesn't exist any more, clear out the Snackbar
-                mCurrentSnackbar = null;
-            }
-        }
-    }
-
-    private boolean cancelSnackbarLocked(SnackbarRecord record, int event) {
-        final Callback callback = record.callback.get();
-        if (callback != null) {
-            // Make sure we remove any timeouts for the SnackbarRecord
-            mHandler.removeCallbacksAndMessages(record);
-            callback.dismiss(event);
-            return true;
-        }
-        return false;
-    }
-
-    private boolean isCurrentSnackbarLocked(Callback callback) {
-        return mCurrentSnackbar != null && mCurrentSnackbar.isSnackbar(callback);
-    }
-
-    private boolean isNextSnackbarLocked(Callback callback) {
-        return mNextSnackbar != null && mNextSnackbar.isSnackbar(callback);
-    }
-
-    private void scheduleTimeoutLocked(SnackbarRecord r) {
-        if (r.duration == Snackbar.LENGTH_INDEFINITE) {
-            // If we're set to indefinite, we don't want to set a timeout
-            return;
-        }
-
-        int durationMs = LONG_DURATION_MS;
-        if (r.duration > 0) {
-            durationMs = r.duration;
-        } else if (r.duration == Snackbar.LENGTH_SHORT) {
-            durationMs = SHORT_DURATION_MS;
-        }
-        mHandler.removeCallbacksAndMessages(r);
-        mHandler.sendMessageDelayed(Message.obtain(mHandler, MSG_TIMEOUT, r), durationMs);
-    }
-
-    void handleTimeout(SnackbarRecord record) {
-        synchronized (mLock) {
-            if (mCurrentSnackbar == record || mNextSnackbar == record) {
-                cancelSnackbarLocked(record, Snackbar.Callback.DISMISS_EVENT_TIMEOUT);
-            }
-        }
-    }
-
-}
diff --git a/design/src/android/support/design/widget/SwipeDismissBehavior.java b/design/src/android/support/design/widget/SwipeDismissBehavior.java
deleted file mode 100644
index d857334..0000000
--- a/design/src/android/support/design/widget/SwipeDismissBehavior.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-
-import android.support.annotation.IntDef;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.ViewDragHelper;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * An interaction behavior plugin for child views of {@link CoordinatorLayout} to provide support
- * for the 'swipe-to-dismiss' gesture.
- */
-public class SwipeDismissBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
-
-    /**
-     * A view is not currently being dragged or animating as a result of a fling/snap.
-     */
-    public static final int STATE_IDLE = ViewDragHelper.STATE_IDLE;
-
-    /**
-     * A view is currently being dragged. The position is currently changing as a result
-     * of user input or simulated user input.
-     */
-    public static final int STATE_DRAGGING = ViewDragHelper.STATE_DRAGGING;
-
-    /**
-     * A view is currently settling into place as a result of a fling or
-     * predefined non-interactive motion.
-     */
-    public static final int STATE_SETTLING = ViewDragHelper.STATE_SETTLING;
-
-    /** @hide */
-    @RestrictTo(LIBRARY_GROUP)
-    @IntDef({SWIPE_DIRECTION_START_TO_END, SWIPE_DIRECTION_END_TO_START, SWIPE_DIRECTION_ANY})
-    @Retention(RetentionPolicy.SOURCE)
-    private @interface SwipeDirection {}
-
-    /**
-     * Swipe direction that only allows swiping in the direction of start-to-end. That is
-     * left-to-right in LTR, or right-to-left in RTL.
-     */
-    public static final int SWIPE_DIRECTION_START_TO_END = 0;
-
-    /**
-     * Swipe direction that only allows swiping in the direction of end-to-start. That is
-     * right-to-left in LTR or left-to-right in RTL.
-     */
-    public static final int SWIPE_DIRECTION_END_TO_START = 1;
-
-    /**
-     * Swipe direction which allows swiping in either direction.
-     */
-    public static final int SWIPE_DIRECTION_ANY = 2;
-
-    private static final float DEFAULT_DRAG_DISMISS_THRESHOLD = 0.5f;
-    private static final float DEFAULT_ALPHA_START_DISTANCE = 0f;
-    private static final float DEFAULT_ALPHA_END_DISTANCE = DEFAULT_DRAG_DISMISS_THRESHOLD;
-
-    ViewDragHelper mViewDragHelper;
-    OnDismissListener mListener;
-    private boolean mInterceptingEvents;
-
-    private float mSensitivity = 0f;
-    private boolean mSensitivitySet;
-
-    int mSwipeDirection = SWIPE_DIRECTION_ANY;
-    float mDragDismissThreshold = DEFAULT_DRAG_DISMISS_THRESHOLD;
-    float mAlphaStartSwipeDistance = DEFAULT_ALPHA_START_DISTANCE;
-    float mAlphaEndSwipeDistance = DEFAULT_ALPHA_END_DISTANCE;
-
-    /**
-     * Callback interface used to notify the application that the view has been dismissed.
-     */
-    public interface OnDismissListener {
-        /**
-         * Called when {@code view} has been dismissed via swiping.
-         */
-        public void onDismiss(View view);
-
-        /**
-         * Called when the drag state has changed.
-         *
-         * @param state the new state. One of
-         * {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}.
-         */
-        public void onDragStateChanged(int state);
-    }
-
-    /**
-     * Set the listener to be used when a dismiss event occurs.
-     *
-     * @param listener the listener to use.
-     */
-    public void setListener(OnDismissListener listener) {
-        mListener = listener;
-    }
-
-    /**
-     * Sets the swipe direction for this behavior.
-     *
-     * @param direction one of the {@link #SWIPE_DIRECTION_START_TO_END},
-     *                  {@link #SWIPE_DIRECTION_END_TO_START} or {@link #SWIPE_DIRECTION_ANY}
-     */
-    public void setSwipeDirection(@SwipeDirection int direction) {
-        mSwipeDirection = direction;
-    }
-
-    /**
-     * Set the threshold for telling if a view has been dragged enough to be dismissed.
-     *
-     * @param distance a ratio of a view's width, values are clamped to 0 >= x <= 1f;
-     */
-    public void setDragDismissDistance(float distance) {
-        mDragDismissThreshold = clamp(0f, distance, 1f);
-    }
-
-    /**
-     * The minimum swipe distance before the view's alpha is modified.
-     *
-     * @param fraction the distance as a fraction of the view's width.
-     */
-    public void setStartAlphaSwipeDistance(float fraction) {
-        mAlphaStartSwipeDistance = clamp(0f, fraction, 1f);
-    }
-
-    /**
-     * The maximum swipe distance for the view's alpha is modified.
-     *
-     * @param fraction the distance as a fraction of the view's width.
-     */
-    public void setEndAlphaSwipeDistance(float fraction) {
-        mAlphaEndSwipeDistance = clamp(0f, fraction, 1f);
-    }
-
-    /**
-     * Set the sensitivity used for detecting the start of a swipe. This only takes effect if
-     * no touch handling has occured yet.
-     *
-     * @param sensitivity Multiplier for how sensitive we should be about detecting
-     *                    the start of a drag. Larger values are more sensitive. 1.0f is normal.
-     */
-    public void setSensitivity(float sensitivity) {
-        mSensitivity = sensitivity;
-        mSensitivitySet = true;
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
-        boolean dispatchEventToHelper = mInterceptingEvents;
-
-        switch (event.getActionMasked()) {
-            case MotionEvent.ACTION_DOWN:
-                mInterceptingEvents = parent.isPointInChildBounds(child,
-                        (int) event.getX(), (int) event.getY());
-                dispatchEventToHelper = mInterceptingEvents;
-                break;
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_CANCEL:
-                // Reset the ignore flag for next time
-                mInterceptingEvents = false;
-                break;
-        }
-
-        if (dispatchEventToHelper) {
-            ensureViewDragHelper(parent);
-            return mViewDragHelper.shouldInterceptTouchEvent(event);
-        }
-        return false;
-    }
-
-    @Override
-    public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
-        if (mViewDragHelper != null) {
-            mViewDragHelper.processTouchEvent(event);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Called when the user's input indicates that they want to swipe the given view.
-     *
-     * @param view View the user is attempting to swipe
-     * @return true if the view can be dismissed via swiping, false otherwise
-     */
-    public boolean canSwipeDismissView(@NonNull View view) {
-        return true;
-    }
-
-    private final ViewDragHelper.Callback mDragCallback = new ViewDragHelper.Callback() {
-        private static final int INVALID_POINTER_ID = -1;
-
-        private int mOriginalCapturedViewLeft;
-        private int mActivePointerId = INVALID_POINTER_ID;
-
-        @Override
-        public boolean tryCaptureView(View child, int pointerId) {
-            // Only capture if we don't already have an active pointer id
-            return mActivePointerId == INVALID_POINTER_ID && canSwipeDismissView(child);
-        }
-
-        @Override
-        public void onViewCaptured(View capturedChild, int activePointerId) {
-            mActivePointerId = activePointerId;
-            mOriginalCapturedViewLeft = capturedChild.getLeft();
-
-            // The view has been captured, and thus a drag is about to start so stop any parents
-            // intercepting
-            final ViewParent parent = capturedChild.getParent();
-            if (parent != null) {
-                parent.requestDisallowInterceptTouchEvent(true);
-            }
-        }
-
-        @Override
-        public void onViewDragStateChanged(int state) {
-            if (mListener != null) {
-                mListener.onDragStateChanged(state);
-            }
-        }
-
-        @Override
-        public void onViewReleased(View child, float xvel, float yvel) {
-            // Reset the active pointer ID
-            mActivePointerId = INVALID_POINTER_ID;
-
-            final int childWidth = child.getWidth();
-            int targetLeft;
-            boolean dismiss = false;
-
-            if (shouldDismiss(child, xvel)) {
-                targetLeft = child.getLeft() < mOriginalCapturedViewLeft
-                        ? mOriginalCapturedViewLeft - childWidth
-                        : mOriginalCapturedViewLeft + childWidth;
-                dismiss = true;
-            } else {
-                // Else, reset back to the original left
-                targetLeft = mOriginalCapturedViewLeft;
-            }
-
-            if (mViewDragHelper.settleCapturedViewAt(targetLeft, child.getTop())) {
-                ViewCompat.postOnAnimation(child, new SettleRunnable(child, dismiss));
-            } else if (dismiss && mListener != null) {
-                mListener.onDismiss(child);
-            }
-        }
-
-        private boolean shouldDismiss(View child, float xvel) {
-            if (xvel != 0f) {
-                final boolean isRtl = ViewCompat.getLayoutDirection(child)
-                        == ViewCompat.LAYOUT_DIRECTION_RTL;
-
-                if (mSwipeDirection == SWIPE_DIRECTION_ANY) {
-                    // We don't care about the direction so return true
-                    return true;
-                } else if (mSwipeDirection == SWIPE_DIRECTION_START_TO_END) {
-                    // We only allow start-to-end swiping, so the fling needs to be in the
-                    // correct direction
-                    return isRtl ? xvel < 0f : xvel > 0f;
-                } else if (mSwipeDirection == SWIPE_DIRECTION_END_TO_START) {
-                    // We only allow end-to-start swiping, so the fling needs to be in the
-                    // correct direction
-                    return isRtl ? xvel > 0f : xvel < 0f;
-                }
-            } else {
-                final int distance = child.getLeft() - mOriginalCapturedViewLeft;
-                final int thresholdDistance = Math.round(child.getWidth() * mDragDismissThreshold);
-                return Math.abs(distance) >= thresholdDistance;
-            }
-
-            return false;
-        }
-
-        @Override
-        public int getViewHorizontalDragRange(View child) {
-            return child.getWidth();
-        }
-
-        @Override
-        public int clampViewPositionHorizontal(View child, int left, int dx) {
-            final boolean isRtl = ViewCompat.getLayoutDirection(child)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
-            int min, max;
-
-            if (mSwipeDirection == SWIPE_DIRECTION_START_TO_END) {
-                if (isRtl) {
-                    min = mOriginalCapturedViewLeft - child.getWidth();
-                    max = mOriginalCapturedViewLeft;
-                } else {
-                    min = mOriginalCapturedViewLeft;
-                    max = mOriginalCapturedViewLeft + child.getWidth();
-                }
-            } else if (mSwipeDirection == SWIPE_DIRECTION_END_TO_START) {
-                if (isRtl) {
-                    min = mOriginalCapturedViewLeft;
-                    max = mOriginalCapturedViewLeft + child.getWidth();
-                } else {
-                    min = mOriginalCapturedViewLeft - child.getWidth();
-                    max = mOriginalCapturedViewLeft;
-                }
-            } else {
-                min = mOriginalCapturedViewLeft - child.getWidth();
-                max = mOriginalCapturedViewLeft + child.getWidth();
-            }
-
-            return clamp(min, left, max);
-        }
-
-        @Override
-        public int clampViewPositionVertical(View child, int top, int dy) {
-            return child.getTop();
-        }
-
-        @Override
-        public void onViewPositionChanged(View child, int left, int top, int dx, int dy) {
-            final float startAlphaDistance = mOriginalCapturedViewLeft
-                    + child.getWidth() * mAlphaStartSwipeDistance;
-            final float endAlphaDistance = mOriginalCapturedViewLeft
-                    + child.getWidth() * mAlphaEndSwipeDistance;
-
-            if (left <= startAlphaDistance) {
-                child.setAlpha(1f);
-            } else if (left >= endAlphaDistance) {
-                child.setAlpha(0f);
-            } else {
-                // We're between the start and end distances
-                final float distance = fraction(startAlphaDistance, endAlphaDistance, left);
-                child.setAlpha(clamp(0f, 1f - distance, 1f));
-            }
-        }
-    };
-
-    private void ensureViewDragHelper(ViewGroup parent) {
-        if (mViewDragHelper == null) {
-            mViewDragHelper = mSensitivitySet
-                    ? ViewDragHelper.create(parent, mSensitivity, mDragCallback)
-                    : ViewDragHelper.create(parent, mDragCallback);
-        }
-    }
-
-    private class SettleRunnable implements Runnable {
-        private final View mView;
-        private final boolean mDismiss;
-
-        SettleRunnable(View view, boolean dismiss) {
-            mView = view;
-            mDismiss = dismiss;
-        }
-
-        @Override
-        public void run() {
-            if (mViewDragHelper != null && mViewDragHelper.continueSettling(true)) {
-                ViewCompat.postOnAnimation(mView, this);
-            } else {
-                if (mDismiss && mListener != null) {
-                    mListener.onDismiss(mView);
-                }
-            }
-        }
-    }
-
-    static float clamp(float min, float value, float max) {
-        return Math.min(Math.max(min, value), max);
-    }
-
-    static int clamp(int min, int value, int max) {
-        return Math.min(Math.max(min, value), max);
-    }
-
-    /**
-     * Retrieve the current drag state of this behavior. This will return one of
-     * {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}.
-     *
-     * @return The current drag state
-     */
-    public int getDragState() {
-        return mViewDragHelper != null ? mViewDragHelper.getViewDragState() : STATE_IDLE;
-    }
-
-    /**
-     * The fraction that {@code value} is between {@code startValue} and {@code endValue}.
-     */
-    static float fraction(float startValue, float endValue, float value) {
-        return (value - startValue) / (endValue - startValue);
-    }
-}
\ No newline at end of file
diff --git a/design/src/android/support/design/widget/TabItem.java b/design/src/android/support/design/widget/TabItem.java
deleted file mode 100644
index 09b01db..0000000
--- a/design/src/android/support/design/widget/TabItem.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.support.design.R;
-import android.support.v7.widget.TintTypedArray;
-import android.util.AttributeSet;
-import android.view.View;
-
-/**
- * TabItem is a special 'view' which allows you to declare tab items for a {@link TabLayout}
- * within a layout. This view is not actually added to TabLayout, it is just a dummy which allows
- * setting of a tab items's text, icon and custom layout. See TabLayout for more information on how
- * to use it.
- *
- * @attr ref android.support.design.R.styleable#TabItem_android_icon
- * @attr ref android.support.design.R.styleable#TabItem_android_text
- * @attr ref android.support.design.R.styleable#TabItem_android_layout
- *
- * @see TabLayout
- */
-public final class TabItem extends View {
-    final CharSequence mText;
-    final Drawable mIcon;
-    final int mCustomLayout;
-
-    public TabItem(Context context) {
-        this(context, null);
-    }
-
-    public TabItem(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        final TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
-                R.styleable.TabItem);
-        mText = a.getText(R.styleable.TabItem_android_text);
-        mIcon = a.getDrawable(R.styleable.TabItem_android_icon);
-        mCustomLayout = a.getResourceId(R.styleable.TabItem_android_layout, 0);
-        a.recycle();
-    }
-}
\ No newline at end of file
diff --git a/design/src/android/support/design/widget/TabLayout.java b/design/src/android/support/design/widget/TabLayout.java
deleted file mode 100755
index 9b81465..0000000
--- a/design/src/android/support/design/widget/TabLayout.java
+++ /dev/null
@@ -1,2217 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
-import static android.support.v4.view.ViewPager.SCROLL_STATE_DRAGGING;
-import static android.support.v4.view.ViewPager.SCROLL_STATE_IDLE;
-import static android.support.v4.view.ViewPager.SCROLL_STATE_SETTLING;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.database.DataSetObserver;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.StringRes;
-import android.support.design.R;
-import android.support.v4.util.Pools;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.PointerIconCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.ViewPager;
-import android.support.v4.widget.TextViewCompat;
-import android.support.v7.app.ActionBar;
-import android.support.v7.content.res.AppCompatResources;
-import android.support.v7.widget.TooltipCompat;
-import android.text.Layout;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.SoundEffectConstants;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.widget.HorizontalScrollView;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * TabLayout provides a horizontal layout to display tabs.
- *
- * <p>Population of the tabs to display is
- * done through {@link Tab} instances. You create tabs via {@link #newTab()}. From there you can
- * change the tab's label or icon via {@link Tab#setText(int)} and {@link Tab#setIcon(int)}
- * respectively. To display the tab, you need to add it to the layout via one of the
- * {@link #addTab(Tab)} methods. For example:
- * <pre>
- * TabLayout tabLayout = ...;
- * tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
- * tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
- * tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
- * </pre>
- * You should set a listener via {@link #setOnTabSelectedListener(OnTabSelectedListener)} to be
- * notified when any tab's selection state has been changed.
- *
- * <p>You can also add items to TabLayout in your layout through the use of {@link TabItem}.
- * An example usage is like so:</p>
- *
- * <pre>
- * &lt;android.support.design.widget.TabLayout
- *         android:layout_height=&quot;wrap_content&quot;
- *         android:layout_width=&quot;match_parent&quot;&gt;
- *
- *     &lt;android.support.design.widget.TabItem
- *             android:text=&quot;@string/tab_text&quot;/&gt;
- *
- *     &lt;android.support.design.widget.TabItem
- *             android:icon=&quot;@drawable/ic_android&quot;/&gt;
- *
- * &lt;/android.support.design.widget.TabLayout&gt;
- * </pre>
- *
- * <h3>ViewPager integration</h3>
- * <p>
- * If you're using a {@link android.support.v4.view.ViewPager} together
- * with this layout, you can call {@link #setupWithViewPager(ViewPager)} to link the two together.
- * This layout will be automatically populated from the {@link PagerAdapter}'s page titles.</p>
- *
- * <p>
- * This view also supports being used as part of a ViewPager's decor, and can be added
- * directly to the ViewPager in a layout resource file like so:</p>
- *
- * <pre>
- * &lt;android.support.v4.view.ViewPager
- *     android:layout_width=&quot;match_parent&quot;
- *     android:layout_height=&quot;match_parent&quot;&gt;
- *
- *     &lt;android.support.design.widget.TabLayout
- *         android:layout_width=&quot;match_parent&quot;
- *         android:layout_height=&quot;wrap_content&quot;
- *         android:layout_gravity=&quot;top&quot; /&gt;
- *
- * &lt;/android.support.v4.view.ViewPager&gt;
- * </pre>
- *
- * @see <a href="http://www.google.com/design/spec/components/tabs.html">Tabs</a>
- *
- * @attr ref android.support.design.R.styleable#TabLayout_tabPadding
- * @attr ref android.support.design.R.styleable#TabLayout_tabPaddingStart
- * @attr ref android.support.design.R.styleable#TabLayout_tabPaddingTop
- * @attr ref android.support.design.R.styleable#TabLayout_tabPaddingEnd
- * @attr ref android.support.design.R.styleable#TabLayout_tabPaddingBottom
- * @attr ref android.support.design.R.styleable#TabLayout_tabContentStart
- * @attr ref android.support.design.R.styleable#TabLayout_tabBackground
- * @attr ref android.support.design.R.styleable#TabLayout_tabMinWidth
- * @attr ref android.support.design.R.styleable#TabLayout_tabMaxWidth
- * @attr ref android.support.design.R.styleable#TabLayout_tabTextAppearance
- */
-@ViewPager.DecorView
-public class TabLayout extends HorizontalScrollView {
-
-    private static final int DEFAULT_HEIGHT_WITH_TEXT_ICON = 72; // dps
-    static final int DEFAULT_GAP_TEXT_ICON = 8; // dps
-    private static final int INVALID_WIDTH = -1;
-    private static final int DEFAULT_HEIGHT = 48; // dps
-    private static final int TAB_MIN_WIDTH_MARGIN = 56; //dps
-    static final int FIXED_WRAP_GUTTER_MIN = 16; //dps
-    static final int MOTION_NON_ADJACENT_OFFSET = 24;
-
-    private static final int ANIMATION_DURATION = 300;
-
-    private static final Pools.Pool<Tab> sTabPool = new Pools.SynchronizedPool<>(16);
-
-    /**
-     * Scrollable tabs display a subset of tabs at any given moment, and can contain longer tab
-     * labels and a larger number of tabs. They are best used for browsing contexts in touch
-     * interfaces when users don’t need to directly compare the tab labels.
-     *
-     * @see #setTabMode(int)
-     * @see #getTabMode()
-     */
-    public static final int MODE_SCROLLABLE = 0;
-
-    /**
-     * Fixed tabs display all tabs concurrently and are best used with content that benefits from
-     * quick pivots between tabs. The maximum number of tabs is limited by the view’s width.
-     * Fixed tabs have equal width, based on the widest tab label.
-     *
-     * @see #setTabMode(int)
-     * @see #getTabMode()
-     */
-    public static final int MODE_FIXED = 1;
-
-    /**
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    @IntDef(value = {MODE_SCROLLABLE, MODE_FIXED})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface Mode {}
-
-    /**
-     * Gravity used to fill the {@link TabLayout} as much as possible. This option only takes effect
-     * when used with {@link #MODE_FIXED}.
-     *
-     * @see #setTabGravity(int)
-     * @see #getTabGravity()
-     */
-    public static final int GRAVITY_FILL = 0;
-
-    /**
-     * Gravity used to lay out the tabs in the center of the {@link TabLayout}.
-     *
-     * @see #setTabGravity(int)
-     * @see #getTabGravity()
-     */
-    public static final int GRAVITY_CENTER = 1;
-
-    /**
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP)
-    @IntDef(flag = true, value = {GRAVITY_FILL, GRAVITY_CENTER})
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface TabGravity {}
-
-    /**
-     * Callback interface invoked when a tab's selection state changes.
-     */
-    public interface OnTabSelectedListener {
-
-        /**
-         * Called when a tab enters the selected state.
-         *
-         * @param tab The tab that was selected
-         */
-        public void onTabSelected(Tab tab);
-
-        /**
-         * Called when a tab exits the selected state.
-         *
-         * @param tab The tab that was unselected
-         */
-        public void onTabUnselected(Tab tab);
-
-        /**
-         * Called when a tab that is already selected is chosen again by the user. Some applications
-         * may use this action to return to the top level of a category.
-         *
-         * @param tab The tab that was reselected.
-         */
-        public void onTabReselected(Tab tab);
-    }
-
-    private final ArrayList<Tab> mTabs = new ArrayList<>();
-    private Tab mSelectedTab;
-
-    private final SlidingTabStrip mTabStrip;
-
-    int mTabPaddingStart;
-    int mTabPaddingTop;
-    int mTabPaddingEnd;
-    int mTabPaddingBottom;
-
-    int mTabTextAppearance;
-    ColorStateList mTabTextColors;
-    float mTabTextSize;
-    float mTabTextMultiLineSize;
-
-    final int mTabBackgroundResId;
-
-    int mTabMaxWidth = Integer.MAX_VALUE;
-    private final int mRequestedTabMinWidth;
-    private final int mRequestedTabMaxWidth;
-    private final int mScrollableTabMinWidth;
-
-    private int mContentInsetStart;
-
-    int mTabGravity;
-    int mMode;
-
-    private OnTabSelectedListener mSelectedListener;
-    private final ArrayList<OnTabSelectedListener> mSelectedListeners = new ArrayList<>();
-    private OnTabSelectedListener mCurrentVpSelectedListener;
-
-    private ValueAnimator mScrollAnimator;
-
-    ViewPager mViewPager;
-    private PagerAdapter mPagerAdapter;
-    private DataSetObserver mPagerAdapterObserver;
-    private TabLayoutOnPageChangeListener mPageChangeListener;
-    private AdapterChangeListener mAdapterChangeListener;
-    private boolean mSetupViewPagerImplicitly;
-
-    // Pool we use as a simple RecyclerBin
-    private final Pools.Pool<TabView> mTabViewPool = new Pools.SimplePool<>(12);
-
-    public TabLayout(Context context) {
-        this(context, null);
-    }
-
-    public TabLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public TabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        ThemeUtils.checkAppCompatTheme(context);
-
-        // Disable the Scroll Bar
-        setHorizontalScrollBarEnabled(false);
-
-        // Add the TabStrip
-        mTabStrip = new SlidingTabStrip(context);
-        super.addView(mTabStrip, 0, new HorizontalScrollView.LayoutParams(
-                LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
-
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TabLayout,
-                defStyleAttr, R.style.Widget_Design_TabLayout);
-
-        mTabStrip.setSelectedIndicatorHeight(
-                a.getDimensionPixelSize(R.styleable.TabLayout_tabIndicatorHeight, 0));
-        mTabStrip.setSelectedIndicatorColor(a.getColor(R.styleable.TabLayout_tabIndicatorColor, 0));
-
-        mTabPaddingStart = mTabPaddingTop = mTabPaddingEnd = mTabPaddingBottom = a
-                .getDimensionPixelSize(R.styleable.TabLayout_tabPadding, 0);
-        mTabPaddingStart = a.getDimensionPixelSize(R.styleable.TabLayout_tabPaddingStart,
-                mTabPaddingStart);
-        mTabPaddingTop = a.getDimensionPixelSize(R.styleable.TabLayout_tabPaddingTop,
-                mTabPaddingTop);
-        mTabPaddingEnd = a.getDimensionPixelSize(R.styleable.TabLayout_tabPaddingEnd,
-                mTabPaddingEnd);
-        mTabPaddingBottom = a.getDimensionPixelSize(R.styleable.TabLayout_tabPaddingBottom,
-                mTabPaddingBottom);
-
-        mTabTextAppearance = a.getResourceId(R.styleable.TabLayout_tabTextAppearance,
-                R.style.TextAppearance_Design_Tab);
-
-        // Text colors/sizes come from the text appearance first
-        final TypedArray ta = context.obtainStyledAttributes(mTabTextAppearance,
-                android.support.v7.appcompat.R.styleable.TextAppearance);
-        try {
-            mTabTextSize = ta.getDimensionPixelSize(
-                    android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize, 0);
-            mTabTextColors = ta.getColorStateList(
-                    android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor);
-        } finally {
-            ta.recycle();
-        }
-
-        if (a.hasValue(R.styleable.TabLayout_tabTextColor)) {
-            // If we have an explicit text color set, use it instead
-            mTabTextColors = a.getColorStateList(R.styleable.TabLayout_tabTextColor);
-        }
-
-        if (a.hasValue(R.styleable.TabLayout_tabSelectedTextColor)) {
-            // We have an explicit selected text color set, so we need to make merge it with the
-            // current colors. This is exposed so that developers can use theme attributes to set
-            // this (theme attrs in ColorStateLists are Lollipop+)
-            final int selected = a.getColor(R.styleable.TabLayout_tabSelectedTextColor, 0);
-            mTabTextColors = createColorStateList(mTabTextColors.getDefaultColor(), selected);
-        }
-
-        mRequestedTabMinWidth = a.getDimensionPixelSize(R.styleable.TabLayout_tabMinWidth,
-                INVALID_WIDTH);
-        mRequestedTabMaxWidth = a.getDimensionPixelSize(R.styleable.TabLayout_tabMaxWidth,
-                INVALID_WIDTH);
-        mTabBackgroundResId = a.getResourceId(R.styleable.TabLayout_tabBackground, 0);
-        mContentInsetStart = a.getDimensionPixelSize(R.styleable.TabLayout_tabContentStart, 0);
-        mMode = a.getInt(R.styleable.TabLayout_tabMode, MODE_FIXED);
-        mTabGravity = a.getInt(R.styleable.TabLayout_tabGravity, GRAVITY_FILL);
-        a.recycle();
-
-        // TODO add attr for these
-        final Resources res = getResources();
-        mTabTextMultiLineSize = res.getDimensionPixelSize(R.dimen.design_tab_text_size_2line);
-        mScrollableTabMinWidth = res.getDimensionPixelSize(R.dimen.design_tab_scrollable_min_width);
-
-        // Now apply the tab mode and gravity
-        applyModeAndGravity();
-    }
-
-    /**
-     * Sets the tab indicator's color for the currently selected tab.
-     *
-     * @param color color to use for the indicator
-     *
-     * @attr ref android.support.design.R.styleable#TabLayout_tabIndicatorColor
-     */
-    public void setSelectedTabIndicatorColor(@ColorInt int color) {
-        mTabStrip.setSelectedIndicatorColor(color);
-    }
-
-    /**
-     * Sets the tab indicator's height for the currently selected tab.
-     *
-     * @param height height to use for the indicator in pixels
-     *
-     * @attr ref android.support.design.R.styleable#TabLayout_tabIndicatorHeight
-     */
-    public void setSelectedTabIndicatorHeight(int height) {
-        mTabStrip.setSelectedIndicatorHeight(height);
-    }
-
-    /**
-     * Set the scroll position of the tabs. This is useful for when the tabs are being displayed as
-     * part of a scrolling container such as {@link android.support.v4.view.ViewPager}.
-     * <p>
-     * Calling this method does not update the selected tab, it is only used for drawing purposes.
-     *
-     * @param position current scroll position
-     * @param positionOffset Value from [0, 1) indicating the offset from {@code position}.
-     * @param updateSelectedText Whether to update the text's selected state.
-     */
-    public void setScrollPosition(int position, float positionOffset, boolean updateSelectedText) {
-        setScrollPosition(position, positionOffset, updateSelectedText, true);
-    }
-
-    void setScrollPosition(int position, float positionOffset, boolean updateSelectedText,
-            boolean updateIndicatorPosition) {
-        final int roundedPosition = Math.round(position + positionOffset);
-        if (roundedPosition < 0 || roundedPosition >= mTabStrip.getChildCount()) {
-            return;
-        }
-
-        // Set the indicator position, if enabled
-        if (updateIndicatorPosition) {
-            mTabStrip.setIndicatorPositionFromTabPosition(position, positionOffset);
-        }
-
-        // Now update the scroll position, canceling any running animation
-        if (mScrollAnimator != null && mScrollAnimator.isRunning()) {
-            mScrollAnimator.cancel();
-        }
-        scrollTo(calculateScrollXForTab(position, positionOffset), 0);
-
-        // Update the 'selected state' view as we scroll, if enabled
-        if (updateSelectedText) {
-            setSelectedTabView(roundedPosition);
-        }
-    }
-
-    private float getScrollPosition() {
-        return mTabStrip.getIndicatorPosition();
-    }
-
-    /**
-     * Add a tab to this layout. The tab will be added at the end of the list.
-     * If this is the first tab to be added it will become the selected tab.
-     *
-     * @param tab Tab to add
-     */
-    public void addTab(@NonNull Tab tab) {
-        addTab(tab, mTabs.isEmpty());
-    }
-
-    /**
-     * Add a tab to this layout. The tab will be inserted at <code>position</code>.
-     * If this is the first tab to be added it will become the selected tab.
-     *
-     * @param tab The tab to add
-     * @param position The new position of the tab
-     */
-    public void addTab(@NonNull Tab tab, int position) {
-        addTab(tab, position, mTabs.isEmpty());
-    }
-
-    /**
-     * Add a tab to this layout. The tab will be added at the end of the list.
-     *
-     * @param tab Tab to add
-     * @param setSelected True if the added tab should become the selected tab.
-     */
-    public void addTab(@NonNull Tab tab, boolean setSelected) {
-        addTab(tab, mTabs.size(), setSelected);
-    }
-
-    /**
-     * Add a tab to this layout. The tab will be inserted at <code>position</code>.
-     *
-     * @param tab The tab to add
-     * @param position The new position of the tab
-     * @param setSelected True if the added tab should become the selected tab.
-     */
-    public void addTab(@NonNull Tab tab, int position, boolean setSelected) {
-        if (tab.mParent != this) {
-            throw new IllegalArgumentException("Tab belongs to a different TabLayout.");
-        }
-        configureTab(tab, position);
-        addTabView(tab);
-
-        if (setSelected) {
-            tab.select();
-        }
-    }
-
-    private void addTabFromItemView(@NonNull TabItem item) {
-        final Tab tab = newTab();
-        if (item.mText != null) {
-            tab.setText(item.mText);
-        }
-        if (item.mIcon != null) {
-            tab.setIcon(item.mIcon);
-        }
-        if (item.mCustomLayout != 0) {
-            tab.setCustomView(item.mCustomLayout);
-        }
-        if (!TextUtils.isEmpty(item.getContentDescription())) {
-            tab.setContentDescription(item.getContentDescription());
-        }
-        addTab(tab);
-    }
-
-    /**
-     * @deprecated Use {@link #addOnTabSelectedListener(OnTabSelectedListener)} and
-     * {@link #removeOnTabSelectedListener(OnTabSelectedListener)}.
-     */
-    @Deprecated
-    public void setOnTabSelectedListener(@Nullable OnTabSelectedListener listener) {
-        // The logic in this method emulates what we had before support for multiple
-        // registered listeners.
-        if (mSelectedListener != null) {
-            removeOnTabSelectedListener(mSelectedListener);
-        }
-        // Update the deprecated field so that we can remove the passed listener the next
-        // time we're called
-        mSelectedListener = listener;
-        if (listener != null) {
-            addOnTabSelectedListener(listener);
-        }
-    }
-
-    /**
-     * Add a {@link TabLayout.OnTabSelectedListener} that will be invoked when tab selection
-     * changes.
-     *
-     * <p>Components that add a listener should take care to remove it when finished via
-     * {@link #removeOnTabSelectedListener(OnTabSelectedListener)}.</p>
-     *
-     * @param listener listener to add
-     */
-    public void addOnTabSelectedListener(@NonNull OnTabSelectedListener listener) {
-        if (!mSelectedListeners.contains(listener)) {
-            mSelectedListeners.add(listener);
-        }
-    }
-
-    /**
-     * Remove the given {@link TabLayout.OnTabSelectedListener} that was previously added via
-     * {@link #addOnTabSelectedListener(OnTabSelectedListener)}.
-     *
-     * @param listener listener to remove
-     */
-    public void removeOnTabSelectedListener(@NonNull OnTabSelectedListener listener) {
-        mSelectedListeners.remove(listener);
-    }
-
-    /**
-     * Remove all previously added {@link TabLayout.OnTabSelectedListener}s.
-     */
-    public void clearOnTabSelectedListeners() {
-        mSelectedListeners.clear();
-    }
-
-    /**
-     * Create and return a new {@link Tab}. You need to manually add this using
-     * {@link #addTab(Tab)} or a related method.
-     *
-     * @return A new Tab
-     * @see #addTab(Tab)
-     */
-    @NonNull
-    public Tab newTab() {
-        Tab tab = sTabPool.acquire();
-        if (tab == null) {
-            tab = new Tab();
-        }
-        tab.mParent = this;
-        tab.mView = createTabView(tab);
-        return tab;
-    }
-
-    /**
-     * Returns the number of tabs currently registered with the action bar.
-     *
-     * @return Tab count
-     */
-    public int getTabCount() {
-        return mTabs.size();
-    }
-
-    /**
-     * Returns the tab at the specified index.
-     */
-    @Nullable
-    public Tab getTabAt(int index) {
-        return (index < 0 || index >= getTabCount()) ? null : mTabs.get(index);
-    }
-
-    /**
-     * Returns the position of the current selected tab.
-     *
-     * @return selected tab position, or {@code -1} if there isn't a selected tab.
-     */
-    public int getSelectedTabPosition() {
-        return mSelectedTab != null ? mSelectedTab.getPosition() : -1;
-    }
-
-    /**
-     * Remove a tab from the layout. If the removed tab was selected it will be deselected
-     * and another tab will be selected if present.
-     *
-     * @param tab The tab to remove
-     */
-    public void removeTab(Tab tab) {
-        if (tab.mParent != this) {
-            throw new IllegalArgumentException("Tab does not belong to this TabLayout.");
-        }
-
-        removeTabAt(tab.getPosition());
-    }
-
-    /**
-     * Remove a tab from the layout. If the removed tab was selected it will be deselected
-     * and another tab will be selected if present.
-     *
-     * @param position Position of the tab to remove
-     */
-    public void removeTabAt(int position) {
-        final int selectedTabPosition = mSelectedTab != null ? mSelectedTab.getPosition() : 0;
-        removeTabViewAt(position);
-
-        final Tab removedTab = mTabs.remove(position);
-        if (removedTab != null) {
-            removedTab.reset();
-            sTabPool.release(removedTab);
-        }
-
-        final int newTabCount = mTabs.size();
-        for (int i = position; i < newTabCount; i++) {
-            mTabs.get(i).setPosition(i);
-        }
-
-        if (selectedTabPosition == position) {
-            selectTab(mTabs.isEmpty() ? null : mTabs.get(Math.max(0, position - 1)));
-        }
-    }
-
-    /**
-     * Remove all tabs from the action bar and deselect the current tab.
-     */
-    public void removeAllTabs() {
-        // Remove all the views
-        for (int i = mTabStrip.getChildCount() - 1; i >= 0; i--) {
-            removeTabViewAt(i);
-        }
-
-        for (final Iterator<Tab> i = mTabs.iterator(); i.hasNext();) {
-            final Tab tab = i.next();
-            i.remove();
-            tab.reset();
-            sTabPool.release(tab);
-        }
-
-        mSelectedTab = null;
-    }
-
-    /**
-     * Set the behavior mode for the Tabs in this layout. The valid input options are:
-     * <ul>
-     * <li>{@link #MODE_FIXED}: Fixed tabs display all tabs concurrently and are best used
-     * with content that benefits from quick pivots between tabs.</li>
-     * <li>{@link #MODE_SCROLLABLE}: Scrollable tabs display a subset of tabs at any given moment,
-     * and can contain longer tab labels and a larger number of tabs. They are best used for
-     * browsing contexts in touch interfaces when users don’t need to directly compare the tab
-     * labels. This mode is commonly used with a {@link android.support.v4.view.ViewPager}.</li>
-     * </ul>
-     *
-     * @param mode one of {@link #MODE_FIXED} or {@link #MODE_SCROLLABLE}.
-     *
-     * @attr ref android.support.design.R.styleable#TabLayout_tabMode
-     */
-    public void setTabMode(@Mode int mode) {
-        if (mode != mMode) {
-            mMode = mode;
-            applyModeAndGravity();
-        }
-    }
-
-    /**
-     * Returns the current mode used by this {@link TabLayout}.
-     *
-     * @see #setTabMode(int)
-     */
-    @Mode
-    public int getTabMode() {
-        return mMode;
-    }
-
-    /**
-     * Set the gravity to use when laying out the tabs.
-     *
-     * @param gravity one of {@link #GRAVITY_CENTER} or {@link #GRAVITY_FILL}.
-     *
-     * @attr ref android.support.design.R.styleable#TabLayout_tabGravity
-     */
-    public void setTabGravity(@TabGravity int gravity) {
-        if (mTabGravity != gravity) {
-            mTabGravity = gravity;
-            applyModeAndGravity();
-        }
-    }
-
-    /**
-     * The current gravity used for laying out tabs.
-     *
-     * @return one of {@link #GRAVITY_CENTER} or {@link #GRAVITY_FILL}.
-     */
-    @TabGravity
-    public int getTabGravity() {
-        return mTabGravity;
-    }
-
-    /**
-     * Sets the text colors for the different states (normal, selected) used for the tabs.
-     *
-     * @see #getTabTextColors()
-     */
-    public void setTabTextColors(@Nullable ColorStateList textColor) {
-        if (mTabTextColors != textColor) {
-            mTabTextColors = textColor;
-            updateAllTabs();
-        }
-    }
-
-    /**
-     * Gets the text colors for the different states (normal, selected) used for the tabs.
-     */
-    @Nullable
-    public ColorStateList getTabTextColors() {
-        return mTabTextColors;
-    }
-
-    /**
-     * Sets the text colors for the different states (normal, selected) used for the tabs.
-     *
-     * @attr ref android.support.design.R.styleable#TabLayout_tabTextColor
-     * @attr ref android.support.design.R.styleable#TabLayout_tabSelectedTextColor
-     */
-    public void setTabTextColors(int normalColor, int selectedColor) {
-        setTabTextColors(createColorStateList(normalColor, selectedColor));
-    }
-
-    /**
-     * The one-stop shop for setting up this {@link TabLayout} with a {@link ViewPager}.
-     *
-     * <p>This is the same as calling {@link #setupWithViewPager(ViewPager, boolean)} with
-     * auto-refresh enabled.</p>
-     *
-     * @param viewPager the ViewPager to link to, or {@code null} to clear any previous link
-     */
-    public void setupWithViewPager(@Nullable ViewPager viewPager) {
-        setupWithViewPager(viewPager, true);
-    }
-
-    /**
-     * The one-stop shop for setting up this {@link TabLayout} with a {@link ViewPager}.
-     *
-     * <p>This method will link the given ViewPager and this TabLayout together so that
-     * changes in one are automatically reflected in the other. This includes scroll state changes
-     * and clicks. The tabs displayed in this layout will be populated
-     * from the ViewPager adapter's page titles.</p>
-     *
-     * <p>If {@code autoRefresh} is {@code true}, any changes in the {@link PagerAdapter} will
-     * trigger this layout to re-populate itself from the adapter's titles.</p>
-     *
-     * <p>If the given ViewPager is non-null, it needs to already have a
-     * {@link PagerAdapter} set.</p>
-     *
-     * @param viewPager   the ViewPager to link to, or {@code null} to clear any previous link
-     * @param autoRefresh whether this layout should refresh its contents if the given ViewPager's
-     *                    content changes
-     */
-    public void setupWithViewPager(@Nullable final ViewPager viewPager, boolean autoRefresh) {
-        setupWithViewPager(viewPager, autoRefresh, false);
-    }
-
-    private void setupWithViewPager(@Nullable final ViewPager viewPager, boolean autoRefresh,
-            boolean implicitSetup) {
-        if (mViewPager != null) {
-            // If we've already been setup with a ViewPager, remove us from it
-            if (mPageChangeListener != null) {
-                mViewPager.removeOnPageChangeListener(mPageChangeListener);
-            }
-            if (mAdapterChangeListener != null) {
-                mViewPager.removeOnAdapterChangeListener(mAdapterChangeListener);
-            }
-        }
-
-        if (mCurrentVpSelectedListener != null) {
-            // If we already have a tab selected listener for the ViewPager, remove it
-            removeOnTabSelectedListener(mCurrentVpSelectedListener);
-            mCurrentVpSelectedListener = null;
-        }
-
-        if (viewPager != null) {
-            mViewPager = viewPager;
-
-            // Add our custom OnPageChangeListener to the ViewPager
-            if (mPageChangeListener == null) {
-                mPageChangeListener = new TabLayoutOnPageChangeListener(this);
-            }
-            mPageChangeListener.reset();
-            viewPager.addOnPageChangeListener(mPageChangeListener);
-
-            // Now we'll add a tab selected listener to set ViewPager's current item
-            mCurrentVpSelectedListener = new ViewPagerOnTabSelectedListener(viewPager);
-            addOnTabSelectedListener(mCurrentVpSelectedListener);
-
-            final PagerAdapter adapter = viewPager.getAdapter();
-            if (adapter != null) {
-                // Now we'll populate ourselves from the pager adapter, adding an observer if
-                // autoRefresh is enabled
-                setPagerAdapter(adapter, autoRefresh);
-            }
-
-            // Add a listener so that we're notified of any adapter changes
-            if (mAdapterChangeListener == null) {
-                mAdapterChangeListener = new AdapterChangeListener();
-            }
-            mAdapterChangeListener.setAutoRefresh(autoRefresh);
-            viewPager.addOnAdapterChangeListener(mAdapterChangeListener);
-
-            // Now update the scroll position to match the ViewPager's current item
-            setScrollPosition(viewPager.getCurrentItem(), 0f, true);
-        } else {
-            // We've been given a null ViewPager so we need to clear out the internal state,
-            // listeners and observers
-            mViewPager = null;
-            setPagerAdapter(null, false);
-        }
-
-        mSetupViewPagerImplicitly = implicitSetup;
-    }
-
-    /**
-     * @deprecated Use {@link #setupWithViewPager(ViewPager)} to link a TabLayout with a ViewPager
-     *             together. When that method is used, the TabLayout will be automatically updated
-     *             when the {@link PagerAdapter} is changed.
-     */
-    @Deprecated
-    public void setTabsFromPagerAdapter(@Nullable final PagerAdapter adapter) {
-        setPagerAdapter(adapter, false);
-    }
-
-    @Override
-    public boolean shouldDelayChildPressedState() {
-        // Only delay the pressed state if the tabs can scroll
-        return getTabScrollRange() > 0;
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-
-        if (mViewPager == null) {
-            // If we don't have a ViewPager already, check if our parent is a ViewPager to
-            // setup with it automatically
-            final ViewParent vp = getParent();
-            if (vp instanceof ViewPager) {
-                // If we have a ViewPager parent and we've been added as part of its decor, let's
-                // assume that we should automatically setup to display any titles
-                setupWithViewPager((ViewPager) vp, true, true);
-            }
-        }
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-
-        if (mSetupViewPagerImplicitly) {
-            // If we've been setup with a ViewPager implicitly, let's clear out any listeners, etc
-            setupWithViewPager(null);
-            mSetupViewPagerImplicitly = false;
-        }
-    }
-
-    private int getTabScrollRange() {
-        return Math.max(0, mTabStrip.getWidth() - getWidth() - getPaddingLeft()
-                - getPaddingRight());
-    }
-
-    void setPagerAdapter(@Nullable final PagerAdapter adapter, final boolean addObserver) {
-        if (mPagerAdapter != null && mPagerAdapterObserver != null) {
-            // If we already have a PagerAdapter, unregister our observer
-            mPagerAdapter.unregisterDataSetObserver(mPagerAdapterObserver);
-        }
-
-        mPagerAdapter = adapter;
-
-        if (addObserver && adapter != null) {
-            // Register our observer on the new adapter
-            if (mPagerAdapterObserver == null) {
-                mPagerAdapterObserver = new PagerAdapterObserver();
-            }
-            adapter.registerDataSetObserver(mPagerAdapterObserver);
-        }
-
-        // Finally make sure we reflect the new adapter
-        populateFromPagerAdapter();
-    }
-
-    void populateFromPagerAdapter() {
-        removeAllTabs();
-
-        if (mPagerAdapter != null) {
-            final int adapterCount = mPagerAdapter.getCount();
-            for (int i = 0; i < adapterCount; i++) {
-                addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), false);
-            }
-
-            // Make sure we reflect the currently set ViewPager item
-            if (mViewPager != null && adapterCount > 0) {
-                final int curItem = mViewPager.getCurrentItem();
-                if (curItem != getSelectedTabPosition() && curItem < getTabCount()) {
-                    selectTab(getTabAt(curItem));
-                }
-            }
-        }
-    }
-
-    private void updateAllTabs() {
-        for (int i = 0, z = mTabs.size(); i < z; i++) {
-            mTabs.get(i).updateView();
-        }
-    }
-
-    private TabView createTabView(@NonNull final Tab tab) {
-        TabView tabView = mTabViewPool != null ? mTabViewPool.acquire() : null;
-        if (tabView == null) {
-            tabView = new TabView(getContext());
-        }
-        tabView.setTab(tab);
-        tabView.setFocusable(true);
-        tabView.setMinimumWidth(getTabMinWidth());
-        return tabView;
-    }
-
-    private void configureTab(Tab tab, int position) {
-        tab.setPosition(position);
-        mTabs.add(position, tab);
-
-        final int count = mTabs.size();
-        for (int i = position + 1; i < count; i++) {
-            mTabs.get(i).setPosition(i);
-        }
-    }
-
-    private void addTabView(Tab tab) {
-        final TabView tabView = tab.mView;
-        mTabStrip.addView(tabView, tab.getPosition(), createLayoutParamsForTabs());
-    }
-
-    @Override
-    public void addView(View child) {
-        addViewInternal(child);
-    }
-
-    @Override
-    public void addView(View child, int index) {
-        addViewInternal(child);
-    }
-
-    @Override
-    public void addView(View child, ViewGroup.LayoutParams params) {
-        addViewInternal(child);
-    }
-
-    @Override
-    public void addView(View child, int index, ViewGroup.LayoutParams params) {
-        addViewInternal(child);
-    }
-
-    private void addViewInternal(final View child) {
-        if (child instanceof TabItem) {
-            addTabFromItemView((TabItem) child);
-        } else {
-            throw new IllegalArgumentException("Only TabItem instances can be added to TabLayout");
-        }
-    }
-
-    private LinearLayout.LayoutParams createLayoutParamsForTabs() {
-        final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
-                LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
-        updateTabViewLayoutParams(lp);
-        return lp;
-    }
-
-    private void updateTabViewLayoutParams(LinearLayout.LayoutParams lp) {
-        if (mMode == MODE_FIXED && mTabGravity == GRAVITY_FILL) {
-            lp.width = 0;
-            lp.weight = 1;
-        } else {
-            lp.width = LinearLayout.LayoutParams.WRAP_CONTENT;
-            lp.weight = 0;
-        }
-    }
-
-    int dpToPx(int dps) {
-        return Math.round(getResources().getDisplayMetrics().density * dps);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        // If we have a MeasureSpec which allows us to decide our height, try and use the default
-        // height
-        final int idealHeight = dpToPx(getDefaultHeight()) + getPaddingTop() + getPaddingBottom();
-        switch (MeasureSpec.getMode(heightMeasureSpec)) {
-            case MeasureSpec.AT_MOST:
-                heightMeasureSpec = MeasureSpec.makeMeasureSpec(
-                        Math.min(idealHeight, MeasureSpec.getSize(heightMeasureSpec)),
-                        MeasureSpec.EXACTLY);
-                break;
-            case MeasureSpec.UNSPECIFIED:
-                heightMeasureSpec = MeasureSpec.makeMeasureSpec(idealHeight, MeasureSpec.EXACTLY);
-                break;
-        }
-
-        final int specWidth = MeasureSpec.getSize(widthMeasureSpec);
-        if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED) {
-            // If we don't have an unspecified width spec, use the given size to calculate
-            // the max tab width
-            mTabMaxWidth = mRequestedTabMaxWidth > 0
-                    ? mRequestedTabMaxWidth
-                    : specWidth - dpToPx(TAB_MIN_WIDTH_MARGIN);
-        }
-
-        // Now super measure itself using the (possibly) modified height spec
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        if (getChildCount() == 1) {
-            // If we're in fixed mode then we need to make the tab strip is the same width as us
-            // so we don't scroll
-            final View child = getChildAt(0);
-            boolean remeasure = false;
-
-            switch (mMode) {
-                case MODE_SCROLLABLE:
-                    // We only need to resize the child if it's smaller than us. This is similar
-                    // to fillViewport
-                    remeasure = child.getMeasuredWidth() < getMeasuredWidth();
-                    break;
-                case MODE_FIXED:
-                    // Resize the child so that it doesn't scroll
-                    remeasure = child.getMeasuredWidth() != getMeasuredWidth();
-                    break;
-            }
-
-            if (remeasure) {
-                // Re-measure the child with a widthSpec set to be exactly our measure width
-                int childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, getPaddingTop()
-                        + getPaddingBottom(), child.getLayoutParams().height);
-                int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
-                        getMeasuredWidth(), MeasureSpec.EXACTLY);
-                child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
-            }
-        }
-    }
-
-    private void removeTabViewAt(int position) {
-        final TabView view = (TabView) mTabStrip.getChildAt(position);
-        mTabStrip.removeViewAt(position);
-        if (view != null) {
-            view.reset();
-            mTabViewPool.release(view);
-        }
-        requestLayout();
-    }
-
-    private void animateToTab(int newPosition) {
-        if (newPosition == Tab.INVALID_POSITION) {
-            return;
-        }
-
-        if (getWindowToken() == null || !ViewCompat.isLaidOut(this)
-                || mTabStrip.childrenNeedLayout()) {
-            // If we don't have a window token, or we haven't been laid out yet just draw the new
-            // position now
-            setScrollPosition(newPosition, 0f, true);
-            return;
-        }
-
-        final int startScrollX = getScrollX();
-        final int targetScrollX = calculateScrollXForTab(newPosition, 0);
-
-        if (startScrollX != targetScrollX) {
-            ensureScrollAnimator();
-
-            mScrollAnimator.setIntValues(startScrollX, targetScrollX);
-            mScrollAnimator.start();
-        }
-
-        // Now animate the indicator
-        mTabStrip.animateIndicatorToPosition(newPosition, ANIMATION_DURATION);
-    }
-
-    private void ensureScrollAnimator() {
-        if (mScrollAnimator == null) {
-            mScrollAnimator = new ValueAnimator();
-            mScrollAnimator.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
-            mScrollAnimator.setDuration(ANIMATION_DURATION);
-            mScrollAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animator) {
-                    scrollTo((int) animator.getAnimatedValue(), 0);
-                }
-            });
-        }
-    }
-
-    void setScrollAnimatorListener(Animator.AnimatorListener listener) {
-        ensureScrollAnimator();
-        mScrollAnimator.addListener(listener);
-    }
-
-    private void setSelectedTabView(int position) {
-        final int tabCount = mTabStrip.getChildCount();
-        if (position < tabCount) {
-            for (int i = 0; i < tabCount; i++) {
-                final View child = mTabStrip.getChildAt(i);
-                child.setSelected(i == position);
-            }
-        }
-    }
-
-    void selectTab(Tab tab) {
-        selectTab(tab, true);
-    }
-
-    void selectTab(final Tab tab, boolean updateIndicator) {
-        final Tab currentTab = mSelectedTab;
-
-        if (currentTab == tab) {
-            if (currentTab != null) {
-                dispatchTabReselected(tab);
-                animateToTab(tab.getPosition());
-            }
-        } else {
-            final int newPosition = tab != null ? tab.getPosition() : Tab.INVALID_POSITION;
-            if (updateIndicator) {
-                if ((currentTab == null || currentTab.getPosition() == Tab.INVALID_POSITION)
-                        && newPosition != Tab.INVALID_POSITION) {
-                    // If we don't currently have a tab, just draw the indicator
-                    setScrollPosition(newPosition, 0f, true);
-                } else {
-                    animateToTab(newPosition);
-                }
-                if (newPosition != Tab.INVALID_POSITION) {
-                    setSelectedTabView(newPosition);
-                }
-            }
-            if (currentTab != null) {
-                dispatchTabUnselected(currentTab);
-            }
-            mSelectedTab = tab;
-            if (tab != null) {
-                dispatchTabSelected(tab);
-            }
-        }
-    }
-
-    private void dispatchTabSelected(@NonNull final Tab tab) {
-        for (int i = mSelectedListeners.size() - 1; i >= 0; i--) {
-            mSelectedListeners.get(i).onTabSelected(tab);
-        }
-    }
-
-    private void dispatchTabUnselected(@NonNull final Tab tab) {
-        for (int i = mSelectedListeners.size() - 1; i >= 0; i--) {
-            mSelectedListeners.get(i).onTabUnselected(tab);
-        }
-    }
-
-    private void dispatchTabReselected(@NonNull final Tab tab) {
-        for (int i = mSelectedListeners.size() - 1; i >= 0; i--) {
-            mSelectedListeners.get(i).onTabReselected(tab);
-        }
-    }
-
-    private int calculateScrollXForTab(int position, float positionOffset) {
-        if (mMode == MODE_SCROLLABLE) {
-            final View selectedChild = mTabStrip.getChildAt(position);
-            final View nextChild = position + 1 < mTabStrip.getChildCount()
-                    ? mTabStrip.getChildAt(position + 1)
-                    : null;
-            final int selectedWidth = selectedChild != null ? selectedChild.getWidth() : 0;
-            final int nextWidth = nextChild != null ? nextChild.getWidth() : 0;
-
-            // base scroll amount: places center of tab in center of parent
-            int scrollBase = selectedChild.getLeft() + (selectedWidth / 2) - (getWidth() / 2);
-            // offset amount: fraction of the distance between centers of tabs
-            int scrollOffset = (int) ((selectedWidth + nextWidth) * 0.5f * positionOffset);
-
-            return (ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_LTR)
-                    ? scrollBase + scrollOffset
-                    : scrollBase - scrollOffset;
-        }
-        return 0;
-    }
-
-    private void applyModeAndGravity() {
-        int paddingStart = 0;
-        if (mMode == MODE_SCROLLABLE) {
-            // If we're scrollable, or fixed at start, inset using padding
-            paddingStart = Math.max(0, mContentInsetStart - mTabPaddingStart);
-        }
-        ViewCompat.setPaddingRelative(mTabStrip, paddingStart, 0, 0, 0);
-
-        switch (mMode) {
-            case MODE_FIXED:
-                mTabStrip.setGravity(Gravity.CENTER_HORIZONTAL);
-                break;
-            case MODE_SCROLLABLE:
-                mTabStrip.setGravity(GravityCompat.START);
-                break;
-        }
-
-        updateTabViews(true);
-    }
-
-    void updateTabViews(final boolean requestLayout) {
-        for (int i = 0; i < mTabStrip.getChildCount(); i++) {
-            View child = mTabStrip.getChildAt(i);
-            child.setMinimumWidth(getTabMinWidth());
-            updateTabViewLayoutParams((LinearLayout.LayoutParams) child.getLayoutParams());
-            if (requestLayout) {
-                child.requestLayout();
-            }
-        }
-    }
-
-    /**
-     * A tab in this layout. Instances can be created via {@link #newTab()}.
-     */
-    public static final class Tab {
-
-        /**
-         * An invalid position for a tab.
-         *
-         * @see #getPosition()
-         */
-        public static final int INVALID_POSITION = -1;
-
-        private Object mTag;
-        private Drawable mIcon;
-        private CharSequence mText;
-        private CharSequence mContentDesc;
-        private int mPosition = INVALID_POSITION;
-        private View mCustomView;
-
-        TabLayout mParent;
-        TabView mView;
-
-        Tab() {
-            // Private constructor
-        }
-
-        /**
-         * @return This Tab's tag object.
-         */
-        @Nullable
-        public Object getTag() {
-            return mTag;
-        }
-
-        /**
-         * Give this Tab an arbitrary object to hold for later use.
-         *
-         * @param tag Object to store
-         * @return The current instance for call chaining
-         */
-        @NonNull
-        public Tab setTag(@Nullable Object tag) {
-            mTag = tag;
-            return this;
-        }
-
-
-        /**
-         * Returns the custom view used for this tab.
-         *
-         * @see #setCustomView(View)
-         * @see #setCustomView(int)
-         */
-        @Nullable
-        public View getCustomView() {
-            return mCustomView;
-        }
-
-        /**
-         * Set a custom view to be used for this tab.
-         * <p>
-         * If the provided view contains a {@link TextView} with an ID of
-         * {@link android.R.id#text1} then that will be updated with the value given
-         * to {@link #setText(CharSequence)}. Similarly, if this layout contains an
-         * {@link ImageView} with ID {@link android.R.id#icon} then it will be updated with
-         * the value given to {@link #setIcon(Drawable)}.
-         * </p>
-         *
-         * @param view Custom view to be used as a tab.
-         * @return The current instance for call chaining
-         */
-        @NonNull
-        public Tab setCustomView(@Nullable View view) {
-            mCustomView = view;
-            updateView();
-            return this;
-        }
-
-        /**
-         * Set a custom view to be used for this tab.
-         * <p>
-         * If the inflated layout contains a {@link TextView} with an ID of
-         * {@link android.R.id#text1} then that will be updated with the value given
-         * to {@link #setText(CharSequence)}. Similarly, if this layout contains an
-         * {@link ImageView} with ID {@link android.R.id#icon} then it will be updated with
-         * the value given to {@link #setIcon(Drawable)}.
-         * </p>
-         *
-         * @param resId A layout resource to inflate and use as a custom tab view
-         * @return The current instance for call chaining
-         */
-        @NonNull
-        public Tab setCustomView(@LayoutRes int resId) {
-            final LayoutInflater inflater = LayoutInflater.from(mView.getContext());
-            return setCustomView(inflater.inflate(resId, mView, false));
-        }
-
-        /**
-         * Return the icon associated with this tab.
-         *
-         * @return The tab's icon
-         */
-        @Nullable
-        public Drawable getIcon() {
-            return mIcon;
-        }
-
-        /**
-         * Return the current position of this tab in the action bar.
-         *
-         * @return Current position, or {@link #INVALID_POSITION} if this tab is not currently in
-         * the action bar.
-         */
-        public int getPosition() {
-            return mPosition;
-        }
-
-        void setPosition(int position) {
-            mPosition = position;
-        }
-
-        /**
-         * Return the text of this tab.
-         *
-         * @return The tab's text
-         */
-        @Nullable
-        public CharSequence getText() {
-            return mText;
-        }
-
-        /**
-         * Set the icon displayed on this tab.
-         *
-         * @param icon The drawable to use as an icon
-         * @return The current instance for call chaining
-         */
-        @NonNull
-        public Tab setIcon(@Nullable Drawable icon) {
-            mIcon = icon;
-            updateView();
-            return this;
-        }
-
-        /**
-         * Set the icon displayed on this tab.
-         *
-         * @param resId A resource ID referring to the icon that should be displayed
-         * @return The current instance for call chaining
-         */
-        @NonNull
-        public Tab setIcon(@DrawableRes int resId) {
-            if (mParent == null) {
-                throw new IllegalArgumentException("Tab not attached to a TabLayout");
-            }
-            return setIcon(AppCompatResources.getDrawable(mParent.getContext(), resId));
-        }
-
-        /**
-         * Set the text displayed on this tab. Text may be truncated if there is not room to display
-         * the entire string.
-         *
-         * @param text The text to display
-         * @return The current instance for call chaining
-         */
-        @NonNull
-        public Tab setText(@Nullable CharSequence text) {
-            mText = text;
-            updateView();
-            return this;
-        }
-
-        /**
-         * Set the text displayed on this tab. Text may be truncated if there is not room to display
-         * the entire string.
-         *
-         * @param resId A resource ID referring to the text that should be displayed
-         * @return The current instance for call chaining
-         */
-        @NonNull
-        public Tab setText(@StringRes int resId) {
-            if (mParent == null) {
-                throw new IllegalArgumentException("Tab not attached to a TabLayout");
-            }
-            return setText(mParent.getResources().getText(resId));
-        }
-
-        /**
-         * Select this tab. Only valid if the tab has been added to the action bar.
-         */
-        public void select() {
-            if (mParent == null) {
-                throw new IllegalArgumentException("Tab not attached to a TabLayout");
-            }
-            mParent.selectTab(this);
-        }
-
-        /**
-         * Returns true if this tab is currently selected.
-         */
-        public boolean isSelected() {
-            if (mParent == null) {
-                throw new IllegalArgumentException("Tab not attached to a TabLayout");
-            }
-            return mParent.getSelectedTabPosition() == mPosition;
-        }
-
-        /**
-         * Set a description of this tab's content for use in accessibility support. If no content
-         * description is provided the title will be used.
-         *
-         * @param resId A resource ID referring to the description text
-         * @return The current instance for call chaining
-         * @see #setContentDescription(CharSequence)
-         * @see #getContentDescription()
-         */
-        @NonNull
-        public Tab setContentDescription(@StringRes int resId) {
-            if (mParent == null) {
-                throw new IllegalArgumentException("Tab not attached to a TabLayout");
-            }
-            return setContentDescription(mParent.getResources().getText(resId));
-        }
-
-        /**
-         * Set a description of this tab's content for use in accessibility support. If no content
-         * description is provided the title will be used.
-         *
-         * @param contentDesc Description of this tab's content
-         * @return The current instance for call chaining
-         * @see #setContentDescription(int)
-         * @see #getContentDescription()
-         */
-        @NonNull
-        public Tab setContentDescription(@Nullable CharSequence contentDesc) {
-            mContentDesc = contentDesc;
-            updateView();
-            return this;
-        }
-
-        /**
-         * Gets a brief description of this tab's content for use in accessibility support.
-         *
-         * @return Description of this tab's content
-         * @see #setContentDescription(CharSequence)
-         * @see #setContentDescription(int)
-         */
-        @Nullable
-        public CharSequence getContentDescription() {
-            return mContentDesc;
-        }
-
-        void updateView() {
-            if (mView != null) {
-                mView.update();
-            }
-        }
-
-        void reset() {
-            mParent = null;
-            mView = null;
-            mTag = null;
-            mIcon = null;
-            mText = null;
-            mContentDesc = null;
-            mPosition = INVALID_POSITION;
-            mCustomView = null;
-        }
-    }
-
-    class TabView extends LinearLayout {
-        private Tab mTab;
-        private TextView mTextView;
-        private ImageView mIconView;
-
-        private View mCustomView;
-        private TextView mCustomTextView;
-        private ImageView mCustomIconView;
-
-        private int mDefaultMaxLines = 2;
-
-        public TabView(Context context) {
-            super(context);
-            if (mTabBackgroundResId != 0) {
-                ViewCompat.setBackground(
-                        this, AppCompatResources.getDrawable(context, mTabBackgroundResId));
-            }
-            ViewCompat.setPaddingRelative(this, mTabPaddingStart, mTabPaddingTop,
-                    mTabPaddingEnd, mTabPaddingBottom);
-            setGravity(Gravity.CENTER);
-            setOrientation(VERTICAL);
-            setClickable(true);
-            ViewCompat.setPointerIcon(this,
-                    PointerIconCompat.getSystemIcon(getContext(), PointerIconCompat.TYPE_HAND));
-        }
-
-        @Override
-        public boolean performClick() {
-            final boolean handled = super.performClick();
-
-            if (mTab != null) {
-                if (!handled) {
-                    playSoundEffect(SoundEffectConstants.CLICK);
-                }
-                mTab.select();
-                return true;
-            } else {
-                return handled;
-            }
-        }
-
-        @Override
-        public void setSelected(final boolean selected) {
-            final boolean changed = isSelected() != selected;
-
-            super.setSelected(selected);
-
-            if (changed && selected && Build.VERSION.SDK_INT < 16) {
-                // Pre-JB we need to manually send the TYPE_VIEW_SELECTED event
-                sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
-            }
-
-            // Always dispatch this to the child views, regardless of whether the value has
-            // changed
-            if (mTextView != null) {
-                mTextView.setSelected(selected);
-            }
-            if (mIconView != null) {
-                mIconView.setSelected(selected);
-            }
-            if (mCustomView != null) {
-                mCustomView.setSelected(selected);
-            }
-        }
-
-        @Override
-        public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
-            super.onInitializeAccessibilityEvent(event);
-            // This view masquerades as an action bar tab.
-            event.setClassName(ActionBar.Tab.class.getName());
-        }
-
-        @Override
-        public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
-            super.onInitializeAccessibilityNodeInfo(info);
-            // This view masquerades as an action bar tab.
-            info.setClassName(ActionBar.Tab.class.getName());
-        }
-
-        @Override
-        public void onMeasure(final int origWidthMeasureSpec, final int origHeightMeasureSpec) {
-            final int specWidthSize = MeasureSpec.getSize(origWidthMeasureSpec);
-            final int specWidthMode = MeasureSpec.getMode(origWidthMeasureSpec);
-            final int maxWidth = getTabMaxWidth();
-
-            final int widthMeasureSpec;
-            final int heightMeasureSpec = origHeightMeasureSpec;
-
-            if (maxWidth > 0 && (specWidthMode == MeasureSpec.UNSPECIFIED
-                    || specWidthSize > maxWidth)) {
-                // If we have a max width and a given spec which is either unspecified or
-                // larger than the max width, update the width spec using the same mode
-                widthMeasureSpec = MeasureSpec.makeMeasureSpec(mTabMaxWidth, MeasureSpec.AT_MOST);
-            } else {
-                // Else, use the original width spec
-                widthMeasureSpec = origWidthMeasureSpec;
-            }
-
-            // Now lets measure
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-            // We need to switch the text size based on whether the text is spanning 2 lines or not
-            if (mTextView != null) {
-                final Resources res = getResources();
-                float textSize = mTabTextSize;
-                int maxLines = mDefaultMaxLines;
-
-                if (mIconView != null && mIconView.getVisibility() == VISIBLE) {
-                    // If the icon view is being displayed, we limit the text to 1 line
-                    maxLines = 1;
-                } else if (mTextView != null && mTextView.getLineCount() > 1) {
-                    // Otherwise when we have text which wraps we reduce the text size
-                    textSize = mTabTextMultiLineSize;
-                }
-
-                final float curTextSize = mTextView.getTextSize();
-                final int curLineCount = mTextView.getLineCount();
-                final int curMaxLines = TextViewCompat.getMaxLines(mTextView);
-
-                if (textSize != curTextSize || (curMaxLines >= 0 && maxLines != curMaxLines)) {
-                    // We've got a new text size and/or max lines...
-                    boolean updateTextView = true;
-
-                    if (mMode == MODE_FIXED && textSize > curTextSize && curLineCount == 1) {
-                        // If we're in fixed mode, going up in text size and currently have 1 line
-                        // then it's very easy to get into an infinite recursion.
-                        // To combat that we check to see if the change in text size
-                        // will cause a line count change. If so, abort the size change and stick
-                        // to the smaller size.
-                        final Layout layout = mTextView.getLayout();
-                        if (layout == null || approximateLineWidth(layout, 0, textSize)
-                                > getMeasuredWidth() - getPaddingLeft() - getPaddingRight()) {
-                            updateTextView = false;
-                        }
-                    }
-
-                    if (updateTextView) {
-                        mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
-                        mTextView.setMaxLines(maxLines);
-                        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-                    }
-                }
-            }
-        }
-
-        void setTab(@Nullable final Tab tab) {
-            if (tab != mTab) {
-                mTab = tab;
-                update();
-            }
-        }
-
-        void reset() {
-            setTab(null);
-            setSelected(false);
-        }
-
-        final void update() {
-            final Tab tab = mTab;
-            final View custom = tab != null ? tab.getCustomView() : null;
-            if (custom != null) {
-                final ViewParent customParent = custom.getParent();
-                if (customParent != this) {
-                    if (customParent != null) {
-                        ((ViewGroup) customParent).removeView(custom);
-                    }
-                    addView(custom);
-                }
-                mCustomView = custom;
-                if (mTextView != null) {
-                    mTextView.setVisibility(GONE);
-                }
-                if (mIconView != null) {
-                    mIconView.setVisibility(GONE);
-                    mIconView.setImageDrawable(null);
-                }
-
-                mCustomTextView = (TextView) custom.findViewById(android.R.id.text1);
-                if (mCustomTextView != null) {
-                    mDefaultMaxLines = TextViewCompat.getMaxLines(mCustomTextView);
-                }
-                mCustomIconView = (ImageView) custom.findViewById(android.R.id.icon);
-            } else {
-                // We do not have a custom view. Remove one if it already exists
-                if (mCustomView != null) {
-                    removeView(mCustomView);
-                    mCustomView = null;
-                }
-                mCustomTextView = null;
-                mCustomIconView = null;
-            }
-
-            if (mCustomView == null) {
-                // If there isn't a custom view, we'll us our own in-built layouts
-                if (mIconView == null) {
-                    ImageView iconView = (ImageView) LayoutInflater.from(getContext())
-                            .inflate(R.layout.design_layout_tab_icon, this, false);
-                    addView(iconView, 0);
-                    mIconView = iconView;
-                }
-                if (mTextView == null) {
-                    TextView textView = (TextView) LayoutInflater.from(getContext())
-                            .inflate(R.layout.design_layout_tab_text, this, false);
-                    addView(textView);
-                    mTextView = textView;
-                    mDefaultMaxLines = TextViewCompat.getMaxLines(mTextView);
-                }
-                TextViewCompat.setTextAppearance(mTextView, mTabTextAppearance);
-                if (mTabTextColors != null) {
-                    mTextView.setTextColor(mTabTextColors);
-                }
-                updateTextAndIcon(mTextView, mIconView);
-            } else {
-                // Else, we'll see if there is a TextView or ImageView present and update them
-                if (mCustomTextView != null || mCustomIconView != null) {
-                    updateTextAndIcon(mCustomTextView, mCustomIconView);
-                }
-            }
-
-            // Finally update our selected state
-            setSelected(tab != null && tab.isSelected());
-        }
-
-        private void updateTextAndIcon(@Nullable final TextView textView,
-                @Nullable final ImageView iconView) {
-            final Drawable icon = mTab != null ? mTab.getIcon() : null;
-            final CharSequence text = mTab != null ? mTab.getText() : null;
-            final CharSequence contentDesc = mTab != null ? mTab.getContentDescription() : null;
-
-            if (iconView != null) {
-                if (icon != null) {
-                    iconView.setImageDrawable(icon);
-                    iconView.setVisibility(VISIBLE);
-                    setVisibility(VISIBLE);
-                } else {
-                    iconView.setVisibility(GONE);
-                    iconView.setImageDrawable(null);
-                }
-                iconView.setContentDescription(contentDesc);
-            }
-
-            final boolean hasText = !TextUtils.isEmpty(text);
-            if (textView != null) {
-                if (hasText) {
-                    textView.setText(text);
-                    textView.setVisibility(VISIBLE);
-                    setVisibility(VISIBLE);
-                } else {
-                    textView.setVisibility(GONE);
-                    textView.setText(null);
-                }
-                textView.setContentDescription(contentDesc);
-            }
-
-            if (iconView != null) {
-                MarginLayoutParams lp = ((MarginLayoutParams) iconView.getLayoutParams());
-                int bottomMargin = 0;
-                if (hasText && iconView.getVisibility() == VISIBLE) {
-                    // If we're showing both text and icon, add some margin bottom to the icon
-                    bottomMargin = dpToPx(DEFAULT_GAP_TEXT_ICON);
-                }
-                if (bottomMargin != lp.bottomMargin) {
-                    lp.bottomMargin = bottomMargin;
-                    iconView.requestLayout();
-                }
-            }
-            TooltipCompat.setTooltipText(this, hasText ? null : contentDesc);
-        }
-
-        public Tab getTab() {
-            return mTab;
-        }
-
-        /**
-         * Approximates a given lines width with the new provided text size.
-         */
-        private float approximateLineWidth(Layout layout, int line, float textSize) {
-            return layout.getLineWidth(line) * (textSize / layout.getPaint().getTextSize());
-        }
-    }
-
-    private class SlidingTabStrip extends LinearLayout {
-        private int mSelectedIndicatorHeight;
-        private final Paint mSelectedIndicatorPaint;
-
-        int mSelectedPosition = -1;
-        float mSelectionOffset;
-
-        private int mLayoutDirection = -1;
-
-        private int mIndicatorLeft = -1;
-        private int mIndicatorRight = -1;
-
-        private ValueAnimator mIndicatorAnimator;
-
-        SlidingTabStrip(Context context) {
-            super(context);
-            setWillNotDraw(false);
-            mSelectedIndicatorPaint = new Paint();
-        }
-
-        void setSelectedIndicatorColor(int color) {
-            if (mSelectedIndicatorPaint.getColor() != color) {
-                mSelectedIndicatorPaint.setColor(color);
-                ViewCompat.postInvalidateOnAnimation(this);
-            }
-        }
-
-        void setSelectedIndicatorHeight(int height) {
-            if (mSelectedIndicatorHeight != height) {
-                mSelectedIndicatorHeight = height;
-                ViewCompat.postInvalidateOnAnimation(this);
-            }
-        }
-
-        boolean childrenNeedLayout() {
-            for (int i = 0, z = getChildCount(); i < z; i++) {
-                final View child = getChildAt(i);
-                if (child.getWidth() <= 0) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        void setIndicatorPositionFromTabPosition(int position, float positionOffset) {
-            if (mIndicatorAnimator != null && mIndicatorAnimator.isRunning()) {
-                mIndicatorAnimator.cancel();
-            }
-
-            mSelectedPosition = position;
-            mSelectionOffset = positionOffset;
-            updateIndicatorPosition();
-        }
-
-        float getIndicatorPosition() {
-            return mSelectedPosition + mSelectionOffset;
-        }
-
-        @Override
-        public void onRtlPropertiesChanged(int layoutDirection) {
-            super.onRtlPropertiesChanged(layoutDirection);
-
-            // Workaround for a bug before Android M where LinearLayout did not relayout itself when
-            // layout direction changed.
-            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
-                //noinspection WrongConstant
-                if (mLayoutDirection != layoutDirection) {
-                    requestLayout();
-                    mLayoutDirection = layoutDirection;
-                }
-            }
-        }
-
-        @Override
-        protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-            if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.EXACTLY) {
-                // HorizontalScrollView will first measure use with UNSPECIFIED, and then with
-                // EXACTLY. Ignore the first call since anything we do will be overwritten anyway
-                return;
-            }
-
-            if (mMode == MODE_FIXED && mTabGravity == GRAVITY_CENTER) {
-                final int count = getChildCount();
-
-                // First we'll find the widest tab
-                int largestTabWidth = 0;
-                for (int i = 0, z = count; i < z; i++) {
-                    View child = getChildAt(i);
-                    if (child.getVisibility() == VISIBLE) {
-                        largestTabWidth = Math.max(largestTabWidth, child.getMeasuredWidth());
-                    }
-                }
-
-                if (largestTabWidth <= 0) {
-                    // If we don't have a largest child yet, skip until the next measure pass
-                    return;
-                }
-
-                final int gutter = dpToPx(FIXED_WRAP_GUTTER_MIN);
-                boolean remeasure = false;
-
-                if (largestTabWidth * count <= getMeasuredWidth() - gutter * 2) {
-                    // If the tabs fit within our width minus gutters, we will set all tabs to have
-                    // the same width
-                    for (int i = 0; i < count; i++) {
-                        final LinearLayout.LayoutParams lp =
-                                (LayoutParams) getChildAt(i).getLayoutParams();
-                        if (lp.width != largestTabWidth || lp.weight != 0) {
-                            lp.width = largestTabWidth;
-                            lp.weight = 0;
-                            remeasure = true;
-                        }
-                    }
-                } else {
-                    // If the tabs will wrap to be larger than the width minus gutters, we need
-                    // to switch to GRAVITY_FILL
-                    mTabGravity = GRAVITY_FILL;
-                    updateTabViews(false);
-                    remeasure = true;
-                }
-
-                if (remeasure) {
-                    // Now re-measure after our changes
-                    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-                }
-            }
-        }
-
-        @Override
-        protected void onLayout(boolean changed, int l, int t, int r, int b) {
-            super.onLayout(changed, l, t, r, b);
-
-            if (mIndicatorAnimator != null && mIndicatorAnimator.isRunning()) {
-                // If we're currently running an animation, lets cancel it and start a
-                // new animation with the remaining duration
-                mIndicatorAnimator.cancel();
-                final long duration = mIndicatorAnimator.getDuration();
-                animateIndicatorToPosition(mSelectedPosition,
-                        Math.round((1f - mIndicatorAnimator.getAnimatedFraction()) * duration));
-            } else {
-                // If we've been layed out, update the indicator position
-                updateIndicatorPosition();
-            }
-        }
-
-        private void updateIndicatorPosition() {
-            final View selectedTitle = getChildAt(mSelectedPosition);
-            int left, right;
-
-            if (selectedTitle != null && selectedTitle.getWidth() > 0) {
-                left = selectedTitle.getLeft();
-                right = selectedTitle.getRight();
-
-                if (mSelectionOffset > 0f && mSelectedPosition < getChildCount() - 1) {
-                    // Draw the selection partway between the tabs
-                    View nextTitle = getChildAt(mSelectedPosition + 1);
-                    left = (int) (mSelectionOffset * nextTitle.getLeft() +
-                            (1.0f - mSelectionOffset) * left);
-                    right = (int) (mSelectionOffset * nextTitle.getRight() +
-                            (1.0f - mSelectionOffset) * right);
-                }
-            } else {
-                left = right = -1;
-            }
-
-            setIndicatorPosition(left, right);
-        }
-
-        void setIndicatorPosition(int left, int right) {
-            if (left != mIndicatorLeft || right != mIndicatorRight) {
-                // If the indicator's left/right has changed, invalidate
-                mIndicatorLeft = left;
-                mIndicatorRight = right;
-                ViewCompat.postInvalidateOnAnimation(this);
-            }
-        }
-
-        void animateIndicatorToPosition(final int position, int duration) {
-            if (mIndicatorAnimator != null && mIndicatorAnimator.isRunning()) {
-                mIndicatorAnimator.cancel();
-            }
-
-            final boolean isRtl = ViewCompat.getLayoutDirection(this)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
-
-            final View targetView = getChildAt(position);
-            if (targetView == null) {
-                // If we don't have a view, just update the position now and return
-                updateIndicatorPosition();
-                return;
-            }
-
-            final int targetLeft = targetView.getLeft();
-            final int targetRight = targetView.getRight();
-            final int startLeft;
-            final int startRight;
-
-            if (Math.abs(position - mSelectedPosition) <= 1) {
-                // If the views are adjacent, we'll animate from edge-to-edge
-                startLeft = mIndicatorLeft;
-                startRight = mIndicatorRight;
-            } else {
-                // Else, we'll just grow from the nearest edge
-                final int offset = dpToPx(MOTION_NON_ADJACENT_OFFSET);
-                if (position < mSelectedPosition) {
-                    // We're going end-to-start
-                    if (isRtl) {
-                        startLeft = startRight = targetLeft - offset;
-                    } else {
-                        startLeft = startRight = targetRight + offset;
-                    }
-                } else {
-                    // We're going start-to-end
-                    if (isRtl) {
-                        startLeft = startRight = targetRight + offset;
-                    } else {
-                        startLeft = startRight = targetLeft - offset;
-                    }
-                }
-            }
-
-            if (startLeft != targetLeft || startRight != targetRight) {
-                ValueAnimator animator = mIndicatorAnimator = new ValueAnimator();
-                animator.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
-                animator.setDuration(duration);
-                animator.setFloatValues(0, 1);
-                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                    @Override
-                    public void onAnimationUpdate(ValueAnimator animator) {
-                        final float fraction = animator.getAnimatedFraction();
-                        setIndicatorPosition(
-                                AnimationUtils.lerp(startLeft, targetLeft, fraction),
-                                AnimationUtils.lerp(startRight, targetRight, fraction));
-                    }
-                });
-                animator.addListener(new AnimatorListenerAdapter() {
-                    @Override
-                    public void onAnimationEnd(Animator animator) {
-                        mSelectedPosition = position;
-                        mSelectionOffset = 0f;
-                    }
-                });
-                animator.start();
-            }
-        }
-
-        @Override
-        public void draw(Canvas canvas) {
-            super.draw(canvas);
-
-            // Thick colored underline below the current selection
-            if (mIndicatorLeft >= 0 && mIndicatorRight > mIndicatorLeft) {
-                canvas.drawRect(mIndicatorLeft, getHeight() - mSelectedIndicatorHeight,
-                        mIndicatorRight, getHeight(), mSelectedIndicatorPaint);
-            }
-        }
-    }
-
-    private static ColorStateList createColorStateList(int defaultColor, int selectedColor) {
-        final int[][] states = new int[2][];
-        final int[] colors = new int[2];
-        int i = 0;
-
-        states[i] = SELECTED_STATE_SET;
-        colors[i] = selectedColor;
-        i++;
-
-        // Default enabled state
-        states[i] = EMPTY_STATE_SET;
-        colors[i] = defaultColor;
-        i++;
-
-        return new ColorStateList(states, colors);
-    }
-
-    private int getDefaultHeight() {
-        boolean hasIconAndText = false;
-        for (int i = 0, count = mTabs.size(); i < count; i++) {
-            Tab tab = mTabs.get(i);
-            if (tab != null && tab.getIcon() != null && !TextUtils.isEmpty(tab.getText())) {
-                hasIconAndText = true;
-                break;
-            }
-        }
-        return hasIconAndText ? DEFAULT_HEIGHT_WITH_TEXT_ICON : DEFAULT_HEIGHT;
-    }
-
-    private int getTabMinWidth() {
-        if (mRequestedTabMinWidth != INVALID_WIDTH) {
-            // If we have been given a min width, use it
-            return mRequestedTabMinWidth;
-        }
-        // Else, we'll use the default value
-        return mMode == MODE_SCROLLABLE ? mScrollableTabMinWidth : 0;
-    }
-
-    @Override
-    public LayoutParams generateLayoutParams(AttributeSet attrs) {
-        // We don't care about the layout params of any views added to us, since we don't actually
-        // add them. The only view we add is the SlidingTabStrip, which is done manually.
-        // We return the default layout params so that we don't blow up if we're given a TabItem
-        // without android:layout_* values.
-        return generateDefaultLayoutParams();
-    }
-
-    int getTabMaxWidth() {
-        return mTabMaxWidth;
-    }
-
-    /**
-     * A {@link ViewPager.OnPageChangeListener} class which contains the
-     * necessary calls back to the provided {@link TabLayout} so that the tab position is
-     * kept in sync.
-     *
-     * <p>This class stores the provided TabLayout weakly, meaning that you can use
-     * {@link ViewPager#addOnPageChangeListener(ViewPager.OnPageChangeListener)
-     * addOnPageChangeListener(OnPageChangeListener)} without removing the listener and
-     * not cause a leak.
-     */
-    public static class TabLayoutOnPageChangeListener implements ViewPager.OnPageChangeListener {
-        private final WeakReference<TabLayout> mTabLayoutRef;
-        private int mPreviousScrollState;
-        private int mScrollState;
-
-        public TabLayoutOnPageChangeListener(TabLayout tabLayout) {
-            mTabLayoutRef = new WeakReference<>(tabLayout);
-        }
-
-        @Override
-        public void onPageScrollStateChanged(final int state) {
-            mPreviousScrollState = mScrollState;
-            mScrollState = state;
-        }
-
-        @Override
-        public void onPageScrolled(final int position, final float positionOffset,
-                final int positionOffsetPixels) {
-            final TabLayout tabLayout = mTabLayoutRef.get();
-            if (tabLayout != null) {
-                // Only update the text selection if we're not settling, or we are settling after
-                // being dragged
-                final boolean updateText = mScrollState != SCROLL_STATE_SETTLING ||
-                        mPreviousScrollState == SCROLL_STATE_DRAGGING;
-                // Update the indicator if we're not settling after being idle. This is caused
-                // from a setCurrentItem() call and will be handled by an animation from
-                // onPageSelected() instead.
-                final boolean updateIndicator = !(mScrollState == SCROLL_STATE_SETTLING
-                        && mPreviousScrollState == SCROLL_STATE_IDLE);
-                tabLayout.setScrollPosition(position, positionOffset, updateText, updateIndicator);
-            }
-        }
-
-        @Override
-        public void onPageSelected(final int position) {
-            final TabLayout tabLayout = mTabLayoutRef.get();
-            if (tabLayout != null && tabLayout.getSelectedTabPosition() != position
-                    && position < tabLayout.getTabCount()) {
-                // Select the tab, only updating the indicator if we're not being dragged/settled
-                // (since onPageScrolled will handle that).
-                final boolean updateIndicator = mScrollState == SCROLL_STATE_IDLE
-                        || (mScrollState == SCROLL_STATE_SETTLING
-                        && mPreviousScrollState == SCROLL_STATE_IDLE);
-                tabLayout.selectTab(tabLayout.getTabAt(position), updateIndicator);
-            }
-        }
-
-        void reset() {
-            mPreviousScrollState = mScrollState = SCROLL_STATE_IDLE;
-        }
-    }
-
-    /**
-     * A {@link TabLayout.OnTabSelectedListener} class which contains the necessary calls back
-     * to the provided {@link ViewPager} so that the tab position is kept in sync.
-     */
-    public static class ViewPagerOnTabSelectedListener implements TabLayout.OnTabSelectedListener {
-        private final ViewPager mViewPager;
-
-        public ViewPagerOnTabSelectedListener(ViewPager viewPager) {
-            mViewPager = viewPager;
-        }
-
-        @Override
-        public void onTabSelected(TabLayout.Tab tab) {
-            mViewPager.setCurrentItem(tab.getPosition());
-        }
-
-        @Override
-        public void onTabUnselected(TabLayout.Tab tab) {
-            // No-op
-        }
-
-        @Override
-        public void onTabReselected(TabLayout.Tab tab) {
-            // No-op
-        }
-    }
-
-    private class PagerAdapterObserver extends DataSetObserver {
-        PagerAdapterObserver() {
-        }
-
-        @Override
-        public void onChanged() {
-            populateFromPagerAdapter();
-        }
-
-        @Override
-        public void onInvalidated() {
-            populateFromPagerAdapter();
-        }
-    }
-
-    private class AdapterChangeListener implements ViewPager.OnAdapterChangeListener {
-        private boolean mAutoRefresh;
-
-        AdapterChangeListener() {
-        }
-
-        @Override
-        public void onAdapterChanged(@NonNull ViewPager viewPager,
-                @Nullable PagerAdapter oldAdapter, @Nullable PagerAdapter newAdapter) {
-            if (mViewPager == viewPager) {
-                setPagerAdapter(newAdapter, mAutoRefresh);
-            }
-        }
-
-        void setAutoRefresh(boolean autoRefresh) {
-            mAutoRefresh = autoRefresh;
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/TextInputEditText.java b/design/src/android/support/design/widget/TextInputEditText.java
deleted file mode 100644
index ee6c32c..0000000
--- a/design/src/android/support/design/widget/TextInputEditText.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.support.v7.widget.AppCompatEditText;
-import android.support.v7.widget.WithHint;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewParent;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputConnection;
-
-/**
- * A special sub-class of {@link android.widget.EditText} designed for use as a child of
- * {@link TextInputLayout}.
- *
- * <p>Using this class allows us to display a hint in the IME when in 'extract' mode.</p>
- */
-public class TextInputEditText extends AppCompatEditText {
-
-    public TextInputEditText(Context context) {
-        super(context);
-    }
-
-    public TextInputEditText(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public TextInputEditText(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    @Override
-    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
-        final InputConnection ic = super.onCreateInputConnection(outAttrs);
-        if (ic != null && outAttrs.hintText == null) {
-            // If we don't have a hint and our parent implements WithHint, use its hint for the
-            // EditorInfo. This allows us to display a hint in 'extract mode'.
-            ViewParent parent = getParent();
-            while (parent instanceof View) {
-                if (parent instanceof WithHint) {
-                    outAttrs.hintText = ((WithHint) parent).getHint();
-                    break;
-                }
-                parent = parent.getParent();
-            }
-        }
-        return ic;
-    }
-}
diff --git a/design/src/android/support/design/widget/TextInputLayout.java b/design/src/android/support/design/widget/TextInputLayout.java
deleted file mode 100644
index 0540678..0000000
--- a/design/src/android/support/design/widget/TextInputLayout.java
+++ /dev/null
@@ -1,1530 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.DrawableContainer;
-import android.os.Build;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.StringRes;
-import android.support.annotation.StyleRes;
-import android.support.annotation.VisibleForTesting;
-import android.support.design.R;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v4.view.AbsSavedState;
-import android.support.v4.view.AccessibilityDelegateCompat;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
-import android.support.v4.widget.Space;
-import android.support.v4.widget.TextViewCompat;
-import android.support.v4.widget.ViewGroupUtils;
-import android.support.v7.content.res.AppCompatResources;
-import android.support.v7.widget.AppCompatDrawableManager;
-import android.support.v7.widget.AppCompatTextView;
-import android.support.v7.widget.TintTypedArray;
-import android.support.v7.widget.WithHint;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.text.method.PasswordTransformationMethod;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewStructure;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.animation.AccelerateInterpolator;
-import android.widget.EditText;
-import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-/**
- * Layout which wraps an {@link android.widget.EditText} (or descendant) to show a floating label
- * when the hint is hidden due to the user inputting text.
- *
- * <p>Also supports showing an error via {@link #setErrorEnabled(boolean)} and
- * {@link #setError(CharSequence)}, and a character counter via
- * {@link #setCounterEnabled(boolean)}.</p>
- *
- * <p>Password visibility toggling is also supported via the
- * {@link #setPasswordVisibilityToggleEnabled(boolean)} API and related attribute.
- * If enabled, a button is displayed to toggle between the password being displayed as plain-text
- * or disguised, when your EditText is set to display a password.</p>
- *
- * <p><strong>Note:</strong> When using the password toggle functionality, the 'end' compound
- * drawable of the EditText will be overridden while the toggle is enabled. To ensure that any
- * existing drawables are restored correctly, you should set those compound drawables relatively
- * (start/end), opposed to absolutely (left/right).</p>
- *
- * The {@link TextInputEditText} class is provided to be used as a child of this layout. Using
- * TextInputEditText allows TextInputLayout greater control over the visual aspects of any
- * text input. An example usage is as so:
- *
- * <pre>
- * &lt;android.support.design.widget.TextInputLayout
- *         android:layout_width=&quot;match_parent&quot;
- *         android:layout_height=&quot;wrap_content&quot;&gt;
- *
- *     &lt;android.support.design.widget.TextInputEditText
- *             android:layout_width=&quot;match_parent&quot;
- *             android:layout_height=&quot;wrap_content&quot;
- *             android:hint=&quot;@string/form_username&quot;/&gt;
- *
- * &lt;/android.support.design.widget.TextInputLayout&gt;
- * </pre>
- *
- * <p><strong>Note:</strong> The actual view hierarchy present under TextInputLayout is
- * <strong>NOT</strong> guaranteed to match the view hierarchy as written in XML. As a result,
- * calls to getParent() on children of the TextInputLayout -- such as an TextInputEditText --
- * may not return the TextInputLayout itself, but rather an intermediate View. If you need
- * to access a View directly, set an {@code android:id} and use {@link View#findViewById(int)}.
- */
-public class TextInputLayout extends LinearLayout implements WithHint {
-
-    private static final int ANIMATION_DURATION = 200;
-    private static final int INVALID_MAX_LENGTH = -1;
-
-    private static final String LOG_TAG = "TextInputLayout";
-
-    private final FrameLayout mInputFrame;
-    EditText mEditText;
-    private CharSequence mOriginalHint;
-
-    private boolean mHintEnabled;
-    private CharSequence mHint;
-
-    private Paint mTmpPaint;
-    private final Rect mTmpRect = new Rect();
-
-    private LinearLayout mIndicatorArea;
-    private int mIndicatorsAdded;
-
-    private Typeface mTypeface;
-
-    private boolean mErrorEnabled;
-    TextView mErrorView;
-    private int mErrorTextAppearance;
-    private boolean mErrorShown;
-    private CharSequence mError;
-
-    boolean mCounterEnabled;
-    private TextView mCounterView;
-    private int mCounterMaxLength;
-    private int mCounterTextAppearance;
-    private int mCounterOverflowTextAppearance;
-    private boolean mCounterOverflowed;
-
-    private boolean mPasswordToggleEnabled;
-    private Drawable mPasswordToggleDrawable;
-    private CharSequence mPasswordToggleContentDesc;
-    private CheckableImageButton mPasswordToggleView;
-    private boolean mPasswordToggledVisible;
-    private Drawable mPasswordToggleDummyDrawable;
-    private Drawable mOriginalEditTextEndDrawable;
-
-    private ColorStateList mPasswordToggleTintList;
-    private boolean mHasPasswordToggleTintList;
-    private PorterDuff.Mode mPasswordToggleTintMode;
-    private boolean mHasPasswordToggleTintMode;
-
-    private ColorStateList mDefaultTextColor;
-    private ColorStateList mFocusedTextColor;
-
-    // Only used for testing
-    private boolean mHintExpanded;
-
-    final CollapsingTextHelper mCollapsingTextHelper = new CollapsingTextHelper(this);
-
-    private boolean mHintAnimationEnabled;
-    private ValueAnimator mAnimator;
-
-    private boolean mHasReconstructedEditTextBackground;
-    private boolean mInDrawableStateChanged;
-
-    private boolean mRestoringSavedState;
-
-    public TextInputLayout(Context context) {
-        this(context, null);
-    }
-
-    public TextInputLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public TextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        // Can't call through to super(Context, AttributeSet, int) since it doesn't exist on API 10
-        super(context, attrs);
-
-        ThemeUtils.checkAppCompatTheme(context);
-
-        setOrientation(VERTICAL);
-        setWillNotDraw(false);
-        setAddStatesFromChildren(true);
-
-        mInputFrame = new FrameLayout(context);
-        mInputFrame.setAddStatesFromChildren(true);
-        addView(mInputFrame);
-
-        mCollapsingTextHelper.setTextSizeInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
-        mCollapsingTextHelper.setPositionInterpolator(new AccelerateInterpolator());
-        mCollapsingTextHelper.setCollapsedTextGravity(Gravity.TOP | GravityCompat.START);
-
-        final TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
-                R.styleable.TextInputLayout, defStyleAttr, R.style.Widget_Design_TextInputLayout);
-        mHintEnabled = a.getBoolean(R.styleable.TextInputLayout_hintEnabled, true);
-        setHint(a.getText(R.styleable.TextInputLayout_android_hint));
-        mHintAnimationEnabled = a.getBoolean(
-                R.styleable.TextInputLayout_hintAnimationEnabled, true);
-
-        if (a.hasValue(R.styleable.TextInputLayout_android_textColorHint)) {
-            mDefaultTextColor = mFocusedTextColor =
-                    a.getColorStateList(R.styleable.TextInputLayout_android_textColorHint);
-        }
-
-        final int hintAppearance = a.getResourceId(
-                R.styleable.TextInputLayout_hintTextAppearance, -1);
-        if (hintAppearance != -1) {
-            setHintTextAppearance(
-                    a.getResourceId(R.styleable.TextInputLayout_hintTextAppearance, 0));
-        }
-
-        mErrorTextAppearance = a.getResourceId(R.styleable.TextInputLayout_errorTextAppearance, 0);
-        final boolean errorEnabled = a.getBoolean(R.styleable.TextInputLayout_errorEnabled, false);
-
-        final boolean counterEnabled = a.getBoolean(
-                R.styleable.TextInputLayout_counterEnabled, false);
-        setCounterMaxLength(
-                a.getInt(R.styleable.TextInputLayout_counterMaxLength, INVALID_MAX_LENGTH));
-        mCounterTextAppearance = a.getResourceId(
-                R.styleable.TextInputLayout_counterTextAppearance, 0);
-        mCounterOverflowTextAppearance = a.getResourceId(
-                R.styleable.TextInputLayout_counterOverflowTextAppearance, 0);
-
-        mPasswordToggleEnabled = a.getBoolean(
-                R.styleable.TextInputLayout_passwordToggleEnabled, false);
-        mPasswordToggleDrawable = a.getDrawable(R.styleable.TextInputLayout_passwordToggleDrawable);
-        mPasswordToggleContentDesc = a.getText(
-                R.styleable.TextInputLayout_passwordToggleContentDescription);
-        if (a.hasValue(R.styleable.TextInputLayout_passwordToggleTint)) {
-            mHasPasswordToggleTintList = true;
-            mPasswordToggleTintList = a.getColorStateList(
-                    R.styleable.TextInputLayout_passwordToggleTint);
-        }
-        if (a.hasValue(R.styleable.TextInputLayout_passwordToggleTintMode)) {
-            mHasPasswordToggleTintMode = true;
-            mPasswordToggleTintMode = ViewUtils.parseTintMode(
-                    a.getInt(R.styleable.TextInputLayout_passwordToggleTintMode, -1), null);
-        }
-
-        a.recycle();
-
-        setErrorEnabled(errorEnabled);
-        setCounterEnabled(counterEnabled);
-        applyPasswordToggleTint();
-
-        if (ViewCompat.getImportantForAccessibility(this)
-                == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-            // Make sure we're important for accessibility if we haven't been explicitly not
-            ViewCompat.setImportantForAccessibility(this,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
-        }
-
-        ViewCompat.setAccessibilityDelegate(this, new TextInputAccessibilityDelegate());
-    }
-
-    @Override
-    public void addView(View child, int index, final ViewGroup.LayoutParams params) {
-        if (child instanceof EditText) {
-            // Make sure that the EditText is vertically at the bottom, so that it sits on the
-            // EditText's underline
-            FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(params);
-            flp.gravity = Gravity.CENTER_VERTICAL | (flp.gravity & ~Gravity.VERTICAL_GRAVITY_MASK);
-            mInputFrame.addView(child, flp);
-
-            // Now use the EditText's LayoutParams as our own and update them to make enough space
-            // for the label
-            mInputFrame.setLayoutParams(params);
-            updateInputLayoutMargins();
-
-            setEditText((EditText) child);
-        } else {
-            // Carry on adding the View...
-            super.addView(child, index, params);
-        }
-    }
-
-    /**
-     * Set the typeface to use for the hint and any label views (such as counter and error views).
-     *
-     * @param typeface typeface to use, or {@code null} to use the default.
-     */
-    public void setTypeface(@Nullable Typeface typeface) {
-        if ((mTypeface != null && !mTypeface.equals(typeface))
-                || (mTypeface == null && typeface != null)) {
-            mTypeface = typeface;
-
-            mCollapsingTextHelper.setTypefaces(typeface);
-            if (mCounterView != null) {
-                mCounterView.setTypeface(typeface);
-            }
-            if (mErrorView != null) {
-                mErrorView.setTypeface(typeface);
-            }
-        }
-    }
-
-    /**
-     * Returns the typeface used for the hint and any label views (such as counter and error views).
-     */
-    @NonNull
-    public Typeface getTypeface() {
-        return mTypeface;
-    }
-
-    @Override
-    public void dispatchProvideAutofillStructure(ViewStructure structure, int flags) {
-        if (mOriginalHint == null || mEditText == null) {
-            super.dispatchProvideAutofillStructure(structure, flags);
-            return;
-        }
-
-        // Temporarily sets child's hint to its original value so it is properly set in the
-        // child's ViewStructure.
-        final CharSequence hint = mEditText.getHint();
-        mEditText.setHint(mOriginalHint);
-        try {
-            super.dispatchProvideAutofillStructure(structure, flags);
-        } finally {
-            mEditText.setHint(hint);
-        }
-    }
-
-    private void setEditText(EditText editText) {
-        // If we already have an EditText, throw an exception
-        if (mEditText != null) {
-            throw new IllegalArgumentException("We already have an EditText, can only have one");
-        }
-
-        if (!(editText instanceof TextInputEditText)) {
-            Log.i(LOG_TAG, "EditText added is not a TextInputEditText. Please switch to using that"
-                    + " class instead.");
-        }
-
-        mEditText = editText;
-
-        final boolean hasPasswordTransformation = hasPasswordTransformation();
-
-        // Use the EditText's typeface, and it's text size for our expanded text
-        if (!hasPasswordTransformation) {
-            // We don't want a monospace font just because we have a password field
-            mCollapsingTextHelper.setTypefaces(mEditText.getTypeface());
-        }
-        mCollapsingTextHelper.setExpandedTextSize(mEditText.getTextSize());
-
-        final int editTextGravity = mEditText.getGravity();
-        mCollapsingTextHelper.setCollapsedTextGravity(
-                Gravity.TOP | (editTextGravity & ~Gravity.VERTICAL_GRAVITY_MASK));
-        mCollapsingTextHelper.setExpandedTextGravity(editTextGravity);
-
-        // Add a TextWatcher so that we know when the text input has changed
-        mEditText.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void afterTextChanged(Editable s) {
-                updateLabelState(!mRestoringSavedState);
-                if (mCounterEnabled) {
-                    updateCounter(s.length());
-                }
-            }
-
-            @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
-            @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {}
-        });
-
-        // Use the EditText's hint colors if we don't have one set
-        if (mDefaultTextColor == null) {
-            mDefaultTextColor = mEditText.getHintTextColors();
-        }
-
-        // If we do not have a valid hint, try and retrieve it from the EditText, if enabled
-        if (mHintEnabled && TextUtils.isEmpty(mHint)) {
-            // Save the hint so it can be restored on dispatchProvideAutofillStructure();
-            mOriginalHint = mEditText.getHint();
-            setHint(mOriginalHint);
-            // Clear the EditText's hint as we will display it ourselves
-            mEditText.setHint(null);
-        }
-
-        if (mCounterView != null) {
-            updateCounter(mEditText.getText().length());
-        }
-
-        if (mIndicatorArea != null) {
-            adjustIndicatorPadding();
-        }
-
-        updatePasswordToggleView();
-
-        // Update the label visibility with no animation, but force a state change
-        updateLabelState(false, true);
-    }
-
-    private void updateInputLayoutMargins() {
-        // Create/update the LayoutParams so that we can add enough top margin
-        // to the EditText so make room for the label
-        final LayoutParams lp = (LayoutParams) mInputFrame.getLayoutParams();
-        final int newTopMargin;
-
-        if (mHintEnabled) {
-            if (mTmpPaint == null) {
-                mTmpPaint = new Paint();
-            }
-            mTmpPaint.setTypeface(mCollapsingTextHelper.getCollapsedTypeface());
-            mTmpPaint.setTextSize(mCollapsingTextHelper.getCollapsedTextSize());
-            newTopMargin = (int) -mTmpPaint.ascent();
-        } else {
-            newTopMargin = 0;
-        }
-
-        if (newTopMargin != lp.topMargin) {
-            lp.topMargin = newTopMargin;
-            mInputFrame.requestLayout();
-        }
-    }
-
-    void updateLabelState(boolean animate) {
-        updateLabelState(animate, false);
-    }
-
-    void updateLabelState(final boolean animate, final boolean force) {
-        final boolean isEnabled = isEnabled();
-        final boolean hasText = mEditText != null && !TextUtils.isEmpty(mEditText.getText());
-        final boolean isFocused = arrayContains(getDrawableState(), android.R.attr.state_focused);
-        final boolean isErrorShowing = !TextUtils.isEmpty(getError());
-
-        if (mDefaultTextColor != null) {
-            mCollapsingTextHelper.setExpandedTextColor(mDefaultTextColor);
-        }
-
-        if (isEnabled && mCounterOverflowed && mCounterView != null) {
-            mCollapsingTextHelper.setCollapsedTextColor(mCounterView.getTextColors());
-        } else if (isEnabled && isFocused && mFocusedTextColor != null) {
-            mCollapsingTextHelper.setCollapsedTextColor(mFocusedTextColor);
-        } else if (mDefaultTextColor != null) {
-            mCollapsingTextHelper.setCollapsedTextColor(mDefaultTextColor);
-        }
-
-        if (hasText || (isEnabled() && (isFocused || isErrorShowing))) {
-            // We should be showing the label so do so if it isn't already
-            if (force || mHintExpanded) {
-                collapseHint(animate);
-            }
-        } else {
-            // We should not be showing the label so hide it
-            if (force || !mHintExpanded) {
-                expandHint(animate);
-            }
-        }
-    }
-
-    /**
-     * Returns the {@link android.widget.EditText} used for text input.
-     */
-    @Nullable
-    public EditText getEditText() {
-        return mEditText;
-    }
-
-    /**
-     * Set the hint to be displayed in the floating label, if enabled.
-     *
-     * @see #setHintEnabled(boolean)
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_android_hint
-     */
-    public void setHint(@Nullable CharSequence hint) {
-        if (mHintEnabled) {
-            setHintInternal(hint);
-            sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
-        }
-    }
-
-    private void setHintInternal(CharSequence hint) {
-        mHint = hint;
-        mCollapsingTextHelper.setText(hint);
-    }
-
-    /**
-     * Returns the hint which is displayed in the floating label, if enabled.
-     *
-     * @return the hint, or null if there isn't one set, or the hint is not enabled.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_android_hint
-     */
-    @Override
-    @Nullable
-    public CharSequence getHint() {
-        return mHintEnabled ? mHint : null;
-    }
-
-    /**
-     * Sets whether the floating label functionality is enabled or not in this layout.
-     *
-     * <p>If enabled, any non-empty hint in the child EditText will be moved into the floating
-     * hint, and its existing hint will be cleared. If disabled, then any non-empty floating hint
-     * in this layout will be moved into the EditText, and this layout's hint will be cleared.</p>
-     *
-     * @see #setHint(CharSequence)
-     * @see #isHintEnabled()
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_hintEnabled
-     */
-    public void setHintEnabled(boolean enabled) {
-        if (enabled != mHintEnabled) {
-            mHintEnabled = enabled;
-
-            final CharSequence editTextHint = mEditText.getHint();
-            if (!mHintEnabled) {
-                if (!TextUtils.isEmpty(mHint) && TextUtils.isEmpty(editTextHint)) {
-                    // If the hint is disabled, but we have a hint set, and the EditText doesn't,
-                    // pass it through...
-                    mEditText.setHint(mHint);
-                }
-                // Now clear out any set hint
-                setHintInternal(null);
-            } else {
-                if (!TextUtils.isEmpty(editTextHint)) {
-                    // If the hint is now enabled and the EditText has one set, we'll use it if
-                    // we don't already have one, and clear the EditText's
-                    if (TextUtils.isEmpty(mHint)) {
-                        setHint(editTextHint);
-                    }
-                    mEditText.setHint(null);
-                }
-            }
-
-            // Now update the EditText top margin
-            if (mEditText != null) {
-                updateInputLayoutMargins();
-            }
-        }
-    }
-
-    /**
-     * Returns whether the floating label functionality is enabled or not in this layout.
-     *
-     * @see #setHintEnabled(boolean)
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_hintEnabled
-     */
-    public boolean isHintEnabled() {
-        return mHintEnabled;
-    }
-
-    /**
-     * Sets the hint text color, size, style from the specified TextAppearance resource.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_hintTextAppearance
-     */
-    public void setHintTextAppearance(@StyleRes int resId) {
-        mCollapsingTextHelper.setCollapsedTextAppearance(resId);
-        mFocusedTextColor = mCollapsingTextHelper.getCollapsedTextColor();
-
-        if (mEditText != null) {
-            updateLabelState(false);
-            // Text size might have changed so update the top margin
-            updateInputLayoutMargins();
-        }
-    }
-
-    private void addIndicator(TextView indicator, int index) {
-        if (mIndicatorArea == null) {
-            mIndicatorArea = new LinearLayout(getContext());
-            mIndicatorArea.setOrientation(LinearLayout.HORIZONTAL);
-            addView(mIndicatorArea, LinearLayout.LayoutParams.MATCH_PARENT,
-                    LinearLayout.LayoutParams.WRAP_CONTENT);
-
-            // Add a flexible spacer in the middle so that the left/right views stay pinned
-            final Space spacer = new Space(getContext());
-            final LinearLayout.LayoutParams spacerLp = new LinearLayout.LayoutParams(0, 0, 1f);
-            mIndicatorArea.addView(spacer, spacerLp);
-
-            if (mEditText != null) {
-                adjustIndicatorPadding();
-            }
-        }
-        mIndicatorArea.setVisibility(View.VISIBLE);
-        mIndicatorArea.addView(indicator, index);
-        mIndicatorsAdded++;
-    }
-
-    private void adjustIndicatorPadding() {
-        // Add padding to the error and character counter so that they match the EditText
-        ViewCompat.setPaddingRelative(mIndicatorArea, ViewCompat.getPaddingStart(mEditText),
-                0, ViewCompat.getPaddingEnd(mEditText), mEditText.getPaddingBottom());
-    }
-
-    private void removeIndicator(TextView indicator) {
-        if (mIndicatorArea != null) {
-            mIndicatorArea.removeView(indicator);
-            if (--mIndicatorsAdded == 0) {
-                mIndicatorArea.setVisibility(View.GONE);
-            }
-        }
-    }
-
-    /**
-     * Whether the error functionality is enabled or not in this layout. Enabling this
-     * functionality before setting an error message via {@link #setError(CharSequence)}, will mean
-     * that this layout will not change size when an error is displayed.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_errorEnabled
-     */
-    public void setErrorEnabled(boolean enabled) {
-        if (mErrorEnabled != enabled) {
-            if (mErrorView != null) {
-                mErrorView.animate().cancel();
-            }
-
-            if (enabled) {
-                mErrorView = new AppCompatTextView(getContext());
-                mErrorView.setId(R.id.textinput_error);
-                if (mTypeface != null) {
-                    mErrorView.setTypeface(mTypeface);
-                }
-                boolean useDefaultColor = false;
-                try {
-                    TextViewCompat.setTextAppearance(mErrorView, mErrorTextAppearance);
-
-                    if (Build.VERSION.SDK_INT >= 23
-                            && mErrorView.getTextColors().getDefaultColor() == Color.MAGENTA) {
-                        // Caused by our theme not extending from Theme.Design*. On API 23 and
-                        // above, unresolved theme attrs result in MAGENTA rather than an exception.
-                        // Flag so that we use a decent default
-                        useDefaultColor = true;
-                    }
-                } catch (Exception e) {
-                    // Caused by our theme not extending from Theme.Design*. Flag so that we use
-                    // a decent default
-                    useDefaultColor = true;
-                }
-                if (useDefaultColor) {
-                    // Probably caused by our theme not extending from Theme.Design*. Instead
-                    // we manually set something appropriate
-                    TextViewCompat.setTextAppearance(mErrorView,
-                            android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Caption);
-                    mErrorView.setTextColor(ContextCompat.getColor(getContext(),
-                            android.support.v7.appcompat.R.color.error_color_material));
-                }
-                mErrorView.setVisibility(INVISIBLE);
-                ViewCompat.setAccessibilityLiveRegion(mErrorView,
-                        ViewCompat.ACCESSIBILITY_LIVE_REGION_POLITE);
-                addIndicator(mErrorView, 0);
-            } else {
-                mErrorShown = false;
-                updateEditTextBackground();
-                removeIndicator(mErrorView);
-                mErrorView = null;
-            }
-            mErrorEnabled = enabled;
-        }
-    }
-
-    /**
-     * Sets the text color and size for the error message from the specified
-     * TextAppearance resource.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_errorTextAppearance
-     */
-    public void setErrorTextAppearance(@StyleRes int resId) {
-        mErrorTextAppearance = resId;
-        if (mErrorView != null) {
-            TextViewCompat.setTextAppearance(mErrorView, resId);
-        }
-    }
-
-    /**
-     * Returns whether the error functionality is enabled or not in this layout.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_errorEnabled
-     *
-     * @see #setErrorEnabled(boolean)
-     */
-    public boolean isErrorEnabled() {
-        return mErrorEnabled;
-    }
-
-    /**
-     * Sets an error message that will be displayed below our {@link EditText}. If the
-     * {@code error} is {@code null}, the error message will be cleared.
-     * <p>
-     * If the error functionality has not been enabled via {@link #setErrorEnabled(boolean)}, then
-     * it will be automatically enabled if {@code error} is not empty.
-     *
-     * @param error Error message to display, or null to clear
-     *
-     * @see #getError()
-     */
-    public void setError(@Nullable final CharSequence error) {
-        // Only animate if we're enabled, laid out, and we have a different error message
-        setError(error, ViewCompat.isLaidOut(this) && isEnabled()
-                && (mErrorView == null || !TextUtils.equals(mErrorView.getText(), error)));
-    }
-
-    private void setError(@Nullable final CharSequence error, final boolean animate) {
-        mError = error;
-
-        if (!mErrorEnabled) {
-            if (TextUtils.isEmpty(error)) {
-                // If error isn't enabled, and the error is empty, just return
-                return;
-            }
-            // Else, we'll assume that they want to enable the error functionality
-            setErrorEnabled(true);
-        }
-
-        mErrorShown = !TextUtils.isEmpty(error);
-
-        // Cancel any on-going animation
-        mErrorView.animate().cancel();
-
-        if (mErrorShown) {
-            mErrorView.setText(error);
-            mErrorView.setVisibility(VISIBLE);
-
-            if (animate) {
-                if (mErrorView.getAlpha() == 1f) {
-                    // If it's currently 100% show, we'll animate it from 0
-                    mErrorView.setAlpha(0f);
-                }
-                mErrorView.animate()
-                        .alpha(1f)
-                        .setDuration(ANIMATION_DURATION)
-                        .setInterpolator(AnimationUtils.LINEAR_OUT_SLOW_IN_INTERPOLATOR)
-                        .setListener(new AnimatorListenerAdapter() {
-                            @Override
-                            public void onAnimationStart(Animator animator) {
-                                mErrorView.setVisibility(VISIBLE);
-                            }
-                        }).start();
-            } else {
-                // Set alpha to 1f, just in case
-                mErrorView.setAlpha(1f);
-            }
-        } else {
-            if (mErrorView.getVisibility() == VISIBLE) {
-                if (animate) {
-                    mErrorView.animate()
-                            .alpha(0f)
-                            .setDuration(ANIMATION_DURATION)
-                            .setInterpolator(AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR)
-                            .setListener(new AnimatorListenerAdapter() {
-                                @Override
-                                public void onAnimationEnd(Animator animator) {
-                                    mErrorView.setText(error);
-                                    mErrorView.setVisibility(INVISIBLE);
-                                }
-                            }).start();
-                } else {
-                    mErrorView.setText(error);
-                    mErrorView.setVisibility(INVISIBLE);
-                }
-            }
-        }
-
-        updateEditTextBackground();
-        updateLabelState(animate);
-    }
-
-    /**
-     * Whether the character counter functionality is enabled or not in this layout.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_counterEnabled
-     */
-    public void setCounterEnabled(boolean enabled) {
-        if (mCounterEnabled != enabled) {
-            if (enabled) {
-                mCounterView = new AppCompatTextView(getContext());
-                mCounterView.setId(R.id.textinput_counter);
-                if (mTypeface != null) {
-                    mCounterView.setTypeface(mTypeface);
-                }
-                mCounterView.setMaxLines(1);
-                try {
-                    TextViewCompat.setTextAppearance(mCounterView, mCounterTextAppearance);
-                } catch (Exception e) {
-                    // Probably caused by our theme not extending from Theme.Design*. Instead
-                    // we manually set something appropriate
-                    TextViewCompat.setTextAppearance(mCounterView,
-                            android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Caption);
-                    mCounterView.setTextColor(ContextCompat.getColor(getContext(),
-                            android.support.v7.appcompat.R.color.error_color_material));
-                }
-                addIndicator(mCounterView, -1);
-                if (mEditText == null) {
-                    updateCounter(0);
-                } else {
-                    updateCounter(mEditText.getText().length());
-                }
-            } else {
-                removeIndicator(mCounterView);
-                mCounterView = null;
-            }
-            mCounterEnabled = enabled;
-        }
-    }
-
-    /**
-     * Returns whether the character counter functionality is enabled or not in this layout.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_counterEnabled
-     *
-     * @see #setCounterEnabled(boolean)
-     */
-    public boolean isCounterEnabled() {
-        return mCounterEnabled;
-    }
-
-    /**
-     * Sets the max length to display at the character counter.
-     *
-     * @param maxLength maxLength to display. Any value less than or equal to 0 will not be shown.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_counterMaxLength
-     */
-    public void setCounterMaxLength(int maxLength) {
-        if (mCounterMaxLength != maxLength) {
-            if (maxLength > 0) {
-                mCounterMaxLength = maxLength;
-            } else {
-                mCounterMaxLength = INVALID_MAX_LENGTH;
-            }
-            if (mCounterEnabled) {
-                updateCounter(mEditText == null ? 0 : mEditText.getText().length());
-            }
-        }
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        // Since we're set to addStatesFromChildren, we need to make sure that we set all
-        // children to enabled/disabled otherwise any enabled children will wipe out our disabled
-        // drawable state
-        recursiveSetEnabled(this, enabled);
-        super.setEnabled(enabled);
-    }
-
-    private static void recursiveSetEnabled(final ViewGroup vg, final boolean enabled) {
-        for (int i = 0, count = vg.getChildCount(); i < count; i++) {
-            final View child = vg.getChildAt(i);
-            child.setEnabled(enabled);
-            if (child instanceof ViewGroup) {
-                recursiveSetEnabled((ViewGroup) child, enabled);
-            }
-        }
-    }
-
-    /**
-     * Returns the max length shown at the character counter.
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_counterMaxLength
-     */
-    public int getCounterMaxLength() {
-        return mCounterMaxLength;
-    }
-
-    void updateCounter(int length) {
-        boolean wasCounterOverflowed = mCounterOverflowed;
-        if (mCounterMaxLength == INVALID_MAX_LENGTH) {
-            mCounterView.setText(String.valueOf(length));
-            mCounterOverflowed = false;
-        } else {
-            mCounterOverflowed = length > mCounterMaxLength;
-            if (wasCounterOverflowed != mCounterOverflowed) {
-                TextViewCompat.setTextAppearance(mCounterView, mCounterOverflowed
-                        ? mCounterOverflowTextAppearance : mCounterTextAppearance);
-            }
-            mCounterView.setText(getContext().getString(R.string.character_counter_pattern,
-                    length, mCounterMaxLength));
-        }
-        if (mEditText != null && wasCounterOverflowed != mCounterOverflowed) {
-            updateLabelState(false);
-            updateEditTextBackground();
-        }
-    }
-
-    private void updateEditTextBackground() {
-        if (mEditText == null) {
-            return;
-        }
-
-        Drawable editTextBackground = mEditText.getBackground();
-        if (editTextBackground == null) {
-            return;
-        }
-
-        ensureBackgroundDrawableStateWorkaround();
-
-        if (android.support.v7.widget.DrawableUtils.canSafelyMutateDrawable(editTextBackground)) {
-            editTextBackground = editTextBackground.mutate();
-        }
-
-        if (mErrorShown && mErrorView != null) {
-            // Set a color filter of the error color
-            editTextBackground.setColorFilter(
-                    AppCompatDrawableManager.getPorterDuffColorFilter(
-                            mErrorView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
-        } else if (mCounterOverflowed && mCounterView != null) {
-            // Set a color filter of the counter color
-            editTextBackground.setColorFilter(
-                    AppCompatDrawableManager.getPorterDuffColorFilter(
-                            mCounterView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
-        } else {
-            // Else reset the color filter and refresh the drawable state so that the
-            // normal tint is used
-            DrawableCompat.clearColorFilter(editTextBackground);
-            mEditText.refreshDrawableState();
-        }
-    }
-
-    private void ensureBackgroundDrawableStateWorkaround() {
-        final int sdk = Build.VERSION.SDK_INT;
-        if (sdk != 21 && sdk != 22) {
-            // The workaround is only required on API 21-22
-            return;
-        }
-        final Drawable bg = mEditText.getBackground();
-        if (bg == null) {
-            return;
-        }
-
-        if (!mHasReconstructedEditTextBackground) {
-            // This is gross. There is an issue in the platform which affects container Drawables
-            // where the first drawable retrieved from resources will propagate any changes
-            // (like color filter) to all instances from the cache. We'll try to workaround it...
-
-            final Drawable newBg = bg.getConstantState().newDrawable();
-
-            if (bg instanceof DrawableContainer) {
-                // If we have a Drawable container, we can try and set it's constant state via
-                // reflection from the new Drawable
-                mHasReconstructedEditTextBackground =
-                        DrawableUtils.setContainerConstantState(
-                                (DrawableContainer) bg, newBg.getConstantState());
-            }
-
-            if (!mHasReconstructedEditTextBackground) {
-                // If we reach here then we just need to set a brand new instance of the Drawable
-                // as the background. This has the unfortunate side-effect of wiping out any
-                // user set padding, but I'd hope that use of custom padding on an EditText
-                // is limited.
-                ViewCompat.setBackground(mEditText, newBg);
-                mHasReconstructedEditTextBackground = true;
-            }
-        }
-    }
-
-    static class SavedState extends AbsSavedState {
-        CharSequence error;
-        boolean isPasswordToggledVisible;
-
-        SavedState(Parcelable superState) {
-            super(superState);
-        }
-
-        SavedState(Parcel source, ClassLoader loader) {
-            super(source, loader);
-            error = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
-            isPasswordToggledVisible = (source.readInt() == 1);
-
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            TextUtils.writeToParcel(error, dest, flags);
-            dest.writeInt(isPasswordToggledVisible ? 1 : 0);
-        }
-
-        @Override
-        public String toString() {
-            return "TextInputLayout.SavedState{"
-                    + Integer.toHexString(System.identityHashCode(this))
-                    + " error=" + error + "}";
-        }
-
-        public static final Creator<SavedState> CREATOR = new ClassLoaderCreator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(Parcel in, ClassLoader loader) {
-                return new SavedState(in, loader);
-            }
-
-            @Override
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in, null);
-            }
-
-            @Override
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        Parcelable superState = super.onSaveInstanceState();
-        SavedState ss = new SavedState(superState);
-        if (mErrorShown) {
-            ss.error = getError();
-        }
-        ss.isPasswordToggledVisible = mPasswordToggledVisible;
-        return ss;
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Parcelable state) {
-        if (!(state instanceof SavedState)) {
-            super.onRestoreInstanceState(state);
-            return;
-        }
-        SavedState ss = (SavedState) state;
-        super.onRestoreInstanceState(ss.getSuperState());
-        setError(ss.error);
-        if (ss.isPasswordToggledVisible) {
-            passwordVisibilityToggleRequested(true);
-        }
-        requestLayout();
-    }
-
-    @Override
-    protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
-        mRestoringSavedState = true;
-        super.dispatchRestoreInstanceState(container);
-        mRestoringSavedState = false;
-    }
-
-    /**
-     * Returns the error message that was set to be displayed with
-     * {@link #setError(CharSequence)}, or <code>null</code> if no error was set
-     * or if error displaying is not enabled.
-     *
-     * @see #setError(CharSequence)
-     */
-    @Nullable
-    public CharSequence getError() {
-        return mErrorEnabled ? mError : null;
-    }
-
-    /**
-     * Returns whether any hint state changes, due to being focused or non-empty text, are
-     * animated.
-     *
-     * @see #setHintAnimationEnabled(boolean)
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_hintAnimationEnabled
-     */
-    public boolean isHintAnimationEnabled() {
-        return mHintAnimationEnabled;
-    }
-
-    /**
-     * Set whether any hint state changes, due to being focused or non-empty text, are
-     * animated.
-     *
-     * @see #isHintAnimationEnabled()
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_hintAnimationEnabled
-     */
-    public void setHintAnimationEnabled(boolean enabled) {
-        mHintAnimationEnabled = enabled;
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        super.draw(canvas);
-
-        if (mHintEnabled) {
-            mCollapsingTextHelper.draw(canvas);
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        updatePasswordToggleView();
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-    }
-
-    private void updatePasswordToggleView() {
-        if (mEditText == null) {
-            // If there is no EditText, there is nothing to update
-            return;
-        }
-
-        if (shouldShowPasswordIcon()) {
-            if (mPasswordToggleView == null) {
-                mPasswordToggleView = (CheckableImageButton) LayoutInflater.from(getContext())
-                        .inflate(R.layout.design_text_input_password_icon, mInputFrame, false);
-                mPasswordToggleView.setImageDrawable(mPasswordToggleDrawable);
-                mPasswordToggleView.setContentDescription(mPasswordToggleContentDesc);
-                mInputFrame.addView(mPasswordToggleView);
-
-                mPasswordToggleView.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        passwordVisibilityToggleRequested(false);
-                    }
-                });
-            }
-
-            if (mEditText != null && ViewCompat.getMinimumHeight(mEditText) <= 0) {
-                // We should make sure that the EditText has the same min-height as the password
-                // toggle view. This ensure focus works properly, and there is no visual jump
-                // if the password toggle is enabled/disabled.
-                mEditText.setMinimumHeight(ViewCompat.getMinimumHeight(mPasswordToggleView));
-            }
-
-            mPasswordToggleView.setVisibility(VISIBLE);
-            mPasswordToggleView.setChecked(mPasswordToggledVisible);
-
-            // We need to add a dummy drawable as the end compound drawable so that the text is
-            // indented and doesn't display below the toggle view
-            if (mPasswordToggleDummyDrawable == null) {
-                mPasswordToggleDummyDrawable = new ColorDrawable();
-            }
-            mPasswordToggleDummyDrawable.setBounds(0, 0, mPasswordToggleView.getMeasuredWidth(), 1);
-
-            final Drawable[] compounds = TextViewCompat.getCompoundDrawablesRelative(mEditText);
-            // Store the user defined end compound drawable so that we can restore it later
-            if (compounds[2] != mPasswordToggleDummyDrawable) {
-                mOriginalEditTextEndDrawable = compounds[2];
-            }
-            TextViewCompat.setCompoundDrawablesRelative(mEditText, compounds[0], compounds[1],
-                    mPasswordToggleDummyDrawable, compounds[3]);
-
-            // Copy over the EditText's padding so that we match
-            mPasswordToggleView.setPadding(mEditText.getPaddingLeft(),
-                    mEditText.getPaddingTop(), mEditText.getPaddingRight(),
-                    mEditText.getPaddingBottom());
-        } else {
-            if (mPasswordToggleView != null && mPasswordToggleView.getVisibility() == VISIBLE) {
-                mPasswordToggleView.setVisibility(View.GONE);
-            }
-
-            if (mPasswordToggleDummyDrawable != null) {
-                // Make sure that we remove the dummy end compound drawable if it exists, and then
-                // clear it
-                final Drawable[] compounds = TextViewCompat.getCompoundDrawablesRelative(mEditText);
-                if (compounds[2] == mPasswordToggleDummyDrawable) {
-                    TextViewCompat.setCompoundDrawablesRelative(mEditText, compounds[0],
-                            compounds[1], mOriginalEditTextEndDrawable, compounds[3]);
-                    mPasswordToggleDummyDrawable = null;
-                }
-            }
-        }
-    }
-
-    /**
-     * Set the icon to use for the password visibility toggle button.
-     *
-     * <p>If you use an icon you should also set a description for its action
-     * using {@link #setPasswordVisibilityToggleContentDescription(CharSequence)}.
-     * This is used for accessibility.</p>
-     *
-     * @param resId resource id of the drawable to set, or 0 to clear the icon
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleDrawable
-     */
-    public void setPasswordVisibilityToggleDrawable(@DrawableRes int resId) {
-        setPasswordVisibilityToggleDrawable(resId != 0
-                ? AppCompatResources.getDrawable(getContext(), resId)
-                : null);
-    }
-
-    /**
-     * Set the icon to use for the password visibility toggle button.
-     *
-     * <p>If you use an icon you should also set a description for its action
-     * using {@link #setPasswordVisibilityToggleContentDescription(CharSequence)}.
-     * This is used for accessibility.</p>
-     *
-     * @param icon Drawable to set, may be null to clear the icon
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleDrawable
-     */
-    public void setPasswordVisibilityToggleDrawable(@Nullable Drawable icon) {
-        mPasswordToggleDrawable = icon;
-        if (mPasswordToggleView != null) {
-            mPasswordToggleView.setImageDrawable(icon);
-        }
-    }
-
-    /**
-     * Set a content description for the navigation button if one is present.
-     *
-     * <p>The content description will be read via screen readers or other accessibility
-     * systems to explain the action of the password visibility toggle.</p>
-     *
-     * @param resId Resource ID of a content description string to set,
-     *              or 0 to clear the description
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleContentDescription
-     */
-    public void setPasswordVisibilityToggleContentDescription(@StringRes int resId) {
-        setPasswordVisibilityToggleContentDescription(
-                resId != 0 ? getResources().getText(resId) : null);
-    }
-
-    /**
-     * Set a content description for the navigation button if one is present.
-     *
-     * <p>The content description will be read via screen readers or other accessibility
-     * systems to explain the action of the password visibility toggle.</p>
-     *
-     * @param description Content description to set, or null to clear the content description
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleContentDescription
-     */
-    public void setPasswordVisibilityToggleContentDescription(@Nullable CharSequence description) {
-        mPasswordToggleContentDesc = description;
-        if (mPasswordToggleView != null) {
-            mPasswordToggleView.setContentDescription(description);
-        }
-    }
-
-    /**
-     * Returns the icon currently used for the password visibility toggle button.
-     *
-     * @see #setPasswordVisibilityToggleDrawable(Drawable)
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleDrawable
-     */
-    @Nullable
-    public Drawable getPasswordVisibilityToggleDrawable() {
-        return mPasswordToggleDrawable;
-    }
-
-    /**
-     * Returns the currently configured content description for the password visibility
-     * toggle button.
-     *
-     * <p>This will be used to describe the navigation action to users through mechanisms
-     * such as screen readers.</p>
-     */
-    @Nullable
-    public CharSequence getPasswordVisibilityToggleContentDescription() {
-        return mPasswordToggleContentDesc;
-    }
-
-    /**
-     * Returns whether the password visibility toggle functionality is currently enabled.
-     *
-     * @see #setPasswordVisibilityToggleEnabled(boolean)
-     */
-    public boolean isPasswordVisibilityToggleEnabled() {
-        return mPasswordToggleEnabled;
-    }
-
-    /**
-     * Returns whether the password visibility toggle functionality is enabled or not.
-     *
-     * <p>When enabled, a button is placed at the end of the EditText which enables the user
-     * to switch between the field's input being visibly disguised or not.</p>
-     *
-     * @param enabled true to enable the functionality
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleEnabled
-     */
-    public void setPasswordVisibilityToggleEnabled(final boolean enabled) {
-        if (mPasswordToggleEnabled != enabled) {
-            mPasswordToggleEnabled = enabled;
-
-            if (!enabled && mPasswordToggledVisible && mEditText != null) {
-                // If the toggle is no longer enabled, but we remove the PasswordTransformation
-                // to make the password visible, add it back
-                mEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
-            }
-
-            // Reset the visibility tracking flag
-            mPasswordToggledVisible = false;
-
-            updatePasswordToggleView();
-        }
-    }
-
-    /**
-     * Applies a tint to the the password visibility toggle drawable. Does not modify the current
-     * tint mode, which is {@link PorterDuff.Mode#SRC_IN} by default.
-     *
-     * <p>Subsequent calls to {@link #setPasswordVisibilityToggleDrawable(Drawable)} will
-     * automatically mutate the drawable and apply the specified tint and tint mode using
-     * {@link DrawableCompat#setTintList(Drawable, ColorStateList)}.</p>
-     *
-     * @param tintList the tint to apply, may be null to clear tint
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleTint
-     */
-    public void setPasswordVisibilityToggleTintList(@Nullable ColorStateList tintList) {
-        mPasswordToggleTintList = tintList;
-        mHasPasswordToggleTintList = true;
-        applyPasswordToggleTint();
-    }
-
-    /**
-     * Specifies the blending mode used to apply the tint specified by
-     * {@link #setPasswordVisibilityToggleTintList(ColorStateList)} to the password
-     * visibility toggle drawable. The default mode is {@link PorterDuff.Mode#SRC_IN}.</p>
-     *
-     * @param mode the blending mode used to apply the tint, may be null to clear tint
-     *
-     * @attr ref android.support.design.R.styleable#TextInputLayout_passwordToggleTintMode
-     */
-    public void setPasswordVisibilityToggleTintMode(@Nullable PorterDuff.Mode mode) {
-        mPasswordToggleTintMode = mode;
-        mHasPasswordToggleTintMode = true;
-        applyPasswordToggleTint();
-    }
-
-    private void passwordVisibilityToggleRequested(boolean shouldSkipAnimations) {
-        if (mPasswordToggleEnabled) {
-            // Store the current cursor position
-            final int selection = mEditText.getSelectionEnd();
-
-            if (hasPasswordTransformation()) {
-                mEditText.setTransformationMethod(null);
-                mPasswordToggledVisible = true;
-            } else {
-                mEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
-                mPasswordToggledVisible = false;
-            }
-
-            mPasswordToggleView.setChecked(mPasswordToggledVisible);
-            if (shouldSkipAnimations) {
-                mPasswordToggleView.jumpDrawablesToCurrentState();
-            }
-
-            // And restore the cursor position
-            mEditText.setSelection(selection);
-        }
-    }
-
-    private boolean hasPasswordTransformation() {
-        return mEditText != null
-                && mEditText.getTransformationMethod() instanceof PasswordTransformationMethod;
-    }
-
-    private boolean shouldShowPasswordIcon() {
-        return mPasswordToggleEnabled && (hasPasswordTransformation() || mPasswordToggledVisible);
-    }
-
-    private void applyPasswordToggleTint() {
-        if (mPasswordToggleDrawable != null
-                && (mHasPasswordToggleTintList || mHasPasswordToggleTintMode)) {
-            mPasswordToggleDrawable = DrawableCompat.wrap(mPasswordToggleDrawable).mutate();
-
-            if (mHasPasswordToggleTintList) {
-                DrawableCompat.setTintList(mPasswordToggleDrawable, mPasswordToggleTintList);
-            }
-            if (mHasPasswordToggleTintMode) {
-                DrawableCompat.setTintMode(mPasswordToggleDrawable, mPasswordToggleTintMode);
-            }
-
-            if (mPasswordToggleView != null
-                    && mPasswordToggleView.getDrawable() != mPasswordToggleDrawable) {
-                mPasswordToggleView.setImageDrawable(mPasswordToggleDrawable);
-            }
-        }
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-
-        if (mHintEnabled && mEditText != null) {
-            final Rect rect = mTmpRect;
-            ViewGroupUtils.getDescendantRect(this, mEditText, rect);
-
-            final int l = rect.left + mEditText.getCompoundPaddingLeft();
-            final int r = rect.right - mEditText.getCompoundPaddingRight();
-
-            mCollapsingTextHelper.setExpandedBounds(
-                    l, rect.top + mEditText.getCompoundPaddingTop(),
-                    r, rect.bottom - mEditText.getCompoundPaddingBottom());
-
-            // Set the collapsed bounds to be the the full height (minus padding) to match the
-            // EditText's editable area
-            mCollapsingTextHelper.setCollapsedBounds(l, getPaddingTop(),
-                    r, bottom - top - getPaddingBottom());
-
-            mCollapsingTextHelper.recalculate();
-        }
-    }
-
-    private void collapseHint(boolean animate) {
-        if (mAnimator != null && mAnimator.isRunning()) {
-            mAnimator.cancel();
-        }
-        if (animate && mHintAnimationEnabled) {
-            animateToExpansionFraction(1f);
-        } else {
-            mCollapsingTextHelper.setExpansionFraction(1f);
-        }
-        mHintExpanded = false;
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        if (mInDrawableStateChanged) {
-            // Some of the calls below will update the drawable state of child views. Since we're
-            // using addStatesFromChildren we can get into infinite recursion, hence we'll just
-            // exit in this instance
-            return;
-        }
-
-        mInDrawableStateChanged = true;
-
-        super.drawableStateChanged();
-
-        final int[] state = getDrawableState();
-        boolean changed = false;
-
-        // Drawable state has changed so see if we need to update the label
-        updateLabelState(ViewCompat.isLaidOut(this) && isEnabled());
-
-        updateEditTextBackground();
-
-        if (mCollapsingTextHelper != null) {
-            changed |= mCollapsingTextHelper.setState(state);
-        }
-
-        if (changed) {
-            invalidate();
-        }
-
-        mInDrawableStateChanged = false;
-    }
-
-    private void expandHint(boolean animate) {
-        if (mAnimator != null && mAnimator.isRunning()) {
-            mAnimator.cancel();
-        }
-        if (animate && mHintAnimationEnabled) {
-            animateToExpansionFraction(0f);
-        } else {
-            mCollapsingTextHelper.setExpansionFraction(0f);
-        }
-        mHintExpanded = true;
-    }
-
-    @VisibleForTesting
-    void animateToExpansionFraction(final float target) {
-        if (mCollapsingTextHelper.getExpansionFraction() == target) {
-            return;
-        }
-        if (mAnimator == null) {
-            mAnimator = new ValueAnimator();
-            mAnimator.setInterpolator(AnimationUtils.LINEAR_INTERPOLATOR);
-            mAnimator.setDuration(ANIMATION_DURATION);
-            mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-                @Override
-                public void onAnimationUpdate(ValueAnimator animator) {
-                    mCollapsingTextHelper.setExpansionFraction((float) animator.getAnimatedValue());
-                }
-            });
-        }
-        mAnimator.setFloatValues(mCollapsingTextHelper.getExpansionFraction(), target);
-        mAnimator.start();
-    }
-
-    @VisibleForTesting
-    final boolean isHintExpanded() {
-        return mHintExpanded;
-    }
-
-    private class TextInputAccessibilityDelegate extends AccessibilityDelegateCompat {
-        TextInputAccessibilityDelegate() {
-        }
-
-        @Override
-        public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
-            super.onInitializeAccessibilityEvent(host, event);
-            event.setClassName(TextInputLayout.class.getSimpleName());
-        }
-
-        @Override
-        public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
-            super.onPopulateAccessibilityEvent(host, event);
-
-            final CharSequence text = mCollapsingTextHelper.getText();
-            if (!TextUtils.isEmpty(text)) {
-                event.getText().add(text);
-            }
-        }
-
-        @Override
-        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
-            super.onInitializeAccessibilityNodeInfo(host, info);
-            info.setClassName(TextInputLayout.class.getSimpleName());
-
-            final CharSequence text = mCollapsingTextHelper.getText();
-            if (!TextUtils.isEmpty(text)) {
-                info.setText(text);
-            }
-            if (mEditText != null) {
-                info.setLabelFor(mEditText);
-            }
-            final CharSequence error = mErrorView != null ? mErrorView.getText() : null;
-            if (!TextUtils.isEmpty(error)) {
-                info.setContentInvalid(true);
-                info.setError(error);
-            }
-        }
-    }
-
-    private static boolean arrayContains(int[] array, int value) {
-        for (int v : array) {
-            if (v == value) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/design/src/android/support/design/widget/ThemeUtils.java b/design/src/android/support/design/widget/ThemeUtils.java
deleted file mode 100644
index 821dcb6..0000000
--- a/design/src/android/support/design/widget/ThemeUtils.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-
-class ThemeUtils {
-
-    private static final int[] APPCOMPAT_CHECK_ATTRS = {
-            android.support.v7.appcompat.R.attr.colorPrimary
-    };
-
-    static void checkAppCompatTheme(Context context) {
-        TypedArray a = context.obtainStyledAttributes(APPCOMPAT_CHECK_ATTRS);
-        final boolean failed = !a.hasValue(0);
-        a.recycle();
-        if (failed) {
-            throw new IllegalArgumentException("You need to use a Theme.AppCompat theme "
-                    + "(or descendant) with the design library.");
-        }
-    }
-}
diff --git a/design/src/android/support/design/widget/ViewOffsetBehavior.java b/design/src/android/support/design/widget/ViewOffsetBehavior.java
deleted file mode 100644
index 541de69..0000000
--- a/design/src/android/support/design/widget/ViewOffsetBehavior.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-
-/**
- * Behavior will automatically sets up a {@link ViewOffsetHelper} on a {@link View}.
- */
-class ViewOffsetBehavior<V extends View> extends CoordinatorLayout.Behavior<V> {
-
-    private ViewOffsetHelper mViewOffsetHelper;
-
-    private int mTempTopBottomOffset = 0;
-    private int mTempLeftRightOffset = 0;
-
-    public ViewOffsetBehavior() {}
-
-    public ViewOffsetBehavior(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public boolean onLayoutChild(CoordinatorLayout parent, V child, int layoutDirection) {
-        // First let lay the child out
-        layoutChild(parent, child, layoutDirection);
-
-        if (mViewOffsetHelper == null) {
-            mViewOffsetHelper = new ViewOffsetHelper(child);
-        }
-        mViewOffsetHelper.onViewLayout();
-
-        if (mTempTopBottomOffset != 0) {
-            mViewOffsetHelper.setTopAndBottomOffset(mTempTopBottomOffset);
-            mTempTopBottomOffset = 0;
-        }
-        if (mTempLeftRightOffset != 0) {
-            mViewOffsetHelper.setLeftAndRightOffset(mTempLeftRightOffset);
-            mTempLeftRightOffset = 0;
-        }
-
-        return true;
-    }
-
-    protected void layoutChild(CoordinatorLayout parent, V child, int layoutDirection) {
-        // Let the parent lay it out by default
-        parent.onLayoutChild(child, layoutDirection);
-    }
-
-    public boolean setTopAndBottomOffset(int offset) {
-        if (mViewOffsetHelper != null) {
-            return mViewOffsetHelper.setTopAndBottomOffset(offset);
-        } else {
-            mTempTopBottomOffset = offset;
-        }
-        return false;
-    }
-
-    public boolean setLeftAndRightOffset(int offset) {
-        if (mViewOffsetHelper != null) {
-            return mViewOffsetHelper.setLeftAndRightOffset(offset);
-        } else {
-            mTempLeftRightOffset = offset;
-        }
-        return false;
-    }
-
-    public int getTopAndBottomOffset() {
-        return mViewOffsetHelper != null ? mViewOffsetHelper.getTopAndBottomOffset() : 0;
-    }
-
-    public int getLeftAndRightOffset() {
-        return mViewOffsetHelper != null ? mViewOffsetHelper.getLeftAndRightOffset() : 0;
-    }
-}
\ No newline at end of file
diff --git a/design/src/android/support/design/widget/ViewOffsetHelper.java b/design/src/android/support/design/widget/ViewOffsetHelper.java
deleted file mode 100644
index 088430a..0000000
--- a/design/src/android/support/design/widget/ViewOffsetHelper.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.v4.view.ViewCompat;
-import android.view.View;
-
-/**
- * Utility helper for moving a {@link android.view.View} around using
- * {@link android.view.View#offsetLeftAndRight(int)} and
- * {@link android.view.View#offsetTopAndBottom(int)}.
- * <p>
- * Also the setting of absolute offsets (similar to translationX/Y), rather than additive
- * offsets.
- */
-class ViewOffsetHelper {
-
-    private final View mView;
-
-    private int mLayoutTop;
-    private int mLayoutLeft;
-    private int mOffsetTop;
-    private int mOffsetLeft;
-
-    public ViewOffsetHelper(View view) {
-        mView = view;
-    }
-
-    public void onViewLayout() {
-        // Now grab the intended top
-        mLayoutTop = mView.getTop();
-        mLayoutLeft = mView.getLeft();
-
-        // And offset it as needed
-        updateOffsets();
-    }
-
-    private void updateOffsets() {
-        ViewCompat.offsetTopAndBottom(mView, mOffsetTop - (mView.getTop() - mLayoutTop));
-        ViewCompat.offsetLeftAndRight(mView, mOffsetLeft - (mView.getLeft() - mLayoutLeft));
-    }
-
-    /**
-     * Set the top and bottom offset for this {@link ViewOffsetHelper}'s view.
-     *
-     * @param offset the offset in px.
-     * @return true if the offset has changed
-     */
-    public boolean setTopAndBottomOffset(int offset) {
-        if (mOffsetTop != offset) {
-            mOffsetTop = offset;
-            updateOffsets();
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Set the left and right offset for this {@link ViewOffsetHelper}'s view.
-     *
-     * @param offset the offset in px.
-     * @return true if the offset has changed
-     */
-    public boolean setLeftAndRightOffset(int offset) {
-        if (mOffsetLeft != offset) {
-            mOffsetLeft = offset;
-            updateOffsets();
-            return true;
-        }
-        return false;
-    }
-
-    public int getTopAndBottomOffset() {
-        return mOffsetTop;
-    }
-
-    public int getLeftAndRightOffset() {
-        return mOffsetLeft;
-    }
-
-    public int getLayoutTop() {
-        return mLayoutTop;
-    }
-
-    public int getLayoutLeft() {
-        return mLayoutLeft;
-    }
-}
\ No newline at end of file
diff --git a/design/src/android/support/design/widget/ViewUtils.java b/design/src/android/support/design/widget/ViewUtils.java
deleted file mode 100644
index c09eac1..0000000
--- a/design/src/android/support/design/widget/ViewUtils.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.graphics.PorterDuff;
-
-class ViewUtils {
-    static PorterDuff.Mode parseTintMode(int value, PorterDuff.Mode defaultMode) {
-        switch (value) {
-            case 3:
-                return PorterDuff.Mode.SRC_OVER;
-            case 5:
-                return PorterDuff.Mode.SRC_IN;
-            case 9:
-                return PorterDuff.Mode.SRC_ATOP;
-            case 14:
-                return PorterDuff.Mode.MULTIPLY;
-            case 15:
-                return PorterDuff.Mode.SCREEN;
-            default:
-                return defaultMode;
-        }
-    }
-
-}
diff --git a/design/tests/AndroidManifest.xml b/design/tests/AndroidManifest.xml
deleted file mode 100755
index 756d7c1..0000000
--- a/design/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2015 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.support.design.test">
-    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
-
-    <application
-        android:supportsRtl="true"
-        android:theme="@style/Theme.Design">
-
-        <activity
-            android:name="android.support.design.widget.TabLayoutWithViewPagerActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.SnackbarActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.SnackbarActivityWithTranslucentNavBar"
-            android:theme="@style/Theme.TranslucentNavBar"/>
-
-        <activity
-            android:name="android.support.design.widget.SnackbarActivityWithFAB"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.DynamicCoordinatorLayoutActivity"
-            android:theme="@style/Theme.TranslucentStatus"/>
-
-        <activity
-            android:name="android.support.design.widget.TabLayoutPoolingActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.BottomSheetBehaviorActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.BottomSheetBehaviorWithInsetsActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.BottomSheetDialogActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.CoordinatorLayoutActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.FloatingActionButtonActivity"
-            android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.NavigationViewActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.BottomNavigationViewActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.TextInputLayoutActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-        <activity
-            android:name="android.support.v7.app.AppCompatActivity"/>
-
-        <activity
-            android:name="android.support.design.widget.AppBarLayoutCollapsePinTestActivity"
-            android:theme="@style/Theme.TranslucentStatus"/>
-
-        <activity
-            android:name="android.support.design.widget.AppBarWithScrollbarsActivity"
-            android:theme="@style/Theme.AppCompat.Light.DarkActionBar"/>
-
-        <activity
-            android:name="android.support.design.widget.AppBarHorizontalScrollingActivity"
-            android:theme="@style/Theme.AppCompat.NoActionBar"/>
-
-    </application>
-
-</manifest>
diff --git a/design/tests/res/color/color_state_list_lilac.xml b/design/tests/res/color/color_state_list_lilac.xml
deleted file mode 100644
index f0b2791..0000000
--- a/design/tests/res/color/color_state_list_lilac.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false" android:color="@color/lilac_disabled" />
-    <item android:color="@color/lilac_default"/>
-</selector>
-
diff --git a/design/tests/res/color/color_state_list_red_translucent.xml b/design/tests/res/color/color_state_list_red_translucent.xml
deleted file mode 100644
index fdf8b2b..0000000
--- a/design/tests/res/color/color_state_list_red_translucent.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="@color/red_translucent"/>
-</selector>
-
diff --git a/design/tests/res/color/color_state_list_sand.xml b/design/tests/res/color/color_state_list_sand.xml
deleted file mode 100644
index eb472c2..0000000
--- a/design/tests/res/color/color_state_list_sand.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false" android:color="@color/sand_disabled" />
-    <item android:state_checked="true" android:color="@color/sand_checked" />
-    <item android:color="@color/sand_default" />
-</selector>
-
diff --git a/design/tests/res/color/color_state_list_themed.xml b/design/tests/res/color/color_state_list_themed.xml
deleted file mode 100644
index e17fa66..0000000
--- a/design/tests/res/color/color_state_list_themed.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="?attr/colorAccent"/>
-</selector>
-
diff --git a/design/tests/res/color/fab_tint.xml b/design/tests/res/color/fab_tint.xml
deleted file mode 100644
index 2ac659d..0000000
--- a/design/tests/res/color/fab_tint.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_selected="false" android:color="@color/sand_disabled" />
-    <item android:color="@color/sand_default" />
-</selector>
-
diff --git a/design/tests/res/drawable-hdpi/ic_account_circle_white_48dp.png b/design/tests/res/drawable-hdpi/ic_account_circle_white_48dp.png
deleted file mode 100644
index bfd4632..0000000
--- a/design/tests/res/drawable-hdpi/ic_account_circle_white_48dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png b/design/tests/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png
deleted file mode 100644
index c9dd4c1..0000000
--- a/design/tests/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-mdpi/ic_account_circle_white_48dp.png b/design/tests/res/drawable-mdpi/ic_account_circle_white_48dp.png
deleted file mode 100644
index 246e0c8..0000000
--- a/design/tests/res/drawable-mdpi/ic_account_circle_white_48dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png b/design/tests/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png
deleted file mode 100644
index 91702b1..0000000
--- a/design/tests/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-mdpi/test_drawable_blue.png b/design/tests/res/drawable-mdpi/test_drawable_blue.png
deleted file mode 100644
index 6350c14..0000000
--- a/design/tests/res/drawable-mdpi/test_drawable_blue.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-mdpi/test_drawable_green.png b/design/tests/res/drawable-mdpi/test_drawable_green.png
deleted file mode 100644
index e3afddb..0000000
--- a/design/tests/res/drawable-mdpi/test_drawable_green.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-mdpi/test_drawable_red.png b/design/tests/res/drawable-mdpi/test_drawable_red.png
deleted file mode 100644
index d95db88..0000000
--- a/design/tests/res/drawable-mdpi/test_drawable_red.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-nodpi/photo.jpg b/design/tests/res/drawable-nodpi/photo.jpg
deleted file mode 100644
index d5a2ef0..0000000
--- a/design/tests/res/drawable-nodpi/photo.jpg
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xhdpi/ic_account_circle_white_48dp.png b/design/tests/res/drawable-xhdpi/ic_account_circle_white_48dp.png
deleted file mode 100644
index 07643f9..0000000
--- a/design/tests/res/drawable-xhdpi/ic_account_circle_white_48dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png b/design/tests/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png
deleted file mode 100644
index afc7e53..0000000
--- a/design/tests/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xxhdpi/ic_account_circle_white_48dp.png b/design/tests/res/drawable-xxhdpi/ic_account_circle_white_48dp.png
deleted file mode 100644
index 1ac34a7..0000000
--- a/design/tests/res/drawable-xxhdpi/ic_account_circle_white_48dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xxhdpi/ic_add.png b/design/tests/res/drawable-xxhdpi/ic_add.png
deleted file mode 100644
index a84106b..0000000
--- a/design/tests/res/drawable-xxhdpi/ic_add.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xxhdpi/ic_airplay_black_24dp.png b/design/tests/res/drawable-xxhdpi/ic_airplay_black_24dp.png
deleted file mode 100644
index ddf2620..0000000
--- a/design/tests/res/drawable-xxhdpi/ic_airplay_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xxhdpi/ic_album_black_24dp.png b/design/tests/res/drawable-xxhdpi/ic_album_black_24dp.png
deleted file mode 100644
index 60f59f5..0000000
--- a/design/tests/res/drawable-xxhdpi/ic_album_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png b/design/tests/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png
deleted file mode 100644
index 1c16761..0000000
--- a/design/tests/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xxxhdpi/ic_account_circle_white_48dp.png b/design/tests/res/drawable-xxxhdpi/ic_account_circle_white_48dp.png
deleted file mode 100644
index baa6045..0000000
--- a/design/tests/res/drawable-xxxhdpi/ic_account_circle_white_48dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png b/design/tests/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png
deleted file mode 100644
index 983a253..0000000
--- a/design/tests/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/design/tests/res/drawable/test_background_blue.xml b/design/tests/res/drawable/test_background_blue.xml
deleted file mode 100644
index fe4bca2..0000000
--- a/design/tests/res/drawable/test_background_blue.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <solid
-        android:color="@color/test_blue" />
-</shape>
\ No newline at end of file
diff --git a/design/tests/res/drawable/test_background_green.xml b/design/tests/res/drawable/test_background_green.xml
deleted file mode 100644
index b90d9bc..0000000
--- a/design/tests/res/drawable/test_background_green.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <solid
-        android:color="@color/test_green" />
-</shape>
\ No newline at end of file
diff --git a/design/tests/res/drawable/vector_icon.xml b/design/tests/res/drawable/vector_icon.xml
deleted file mode 100644
index 19e97ee..0000000
--- a/design/tests/res/drawable/vector_icon.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2016 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0"
-        android:tint="?attr/colorControlNormal">
-    <path
-            android:pathData="M19,6.41L17.59,5,12,10.59,6.41,5,5,6.41,10.59,12,5,17.59,6.41,19,12,13.41,17.59,19,19,17.59,13.41,12z"
-            android:fillColor="@android:color/white"/>
-</vector>
diff --git a/design/tests/res/layout/action_layout.xml b/design/tests/res/layout/action_layout.xml
deleted file mode 100644
index 8c4dc05..0000000
--- a/design/tests/res/layout/action_layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<android.support.v7.widget.SwitchCompat
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/toggle"
-    android:orientation="vertical"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent"
-    android:gravity="center_vertical"/>
diff --git a/design/tests/res/layout/action_layout_custom.xml b/design/tests/res/layout/action_layout_custom.xml
deleted file mode 100644
index 10a3268..0000000
--- a/design/tests/res/layout/action_layout_custom.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/lilac_default"
-    android:text="@string/navigate_custom"/>
diff --git a/design/tests/res/layout/activity_coordinator_layout.xml b/design/tests/res/layout/activity_coordinator_layout.xml
deleted file mode 100644
index 93bf947..0000000
--- a/design/tests/res/layout/activity_coordinator_layout.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:id="@+id/container"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent">
-
-    <android.support.design.widget.CoordinatorLayout
-        android:id="@+id/coordinator"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-</FrameLayout>
\ No newline at end of file
diff --git a/design/tests/res/layout/custom_snackbar_include.xml b/design/tests/res/layout/custom_snackbar_include.xml
deleted file mode 100644
index 4e610df..0000000
--- a/design/tests/res/layout/custom_snackbar_include.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
--->
-
-<android.support.design.widget.CustomSnackbarMainContent
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:theme="@style/ThemeOverlay.AppCompat.Dark"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:padding="8dp">
-
-    <ImageView
-        android:id="@+id/custom_snackbar_image_leading"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentLeft="true"
-        android:layout_marginRight="8dp"
-        android:src="@drawable/ic_account_circle_white_48dp" />
-
-    <ImageView
-        android:id="@+id/custom_snackbar_image_trailing"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentRight="true"
-        android:layout_marginTop="8dp"
-        android:src="@drawable/ic_lightbulb_outline_white_24dp" />
-
-    <TextView
-        android:id="@+id/custom_snackbar_title"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/custom_snackbar_image_leading"
-        android:layout_toLeftOf="@id/custom_snackbar_image_trailing"
-        android:layout_marginTop="4dp"
-        android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
-        android:textStyle="bold"
-        android:singleLine="true" />
-
-    <TextView
-        android:id="@+id/custom_snackbar_subtitle"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/custom_snackbar_image_leading"
-        android:layout_toLeftOf="@id/custom_snackbar_image_trailing"
-        android:layout_below="@id/custom_snackbar_title"
-        android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
-        android:singleLine="true" />
-
-</android.support.design.widget.CustomSnackbarMainContent>
diff --git a/design/tests/res/layout/design_appbar_anchored_fab_margin_bottom.xml b/design/tests/res/layout/design_appbar_anchored_fab_margin_bottom.xml
deleted file mode 100644
index aaed2f9..0000000
--- a/design/tests/res/layout/design_appbar_anchored_fab_margin_bottom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        app:layout_anchor="@+id/app_bar"
-        app:layout_anchorGravity="bottom|center_horizontal"
-        android:src="@drawable/ic_add"
-        android:layout_marginBottom="@dimen/fab_margin"
-        android:clickable="true" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_anchored_fab_margin_left.xml b/design/tests/res/layout/design_appbar_anchored_fab_margin_left.xml
deleted file mode 100644
index 9fabb7b..0000000
--- a/design/tests/res/layout/design_appbar_anchored_fab_margin_left.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        app:layout_anchor="@+id/app_bar"
-        app:layout_anchorGravity="bottom|left"
-        android:src="@drawable/ic_add"
-        android:layout_marginLeft="@dimen/fab_margin"
-        android:clickable="true" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_anchored_fab_margin_right.xml b/design/tests/res/layout/design_appbar_anchored_fab_margin_right.xml
deleted file mode 100644
index ea2e1c0..0000000
--- a/design/tests/res/layout/design_appbar_anchored_fab_margin_right.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        app:layout_anchor="@+id/app_bar"
-        app:layout_anchorGravity="bottom|right"
-        android:src="@drawable/ic_add"
-        android:layout_marginRight="@dimen/fab_margin"
-        android:clickable="true" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_anchored_fab_margin_top.xml b/design/tests/res/layout/design_appbar_anchored_fab_margin_top.xml
deleted file mode 100644
index 763d013..0000000
--- a/design/tests/res/layout/design_appbar_anchored_fab_margin_top.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        app:layout_anchor="@+id/app_bar"
-        app:layout_anchorGravity="bottom|center_horizontal"
-        android:src="@drawable/ic_add"
-        android:layout_marginTop="@dimen/fab_margin"
-        android:clickable="true" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_dodge_left.xml b/design/tests/res/layout/design_appbar_dodge_left.xml
deleted file mode 100644
index 7f3ecb9..0000000
--- a/design/tests/res/layout/design_appbar_dodge_left.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2017 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.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|left"
-        android:src="@drawable/ic_album_black_24dp"
-        app:layout_insetEdge="left"
-        android:clickable="true" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab2"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|left"
-        android:src="@drawable/ic_airplay_black_24dp"
-        app:layout_dodgeInsetEdges="left"
-        android:clickable="true" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_dodge_right.xml b/design/tests/res/layout/design_appbar_dodge_right.xml
deleted file mode 100644
index 10815c0..0000000
--- a/design/tests/res/layout/design_appbar_dodge_right.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2017 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.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|right"
-        android:src="@drawable/ic_album_black_24dp"
-        app:layout_insetEdge="right"
-        android:clickable="true" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab2"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|right"
-        android:src="@drawable/ic_airplay_black_24dp"
-        app:layout_dodgeInsetEdges="right"
-        android:clickable="true" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_horizontal_scrolling.xml b/design/tests/res/layout/design_appbar_horizontal_scrolling.xml
deleted file mode 100644
index 131a07e..0000000
--- a/design/tests/res/layout/design_appbar_horizontal_scrolling.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2017 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.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="200dp"
-        android:fitsSystemWindows="true">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/toolbar_layout"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:fitsSystemWindows="true"
-            app:contentScrim="?attr/colorPrimary"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed">
-
-            <HorizontalScrollView
-                android:id="@+id/hsv"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
-
-                <LinearLayout
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:orientation="horizontal">
-
-                    <View
-                        android:layout_width="200dp"
-                        android:layout_height="200dp"
-                        android:background="#ff0000"/>
-
-                    <View
-                        android:layout_width="900dp"
-                        android:layout_height="200dp"
-                        android:background="#00ff00"/>
-
-                    <View
-                        android:layout_width="900dp"
-                        android:layout_height="200dp"
-                        android:background="#0000ff"/>
-                </LinearLayout>
-            </HorizontalScrollView>
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_width="match_parent"
-                android:layout_height="?attr/actionBarSize"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-    </android.support.design.widget.AppBarLayout>
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        app:layout_behavior="@string/appbar_scrolling_view_behavior">
-
-        <Button
-            android:id="@+id/button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_margin="24dp"
-            android:text="@string/text1"/>
-
-    </FrameLayout>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_pin.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_pin.xml
deleted file mode 100644
index e6cfb96..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_pin.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_pin_margins.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_pin_margins.xml
deleted file mode 100644
index 4eed2e2..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_pin_margins.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/appbar_height">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/collapsing_app_bar"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            app:layout_scrollFlags="scroll">
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_height="?attr/actionBarSize"
-                android:layout_width="match_parent"
-                android:layout_marginTop="20dp"
-                android:layout_marginBottom="20dp"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_pin_restore_test.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_pin_restore_test.xml
deleted file mode 100644
index fbe031b..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_pin_restore_test.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/coordinator_layout"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/appbar_height"
-        android:fitsSystemWindows="true"
-        app:expanded="true">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/collapsing_app_bar"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed">
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_height="?attr/actionBarSize"
-                android:layout_width="match_parent"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_pin_with_fab.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_pin_with_fab.xml
deleted file mode 100644
index f5a2557..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_pin_with_fab.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <include layout="@layout/design_content_appbar_toolbar_collapse_pin" />
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        app:layout_anchor="@+id/app_bar"
-        app:layout_anchorGravity="bottom|right|end"
-        android:layout_marginRight="16dp"
-        android:clickable="true"
-        app:backgroundTint="#FF0000"/>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_scroll.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_scroll.xml
deleted file mode 100644
index 8c68021..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_scroll.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/appbar_height"
-        android:fitsSystemWindows="true">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/collapsing_app_bar"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed">
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_height="?attr/actionBarSize"
-                android:layout_width="match_parent"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_scroll_enteralways.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_scroll_enteralways.xml
deleted file mode 100644
index 43a8d51..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_scroll_enteralways.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2017 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.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/appbar_height"
-        android:fitsSystemWindows="true">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/collapsing_app_bar"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            app:layout_scrollFlags="scroll|enterAlways">
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_height="?attr/actionBarSize"
-                android:layout_width="match_parent"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview" />
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_sole_toolbar.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_sole_toolbar.xml
deleted file mode 100644
index d2f3588..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_sole_toolbar.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2017 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.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/col"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:fitsSystemWindows="true"
-        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/collapsing_app_bar"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed">
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_width="match_parent"
-                android:layout_height="?attr/actionBarSize"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview"/>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_collapse_with_image.xml b/design/tests/res/layout/design_appbar_toolbar_collapse_with_image.xml
deleted file mode 100644
index a4d667f..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_collapse_with_image.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/appbar_height"
-        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
-        android:fitsSystemWindows="true">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/collapsing_app_bar"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed">
-
-            <ImageView
-                android:id="@+id/app_bar_image"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                app:layout_collapseMode="parallax"
-                android:src="@drawable/photo"
-                android:scaleType="centerCrop"
-                android:fitsSystemWindows="true"/>
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_width="match_parent"
-                android:layout_height="?attr/actionBarSize"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview"/>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_appbar_toolbar_scroll_fitsystemwindows_parent.xml b/design/tests/res/layout/design_appbar_toolbar_scroll_fitsystemwindows_parent.xml
deleted file mode 100644
index b41ab95..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_scroll_fitsystemwindows_parent.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent">
-
-        <android.support.v7.widget.Toolbar
-            android:id="@+id/toolbar"
-            android:layout_height="?attr/actionBarSize"
-            android:layout_width="match_parent"
-            app:layout_scrollFlags="scroll|enterAlways"/>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview"/>
-
-</android.support.design.widget.CoordinatorLayout>
-
diff --git a/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_pinned.xml b/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_pinned.xml
deleted file mode 100644
index cbb5ee0..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_pinned.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent">
-
-        <android.support.v7.widget.Toolbar
-            android:id="@+id/toolbar"
-            android:layout_height="?attr/actionBarSize"
-            android:layout_width="match_parent"
-            app:layout_scrollFlags="scroll|enterAlways"/>
-
-        <android.support.design.widget.TabLayout
-            android:id="@+id/tabs"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:tabMode="scrollable"/>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview"/>
-
-</android.support.design.widget.CoordinatorLayout>
-
diff --git a/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_scroll.xml b/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_scroll.xml
deleted file mode 100644
index 49b5597..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_scroll.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent">
-
-        <android.support.v7.widget.Toolbar
-            android:id="@+id/toolbar"
-            android:layout_height="?attr/actionBarSize"
-            android:layout_width="match_parent"
-            app:layout_scrollFlags="scroll|enterAlways"/>
-
-        <android.support.design.widget.TabLayout
-            android:id="@+id/tabs"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:layout_scrollFlags="scroll|enterAlways"
-            app:tabMode="scrollable"/>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview"/>
-
-</android.support.design.widget.CoordinatorLayout>
-
diff --git a/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_scroll_snap.xml b/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_scroll_snap.xml
deleted file mode 100644
index 0d067b1..0000000
--- a/design/tests/res/layout/design_appbar_toolbar_scroll_tabs_scroll_snap.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent">
-
-        <android.support.v7.widget.Toolbar
-            android:id="@+id/toolbar"
-            android:layout_height="?attr/actionBarSize"
-            android:layout_width="match_parent"
-            app:layout_scrollFlags="scroll|enterAlways|snap"/>
-
-        <android.support.design.widget.TabLayout
-            android:id="@+id/tabs"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:layout_scrollFlags="scroll|enterAlways|snap"
-            app:tabMode="scrollable"/>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview"/>
-
-</android.support.design.widget.CoordinatorLayout>
-
diff --git a/design/tests/res/layout/design_bottom_navigation_view.xml b/design/tests/res/layout/design_bottom_navigation_view.xml
deleted file mode 100644
index 0e85aad..0000000
--- a/design/tests/res/layout/design_bottom_navigation_view.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <android.support.design.widget.BottomNavigationView
-        android:id="@+id/bottom_navigation"
-        android:layout_height="56dp"
-        android:layout_width="match_parent"
-        app:menu="@menu/bottom_navigation_view_content"
-        app:itemIconTint="@color/emerald_translucent"
-        app:itemTextColor="@color/emerald_text"
-        app:itemBackground="@color/sand_default" />
-</FrameLayout>
\ No newline at end of file
diff --git a/design/tests/res/layout/design_content_appbar_toolbar_collapse_pin.xml b/design/tests/res/layout/design_content_appbar_toolbar_collapse_pin.xml
deleted file mode 100644
index 961ce41..0000000
--- a/design/tests/res/layout/design_content_appbar_toolbar_collapse_pin.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<merge
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-    <android.support.design.widget.AppBarLayout
-        android:id="@+id/app_bar"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/appbar_height"
-        android:fitsSystemWindows="true">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:id="@+id/collapsing_app_bar"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed">
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_height="?attr/actionBarSize"
-                android:layout_width="match_parent"
-                app:layout_collapseMode="pin"/>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <include layout="@layout/include_appbar_scrollview" />
-</merge>
\ No newline at end of file
diff --git a/design/tests/res/layout/design_fab.xml b/design/tests/res/layout/design_fab.xml
deleted file mode 100644
index 44fe826..0000000
--- a/design/tests/res/layout/design_fab.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-              xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:app="http://schemas.android.com/apk/res-auto"
-              android:id="@+id/container"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical">
-
-    <!-- Dummy view to steal the focus -->
-    <ImageButton
-        android:id="@+id/dummy_focus_vew"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab_standard"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_margin="16dp"
-        android:src="@drawable/ic_add"/>
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab_tint"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_margin="16dp"
-        android:src="@drawable/ic_add"
-        app:backgroundTint="#FF00FF"/>
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab_state_tint"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_margin="16dp"
-        android:src="@drawable/ic_add"
-        app:backgroundTint="@color/fab_tint"/>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/design_navigation_view.xml b/design/tests/res/layout/design_navigation_view.xml
deleted file mode 100644
index 4f7147d..0000000
--- a/design/tests/res/layout/design_navigation_view.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.v4.widget.DrawerLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/drawer_layout"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:fitsSystemWindows="true">
-    <!-- As the main content view, the view below consumes the entire
-         space available using match_parent in both dimensions. Note that
-         this child does not specify android:layout_gravity attribute. -->
-    <FrameLayout
-        android:id="@+id/content"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-    <!-- android:layout_gravity="start" tells DrawerLayout to treat
-         this as a sliding drawer on the starting side, which is
-         left for left-to-right locales. The navigation view extends
-         the full height of the container. A
-         solid background is used for contrast with the content view.
-         android:fitsSystemWindows="true" tells the system to have
-         DrawerLayout span the full height of the screen, including the
-         system status bar on Lollipop+ versions of the plaform. -->
-    <android.support.design.widget.NavigationTestView
-        android:id="@+id/start_drawer"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:layout_gravity="start"
-        android:background="#333"
-        android:fitsSystemWindows="true"
-        app:menu="@menu/navigation_view_content"
-        app:itemIconTint="@color/emerald_translucent"
-        app:itemTextColor="@color/emerald_text"
-        app:itemBackground="@color/sand_default"
-        app:itemTextAppearance="@style/TextMediumStyle" />
-
-</android.support.v4.widget.DrawerLayout>
-
diff --git a/design/tests/res/layout/design_navigation_view_header1.xml b/design/tests/res/layout/design_navigation_view_header1.xml
deleted file mode 100644
index 2fd6f20..0000000
--- a/design/tests/res/layout/design_navigation_view_header1.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<View
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/header1"
-    android:layout_width="match_parent"
-    android:layout_height="120dip"
-    android:background="@color/test_red" />
-
diff --git a/design/tests/res/layout/design_navigation_view_header2.xml b/design/tests/res/layout/design_navigation_view_header2.xml
deleted file mode 100644
index 77ad32a..0000000
--- a/design/tests/res/layout/design_navigation_view_header2.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<View
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/header2"
-    android:layout_width="match_parent"
-    android:layout_height="100dip"
-    android:background="@color/test_blue" />
-
diff --git a/design/tests/res/layout/design_navigation_view_header3.xml b/design/tests/res/layout/design_navigation_view_header3.xml
deleted file mode 100644
index b1fd676..0000000
--- a/design/tests/res/layout/design_navigation_view_header3.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<View
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/header3"
-    android:layout_width="match_parent"
-    android:layout_height="80dip"
-    android:background="@color/test_green" />
-
diff --git a/design/tests/res/layout/design_navigation_view_header_switch.xml b/design/tests/res/layout/design_navigation_view_header_switch.xml
deleted file mode 100644
index 5bfe8fa..0000000
--- a/design/tests/res/layout/design_navigation_view_header_switch.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/header_frame"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:padding="16dp">
-
-    <android.support.v7.widget.SwitchCompat
-        android:id="@+id/header_toggle"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:fitsSystemWindows="true"/>
-
-</FrameLayout>
diff --git a/design/tests/res/layout/design_snackbar_with_fab.xml b/design/tests/res/layout/design_snackbar_with_fab.xml
deleted file mode 100644
index a06dc1b..0000000
--- a/design/tests/res/layout/design_snackbar_with_fab.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_margin="16dp"
-        android:src="@drawable/ic_add"
-        android:clickable="true" />
-
-</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/design/tests/res/layout/design_tab_item_custom.xml b/design/tests/res/layout/design_tab_item_custom.xml
deleted file mode 100644
index f6ba30b..0000000
--- a/design/tests/res/layout/design_tab_item_custom.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<View xmlns:android="http://schemas.android.com/apk/res/android"
-          android:id="@+id/my_custom_tab"
-          android:layout_width="match_parent"
-          android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/design/tests/res/layout/design_tabs.xml b/design/tests/res/layout/design_tabs.xml
deleted file mode 100644
index fbb24bd..0000000
--- a/design/tests/res/layout/design_tabs.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.TabLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content" />
diff --git a/design/tests/res/layout/design_tabs_fixed_width.xml b/design/tests/res/layout/design_tabs_fixed_width.xml
deleted file mode 100644
index 752034f..0000000
--- a/design/tests/res/layout/design_tabs_fixed_width.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2017 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.
--->
-
-<!-- Width is fixed to test scrolling -->
-<android.support.design.widget.TabLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/tabs"
-    android:layout_width="160dp"
-    android:layout_height="wrap_content"
-    app:tabMode="scrollable">
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 0" />
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 1" />
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 2" />
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 3" />
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 4" />
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 5" />
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 6" />
-
-    <android.support.design.widget.TabItem
-        android:text="Tab 7" />
-
-</android.support.design.widget.TabLayout>
diff --git a/design/tests/res/layout/design_tabs_items.xml b/design/tests/res/layout/design_tabs_items.xml
deleted file mode 100644
index e67f3b6..0000000
--- a/design/tests/res/layout/design_tabs_items.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.TabLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-    <android.support.design.widget.TabItem
-            android:text="@string/tab_layout_text"/>
-
-    <android.support.design.widget.TabItem
-            android:icon="@android:drawable/star_on"/>
-
-    <android.support.design.widget.TabItem
-            android:layout="@layout/design_tab_item_custom"/>
-
-</android.support.design.widget.TabLayout>
\ No newline at end of file
diff --git a/design/tests/res/layout/design_tabs_twice.xml b/design/tests/res/layout/design_tabs_twice.xml
deleted file mode 100644
index 1421c10..0000000
--- a/design/tests/res/layout/design_tabs_twice.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <android.support.design.widget.TabLayout
-        android:id="@+id/tabs_1"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-        <android.support.design.widget.TabItem
-            android:text="@string/tab_layout_text"/>
-
-        <android.support.design.widget.TabItem
-            android:icon="@android:drawable/star_on"/>
-
-        <android.support.design.widget.TabItem
-            android:layout="@layout/design_tab_item_custom"/>
-
-    </android.support.design.widget.TabLayout>
-
-    <android.support.design.widget.TabLayout
-        android:id="@+id/tabs_2"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
-
-</LinearLayout>
diff --git a/design/tests/res/layout/design_tabs_viewpager.xml b/design/tests/res/layout/design_tabs_viewpager.xml
deleted file mode 100644
index 9cc7bcb..0000000
--- a/design/tests/res/layout/design_tabs_viewpager.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <android.support.v7.widget.Toolbar
-        android:id="@+id/toolbar"
-        android:layout_width="match_parent"
-        android:layout_height="?attr/actionBarSize"
-        android:background="?attr/colorPrimary"
-        app:contentInsetStart="72dp"/>
-
-    <include layout="@layout/tab_layout_unbound" />
-
-    <android.support.v4.view.ViewPager
-        android:id="@+id/tabs_viewpager"
-        android:layout_width="match_parent"
-        android:layout_height="0px"
-        android:layout_weight="1"/>
-
-</LinearLayout>
diff --git a/design/tests/res/layout/design_tabs_with_non_tabitems.xml b/design/tests/res/layout/design_tabs_with_non_tabitems.xml
deleted file mode 100644
index cb96715..0000000
--- a/design/tests/res/layout/design_tabs_with_non_tabitems.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.TabLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <TextView
-        android:text="@string/tab_layout_text"/>
-
-    <TextView
-        android:src="@android:drawable/star_on"/>
-
-    <include
-        layout="@layout/design_tab_item_custom"/>
-
-</android.support.design.widget.TabLayout>
\ No newline at end of file
diff --git a/design/tests/res/layout/design_text_input.xml b/design/tests/res/layout/design_text_input.xml
deleted file mode 100644
index 4dba825..0000000
--- a/design/tests/res/layout/design_text_input.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:app="http://schemas.android.com/apk/res-auto"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="vertical"
-              android:padding="16dp">
-
-    <android.support.design.widget.TextInputLayout
-            android:id="@+id/textinput"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:errorEnabled="true">
-
-        <android.support.design.widget.TextInputEditText
-                android:id="@+id/textinput_edittext"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:imeOptions="flagNoExtractUi"
-                android:hint="@string/textinput_hint"/>
-
-    </android.support.design.widget.TextInputLayout>
-
-    <android.support.design.widget.TextInputLayout
-        android:id="@+id/textinput_password"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:passwordToggleEnabled="true">
-
-        <android.support.design.widget.TextInputEditText
-            android:id="@+id/textinput_edittext_pwd"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:imeOptions="flagNoExtractUi"
-            android:hint="@string/textinput_hint"
-            android:inputType="textPassword"/>
-
-    </android.support.design.widget.TextInputLayout>
-
-    <android.support.design.widget.TextInputLayout
-        android:id="@+id/textinput_noedittext"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"/>
-
-    <android.support.design.widget.TextInputLayout
-        android:id="@+id/textinput_with_text"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-        <android.support.design.widget.TextInputEditText
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:imeOptions="flagNoExtractUi"
-            android:hint="@string/textinput_hint"
-            android:text="@string/snackbar_text"/>
-
-    </android.support.design.widget.TextInputLayout>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/design/tests/res/layout/dynamic_coordinator_layout.xml b/design/tests/res/layout/dynamic_coordinator_layout.xml
deleted file mode 100644
index a2253c7..0000000
--- a/design/tests/res/layout/dynamic_coordinator_layout.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- ViewStub that will be inflated to a CoordinatorLayout at test runtime. -->
-<ViewStub
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/coordinator_stub"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:inflatedId="@+id/coordinator_layout"
-    android:fitsSystemWindows="true" />
diff --git a/design/tests/res/layout/frame_layout.xml b/design/tests/res/layout/frame_layout.xml
deleted file mode 100644
index 45b3474..0000000
--- a/design/tests/res/layout/frame_layout.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-             android:layout_width="match_parent"
-             android:layout_height="match_parent"/>
diff --git a/design/tests/res/layout/include_appbar_scrollview.xml b/design/tests/res/layout/include_appbar_scrollview.xml
deleted file mode 100644
index cd6eca2..0000000
--- a/design/tests/res/layout/include_appbar_scrollview.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<android.support.v4.widget.NestedScrollView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/scrolling_content"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    app:layout_behavior="@string/appbar_scrolling_view_behavior">
-
-    <LinearLayout
-        android:id="@+id/scrolling_content_inner"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical">
-
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:gravity="center_horizontal"
-            android:text="@string/scroll_top" />
-
-        <TextView
-            android:id="@+id/textview_dialogue"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:padding="16dp"/>
-
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:gravity="center_horizontal"
-            android:text="@string/scroll_bottom" />
-
-    </LinearLayout>
-
-</android.support.v4.widget.NestedScrollView>
\ No newline at end of file
diff --git a/design/tests/res/layout/tab_layout_bound_max.xml b/design/tests/res/layout/tab_layout_bound_max.xml
deleted file mode 100644
index 9958edf..0000000
--- a/design/tests/res/layout/tab_layout_bound_max.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.TabLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:id="@+id/tabs"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        app:tabMode="scrollable"
-        app:tabContentStart="72dp"
-        app:tabMaxWidth="@dimen/tab_width_limit_medium" />
diff --git a/design/tests/res/layout/tab_layout_bound_min.xml b/design/tests/res/layout/tab_layout_bound_min.xml
deleted file mode 100644
index a05bd64..0000000
--- a/design/tests/res/layout/tab_layout_bound_min.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.TabLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:id="@+id/tabs"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        app:tabMode="scrollable"
-        app:tabContentStart="72dp"
-        app:tabMinWidth="@dimen/tab_width_limit_medium" />
diff --git a/design/tests/res/layout/tab_layout_bound_minmax.xml b/design/tests/res/layout/tab_layout_bound_minmax.xml
deleted file mode 100644
index 0e34286..0000000
--- a/design/tests/res/layout/tab_layout_bound_minmax.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.TabLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:id="@+id/tabs"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        app:tabMode="scrollable"
-        app:tabContentStart="72dp"
-        app:tabMinWidth="@dimen/tab_width_limit_small"
-        app:tabMaxWidth="@dimen/tab_width_limit_large" />
diff --git a/design/tests/res/layout/tab_layout_unbound.xml b/design/tests/res/layout/tab_layout_unbound.xml
deleted file mode 100644
index fb51d4d..0000000
--- a/design/tests/res/layout/tab_layout_unbound.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.TabLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:id="@+id/tabs"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        app:tabMode="scrollable"
-        app:tabContentStart="72dp"/>
diff --git a/design/tests/res/layout/test_design_bottom_sheet_behavior.xml b/design/tests/res/layout/test_design_bottom_sheet_behavior.xml
deleted file mode 100644
index 8a2835e..0000000
--- a/design/tests/res/layout/test_design_bottom_sheet_behavior.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<android.support.design.widget.CoordinatorLayout
-        android:id="@+id/coordinator"
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-    <LinearLayout
-            android:id="@+id/bottom_sheet"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="vertical"
-            android:background="#00f"
-            app:layout_behavior="@string/bottom_sheet_behavior"
-            app:behavior_peekHeight="@dimen/bottom_sheet_peek_height"
-            app:behavior_hideable="true">
-
-    </LinearLayout>
-
-    <android.support.design.widget.FloatingActionButton
-            android:id="@+id/fab"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:src="@drawable/ic_add"
-            app:layout_anchor="@id/bottom_sheet"
-            app:layout_anchorGravity="top|end"
-            app:useCompatPadding="true"
-            app:backgroundTint="#f00"/>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/test_design_bottom_sheet_behavior_with_insets.xml b/design/tests/res/layout/test_design_bottom_sheet_behavior_with_insets.xml
deleted file mode 100644
index 442654c..0000000
--- a/design/tests/res/layout/test_design_bottom_sheet_behavior_with_insets.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<android.support.design.widget.CoordinatorLayout
-        android:id="@+id/coordinator"
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:fitsSystemWindows="true"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-    <LinearLayout
-            android:id="@+id/bottom_sheet"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:orientation="vertical"
-            android:background="#00f"
-            app:layout_behavior="@string/bottom_sheet_behavior"
-            app:behavior_peekHeight="@dimen/bottom_sheet_peek_height"
-            app:behavior_hideable="true">
-
-        <View
-            android:id="@+id/bottom_sheet_content"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:background="#f00"/>
-
-    </LinearLayout>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/design/tests/res/layout/test_design_snackbar.xml b/design/tests/res/layout/test_design_snackbar.xml
deleted file mode 100644
index cb3643a..0000000
--- a/design/tests/res/layout/test_design_snackbar.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:id="@+id/col"
-        android:fitsSystemWindows="true"/>
\ No newline at end of file
diff --git a/design/tests/res/layout/test_design_snackbar_fab.xml b/design/tests/res/layout/test_design_snackbar_fab.xml
deleted file mode 100644
index 68e5353..0000000
--- a/design/tests/res/layout/test_design_snackbar_fab.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<android.support.design.widget.CoordinatorLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:id="@+id/col">
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="right|bottom"
-        android:src="@drawable/ic_add"/>
-
-</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/design/tests/res/menu/bottom_navigation_view_content.xml b/design/tests/res/menu/bottom_navigation_view_content.xml
deleted file mode 100644
index d61d6d8..0000000
--- a/design/tests/res/menu/bottom_navigation_view_content.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 Google Inc.
-
-     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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-      xmlns:app="http://schemas.android.com/apk/res-auto">
-    <item android:id="@+id/destination_home"
-          android:icon="@drawable/test_drawable_red"
-          android:title="@string/navigate_home"
-          app:contentDescription="@string/navigate_home"
-          app:tooltipText="@string/navigate_home"/>
-    <item android:id="@+id/destination_profile"
-          android:icon="@drawable/test_drawable_green"
-          android:title="@string/navigate_profile"
-          app:contentDescription="@string/navigate_profile"
-          app:tooltipText="@string/navigate_profile"/>
-    <item android:id="@+id/destination_people"
-          android:icon="@drawable/test_drawable_blue"
-          android:title="@string/navigate_people"
-          app:contentDescription="@string/navigate_people"
-          app:tooltipText="@string/navigate_people"/>
-</menu>
diff --git a/design/tests/res/menu/navigation_view_content.xml b/design/tests/res/menu/navigation_view_content.xml
deleted file mode 100644
index 25fb016..0000000
--- a/design/tests/res/menu/navigation_view_content.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 Google Inc.
-
-     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.
--->
-<menu
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-    <group android:checkableBehavior="single">
-        <item android:id="@+id/destination_home"
-              android:title="@string/navigate_home"
-              android:icon="@drawable/test_drawable_red" />
-        <item android:id="@+id/destination_profile"
-              android:title="@string/navigate_profile"
-              android:icon="@drawable/test_drawable_green" />
-        <item android:id="@+id/destination_people"
-              android:title="@string/navigate_people"
-              android:icon="@drawable/test_drawable_blue"
-              app:actionLayout="@layout/action_layout" />
-        <item android:id="@+id/destination_settings"
-              android:title="@string/navigate_settings" />
-        <item android:id="@+id/destination_custom"
-              app:actionLayout="@layout/action_layout_custom" />
-    </group>
-</menu>
diff --git a/design/tests/res/values/colors.xml b/design/tests/res/values/colors.xml
deleted file mode 100644
index ea8da2a..0000000
--- a/design/tests/res/values/colors.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<resources>
-    <color name="emerald_translucent">#8020A060</color>
-    <color name="emerald_text">#30B050</color>
-    <color name="red_translucent">#90FF2040</color>
-
-    <color name="lilac_default">#F080F0</color>
-    <color name="lilac_disabled">#F0A0FF</color>
-    <color name="sand_default">#F0B000</color>
-    <color name="sand_disabled">#FFC080</color>
-    <color name="sand_checked">#FFD0A0</color>
-
-    <color name="test_red">#FF6030</color>
-    <color name="test_green">#50E080</color>
-    <color name="test_blue">#3050CF</color>
-</resources>
diff --git a/design/tests/res/values/dimens.xml b/design/tests/res/values/dimens.xml
deleted file mode 100644
index 37c1f48..0000000
--- a/design/tests/res/values/dimens.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <dimen name="tab_width_limit_small">80dip</dimen>
-    <dimen name="tab_width_limit_medium">100dip</dimen>
-    <dimen name="tab_width_limit_large">120dip</dimen>
-    <dimen name="bottom_sheet_peek_height">256dp</dimen>
-
-    <dimen name="text_small_size">16sp</dimen>
-    <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>
-
-    <dimen name="appbar_height">160dip</dimen>
-    <dimen name="fab_margin">32dip</dimen>
-
-    <dimen name="fab_mini_height">40dp</dimen>
-    <dimen name="fab_normal_height">56dip</dimen>
-
-    <dimen name="custom_snackbar_max_width">-1px</dimen>
-</resources>
\ No newline at end of file
diff --git a/design/tests/res/values/ids.xml b/design/tests/res/values/ids.xml
deleted file mode 100644
index 52b8356..0000000
--- a/design/tests/res/values/ids.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<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"/>
-    <item name="textinputlayout" type="id"/>
-    <item name="textinputedittext" type="id"/>
-</resources>
\ No newline at end of file
diff --git a/design/tests/res/values/strings.xml b/design/tests/res/values/strings.xml
deleted file mode 100644
index 02763ec..0000000
--- a/design/tests/res/values/strings.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <string name="tab_layout_text">Tab text!</string>
-
-    <string name="navigate_home">Home</string>
-    <string name="navigate_profile">Profile</string>
-    <string name="navigate_people">People</string>
-    <string name="navigate_custom">Custom</string>
-    <string name="navigate_settings">Settings</string>
-
-    <string name="snackbar_text">This is a test message</string>
-    <string name="snackbar_action">Undo</string>
-
-    <string name="text1">Text</string>
-
-    <string name="scroll_top">Top</string>
-    <string name="scroll_bottom">Bottom</string>
-    <string name="design_appbar_collapsing_toolbar_pin">AppBar/Collapsing Toolbar (pinned)</string>
-    <string name="design_appbar_collapsing_toolbar_scroll">AppBar/Collapsing Toolbar (scroll off)</string>
-    <string name="design_appbar_collapsing_toolbar_pin_fab">AppBar/Collapsing Toolbar (pinned with FAB)</string>
-    <string name="design_appbar_toolbar_scroll_tabs_scroll">AppBar/Toolbar Scroll + Tabs Scroll</string>
-    <string name="design_appbar_toolbar_scroll_tabs_scroll_snap">AppBar/Toolbar Scroll + Tabs Scroll + Snap</string>
-    <string name="design_appbar_toolbar_scroll_tabs_pin">AppBar/Toolbar Scroll + Tabs Pin</string>
-    <string name="design_appbar_collapsing_toolbar_pin_margins">AppBar/Collapsing Toolbar (pinned + margins)</string>
-    <string name="design_appbar_collapsing_toolbar_with_image">AppBar/Collapsing Toolbar + Parallax Image</string>
-    <string name="design_appbar_anchored_fab_margin_bottom">AppBar + anchored FAB with bottom margin</string>
-    <string name="design_appbar_anchored_fab_margin_top">AppBar + anchored FAB with top margin</string>
-    <string name="design_appbar_anchored_fab_margin_left">AppBar + anchored FAB with left margin</string>
-    <string name="design_appbar_anchored_fab_margin_right">AppBar + anchored FAB with right margin</string>
-
-    <string name="design_appbar_dodge_left">AppBar + FABs with dodge on left</string>
-    <string name="design_appbar_dodge_right">AppBar + FABs with dodge on right</string>
-
-    <string name="textinput_hint">Hint to the user</string>
-
-</resources>
\ No newline at end of file
diff --git a/design/tests/res/values/styles.xml b/design/tests/res/values/styles.xml
deleted file mode 100644
index eb6aee6..0000000
--- a/design/tests/res/values/styles.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <style name="TextSmallStyle" parent="@android:style/TextAppearance">
-        <item name="android:textSize">@dimen/text_small_size</item>
-    </style>
-
-    <style name="TextMediumStyle" parent="@android:style/TextAppearance.Medium">
-        <item name="android:textSize">@dimen/text_medium_size</item>
-    </style>
-
-    <style name="Theme.TranslucentStatus" parent="Theme.AppCompat.Light.NoActionBar">
-        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
-        <item name="android:statusBarColor">@android:color/transparent</item>
-    </style>
-
-    <style name="Theme.TranslucentNavBar" parent="Theme.AppCompat.Light.NoActionBar">
-        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
-    </style>
-
-
-    <style name="TextAppearanceWithThemedCslTextColor" parent="@android:style/TextAppearance">
-        <item name="android:textColor">@color/color_state_list_themed</item>
-    </style>
-
-    <style name="AppBarWithScrollbars" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
-        <item name="android:scrollbars">horizontal</item>
-    </style>
-</resources>
\ No newline at end of file
diff --git a/design/tests/src/android/support/design/testutils/AppBarLayoutMatchers.java b/design/tests/src/android/support/design/testutils/AppBarLayoutMatchers.java
deleted file mode 100755
index 4d6fc63..0000000
--- a/design/tests/src/android/support/design/testutils/AppBarLayoutMatchers.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import android.support.design.widget.AppBarLayout;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-
-public class AppBarLayoutMatchers {
-
-    /**
-     * Returns a matcher that matches AppBarLayouts which are collapsed.
-     */
-    public static Matcher isCollapsed() {
-        return new TypeSafeMatcher<AppBarLayout>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("AppBarLayout is collapsed");
-            }
-
-            @Override
-            protected boolean matchesSafely(AppBarLayout item) {
-                return item.getBottom() == (item.getHeight() - item.getTotalScrollRange());
-            }
-        };
-    }
-
-}
diff --git a/design/tests/src/android/support/design/testutils/BottomNavigationViewActions.java b/design/tests/src/android/support/design/testutils/BottomNavigationViewActions.java
deleted file mode 100644
index 31b527f..0000000
--- a/design/tests/src/android/support/design/testutils/BottomNavigationViewActions.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-
-import android.content.res.ColorStateList;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.IdRes;
-import android.support.annotation.Nullable;
-import android.support.design.widget.BottomNavigationView;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-
-public class BottomNavigationViewActions {
-    /**
-     * Sets item icon tint list on the content of the bottom navigation view.
-     */
-    public static ViewAction setItemIconTintList(@Nullable final ColorStateList tint) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set item icon tint list";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                BottomNavigationView navigationView = (BottomNavigationView) view;
-                navigationView.setItemIconTintList(tint);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets icon for the menu item of the navigation view.
-     */
-    public static ViewAction setIconForMenuItem(@IdRes final int menuItemId,
-            final Drawable iconDrawable) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set menu item icon";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                BottomNavigationView navigationView = (BottomNavigationView) view;
-                navigationView.getMenu().findItem(menuItemId).setIcon(iconDrawable);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/Cheeses.java b/design/tests/src/android/support/design/testutils/Cheeses.java
deleted file mode 100644
index 6215569..0000000
--- a/design/tests/src/android/support/design/testutils/Cheeses.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-public class Cheeses {
-
-    public static final String[] sCheeseStrings = {
-            "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
-            "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale",
-            "Aisy Cendre", "Allgauer Emmentaler", "Alverca", "Ambert", "American Cheese",
-            "Ami du Chambertin", "Anejo Enchilado", "Anneau du Vic-Bilh", "Anthoriro", "Appenzell",
-            "Aragon", "Ardi Gasna", "Ardrahan", "Armenian String", "Aromes au Gene de Marc",
-            "Asadero", "Asiago", "Aubisque Pyrenees", "Autun", "Avaxtskyr", "Baby Swiss",
-            "Babybel", "Baguette Laonnaise", "Bakers", "Baladi", "Balaton", "Bandal", "Banon",
-            "Barry's Bay Cheddar", "Basing", "Basket Cheese", "Bath Cheese", "Bavarian Bergkase",
-            "Baylough", "Beaufort", "Beauvoorde", "Beenleigh Blue", "Beer Cheese", "Bel Paese",
-            "Bergader", "Bergere Bleue", "Berkswell", "Beyaz Peynir", "Bierkase", "Bishop Kennedy",
-            "Blarney", "Bleu d'Auvergne", "Bleu de Gex", "Bleu de Laqueuille",
-            "Bleu de Septmoncel", "Bleu Des Causses", "Blue", "Blue Castello", "Blue Rathgore",
-            "Blue Vein (Australian)", "Blue Vein Cheeses", "Bocconcini", "Bocconcini (Australian)",
-            "Boeren Leidenkaas", "Bonchester", "Bosworth", "Bougon", "Boule Du Roves",
-            "Boulette d'Avesnes", "Boursault", "Boursin", "Bouyssou", "Bra", "Braudostur",
-            "Breakfast Cheese", "Brebis du Lavort", "Brebis du Lochois", "Brebis du Puyfaucon",
-            "Bresse Bleu", "Brick", "Brie", "Brie de Meaux", "Brie de Melun", "Brillat-Savarin",
-            "Brin", "Brin d' Amour", "Brin d'Amour", "Brinza (Burduf Brinza)",
-            "Briquette de Brebis", "Briquette du Forez", "Broccio", "Broccio Demi-Affine",
-            "Brousse du Rove", "Bruder Basil", "Brusselae Kaas (Fromage de Bruxelles)", "Bryndza",
-            "Buchette d'Anjou", "Buffalo", "Burgos", "Butte", "Butterkase", "Button (Innes)",
-            "Buxton Blue", "Cabecou", "Caboc", "Cabrales", "Cachaille", "Caciocavallo", "Caciotta",
-            "Caerphilly", "Cairnsmore", "Calenzana", "Cambazola", "Camembert de Normandie",
-            "Canadian Cheddar", "Canestrato", "Cantal", "Caprice des Dieux", "Capricorn Goat",
-            "Capriole Banon", "Carre de l'Est", "Casciotta di Urbino", "Cashel Blue", "Castellano",
-            "Castelleno", "Castelmagno", "Castelo Branco", "Castigliano", "Cathelain",
-            "Celtic Promise", "Cendre d'Olivet", "Cerney", "Chabichou", "Chabichou du Poitou",
-            "Chabis de Gatine", "Chaource", "Charolais", "Chaumes", "Cheddar",
-            "Cheddar Clothbound", "Cheshire", "Chevres", "Chevrotin des Aravis", "Chontaleno",
-            "Civray", "Coeur de Camembert au Calvados", "Coeur de Chevre", "Colby", "Cold Pack",
-            "Comte", "Coolea", "Cooleney", "Coquetdale", "Corleggy", "Cornish Pepper",
-            "Cotherstone", "Cotija", "Cottage Cheese", "Cottage Cheese (Australian)",
-            "Cougar Gold", "Coulommiers", "Coverdale", "Crayeux de Roncq", "Cream Cheese",
-            "Cream Havarti", "Crema Agria", "Crema Mexicana", "Creme Fraiche", "Crescenza",
-            "Croghan", "Crottin de Chavignol", "Crottin du Chavignol", "Crowdie", "Crowley",
-            "Cuajada", "Curd", "Cure Nantais", "Curworthy", "Cwmtawe Pecorino",
-            "Cypress Grove Chevre", "Danablu (Danish Blue)", "Danbo", "Danish Fontina",
-            "Daralagjazsky", "Dauphin", "Delice des Fiouves", "Denhany Dorset Drum", "Derby",
-            "Dessertnyj Belyj", "Devon Blue", "Devon Garland", "Dolcelatte", "Doolin",
-            "Doppelrhamstufel", "Dorset Blue Vinney", "Double Gloucester", "Double Worcester",
-            "Dreux a la Feuille", "Dry Jack", "Duddleswell", "Dunbarra", "Dunlop", "Dunsyre Blue",
-            "Duroblando", "Durrus", "Dutch Mimolette (Commissiekaas)", "Edam", "Edelpilz",
-            "Emental Grand Cru", "Emlett", "Emmental", "Epoisses de Bourgogne", "Esbareich",
-            "Esrom", "Etorki", "Evansdale Farmhouse Brie", "Evora De L'Alentejo", "Exmoor Blue",
-            "Explorateur", "Feta", "Feta (Australian)", "Figue", "Filetta", "Fin-de-Siecle",
-            "Finlandia Swiss", "Finn", "Fiore Sardo", "Fleur du Maquis", "Flor de Guia",
-            "Flower Marie", "Folded", "Folded cheese with mint", "Fondant de Brebis",
-            "Fontainebleau", "Fontal", "Fontina Val d'Aosta", "Formaggio di capra", "Fougerus",
-            "Four Herb Gouda", "Fourme d' Ambert", "Fourme de Haute Loire", "Fourme de Montbrison",
-            "Fresh Jack", "Fresh Mozzarella", "Fresh Ricotta", "Fresh Truffles", "Fribourgeois",
-            "Friesekaas", "Friesian", "Friesla", "Frinault", "Fromage a Raclette", "Fromage Corse",
-            "Fromage de Montagne de Savoie", "Fromage Frais", "Fruit Cream Cheese",
-            "Frying Cheese", "Fynbo", "Gabriel", "Galette du Paludier", "Galette Lyonnaise",
-            "Galloway Goat's Milk Gems", "Gammelost", "Gaperon a l'Ail", "Garrotxa", "Gastanberra",
-            "Geitost", "Gippsland Blue", "Gjetost", "Gloucester", "Golden Cross", "Gorgonzola",
-            "Gornyaltajski", "Gospel Green", "Gouda", "Goutu", "Gowrie", "Grabetto", "Graddost",
-            "Grafton Village Cheddar", "Grana", "Grana Padano", "Grand Vatel",
-            "Grataron d' Areches", "Gratte-Paille", "Graviera", "Greuilh", "Greve",
-            "Gris de Lille", "Gruyere", "Gubbeen", "Guerbigny", "Halloumi",
-            "Halloumy (Australian)", "Haloumi-Style Cheese", "Harbourne Blue", "Havarti",
-            "Heidi Gruyere", "Hereford Hop", "Herrgardsost", "Herriot Farmhouse", "Herve",
-            "Hipi Iti", "Hubbardston Blue Cow", "Hushallsost", "Iberico", "Idaho Goatster",
-            "Idiazabal", "Il Boschetto al Tartufo", "Ile d'Yeu", "Isle of Mull", "Jarlsberg",
-            "Jermi Tortes", "Jibneh Arabieh", "Jindi Brie", "Jubilee Blue", "Juustoleipa",
-            "Kadchgall", "Kaseri", "Kashta", "Kefalotyri", "Kenafa", "Kernhem", "Kervella Affine",
-            "Kikorangi", "King Island Cape Wickham Brie", "King River Gold", "Klosterkaese",
-            "Knockalara", "Kugelkase", "L'Aveyronnais", "L'Ecir de l'Aubrac", "La Taupiniere",
-            "La Vache Qui Rit", "Laguiole", "Lairobell", "Lajta", "Lanark Blue", "Lancashire",
-            "Langres", "Lappi", "Laruns", "Lavistown", "Le Brin", "Le Fium Orbo", "Le Lacandou",
-            "Le Roule", "Leafield", "Lebbene", "Leerdammer", "Leicester", "Leyden", "Limburger",
-            "Lincolnshire Poacher", "Lingot Saint Bousquet d'Orb", "Liptauer", "Little Rydings",
-            "Livarot", "Llanboidy", "Llanglofan Farmhouse", "Loch Arthur Farmhouse",
-            "Loddiswell Avondale", "Longhorn", "Lou Palou", "Lou Pevre", "Lyonnais", "Maasdam",
-            "Macconais", "Mahoe Aged Gouda", "Mahon", "Malvern", "Mamirolle", "Manchego",
-            "Manouri", "Manur", "Marble Cheddar", "Marbled Cheeses", "Maredsous", "Margotin",
-            "Maribo", "Maroilles", "Mascares", "Mascarpone", "Mascarpone (Australian)",
-            "Mascarpone Torta", "Matocq", "Maytag Blue", "Meira", "Menallack Farmhouse",
-            "Menonita", "Meredith Blue", "Mesost", "Metton (Cancoillotte)", "Meyer Vintage Gouda",
-            "Mihalic Peynir", "Milleens", "Mimolette", "Mine-Gabhar", "Mini Baby Bells", "Mixte",
-            "Molbo", "Monastery Cheeses", "Mondseer", "Mont D'or Lyonnais", "Montasio",
-            "Monterey Jack", "Monterey Jack Dry", "Morbier", "Morbier Cru de Montagne",
-            "Mothais a la Feuille", "Mozzarella", "Mozzarella (Australian)",
-            "Mozzarella di Bufala", "Mozzarella Fresh, in water", "Mozzarella Rolls", "Munster",
-            "Murol", "Mycella", "Myzithra", "Naboulsi", "Nantais", "Neufchatel",
-            "Neufchatel (Australian)", "Niolo", "Nokkelost", "Northumberland", "Oaxaca",
-            "Olde York", "Olivet au Foin", "Olivet Bleu", "Olivet Cendre",
-            "Orkney Extra Mature Cheddar", "Orla", "Oschtjepka", "Ossau Fermier", "Ossau-Iraty",
-            "Oszczypek", "Oxford Blue", "P'tit Berrichon", "Palet de Babligny", "Paneer", "Panela",
-            "Pannerone", "Pant ys Gawn", "Parmesan (Parmigiano)", "Parmigiano Reggiano",
-            "Pas de l'Escalette", "Passendale", "Pasteurized Processed", "Pate de Fromage",
-            "Patefine Fort", "Pave d'Affinois", "Pave d'Auge", "Pave de Chirac", "Pave du Berry",
-            "Pecorino", "Pecorino in Walnut Leaves", "Pecorino Romano", "Peekskill Pyramid",
-            "Pelardon des Cevennes", "Pelardon des Corbieres", "Penamellera", "Penbryn",
-            "Pencarreg", "Perail de Brebis", "Petit Morin", "Petit Pardou", "Petit-Suisse",
-            "Picodon de Chevre", "Picos de Europa", "Piora", "Pithtviers au Foin",
-            "Plateau de Herve", "Plymouth Cheese", "Podhalanski", "Poivre d'Ane", "Polkolbin",
-            "Pont l'Eveque", "Port Nicholson", "Port-Salut", "Postel", "Pouligny-Saint-Pierre",
-            "Pourly", "Prastost", "Pressato", "Prince-Jean", "Processed Cheddar", "Provolone",
-            "Provolone (Australian)", "Pyengana Cheddar", "Pyramide", "Quark",
-            "Quark (Australian)", "Quartirolo Lombardo", "Quatre-Vents", "Quercy Petit",
-            "Queso Blanco", "Queso Blanco con Frutas --Pina y Mango", "Queso de Murcia",
-            "Queso del Montsec", "Queso del Tietar", "Queso Fresco", "Queso Fresco (Adobera)",
-            "Queso Iberico", "Queso Jalapeno", "Queso Majorero", "Queso Media Luna",
-            "Queso Para Frier", "Queso Quesadilla", "Rabacal", "Raclette", "Ragusano", "Raschera",
-            "Reblochon", "Red Leicester", "Regal de la Dombes", "Reggianito", "Remedou",
-            "Requeson", "Richelieu", "Ricotta", "Ricotta (Australian)", "Ricotta Salata", "Ridder",
-            "Rigotte", "Rocamadour", "Rollot", "Romano", "Romans Part Dieu", "Roncal", "Roquefort",
-            "Roule", "Rouleau De Beaulieu", "Royalp Tilsit", "Rubens", "Rustinu", "Saaland Pfarr",
-            "Saanenkaese", "Saga", "Sage Derby", "Sainte Maure", "Saint-Marcellin",
-            "Saint-Nectaire", "Saint-Paulin", "Salers", "Samso", "San Simon", "Sancerre",
-            "Sap Sago", "Sardo", "Sardo Egyptian", "Sbrinz", "Scamorza", "Schabzieger", "Schloss",
-            "Selles sur Cher", "Selva", "Serat", "Seriously Strong Cheddar", "Serra da Estrela",
-            "Sharpam", "Shelburne Cheddar", "Shropshire Blue", "Siraz", "Sirene", "Smoked Gouda",
-            "Somerset Brie", "Sonoma Jack", "Sottocenare al Tartufo", "Soumaintrain",
-            "Sourire Lozerien", "Spenwood", "Sraffordshire Organic", "St. Agur Blue Cheese",
-            "Stilton", "Stinking Bishop", "String", "Sussex Slipcote", "Sveciaost", "Swaledale",
-            "Sweet Style Swiss", "Swiss", "Syrian (Armenian String)", "Tala", "Taleggio", "Tamie",
-            "Tasmania Highland Chevre Log", "Taupiniere", "Teifi", "Telemea", "Testouri",
-            "Tete de Moine", "Tetilla", "Texas Goat Cheese", "Tibet", "Tillamook Cheddar",
-            "Tilsit", "Timboon Brie", "Toma", "Tomme Brulee", "Tomme d'Abondance",
-            "Tomme de Chevre", "Tomme de Romans", "Tomme de Savoie", "Tomme des Chouans", "Tommes",
-            "Torta del Casar", "Toscanello", "Touree de L'Aubier", "Tourmalet",
-            "Trappe (Veritable)", "Trois Cornes De Vendee", "Tronchon", "Trou du Cru", "Truffe",
-            "Tupi", "Turunmaa", "Tymsboro", "Tyn Grug", "Tyning", "Ubriaco", "Ulloa",
-            "Vacherin-Fribourgeois", "Valencay", "Vasterbottenost", "Venaco", "Vendomois",
-            "Vieux Corse", "Vignotte", "Vulscombe", "Waimata Farmhouse Blue",
-            "Washed Rind Cheese (Australian)", "Waterloo", "Weichkaese", "Wellington",
-            "Wensleydale", "White Stilton", "Whitestone Farmhouse", "Wigmore", "Woodside Cabecou",
-            "Xanadu", "Xynotyro", "Yarg Cornish", "Yarra Valley Pyramid", "Yorkshire Blue",
-            "Zamorano", "Zanetti Grana Padano", "Zanetti Parmigiano Reggiano"
-    };
-
-}
diff --git a/design/tests/src/android/support/design/testutils/CollapsingToolbarLayoutActions.java b/design/tests/src/android/support/design/testutils/CollapsingToolbarLayoutActions.java
deleted file mode 100644
index 71dd150..0000000
--- a/design/tests/src/android/support/design/testutils/CollapsingToolbarLayoutActions.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-
-import android.support.annotation.ColorInt;
-import android.support.design.widget.CollapsingToolbarLayout;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-public class CollapsingToolbarLayoutActions {
-
-    public static ViewAction setContentScrimColor(@ColorInt final int color) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set the content scrim to a color";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-                CollapsingToolbarLayout ctl = (CollapsingToolbarLayout) view;
-                ctl.setContentScrimColor(color);
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/DrawerLayoutActions.java b/design/tests/src/android/support/design/testutils/DrawerLayoutActions.java
deleted file mode 100755
index e4ea867..0000000
--- a/design/tests/src/android/support/design/testutils/DrawerLayoutActions.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.v4.widget.DrawerLayout;
-import android.view.View;
-import org.hamcrest.Matcher;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-
-public class DrawerLayoutActions {
-    /**
-     * Opens the drawer at the specified edge gravity.
-     */
-    public static ViewAction openDrawer(final int drawerEdgeGravity) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(DrawerLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Opens the drawer";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                DrawerLayout drawerLayout = (DrawerLayout) view;
-                drawerLayout.openDrawer(drawerEdgeGravity);
-
-                // Wait for a full second to let the inner ViewDragHelper complete the operation
-                uiController.loopMainThreadForAtLeast(1000);
-            }
-        };
-    }
-
-    /**
-     * Closes the drawer at the specified edge gravity.
-     */
-    public static ViewAction closeDrawer(final int drawerEdgeGravity) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(DrawerLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Closes the drawer";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                DrawerLayout drawerLayout = (DrawerLayout) view;
-                drawerLayout.closeDrawer(drawerEdgeGravity);
-
-                // Wait for a full second to let the inner ViewDragHelper complete the operation
-                uiController.loopMainThreadForAtLeast(1000);
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/FloatingActionButtonActions.java b/design/tests/src/android/support/design/testutils/FloatingActionButtonActions.java
deleted file mode 100644
index a166f6b..0000000
--- a/design/tests/src/android/support/design/testutils/FloatingActionButtonActions.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-
-import android.content.res.ColorStateList;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.design.widget.CoordinatorLayout;
-import android.support.design.widget.FloatingActionButton;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-public class FloatingActionButtonActions {
-
-    public static ViewAction setBackgroundTintColor(@ColorInt final int color) {
-        return setBackgroundTintList(ColorStateList.valueOf(color));
-    }
-
-    public static ViewAction setBackgroundTintList(@ColorInt final ColorStateList tint) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(FloatingActionButton.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets FloatingActionButton background tint";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                fab.setBackgroundTintList(tint);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setImageResource(@DrawableRes final int resId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(FloatingActionButton.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets FloatingActionButton image resource";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                fab.setImageResource(resId);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setSize(@FloatingActionButton.Size final int size) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(FloatingActionButton.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets FloatingActionButton size";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                fab.setSize(size);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setCustomSize(final int size) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(FloatingActionButton.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets FloatingActionButton custom size";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                fab.setCustomSize(size);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setCompatElevation(final float size) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(FloatingActionButton.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets FloatingActionButton elevation";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                fab.setCompatElevation(size);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setLayoutGravity(final int gravity) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(View.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets Views layout_gravity";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                CoordinatorLayout.LayoutParams lp =
-                        (CoordinatorLayout.LayoutParams) view.getLayoutParams();
-                lp.gravity = gravity;
-                view.requestLayout();
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction hideThenShow(final int animDuration) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(FloatingActionButton.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Calls hide() then show()";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                FloatingActionButton fab = (FloatingActionButton) view;
-                fab.hide();
-                fab.show();
-
-                uiController.loopMainThreadForAtLeast(animDuration + 100);
-            }
-        };
-    }
-
-    public static ViewAction showThenHide(final int animDuration) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(FloatingActionButton.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Calls show() then hide()";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                FloatingActionButton fab = (FloatingActionButton) view;
-                fab.show();
-                fab.hide();
-
-                uiController.loopMainThreadForAtLeast(animDuration + 50);
-            }
-        };
-    }
-
-}
diff --git a/design/tests/src/android/support/design/testutils/NavigationViewActions.java b/design/tests/src/android/support/design/testutils/NavigationViewActions.java
deleted file mode 100644
index 6a05fab..0000000
--- a/design/tests/src/android/support/design/testutils/NavigationViewActions.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-
-import android.content.res.ColorStateList;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.StyleRes;
-import android.support.design.widget.NavigationView;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.view.LayoutInflater;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-public class NavigationViewActions {
-    /**
-     * Sets item text appearance on the content of the navigation view.
-     */
-    public static ViewAction setItemTextAppearance(final @StyleRes int resId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set item text appearance";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.setItemTextAppearance(resId);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets item text color on the content of the navigation view.
-     */
-    public static ViewAction setItemTextColor(final ColorStateList textColor) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set item text color";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.setItemTextColor(textColor);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets item background on the content of the navigation view.
-     */
-    public static ViewAction setItemBackground(final @Nullable Drawable itemBackground) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set item background";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.setItemBackground(itemBackground);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets item background on the content of the navigation view.
-     */
-    public static ViewAction setItemBackgroundResource(final @DrawableRes int resId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set item background";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.setItemBackgroundResource(resId);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets item icon tint list on the content of the navigation view.
-     */
-    public static ViewAction setItemIconTintList(final @Nullable ColorStateList tint) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set item icon tint list";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.setItemIconTintList(tint);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Add the specified view as a header to the navigation view.
-     */
-    public static ViewAction addHeaderView(final @NonNull LayoutInflater inflater,
-            final @LayoutRes int res) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Add header view";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.addHeaderView(inflater.inflate(res, null, false));
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Inflates a view from the specified layout ID and adds it as a header to the navigation view.
-     */
-    public static ViewAction inflateHeaderView(final @LayoutRes int res) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Inflate and add header view";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.inflateHeaderView(res);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Removes a previously added header view from the navigation view.
-     */
-    public static ViewAction removeHeaderView(final @Nullable View headerView) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Remove header view";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.removeHeaderView(headerView);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets checked item on the navigation view.
-     */
-    public static ViewAction setCheckedItem(final @IdRes int id) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set checked item";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.setCheckedItem(id);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets icon for the menu item of the navigation view.
-     */
-    public static ViewAction setIconForMenuItem(final @IdRes int menuItemId,
-            final Drawable iconDrawable) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set menu item icon";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.getMenu().findItem(menuItemId).setIcon(iconDrawable);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Removes the specified menu item from the navigation view.
-     *
-     * @param menuItemId The ID of the menu item to be removed.
-     */
-    public static ViewAction removeMenuItem(final @IdRes int menuItemId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(NavigationView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Remove menu item " + menuItemId;
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-                NavigationView navigationView = (NavigationView) view;
-                navigationView.getMenu().removeItem(menuItemId);
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-}
diff --git a/design/tests/src/android/support/design/testutils/Shakespeare.java b/design/tests/src/android/support/design/testutils/Shakespeare.java
deleted file mode 100644
index 285a185..0000000
--- a/design/tests/src/android/support/design/testutils/Shakespeare.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-public final class Shakespeare {
-    /**
-     * Our data, part 1.
-     */
-    public static final String[] TITLES = {
-            "Henry IV (1)",
-            "Henry V",
-            "Henry VIII",
-            "Richard II",
-            "Richard III",
-            "Merchant of Venice",
-            "Othello",
-            "King Lear"
-    };
-
-    /**
-     * Our data, part 2.
-     */
-    public static final String[] DIALOGUE = {
-            "So shaken as we are, so wan with care," +
-            "Find we a time for frighted peace to pant," +
-            "And breathe short-winded accents of new broils" +
-            "To be commenced in strands afar remote." +
-            "No more the thirsty entrance of this soil" +
-            "Shall daub her lips with her own children's blood;" +
-            "Nor more shall trenching war channel her fields," +
-            "Nor bruise her flowerets with the armed hoofs" +
-            "Of hostile paces: those opposed eyes," +
-            "Which, like the meteors of a troubled heaven," +
-            "All of one nature, of one substance bred," +
-            "Did lately meet in the intestine shock" +
-            "And furious close of civil butchery" +
-            "Shall now, in mutual well-beseeming ranks," +
-            "March all one way and be no more opposed" +
-            "Against acquaintance, kindred and allies:" +
-            "The edge of war, like an ill-sheathed knife," +
-            "No more shall cut his master. Therefore, friends," +
-            "As far as to the sepulchre of Christ," +
-            "Whose soldier now, under whose blessed cross" +
-            "We are impressed and engaged to fight," +
-            "Forthwith a power of English shall we levy;" +
-            "Whose arms were moulded in their mothers' womb" +
-            "To chase these pagans in those holy fields" +
-            "Over whose acres walk'd those blessed feet" +
-            "Which fourteen hundred years ago were nail'd" +
-            "For our advantage on the bitter cross." +
-            "But this our purpose now is twelve month old," +
-            "And bootless 'tis to tell you we will go:" +
-            "Therefore we meet not now. Then let me hear" +
-            "Of you, my gentle cousin Westmoreland," +
-            "What yesternight our council did decree" +
-            "In forwarding this dear expedience.",
-
-            "Hear him but reason in divinity," +
-            "And all-admiring with an inward wish" +
-            "You would desire the king were made a prelate:" +
-            "Hear him debate of commonwealth affairs," +
-            "You would say it hath been all in all his study:" +
-            "List his discourse of war, and you shall hear" +
-            "A fearful battle render'd you in music:" +
-            "Turn him to any cause of policy," +
-            "The Gordian knot of it he will unloose," +
-            "Familiar as his garter: that, when he speaks," +
-            "The air, a charter'd libertine, is still," +
-            "And the mute wonder lurketh in men's ears," +
-            "To steal his sweet and honey'd sentences;" +
-            "So that the art and practic part of life" +
-            "Must be the mistress to this theoric:" +
-            "Which is a wonder how his grace should glean it," +
-            "Since his addiction was to courses vain," +
-            "His companies unletter'd, rude and shallow," +
-            "His hours fill'd up with riots, banquets, sports," +
-            "And never noted in him any study," +
-            "Any retirement, any sequestration" +
-            "From open haunts and popularity.",
-
-            "I come no more to make you laugh: things now," +
-            "That bear a weighty and a serious brow," +
-            "Sad, high, and working, full of state and woe," +
-            "Such noble scenes as draw the eye to flow," +
-            "We now present. Those that can pity, here" +
-            "May, if they think it well, let fall a tear;" +
-            "The subject will deserve it. Such as give" +
-            "Their money out of hope they may believe," +
-            "May here find truth too. Those that come to see" +
-            "Only a show or two, and so agree" +
-            "The play may pass, if they be still and willing," +
-            "I'll undertake may see away their shilling" +
-            "Richly in two short hours. Only they" +
-            "That come to hear a merry bawdy play," +
-            "A noise of targets, or to see a fellow" +
-            "In a long motley coat guarded with yellow," +
-            "Will be deceived; for, gentle hearers, know," +
-            "To rank our chosen truth with such a show" +
-            "As fool and fight is, beside forfeiting" +
-            "Our own brains, and the opinion that we bring," +
-            "To make that only true we now intend," +
-            "Will leave us never an understanding friend." +
-            "Therefore, for goodness' sake, and as you are known" +
-            "The first and happiest hearers of the town," +
-            "Be sad, as we would make ye: think ye see" +
-            "The very persons of our noble story" +
-            "As they were living; think you see them great," +
-            "And follow'd with the general throng and sweat" +
-            "Of thousand friends; then in a moment, see" +
-            "How soon this mightiness meets misery:" +
-            "And, if you can be merry then, I'll say" +
-            "A man may weep upon his wedding-day.",
-
-            "First, heaven be the record to my speech!" +
-            "In the devotion of a subject's love," +
-            "Tendering the precious safety of my prince," +
-            "And free from other misbegotten hate," +
-            "Come I appellant to this princely presence." +
-            "Now, Thomas Mowbray, do I turn to thee," +
-            "And mark my greeting well; for what I speak" +
-            "My body shall make good upon this earth," +
-            "Or my divine soul answer it in heaven." +
-            "Thou art a traitor and a miscreant," +
-            "Too good to be so and too bad to live," +
-            "Since the more fair and crystal is the sky," +
-            "The uglier seem the clouds that in it fly." +
-            "Once more, the more to aggravate the note," +
-            "With a foul traitor's name stuff I thy throat;" +
-            "And wish, so please my sovereign, ere I move," +
-            "What my tongue speaks my right drawn sword may prove.",
-
-            "Now is the winter of our discontent" +
-            "Made glorious summer by this sun of York;" +
-            "And all the clouds that lour'd upon our house" +
-            "In the deep bosom of the ocean buried." +
-            "Now are our brows bound with victorious wreaths;" +
-            "Our bruised arms hung up for monuments;" +
-            "Our stern alarums changed to merry meetings," +
-            "Our dreadful marches to delightful measures." +
-            "Grim-visaged war hath smooth'd his wrinkled front;" +
-            "And now, instead of mounting barded steeds" +
-            "To fright the souls of fearful adversaries," +
-            "He capers nimbly in a lady's chamber" +
-            "To the lascivious pleasing of a lute." +
-            "But I, that am not shaped for sportive tricks," +
-            "Nor made to court an amorous looking-glass;" +
-            "I, that am rudely stamp'd, and want love's majesty" +
-            "To strut before a wanton ambling nymph;" +
-            "I, that am curtail'd of this fair proportion," +
-            "Cheated of feature by dissembling nature," +
-            "Deformed, unfinish'd, sent before my time" +
-            "Into this breathing world, scarce half made up," +
-            "And that so lamely and unfashionable" +
-            "That dogs bark at me as I halt by them;" +
-            "Why, I, in this weak piping time of peace," +
-            "Have no delight to pass away the time," +
-            "Unless to spy my shadow in the sun" +
-            "And descant on mine own deformity:" +
-            "And therefore, since I cannot prove a lover," +
-            "To entertain these fair well-spoken days," +
-            "I am determined to prove a villain" +
-            "And hate the idle pleasures of these days." +
-            "Plots have I laid, inductions dangerous," +
-            "By drunken prophecies, libels and dreams," +
-            "To set my brother Clarence and the king" +
-            "In deadly hate the one against the other:" +
-            "And if King Edward be as true and just" +
-            "As I am subtle, false and treacherous," +
-            "This day should Clarence closely be mew'd up," +
-            "About a prophecy, which says that 'G'" +
-            "Of Edward's heirs the murderer shall be." +
-            "Dive, thoughts, down to my soul: here" +
-            "Clarence comes.",
-
-            "To bait fish withal: if it will feed nothing else," +
-            "it will feed my revenge. He hath disgraced me, and" +
-            "hindered me half a million; laughed at my losses," +
-            "mocked at my gains, scorned my nation, thwarted my" +
-            "bargains, cooled my friends, heated mine" +
-            "enemies; and what's his reason? I am a Jew. Hath" +
-            "not a Jew eyes? hath not a Jew hands, organs," +
-            "dimensions, senses, affections, passions? fed with" +
-            "the same food, hurt with the same weapons, subject" +
-            "to the same diseases, healed by the same means," +
-            "warmed and cooled by the same winter and summer, as" +
-            "a Christian is? If you prick us, do we not bleed?" +
-            "if you tickle us, do we not laugh? if you poison" +
-            "us, do we not die? and if you wrong us, shall we not" +
-            "revenge? If we are like you in the rest, we will" +
-            "resemble you in that. If a Jew wrong a Christian," +
-            "what is his humility? Revenge. If a Christian" +
-            "wrong a Jew, what should his sufferance be by" +
-            "Christian example? Why, revenge. The villany you" +
-            "teach me, I will execute, and it shall go hard but I" +
-            "will better the instruction.",
-
-            "Virtue! a fig! 'tis in ourselves that we are thus" +
-            "or thus. Our bodies are our gardens, to the which" +
-            "our wills are gardeners: so that if we will plant" +
-            "nettles, or sow lettuce, set hyssop and weed up" +
-            "thyme, supply it with one gender of herbs, or" +
-            "distract it with many, either to have it sterile" +
-            "with idleness, or manured with industry, why, the" +
-            "power and corrigible authority of this lies in our" +
-            "wills. If the balance of our lives had not one" +
-            "scale of reason to poise another of sensuality, the" +
-            "blood and baseness of our natures would conduct us" +
-            "to most preposterous conclusions: but we have" +
-            "reason to cool our raging motions, our carnal" +
-            "stings, our unbitted lusts, whereof I take this that" +
-            "you call love to be a sect or scion.",
-
-            "Blow, winds, and crack your cheeks! rage! blow!" +
-            "You cataracts and hurricanoes, spout" +
-            "Till you have drench'd our steeples, drown'd the cocks!" +
-            "You sulphurous and thought-executing fires," +
-            "Vaunt-couriers to oak-cleaving thunderbolts," +
-            "Singe my white head! And thou, all-shaking thunder," +
-            "Smite flat the thick rotundity o' the world!" +
-            "Crack nature's moulds, an germens spill at once," +
-            "That make ingrateful man!"
-    };
-}
diff --git a/design/tests/src/android/support/design/testutils/SnackbarUtils.java b/design/tests/src/android/support/design/testutils/SnackbarUtils.java
deleted file mode 100644
index 04aa878..0000000
--- a/design/tests/src/android/support/design/testutils/SnackbarUtils.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.testutils;
-
-import static android.support.design.testutils.TestUtilsActions.waitUntilIdle;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.design.widget.BaseTransientBottomBar;
-import android.support.design.widget.Snackbar;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.IdlingResource;
-
-public class SnackbarUtils {
-    public interface TransientBottomBarAction {
-        void perform() throws Throwable;
-    }
-
-    private static class TransientBottomBarShownCallback
-            extends BaseTransientBottomBar.BaseCallback<BaseTransientBottomBar>
-            implements IdlingResource {
-        private boolean mIsShown = false;
-
-        @Nullable
-        private IdlingResource.ResourceCallback mCallback;
-
-        private boolean mNeedsIdle = false;
-
-        @Override
-        public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
-            mCallback = resourceCallback;
-        }
-
-        @Override
-        public String getName() {
-            return "Transient bottom bar shown callback";
-        }
-
-        @Override
-        public boolean isIdleNow() {
-            if (!mNeedsIdle) {
-                return true;
-            } else {
-                return mIsShown;
-            }
-        }
-
-        @Override
-        public void onShown(BaseTransientBottomBar transientBottomBar) {
-            mIsShown = true;
-            if (mCallback != null) {
-                mCallback.onTransitionToIdle();
-            }
-        }
-    }
-
-    private static class TransientBottomBarDismissedCallback
-            extends BaseTransientBottomBar.BaseCallback<BaseTransientBottomBar>
-            implements IdlingResource {
-        private boolean mIsDismissed = false;
-
-        @Nullable
-        private IdlingResource.ResourceCallback mCallback;
-
-        private boolean mNeedsIdle = false;
-
-        @Override
-        public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
-            mCallback = resourceCallback;
-        }
-
-        @Override
-        public String getName() {
-            return "Transient bottom bar dismissed callback";
-        }
-
-        @Override
-        public boolean isIdleNow() {
-            if (!mNeedsIdle) {
-                return true;
-            } else {
-                return mIsDismissed;
-            }
-        }
-
-        @Override
-        public void onDismissed(BaseTransientBottomBar transientBottomBar,
-                @DismissEvent int event) {
-            mIsDismissed = true;
-            if (mCallback != null) {
-                mCallback.onTransitionToIdle();
-            }
-        }
-    }
-
-    /**
-     * Helper method that shows that specified {@link Snackbar} and waits until
-     * it has been fully shown.
-     */
-    public static void showTransientBottomBarAndWaitUntilFullyShown(
-            @NonNull BaseTransientBottomBar transientBottomBar) {
-        TransientBottomBarShownCallback callback = new TransientBottomBarShownCallback();
-        transientBottomBar.addCallback(callback);
-        try {
-            // Register our listener as idling resource so that Espresso waits until the
-            // the bar has been fully shown
-            Espresso.registerIdlingResources(callback);
-            // Show the bar
-            transientBottomBar.show();
-            // Mark the callback to require waiting for idle state
-            callback.mNeedsIdle = true;
-            // Perform a dummy Espresso action that loops until the UI thread is idle. This
-            // effectively blocks us until the Snackbar has completed its sliding animation.
-            onView(isRoot()).perform(waitUntilIdle());
-            callback.mNeedsIdle = false;
-        } finally {
-            // Unregister our idling resource
-            Espresso.unregisterIdlingResources(callback);
-            // And remove our tracker listener from Snackbar
-            transientBottomBar.removeCallback(callback);
-        }
-    }
-
-    /**
-     * Helper method that dismissed that specified {@link Snackbar} and waits until
-     * it has been fully dismissed.
-     */
-    public static void dismissTransientBottomBarAndWaitUntilFullyDismissed(
-            @NonNull final BaseTransientBottomBar transientBottomBar) throws Throwable {
-        performActionAndWaitUntilFullyDismissed(transientBottomBar,
-                new TransientBottomBarAction() {
-                    @Override
-                    public void perform() throws Throwable {
-                        transientBottomBar.dismiss();
-                    }
-                });
-    }
-
-    /**
-     * Helper method that dismissed that specified {@link Snackbar} and waits until
-     * it has been fully dismissed.
-     */
-    public static void performActionAndWaitUntilFullyDismissed(
-            @NonNull BaseTransientBottomBar transientBottomBar,
-            @NonNull TransientBottomBarAction action) throws Throwable {
-        TransientBottomBarDismissedCallback callback = new TransientBottomBarDismissedCallback();
-        transientBottomBar.addCallback(callback);
-        try {
-            // Register our listener as idling resource so that Espresso waits until the
-            // the bar has been fully dismissed
-            Espresso.registerIdlingResources(callback);
-            // Run the action
-            action.perform();
-            // Mark the callback to require waiting for idle state
-            callback.mNeedsIdle = true;
-            // Perform a dummy Espresso action that loops until the UI thread is idle. This
-            // effectively blocks us until the Snackbar has completed its sliding animation.
-            onView(isRoot()).perform(waitUntilIdle());
-            callback.mNeedsIdle = false;
-        } finally {
-            // Unregister our idling resource
-            Espresso.unregisterIdlingResources(callback);
-            // And remove our tracker listener from Snackbar
-            transientBottomBar.removeCallback(null);
-        }
-    }
-
-    /**
-     * Helper method that waits until the given bar has been fully dismissed.
-     */
-    public static void waitUntilFullyDismissed(@NonNull BaseTransientBottomBar transientBottomBar) {
-        TransientBottomBarDismissedCallback callback = new TransientBottomBarDismissedCallback();
-        transientBottomBar.addCallback(callback);
-        try {
-            // Register our listener as idling resource so that Espresso waits until the
-            // the bar has been fully dismissed
-            Espresso.registerIdlingResources(callback);
-            // Mark the callback to require waiting for idle state
-            callback.mNeedsIdle = true;
-            // Perform a dummy Espresso action that loops until the UI thread is idle. This
-            // effectively blocks us until the Snackbar has completed its sliding animation.
-            onView(isRoot()).perform(waitUntilIdle());
-            callback.mNeedsIdle = false;
-        } finally {
-            // Unregister our idling resource
-            Espresso.unregisterIdlingResources(callback);
-            // And remove our tracker listener from Snackbar
-            transientBottomBar.removeCallback(null);
-        }
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/SwipeUtils.java b/design/tests/src/android/support/design/testutils/SwipeUtils.java
deleted file mode 100644
index cf92883..0000000
--- a/design/tests/src/android/support/design/testutils/SwipeUtils.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import android.support.test.espresso.action.CoordinatesProvider;
-import android.support.test.espresso.action.GeneralSwipeAction;
-import android.support.test.espresso.action.Press;
-import android.support.test.espresso.action.Swipe;
-import android.view.View;
-
-public class SwipeUtils {
-
-    public static GeneralSwipeAction swipeUp(final int swipeX,
-            final int swipeStartY, final int swipeAmountY) {
-        return new GeneralSwipeAction(
-                Swipe.SLOW,
-                new CoordinatesProvider() {
-                    @Override
-                    public float[] calculateCoordinates(View view) {
-                        return new float[] { swipeX, swipeStartY };
-                    }
-                },
-                new CoordinatesProvider() {
-                    @Override
-                    public float[] calculateCoordinates(View view) {
-                        return new float[] { swipeX, swipeStartY - swipeAmountY };
-                    }
-                },
-                Press.FINGER
-        );
-    }
-
-    public static GeneralSwipeAction swipeDown(final int swipeX,
-            final int swipeStartY, final int swipeAmountY) {
-        return new GeneralSwipeAction(
-                Swipe.SLOW,
-                new CoordinatesProvider() {
-                    @Override
-                    public float[] calculateCoordinates(View view) {
-                        return new float[] { swipeX, swipeStartY };
-                    }
-                },
-                new CoordinatesProvider() {
-                    @Override
-                    public float[] calculateCoordinates(View view) {
-                        return new float[] { swipeX, swipeStartY + swipeAmountY };
-                    }
-                },
-                Press.FINGER
-        );
-    }
-
-
-}
diff --git a/design/tests/src/android/support/design/testutils/TabLayoutActions.java b/design/tests/src/android/support/design/testutils/TabLayoutActions.java
deleted file mode 100644
index 7c17850..0000000
--- a/design/tests/src/android/support/design/testutils/TabLayoutActions.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast;
-
-import android.support.annotation.Nullable;
-import android.support.design.widget.TabLayout;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.matcher.ViewMatchers;
-import android.support.v4.view.ViewPager;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-public class TabLayoutActions {
-    /**
-     * Wires <code>TabLayout</code> to <code>ViewPager</code> content.
-     */
-    public static ViewAction setupWithViewPager(final @Nullable ViewPager viewPager) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Setup with ViewPager content";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TabLayout tabLayout = (TabLayout) view;
-                tabLayout.setupWithViewPager(viewPager);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Wires <code>TabLayout</code> to <code>ViewPager</code> content.
-     */
-    public static ViewAction setupWithViewPager(final @Nullable ViewPager viewPager,
-            final boolean autoRefresh) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Setup with ViewPager content";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TabLayout tabLayout = (TabLayout) view;
-                tabLayout.setupWithViewPager(viewPager, autoRefresh);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Selects the specified tab in the <code>TabLayout</code>.
-     */
-    public static ViewAction selectTab(final int tabIndex) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Selects tab";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TabLayout tabLayout = (TabLayout) view;
-                tabLayout.getTabAt(tabIndex).select();
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets the specified tab mode in the <code>TabLayout</code>.
-     */
-    public static ViewAction setTabMode(final int tabMode) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets tab mode";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TabLayout tabLayout = (TabLayout) view;
-                tabLayout.setTabMode(tabMode);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Calls <code>setScrollPosition(position, positionOffset, true)</code> on the
-     * <code>TabLayout</code>
-     */
-    public static ViewAction setScrollPosition(final int position, final float positionOffset) {
-        return new ViewAction() {
-
-            @Override
-            public Matcher<View> getConstraints() {
-                return ViewMatchers.isAssignableFrom(TabLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "setScrollPosition(" + position + ", " + positionOffset + ", true)";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                TabLayout tabs = (TabLayout) view;
-                tabs.setScrollPosition(position, positionOffset, true);
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/TestDrawable.java b/design/tests/src/android/support/design/testutils/TestDrawable.java
deleted file mode 100644
index 26b3bf0..0000000
--- a/design/tests/src/android/support/design/testutils/TestDrawable.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import android.graphics.drawable.GradientDrawable;
-import android.support.annotation.ColorInt;
-
-/**
- * Custom drawable class that provides a reliable way for testing various tinting scenarios
- * across a range of platform versions. ColorDrawable doesn't support tinting on Kitkat and
- * below, and BitmapDrawable (PNG sources) appears to slightly alter green and blue channels
- * by a few units on some of the older platform versions (Gingerbread). Using GradientDrawable
- * allows doing reliable tests at the level of individual channels (alpha / red / green / blue)
- * for tinted and untinted icons in the testIconTinting method.
- */
-public class TestDrawable extends GradientDrawable {
-    private int mWidth;
-    private int mHeight;
-
-    public TestDrawable(@ColorInt int color, int width, int height) {
-        super(Orientation.TOP_BOTTOM, new int[] { color, color });
-        mWidth = width;
-        mHeight = height;
-    }
-
-    @Override
-    public int getIntrinsicWidth() {
-        return mWidth;
-    }
-
-    @Override
-    public int getIntrinsicHeight() {
-        return mHeight;
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/TestUtils.java b/design/tests/src/android/support/design/testutils/TestUtils.java
deleted file mode 100644
index 5b1eff7..0000000
--- a/design/tests/src/android/support/design/testutils/TestUtils.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static org.junit.Assert.fail;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-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;
-
-public class TestUtils {
-    /**
-     * 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, boolean callSetBounds, @ColorInt int color,
-            int allowedComponentVariance, boolean throwExceptionIfFails) {
-        assertAllPixelsOfColor(failMessagePrefix, drawable, drawableWidth, drawableHeight,
-                callSetBounds, color, null, allowedComponentVariance, throwExceptionIfFails);
-    }
-
-    public static void assertAllPixelsOfColor(String failMessagePrefix, @NonNull Drawable drawable,
-            int drawableWidth, int drawableHeight, boolean callSetBounds, @ColorInt int color,
-            Rect checkArea, int allowedComponentVariance, 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);
-        if (callSetBounds) {
-            // Configure the drawable to have bounds that match the passed 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];
-
-            final int firstRow = checkArea != null ? checkArea.top : 0;
-            final int lastRow = checkArea != null ? checkArea.bottom : drawableHeight - 1;
-            final int firstCol = checkArea != null ? checkArea.left : 0;
-            final int lastCol = checkArea != null ? checkArea.right : drawableWidth - 1;
-
-            final int expectedAlpha = Color.alpha(color);
-            final int expectedRed = Color.red(color);
-            final int expectedGreen = Color.green(color);
-            final int expectedBlue = Color.blue(color);
-
-            for (int row = firstRow; row <= lastRow; row++) {
-                bitmap.getPixels(rowPixels, 0, drawableWidth, 0, row, drawableWidth, 1);
-
-                for (int column = firstCol; column <= lastCol; column++) {
-                    int sourceAlpha = Color.alpha(rowPixels[column]);
-                    int sourceRed = Color.red(rowPixels[column]);
-                    int sourceGreen = Color.green(rowPixels[column]);
-                    int sourceBlue = Color.blue(rowPixels[column]);
-
-                    int varianceAlpha = Math.abs(sourceAlpha - expectedAlpha);
-                    int varianceRed = Math.abs(sourceRed - expectedRed);
-                    int varianceGreen = Math.abs(sourceGreen - expectedGreen);
-                    int varianceBlue = Math.abs(sourceBlue - expectedBlue);
-
-                    boolean isColorMatch = (varianceAlpha <= allowedComponentVariance)
-                            && (varianceRed <= allowedComponentVariance)
-                            && (varianceGreen <= allowedComponentVariance)
-                            && (varianceBlue <= allowedComponentVariance);
-
-                    if (!isColorMatch) {
-                        String mismatchDescription = failMessagePrefix
-                                + ": expected all drawable colors to be ["
-                                + expectedAlpha + "," + expectedRed + ","
-                                + expectedGreen + "," + expectedBlue
-                                + "] but at position (" + row + "," + column + ") found ["
-                                + sourceAlpha + "," + sourceRed + ","
-                                + sourceGreen + "," + sourceBlue + "]";
-                        if (throwExceptionIfFails) {
-                            throw new RuntimeException(mismatchDescription);
-                        } else {
-                            fail(mismatchDescription);
-                        }
-                    }
-                }
-            }
-        } finally {
-            bitmap.recycle();
-        }
-    }
-
-    public static int getThemeAttrColor(Context context, final int attr) {
-        TypedArray a = null;
-        try {
-            a = context.obtainStyledAttributes(new int[]{attr});
-            return a.getColor(0, 0);
-        } finally {
-            if (a != null) {
-                a.recycle();
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/design/tests/src/android/support/design/testutils/TestUtilsActions.java b/design/tests/src/android/support/design/testutils/TestUtilsActions.java
deleted file mode 100644
index a9d1233..0000000
--- a/design/tests/src/android/support/design/testutils/TestUtilsActions.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast;
-import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
-
-import android.graphics.drawable.Drawable;
-import android.os.Parcelable;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.MenuRes;
-import android.support.annotation.Nullable;
-import android.support.design.widget.CollapsingToolbarLayout;
-import android.support.design.widget.NavigationView;
-import android.support.design.widget.TabLayout;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.TextViewCompat;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import org.hamcrest.Matcher;
-
-public class TestUtilsActions {
-    /**
-     * Replaces an existing {@link TabLayout} with a new one inflated from the specified
-     * layout resource.
-     */
-    public static ViewAction replaceTabLayout(final @LayoutRes int tabLayoutResId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Replace TabLayout";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final ViewGroup viewGroup = (ViewGroup) view;
-                final int childCount = viewGroup.getChildCount();
-                // Iterate over children and find TabLayout
-                for (int i = 0; i < childCount; i++) {
-                    View child = viewGroup.getChildAt(i);
-                    if (child instanceof TabLayout) {
-                        // Remove the existing TabLayout
-                        viewGroup.removeView(child);
-                        // Create a new one
-                        final LayoutInflater layoutInflater =
-                                LayoutInflater.from(view.getContext());
-                        final TabLayout newTabLayout = (TabLayout) layoutInflater.inflate(
-                                tabLayoutResId, viewGroup, false);
-                        // Make sure we're adding the new TabLayout at the same index
-                        viewGroup.addView(newTabLayout, i);
-                        break;
-                    }
-                }
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * 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();
-            }
-        };
-    }
-
-    /**
-     * Sets title on the {@link CollapsingToolbarLayout}.
-     */
-    public static ViewAction setTitle(final CharSequence title) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(CollapsingToolbarLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "set toolbar title";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                CollapsingToolbarLayout collapsingToolbarLayout =
-                        (CollapsingToolbarLayout) view;
-                collapsingToolbarLayout.setTitle(title);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets text content on {@link TextView}
-     */
-    public static ViewAction setText(final @Nullable CharSequence text) {
-        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(text);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Adds tabs to {@link TabLayout}
-     */
-    public static ViewAction addTabs(final String... tabs) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TabLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "TabLayout add tabs";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TabLayout tabLayout = (TabLayout) view;
-                for (int i = 0; i < tabs.length; i++) {
-                    tabLayout.addTab(tabLayout.newTab().setText(tabs[i]));
-                }
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Dummy Espresso action that waits until the UI thread is idle. This action can be performed
-     * on the root view to wait for an ongoing animation to be completed.
-     */
-    public static ViewAction waitUntilIdle() {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isRoot();
-            }
-
-            @Override
-            public String getDescription() {
-                return "wait for idle";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setEnabled(final boolean enabled) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "set enabled";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                view.setEnabled(enabled);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setClickable(final boolean clickable) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "set clickable";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                view.setClickable(clickable);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setSelected(final boolean selected) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "set selected";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-                view.setSelected(selected);
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets compound drawables on {@link TextView}
-     */
-    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 relative";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextView textView = (TextView) view;
-                TextViewCompat.setCompoundDrawablesRelative(textView, start, top, end, bottom);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Restores the saved hierarchy state.
-     *
-     * @param container The saved hierarchy state.
-     */
-    public static ViewAction restoreHierarchyState(final SparseArray<Parcelable> container) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(View.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "restore the saved state";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-                view.restoreHierarchyState(container);
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Clears and inflates the menu.
-     *
-     * @param menuResId The menu resource XML to be used.
-     */
-    public static ViewAction reinflateMenu(final @MenuRes int menuResId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(NavigationView.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "clear and inflate menu " + menuResId;
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-                final NavigationView nv = (NavigationView) view;
-                nv.getMenu().clear();
-                nv.inflateMenu(menuResId);
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-}
diff --git a/design/tests/src/android/support/design/testutils/TestUtilsMatchers.java b/design/tests/src/android/support/design/testutils/TestUtilsMatchers.java
deleted file mode 100644
index 46bb982..0000000
--- a/design/tests/src/android/support/design/testutils/TestUtilsMatchers.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static org.junit.Assert.assertEquals;
-
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.IdRes;
-import android.support.annotation.NonNull;
-import android.support.design.widget.FloatingActionButton;
-import android.support.test.espresso.matcher.BoundedMatcher;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.TextViewCompat;
-import android.support.v7.view.menu.MenuItemImpl;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-
-public class TestUtilsMatchers {
-    /**
-     * Returns a matcher that matches Views that are not narrower than specified width in pixels.
-     */
-    public static Matcher<View> isNotNarrowerThan(final int minWidth) {
-        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 int viewWidth = view.getWidth();
-                if (viewWidth < minWidth) {
-                    failedCheckDescription =
-                            "width " + viewWidth + " is less than minimum " + minWidth;
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches Views that are not wider than specified width in pixels.
-     */
-    public static Matcher<View> isNotWiderThan(final int maxWidth) {
-        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 int viewWidth = view.getWidth();
-                if (viewWidth > maxWidth) {
-                    failedCheckDescription =
-                            "width " + viewWidth + " is more than maximum " + maxWidth;
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches TextViews with the specified text size.
-     */
-    public static Matcher withTextSize(final float textSize) {
-        return new BoundedMatcher<View, TextView>(TextView.class) {
-            private String failedCheckDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText(failedCheckDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final TextView view) {
-                final float ourTextSize = view.getTextSize();
-                if (Math.abs(textSize - ourTextSize) > 1.0f) {
-                    failedCheckDescription =
-                            "text size " + ourTextSize + " is different than expected " + textSize;
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches TextViews with the specified text color.
-     */
-    public static Matcher withTextColor(final @ColorInt int textColor) {
-        return new BoundedMatcher<View, TextView>(TextView.class) {
-            private String failedCheckDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText(failedCheckDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final TextView view) {
-                final @ColorInt int ourTextColor = view.getCurrentTextColor();
-                if (ourTextColor != textColor) {
-                    int ourAlpha = Color.alpha(ourTextColor);
-                    int ourRed = Color.red(ourTextColor);
-                    int ourGreen = Color.green(ourTextColor);
-                    int ourBlue = Color.blue(ourTextColor);
-
-                    int expectedAlpha = Color.alpha(textColor);
-                    int expectedRed = Color.red(textColor);
-                    int expectedGreen = Color.green(textColor);
-                    int expectedBlue = Color.blue(textColor);
-
-                    failedCheckDescription =
-                            "expected color to be ["
-                                    + expectedAlpha + "," + expectedRed + ","
-                                    + expectedGreen + "," + expectedBlue
-                                    + "] but found ["
-                                    + ourAlpha + "," + ourRed + ","
-                                    + ourGreen + "," + ourBlue + "]";
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches TextViews whose start drawable is filled with the specified
-     * fill color.
-     */
-    public static Matcher withStartDrawableFilledWith(final @ColorInt int fillColor,
-            final int allowedComponentVariance) {
-        return new BoundedMatcher<View, TextView>(TextView.class) {
-            private String failedCheckDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText(failedCheckDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final TextView view) {
-                final Drawable[] compoundDrawables = view.getCompoundDrawables();
-                final boolean isRtl =
-                        (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_RTL);
-                final Drawable startDrawable = isRtl ? compoundDrawables[2] : compoundDrawables[0];
-                if (startDrawable == null) {
-                    failedCheckDescription = "no start drawable";
-                    return false;
-                }
-                try {
-                    final Rect bounds = startDrawable.getBounds();
-                    TestUtils.assertAllPixelsOfColor("",
-                            startDrawable, bounds.width(), bounds.height(), true,
-                            fillColor, allowedComponentVariance, true);
-                } catch (Throwable t) {
-                    failedCheckDescription = t.getMessage();
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches <code>ImageView</code>s which have drawable flat-filled
-     * with the specific color.
-     */
-    public static Matcher drawable(@ColorInt final int color, final int allowedComponentVariance) {
-        return new BoundedMatcher<View, ImageView>(ImageView.class) {
-            private String mFailedComparisonDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText("with drawable of color: ");
-
-                description.appendText(mFailedComparisonDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final ImageView view) {
-                Drawable drawable = view.getDrawable();
-                if (drawable == 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.
-                try {
-                    TestUtils.assertAllPixelsOfColor("", drawable, view.getWidth(),
-                            view.getHeight(), true, color, allowedComponentVariance, true);
-                    // If we are here, the color comparison has passed.
-                    mFailedComparisonDescription = null;
-                    return true;
-                } catch (Throwable t) {
-                    // If we are here, the color comparison has failed.
-                    mFailedComparisonDescription = t.getMessage();
-                    return false;
-                }
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches Views with the specified background fill color.
-     */
-    public static Matcher withBackgroundFill(final @ColorInt int fillColor) {
-        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) {
-                Drawable background = view.getBackground();
-                try {
-                    TestUtils.assertAllPixelsOfColor("",
-                            background, view.getWidth(), view.getHeight(), true,
-                            fillColor, 0, true);
-                } catch (Throwable t) {
-                    failedCheckDescription = t.getMessage();
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches FloatingActionButtons with the specified custom size.
-     */
-    public static Matcher withFabCustomSize(final int customSize) {
-        return new BoundedMatcher<View, View>(View.class) {
-            private String mFailedCheckDescription;
-
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText(mFailedCheckDescription);
-            }
-
-            @Override
-            public boolean matchesSafely(final View view) {
-                if (!(view instanceof FloatingActionButton)) {
-                    return false;
-                }
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                if (Math.abs(fab.getCustomSize() - customSize) > 1.0f) {
-                    mFailedCheckDescription =
-                            "Custom size " + fab.getCustomSize() + " is different than expected "
-                                    + customSize;
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches FloatingActionButtons with the specified background
-     * fill color.
-     */
-    public static Matcher withFabBackgroundFill(final @ColorInt int fillColor) {
-        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) {
-                if (!(view instanceof FloatingActionButton)) {
-                    return false;
-                }
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-
-                // Since the FAB background is round, and may contain the shadow, we'll look at
-                // just the center half rect of the content area
-                final Rect area = new Rect();
-                fab.getContentRect(area);
-
-                final int rectHeightQuarter = area.height() / 4;
-                final int rectWidthQuarter = area.width() / 4;
-                area.left += rectWidthQuarter;
-                area.top += rectHeightQuarter;
-                area.right -= rectWidthQuarter;
-                area.bottom -= rectHeightQuarter;
-
-                try {
-                    TestUtils.assertAllPixelsOfColor("",
-                            fab.getBackground(), view.getWidth(), view.getHeight(), false,
-                            fillColor, area, 0, true);
-                } catch (Throwable t) {
-                    failedCheckDescription = t.getMessage();
-                    return false;
-                }
-                return true;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches {@link View}s based on the given parent type.
-     *
-     * @param parentMatcher the type of the parent to match on
-     */
-    public static Matcher<View> isChildOfA(final Matcher<View> parentMatcher) {
-        return new TypeSafeMatcher<View>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("is child of a: ");
-                parentMatcher.describeTo(description);
-            }
-
-            @Override
-            public boolean matchesSafely(View view) {
-                final ViewParent viewParent = view.getParent();
-                if (!(viewParent instanceof View)) {
-                    return false;
-                }
-                if (parentMatcher.matches(viewParent)) {
-                    return true;
-                }
-                return false;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches FloatingActionButtons with the specified content height
-     */
-    public static Matcher withFabContentHeight(final int size) {
-        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) {
-                if (!(view instanceof FloatingActionButton)) {
-                    return false;
-                }
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                final Rect area = new Rect();
-                fab.getContentRect(area);
-
-                return area.height() == size;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches FloatingActionButtons with the specified gravity.
-     */
-    public static Matcher withFabContentAreaOnMargins(final int gravity) {
-        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) {
-                if (!(view instanceof FloatingActionButton)) {
-                    return false;
-                }
-
-                final FloatingActionButton fab = (FloatingActionButton) view;
-                final ViewGroup.MarginLayoutParams lp =
-                        (ViewGroup.MarginLayoutParams) fab.getLayoutParams();
-                final ViewGroup parent = (ViewGroup) view.getParent();
-
-                final Rect area = new Rect();
-                fab.getContentRect(area);
-
-                final int absGravity = GravityCompat.getAbsoluteGravity(gravity,
-                        ViewCompat.getLayoutDirection(view));
-
-                try {
-                    switch (absGravity & Gravity.VERTICAL_GRAVITY_MASK) {
-                        case Gravity.TOP:
-                            assertEquals(lp.topMargin, fab.getTop() + area.top);
-                            break;
-                        case Gravity.BOTTOM:
-                            assertEquals(parent.getHeight() - lp.bottomMargin,
-                                    fab.getTop() + area.bottom);
-                            break;
-                    }
-                    switch (absGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
-                        case Gravity.LEFT:
-                            assertEquals(lp.leftMargin, fab.getLeft() + area.left);
-                            break;
-                        case Gravity.RIGHT:
-                            assertEquals(parent.getWidth() - lp.rightMargin,
-                                    fab.getLeft() + area.right);
-                            break;
-                    }
-                    return true;
-                } catch (Throwable t) {
-                    failedCheckDescription = t.getMessage();
-                    return false;
-                }
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches FloatingActionButtons with the specified content height
-     */
-    public static Matcher withCompoundDrawable(final int index, final Drawable expected) {
-        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) {
-                if (!(view instanceof TextView)) {
-                    return false;
-                }
-
-                final TextView textView = (TextView) view;
-                return expected == TextViewCompat.getCompoundDrawablesRelative(textView)[index];
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches {@link View}s that are pressed.
-     */
-    public static Matcher<View> isPressed() {
-        return new TypeSafeMatcher<View>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("is pressed");
-            }
-
-            @Override
-            public boolean matchesSafely(View view) {
-                return view.isPressed();
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches views which have a z-value greater than 0. Also matches if
-     * the platform we're running on does not support z-values.
-     */
-    public static Matcher<View> hasZ() {
-        return new TypeSafeMatcher<View>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("has a z value greater than 0");
-            }
-
-            @Override
-            public boolean matchesSafely(View view) {
-                return Build.VERSION.SDK_INT < 21 || ViewCompat.getZ(view) > 0f;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches TextViews with the specified typeface.
-     */
-    public static Matcher withTypeface(@NonNull final Typeface typeface) {
-        return new TypeSafeMatcher<TextView>(TextView.class) {
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText("view with typeface: " + typeface);
-            }
-
-            @Override
-            public boolean matchesSafely(final TextView view) {
-                return typeface.equals(view.getTypeface());
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches the action view of the specified menu item.
-     *
-     * @param menu The menu
-     * @param id   The ID of the menu item
-     */
-    public static Matcher<View> isActionViewOf(@NonNull final Menu menu, @IdRes final int id) {
-        return new TypeSafeMatcher<View>() {
-
-            private Resources mResources;
-
-            @Override
-            protected boolean matchesSafely(View view) {
-                mResources = view.getResources();
-                MenuItemImpl item = (MenuItemImpl) menu.findItem(id);
-                return item != null && item.getActionView() == view;
-            }
-
-            @Override
-            public void describeTo(Description description) {
-                String name;
-                if (mResources != null) {
-                    name = mResources.getResourceName(id);
-                } else {
-                    name = Integer.toString(id);
-                }
-                description.appendText("is action view of menu item " + name);
-            }
-        };
-    }
-
-}
diff --git a/design/tests/src/android/support/design/testutils/TextInputLayoutActions.java b/design/tests/src/android/support/design/testutils/TextInputLayoutActions.java
deleted file mode 100755
index c4d4520..0000000
--- a/design/tests/src/android/support/design/testutils/TextInputLayoutActions.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-
-import android.graphics.Typeface;
-import android.support.design.R;
-import android.support.design.widget.TextInputLayout;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.matcher.ViewMatchers;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-public class TextInputLayoutActions {
-
-    public static ViewAction setErrorEnabled(final boolean enabled) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Enables/disables the error";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextInputLayout layout = (TextInputLayout) view;
-                layout.setErrorEnabled(enabled);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setError(final CharSequence error) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets the error";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextInputLayout layout = (TextInputLayout) view;
-                layout.setError(error);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setErrorTextAppearance(final int resId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets the error text appearance";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextInputLayout layout = (TextInputLayout) view;
-                layout.setErrorTextAppearance(resId);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setTypeface(final Typeface typeface) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets the typeface";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextInputLayout layout = (TextInputLayout) view;
-                layout.setTypeface(typeface);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setPasswordVisibilityToggleEnabled(final boolean enabled) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets the error";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextInputLayout layout = (TextInputLayout) view;
-                layout.setPasswordVisibilityToggleEnabled(enabled);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setCounterEnabled(final boolean enabled) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets the counter enabled";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextInputLayout layout = (TextInputLayout) view;
-                layout.setCounterEnabled(enabled);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public static ViewAction setCounterMaxLength(final int maxLength) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets the counter max length";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                TextInputLayout layout = (TextInputLayout) view;
-                layout.setCounterMaxLength(maxLength);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Toggles password.
-     */
-    public static ViewAction clickPasswordToggle() {
-        return new ViewAction() {
-
-            @Override
-            public Matcher<View> getConstraints() {
-                return ViewMatchers.isAssignableFrom(TextInputLayout.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Clicks the password toggle";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                TextInputLayout textInputLayout = (TextInputLayout) view;
-                // Reach in and find the password toggle since we don't have a public API
-                // to get a reference to it
-                View passwordToggle = textInputLayout.findViewById(R.id.text_input_password_toggle);
-                passwordToggle.performClick();
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-}
diff --git a/design/tests/src/android/support/design/testutils/TextInputLayoutMatchers.java b/design/tests/src/android/support/design/testutils/TextInputLayoutMatchers.java
deleted file mode 100755
index d67e555..0000000
--- a/design/tests/src/android/support/design/testutils/TextInputLayoutMatchers.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import android.support.design.R;
-import android.support.design.widget.CheckableImageButton;
-import android.support.design.widget.TextInputLayout;
-import android.text.TextUtils;
-import android.view.View;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-
-public class TextInputLayoutMatchers {
-
-    /**
-     * Returns a matcher that matches TextInputLayouts with non-empty content descriptions for
-     * the password toggle.
-     */
-    public static Matcher passwordToggleHasContentDescription() {
-        return new TypeSafeMatcher<TextInputLayout>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("TextInputLayout has non-empty content description"
-                        + "for password toggle.");
-            }
-
-            @Override
-            protected boolean matchesSafely(TextInputLayout item) {
-                // Reach in and find the password toggle since we don't have a public API
-                // to get a reference to it
-                View passwordToggle = item.findViewById(R.id.text_input_password_toggle);
-                return !TextUtils.isEmpty(item.getPasswordVisibilityToggleContentDescription())
-                    && !TextUtils.isEmpty(passwordToggle.getContentDescription());
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches TextInputLayouts with non-displayed password toggles
-     */
-    public static Matcher doesNotShowPasswordToggle() {
-        return new TypeSafeMatcher<TextInputLayout>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("TextInputLayout shows password toggle.");
-            }
-
-            @Override
-            protected boolean matchesSafely(TextInputLayout item) {
-                // Reach in and find the password toggle since we don't have a public API
-                // to get a reference to it
-                View passwordToggle = item.findViewById(R.id.text_input_password_toggle);
-                return passwordToggle.getVisibility() != View.VISIBLE;
-            }
-        };
-    }
-
-    /**
-     * Returns a matcher that matches TextInputLayouts with non-displayed password toggles
-     */
-    public static Matcher passwordToggleIsNotChecked() {
-        return new TypeSafeMatcher<TextInputLayout>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("TextInputLayout has checked password toggle.");
-            }
-
-            @Override
-            protected boolean matchesSafely(TextInputLayout item) {
-                // Reach in and find the password toggle since we don't have a public API
-                // to get a reference to it
-                CheckableImageButton passwordToggle = (CheckableImageButton) item.findViewById(
-                        R.id.text_input_password_toggle);
-                return !passwordToggle.isChecked();
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/ViewPagerActions.java b/design/tests/src/android/support/design/testutils/ViewPagerActions.java
deleted file mode 100644
index 1a147cf..0000000
--- a/design/tests/src/android/support/design/testutils/ViewPagerActions.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.testutils;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast;
-
-import android.support.annotation.Nullable;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-public class ViewPagerActions {
-    /**
-     * Moves <code>ViewPager</code> to the right by one page.
-     */
-    public static ViewAction scrollRight() {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "ViewPager scroll one page to the right";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewPager viewPager = (ViewPager) view;
-                int current = viewPager.getCurrentItem();
-                viewPager.setCurrentItem(current + 1, false);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Moves <code>ViewPager</code> to the left by one page.
-     */
-    public static ViewAction scrollLeft() {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "ViewPager scroll one page to the left";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewPager viewPager = (ViewPager) view;
-                int current = viewPager.getCurrentItem();
-                viewPager.setCurrentItem(current - 1, false);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Moves <code>ViewPager</code> to the last page.
-     */
-    public static ViewAction scrollToLast() {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "ViewPager scroll to last page";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewPager viewPager = (ViewPager) view;
-                int size = viewPager.getAdapter().getCount();
-                if (size > 0) {
-                    viewPager.setCurrentItem(size - 1, false);
-                }
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Moves <code>ViewPager</code> to the first page.
-     */
-    public static ViewAction scrollToFirst() {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "ViewPager scroll to first page";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewPager viewPager = (ViewPager) view;
-                int size = viewPager.getAdapter().getCount();
-                if (size > 0) {
-                    viewPager.setCurrentItem(0, false);
-                }
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Moves <code>ViewPager</code> to specific page.
-     */
-    public static ViewAction scrollToPage(final int page) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isDisplayingAtLeast(90);
-            }
-
-            @Override
-            public String getDescription() {
-                return "ViewPager move to a specific page";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewPager viewPager = (ViewPager) view;
-                viewPager.setCurrentItem(page, false);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    /**
-     * Sets the specified adapter on <code>ViewPager</code>.
-     */
-    public static ViewAction setAdapter(final @Nullable PagerAdapter adapter) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(ViewPager.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "ViewPager set adapter";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewPager viewPager = (ViewPager) view;
-                viewPager.setAdapter(adapter);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/testutils/ViewStructureImpl.java b/design/tests/src/android/support/design/testutils/ViewStructureImpl.java
deleted file mode 100644
index c7369e9..0000000
--- a/design/tests/src/android/support/design/testutils/ViewStructureImpl.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2017 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.design.testutils;
-
-import android.graphics.Matrix;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.os.LocaleList;
-import android.view.ViewStructure;
-import android.view.ViewStructure.HtmlInfo.Builder;
-import android.view.autofill.AutofillId;
-import android.view.autofill.AutofillValue;
-
-/**
- * Simple implementation of {@link ViewStructure} that's easier to use than a Mockito mock.
- *
- * <p>Currently supports only {@code hint}, {@code className}, and child-related methods.
- */
-public class ViewStructureImpl extends ViewStructure {
-
-    private CharSequence mHint;
-    private String mClassName;
-    private ViewStructureImpl[] mChildren;
-
-    @Override
-    public void setHint(CharSequence hint) {
-        mHint = hint;
-    }
-
-    // Supported methods
-    @Override
-    public CharSequence getHint() {
-        return mHint;
-    }
-
-    @Override
-    public void setChildCount(int num) {
-        mChildren = new ViewStructureImpl[num];
-    }
-
-    @Override
-    public void setClassName(String className) {
-        mClassName = className;
-    }
-
-    public String getClassName() {
-        return mClassName;
-    }
-
-    @Override
-    public int addChildCount(int num) {
-        if (mChildren == null) {
-            setChildCount(num);
-            return 0;
-        }
-        final int start = mChildren.length;
-        ViewStructureImpl[] newArray = new ViewStructureImpl[start + num];
-        System.arraycopy(mChildren, 0, newArray, 0, start);
-        mChildren = newArray;
-        return start;
-    }
-
-    @Override
-    public int getChildCount() {
-        if (mChildren == null) {
-            return 0;
-        }
-        return mChildren.length;
-    }
-
-    public ViewStructureImpl getChildAt(int index) {
-        return mChildren[index];
-    }
-
-    @Override
-    public ViewStructure newChild(int index) {
-        final ViewStructureImpl child = new ViewStructureImpl();
-        mChildren[index] = child;
-        return child;
-    }
-
-    @Override
-    public ViewStructure asyncNewChild(int index) {
-        return newChild(index);
-    }
-
-
-    // Unsupported methods
-    @Override
-    public void setId(int id, String packageName, String typeName, String entryName) {
-    }
-
-    @Override
-    public void setDimens(int left, int top, int scrollX, int scrollY, int width, int height) {
-    }
-
-    @Override
-    public void setTransformation(Matrix matrix) {
-    }
-
-    @Override
-    public void setElevation(float elevation) {
-    }
-
-    @Override
-    public void setAlpha(float alpha) {
-    }
-
-    @Override
-    public void setVisibility(int visibility) {
-    }
-
-    public void setAssistBlocked(boolean state) {
-    }
-
-    @Override
-    public void setEnabled(boolean state) {
-    }
-
-    @Override
-    public void setClickable(boolean state) {
-    }
-
-    @Override
-    public void setLongClickable(boolean state) {
-    }
-
-    @Override
-    public void setContextClickable(boolean state) {
-    }
-
-    @Override
-    public void setFocusable(boolean state) {
-    }
-
-    @Override
-    public void setFocused(boolean state) {
-    }
-
-    @Override
-    public void setAccessibilityFocused(boolean state) {
-    }
-
-    @Override
-    public void setCheckable(boolean state) {
-    }
-
-    @Override
-    public void setChecked(boolean state) {
-    }
-
-    @Override
-    public void setSelected(boolean state) {
-    }
-
-    @Override
-    public void setActivated(boolean state) {
-    }
-
-    @Override
-    public void setOpaque(boolean opaque) {
-    }
-
-    @Override
-    public void setContentDescription(CharSequence contentDescription) {
-    }
-
-    @Override
-    public void setText(CharSequence text) {
-    }
-
-    @Override
-    public void setText(CharSequence text, int selectionStart, int selectionEnd) {
-    }
-
-    @Override
-    public void setTextStyle(float size, int fgColor, int bgColor, int style) {
-    }
-
-    @Override
-    public void setTextLines(int[] charOffsets, int[] baselines) {
-    }
-
-    @Override
-    public CharSequence getText() {
-        return null;
-    }
-
-    @Override
-    public int getTextSelectionStart() {
-        return 0;
-    }
-
-    @Override
-    public int getTextSelectionEnd() {
-        return 0;
-    }
-
-    @Override
-    public Bundle getExtras() {
-        return null;
-    }
-
-    @Override
-    public boolean hasExtras() {
-        return false;
-    }
-
-    @Override
-    public AutofillId getAutofillId() {
-        return null;
-    }
-
-    @Override
-    public void setAutofillId(AutofillId id) {
-    }
-
-    public void setAutofillId(ViewStructure parent, int virtualId) {
-    }
-
-    @Override
-    public void setAutofillId(AutofillId parentId, int virtualId) {
-    }
-
-    @Override
-    public void setAutofillType(int type) {
-    }
-
-    @Override
-    public void setAutofillHints(String[] hint) {
-    }
-
-    @Override
-    public void setAutofillValue(AutofillValue value) {
-    }
-
-    @Override
-    public void setAutofillOptions(CharSequence[] options) {
-    }
-
-    @Override
-    public void setInputType(int inputType) {
-    }
-
-    @Override
-    public void setDataIsSensitive(boolean sensitive) {
-    }
-
-    @Override
-    public void asyncCommit() {
-    }
-
-    public Rect getTempRect() {
-        return null;
-    }
-
-    @Override
-    public void setWebDomain(String domain) {
-    }
-
-    @Override
-    public void setLocaleList(LocaleList localeList) {
-    }
-
-    @Override
-    public Builder newHtmlInfoBuilder(String tagName) {
-        return null;
-    }
-
-    @Override
-    public void setHtmlInfo(HtmlInfo htmlInfo) {
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarHorizontalScrollingActivity.java b/design/tests/src/android/support/design/widget/AppBarHorizontalScrollingActivity.java
deleted file mode 100644
index 960dbd9..0000000
--- a/design/tests/src/android/support/design/widget/AppBarHorizontalScrollingActivity.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2017 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.design.widget;
-
-import android.os.Bundle;
-import android.support.design.test.R;
-import android.support.v7.widget.Toolbar;
-
-public class AppBarHorizontalScrollingActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_appbar_horizontal_scrolling;
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
-        setSupportActionBar(toolbar);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarHorizontalScrollingTest.java b/design/tests/src/android/support/design/widget/AppBarHorizontalScrollingTest.java
deleted file mode 100644
index ccda8b0..0000000
--- a/design/tests/src/android/support/design/widget/AppBarHorizontalScrollingTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2017 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.design.widget;
-
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.swipeLeft;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-
-import android.app.Activity;
-import android.app.Instrumentation;
-import android.os.SystemClock;
-import android.support.design.test.R;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.LargeTest;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.Button;
-import android.widget.HorizontalScrollView;
-
-import org.junit.Test;
-
-/**
- * Testing that if we have a {@link AppBarLayout} child that intercepts touch events (such as
- * {@link HorizontalScrollView} that handles horizontal swipes), that does not interfere with
- * event handling after the event sequence is no longer being intercepted by that child.
- */
-@LargeTest
-public class AppBarHorizontalScrollingTest extends
-        BaseInstrumentationTestCase<AppBarHorizontalScrollingActivity> {
-
-    public AppBarHorizontalScrollingTest() {
-        super(AppBarHorizontalScrollingActivity.class);
-    }
-
-    @Test
-    public void testScrollAndClick() throws Throwable {
-        final Activity activity = mActivityTestRule.getActivity();
-        final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
-
-        final Button button = activity.findViewById(R.id.button);
-        final View.OnClickListener mockClickListener = mock(View.OnClickListener.class);
-        button.setOnClickListener(mockClickListener);
-
-        // Emulate a click on the button to verify that the registered listener is invoked
-        // prior to performing a horizontal swipe across the app bar
-        final int[] buttonXY = new int[2];
-        button.getLocationOnScreen(buttonXY);
-        final int buttonWidth = button.getWidth();
-        final int buttonHeight = button.getHeight();
-        final float emulatedTapX = buttonXY[0] + buttonWidth / 2.0f;
-        final float emulatedTapY = buttonXY[1] + buttonHeight / 2.0f;
-
-        emulateButtonClick(instrumentation, emulatedTapX, emulatedTapY);
-        verify(mockClickListener).onClick(button);
-        reset(mockClickListener);
-
-        final HorizontalScrollView hsv = activity.findViewById(R.id.hsv);
-        final int scrollXBefore = hsv.getScrollX();
-        // Now scroll / swipe horizontally across our scrollable content in the app bar
-        onView(withId(R.id.app_bar)).perform(swipeLeft());
-        assertTrue("Horizontal scroll performed", hsv.getScrollX() > scrollXBefore);
-
-        // And emulate another click on the button to verify that the registered listener is still
-        // invoked immediately after performing the horizontal swipe across the app bar
-        emulateButtonClick(instrumentation, emulatedTapX, emulatedTapY);
-        verify(mockClickListener).onClick(button);
-    }
-
-    private void emulateButtonClick(Instrumentation instrumentation, float emulatedTapX,
-            float emulatedTapY) {
-        // Note that the reason to not use Espresso's click() view action is so that we can
-        // faithfully emulate what was happening in the reported bug. We don't want the events
-        // to be sent directly to the button, but rather be processed by the parent coordinator
-        // layout, so that we reproduce what is happening as the events are processed at the level
-        // of that parent.
-
-        // Inject DOWN event
-        long downTime = SystemClock.uptimeMillis();
-        MotionEvent eventDown = MotionEvent.obtain(
-                downTime, downTime, MotionEvent.ACTION_DOWN, emulatedTapX, emulatedTapY, 1);
-        instrumentation.sendPointerSync(eventDown);
-
-        // Inject MOVE event
-        long moveTime = SystemClock.uptimeMillis();
-        MotionEvent eventMove = MotionEvent.obtain(
-                moveTime, moveTime, MotionEvent.ACTION_MOVE, emulatedTapX, emulatedTapY, 1);
-        instrumentation.sendPointerSync(eventMove);
-
-        // Inject UP event
-        long upTime = SystemClock.uptimeMillis();
-        MotionEvent eventUp = MotionEvent.obtain(
-                upTime, upTime, MotionEvent.ACTION_UP, emulatedTapX, emulatedTapY, 1);
-        instrumentation.sendPointerSync(eventUp);
-
-        // Wait for the system to process all events in the queue
-        instrumentation.waitForIdleSync();
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarLayoutBaseTest.java b/design/tests/src/android/support/design/widget/AppBarLayoutBaseTest.java
deleted file mode 100644
index bd49506..0000000
--- a/design/tests/src/android/support/design/widget/AppBarLayoutBaseTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.CollapsingToolbarLayoutActions.setContentScrimColor;
-import static android.support.design.testutils.SwipeUtils.swipeDown;
-import static android.support.design.testutils.SwipeUtils.swipeUp;
-import static android.support.design.testutils.TestUtilsActions.setText;
-import static android.support.design.testutils.TestUtilsActions.setTitle;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.junit.Assert.assertEquals;
-
-import android.graphics.Color;
-import android.os.Build;
-import android.os.SystemClock;
-import android.support.annotation.CallSuper;
-import android.support.annotation.IdRes;
-import android.support.annotation.IntRange;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.StringRes;
-import android.support.design.test.R;
-import android.support.design.testutils.Shakespeare;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
-import android.text.TextUtils;
-import android.widget.TextView;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-
-public abstract class AppBarLayoutBaseTest extends BaseDynamicCoordinatorLayoutTest {
-
-    protected AppBarLayout mAppBar;
-
-    protected CollapsingToolbarLayout mCollapsingToolbar;
-
-    protected Toolbar mToolbar;
-
-    protected TextView mTextView;
-
-    protected float mDefaultElevationValue;
-
-    protected static void performVerticalSwipeUpGesture(@IdRes int containerId, final int swipeX,
-            final int swipeStartY, final int swipeAmountY) {
-        onView(withId(containerId)).perform(swipeUp(swipeX, swipeStartY, swipeAmountY));
-    }
-
-    protected static void performVerticalSwipeDownGesture(@IdRes int containerId, final int swipeX,
-            final int swipeStartY, final int swipeAmountY) {
-        onView(withId(containerId)).perform(swipeDown(swipeX, swipeStartY, swipeAmountY));
-    }
-
-    @CallSuper
-    protected void configureContent(@LayoutRes final int layoutResId,
-            @StringRes final int titleResId) throws Throwable {
-        onView(withId(R.id.coordinator_stub)).perform(inflateViewStub(layoutResId));
-
-        mAppBar = (AppBarLayout) mCoordinatorLayout.findViewById(R.id.app_bar);
-        mCollapsingToolbar =
-                (CollapsingToolbarLayout) mAppBar.findViewById(R.id.collapsing_app_bar);
-        mToolbar = (Toolbar) mAppBar.findViewById(R.id.toolbar);
-
-        final AppCompatActivity activity = mActivityTestRule.getActivity();
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                activity.setSupportActionBar(mToolbar);
-            }
-        });
-
-        final CharSequence activityTitle = activity.getString(titleResId);
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                activity.setTitle(activityTitle);
-            }
-        });
-
-        if (mCollapsingToolbar != null) {
-            onView(withId(R.id.collapsing_app_bar))
-                    .perform(setTitle(activityTitle))
-                    .perform(setContentScrimColor(Color.MAGENTA));
-        }
-
-        TextView dialog = (TextView) mCoordinatorLayout.findViewById(R.id.textview_dialogue);
-        if (dialog != null) {
-            onView(withId(R.id.textview_dialogue))
-                    .perform(setText(TextUtils.concat(Shakespeare.DIALOGUE)));
-        }
-
-        mDefaultElevationValue = mAppBar.getResources()
-                .getDimension(R.dimen.design_appbar_elevation);
-    }
-
-    protected void assertAppBarElevation(float expectedValue) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            assertEquals(expectedValue, ViewCompat.getElevation(mAppBar), 0.05f);
-        }
-    }
-
-    protected void assertScrimAlpha(@IntRange(from = 0, to = 255) int alpha) {
-        SystemClock.sleep(300);
-        onView(withId(R.id.collapsing_app_bar))
-                .check(matches(withScrimAlpha(alpha)));
-    }
-
-    static Matcher withScrimAlpha(final int alpha) {
-        return new TypeSafeMatcher<CollapsingToolbarLayout>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText(
-                        "CollapsingToolbarLayout has content scrim with alpha: " + alpha);
-            }
-
-            @Override
-            protected boolean matchesSafely(CollapsingToolbarLayout view) {
-                return alpha == view.getScrimAlpha();
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarLayoutCollapsePinTestActivity.java b/design/tests/src/android/support/design/widget/AppBarLayoutCollapsePinTestActivity.java
deleted file mode 100644
index d7ea68f..0000000
--- a/design/tests/src/android/support/design/widget/AppBarLayoutCollapsePinTestActivity.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-import android.support.v7.widget.Toolbar;
-
-public class AppBarLayoutCollapsePinTestActivity extends BaseTestActivity {
-
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_appbar_toolbar_collapse_pin_restore_test;
-    }
-
-    @Override
-    protected void onContentViewSet() {
-        Toolbar toolbar = findViewById(R.id.toolbar);
-        setSupportActionBar(toolbar);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithAnchoredFabMarginsTest.java b/design/tests/src/android/support/design/widget/AppBarWithAnchoredFabMarginsTest.java
deleted file mode 100644
index 416eda1..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithAnchoredFabMarginsTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.junit.Assert.assertEquals;
-
-import android.support.design.test.R;
-import android.support.test.filters.SmallTest;
-
-import org.junit.Before;
-import org.junit.Test;
-
-@SmallTest
-public class AppBarWithAnchoredFabMarginsTest extends AppBarLayoutBaseTest {
-    private int mFabMargin;
-
-    @Before
-    public void setup() {
-        mFabMargin = mActivityTestRule.getActivity().getResources().getDimensionPixelSize(
-                R.dimen.fab_margin);
-    }
-
-    @Test
-    public void testFabBottomMargin() throws Throwable {
-        configureContent(R.layout.design_appbar_anchored_fab_margin_bottom,
-                R.string.design_appbar_anchored_fab_margin_bottom);
-
-        final FloatingActionButton fab =
-                (FloatingActionButton) mCoordinatorLayout.findViewById(R.id.fab);
-        final CoordinatorLayout.LayoutParams fabLp =
-                (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
-        assertEquals(mAppBar.getId(), fabLp.getAnchorId());
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] fabOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        fab.getLocationOnScreen(fabOnScreenXY);
-
-        // FAB is horizontally centered in the coordinate system of its anchor (app bar).
-        assertEquals(appbarOnScreenXY[0] + mAppBar.getWidth() / 2,
-                fabOnScreenXY[0] + fab.getWidth() / 2, 1);
-        // Bottom margin is in the coordinate space of the parent (CoordinatorLayout) and not
-        // the anchor. Since our FAB is far enough from the bottom edge of CoordinatorLayout,
-        // we are expecting the vertical center of the FAB to be aligned with the bottom edge
-        // of its anchor (app bar).
-        assertEquals(appbarOnScreenXY[1] + mAppBar.getHeight(),
-                fabOnScreenXY[1] + fab.getHeight() / 2, 1);
-    }
-
-    @Test
-    public void testFabTopMargin() throws Throwable {
-        configureContent(R.layout.design_appbar_anchored_fab_margin_top,
-                R.string.design_appbar_anchored_fab_margin_top);
-
-        final FloatingActionButton fab =
-                (FloatingActionButton) mCoordinatorLayout.findViewById(R.id.fab);
-        final CoordinatorLayout.LayoutParams fabLp =
-                (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
-        assertEquals(mAppBar.getId(), fabLp.getAnchorId());
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] fabOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        fab.getLocationOnScreen(fabOnScreenXY);
-
-        // FAB is horizontally centered in the coordinate system of its anchor (app bar).
-        assertEquals(appbarOnScreenXY[0] + mAppBar.getWidth() / 2,
-                fabOnScreenXY[0] + fab.getWidth() / 2, 1);
-        // Top margin is in the coordinate space of the parent (CoordinatorLayout) and not
-        // the anchor. Since our FAB is far enough from the bottom edge of CoordinatorLayout,
-        // we are expecting the vertical center of the FAB to be aligned with the bottom edge
-        // of its anchor (app bar).
-        assertEquals(appbarOnScreenXY[1] + mAppBar.getHeight(),
-                fabOnScreenXY[1] + fab.getHeight() / 2, 1);
-    }
-
-    @Test
-    public void testFabLeftMargin() throws Throwable {
-        configureContent(R.layout.design_appbar_anchored_fab_margin_left,
-                R.string.design_appbar_anchored_fab_margin_left);
-
-        final FloatingActionButton fab =
-                (FloatingActionButton) mCoordinatorLayout.findViewById(R.id.fab);
-        final CoordinatorLayout.LayoutParams fabLp =
-                (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
-        assertEquals(mAppBar.getId(), fabLp.getAnchorId());
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] fabOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        fab.getLocationOnScreen(fabOnScreenXY);
-
-        // FAB is left-aligned in the coordinate system of its anchor (app bar). In addition,
-        // its left margin "pushes" it away in the coordinate system of the parent
-        // (CoordinatorLayout)
-        assertEquals(appbarOnScreenXY[0] + mFabMargin, fabOnScreenXY[0], 1);
-        // FAB's vertical center should be aligned with the bottom edge of its anchor (app bar).
-        assertEquals(appbarOnScreenXY[1] + mAppBar.getHeight(),
-                fabOnScreenXY[1] + fab.getHeight() / 2, 1);
-    }
-
-    @Test
-    public void testFabRightMargin() throws Throwable {
-        configureContent(R.layout.design_appbar_anchored_fab_margin_right,
-                R.string.design_appbar_anchored_fab_margin_right);
-
-        final FloatingActionButton fab =
-                (FloatingActionButton) mCoordinatorLayout.findViewById(R.id.fab);
-        final CoordinatorLayout.LayoutParams fabLp =
-                (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
-        assertEquals(mAppBar.getId(), fabLp.getAnchorId());
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] fabOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        fab.getLocationOnScreen(fabOnScreenXY);
-
-        // FAB is right-aligned in the coordinate system of its anchor (app bar). In addition,
-        // its right margin "pushes" it away in the coordinate system of the parent
-        // (CoordinatorLayout)
-        assertEquals(appbarOnScreenXY[0] + mAppBar.getWidth() - mFabMargin,
-                fabOnScreenXY[0] + fab.getWidth(), 1);
-        // FAB's vertical center should be aligned with the bottom edge of its anchor (app bar).
-        assertEquals(appbarOnScreenXY[1] + mAppBar.getHeight(),
-                fabOnScreenXY[1] + fab.getHeight() / 2, 1);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithCollapsingToolbarStateRestoreTest.java b/design/tests/src/android/support/design/widget/AppBarWithCollapsingToolbarStateRestoreTest.java
deleted file mode 100644
index e8a29af..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithCollapsingToolbarStateRestoreTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.AppBarLayoutMatchers.isCollapsed;
-import static android.support.design.testutils.SwipeUtils.swipeUp;
-import static android.support.design.testutils.TestUtilsMatchers.hasZ;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import android.support.design.test.R;
-import android.support.test.filters.LargeTest;
-import android.support.testutils.AppCompatActivityUtils;
-
-import org.junit.Before;
-import org.junit.Test;
-
-@LargeTest
-public class AppBarWithCollapsingToolbarStateRestoreTest
-        extends BaseInstrumentationTestCase<AppBarLayoutCollapsePinTestActivity> {
-
-    private AppBarLayoutCollapsePinTestActivity mActivity;
-
-    public AppBarWithCollapsingToolbarStateRestoreTest() {
-        super(AppBarLayoutCollapsePinTestActivity.class);
-    }
-
-    @Before
-    public void setup() {
-        mActivity = mActivityTestRule.getActivity();
-    }
-
-    @Test
-    public void testRecreateAndRestore() throws Throwable {
-        final AppBarLayout appBar = (AppBarLayout) mActivity.findViewById(R.id.app_bar);
-
-        // Swipe up and collapse the AppBarLayout
-        onView(withId(R.id.coordinator_layout))
-                .perform(swipeUp(
-                        appBar.getLeft() + (appBar.getWidth() / 2),
-                        appBar.getBottom() + 20,
-                        appBar.getHeight()));
-        onView(withId(R.id.app_bar))
-                .check(matches(hasZ()))
-                .check(matches(isCollapsed()));
-
-        mActivity = AppCompatActivityUtils.recreateActivity(mActivityTestRule, mActivity);
-        AppCompatActivityUtils.waitForExecution(mActivityTestRule);
-
-        // And check that the app bar still is restored correctly
-        onView(withId(R.id.app_bar))
-                .check(matches(hasZ()))
-                .check(matches(isCollapsed()));
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithCollapsingToolbarTest.java b/design/tests/src/android/support/design/widget/AppBarWithCollapsingToolbarTest.java
deleted file mode 100644
index a9fa46a..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithCollapsingToolbarTest.java
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.Matchers.greaterThan;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-import android.support.design.test.R;
-import android.support.test.filters.LargeTest;
-import android.support.testutils.PollingCheck;
-import android.widget.ImageView;
-
-import org.junit.Test;
-
-@LargeTest
-public class AppBarWithCollapsingToolbarTest extends AppBarLayoutBaseTest {
-
-    @Test
-    public void testPinnedToolbar() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_pin,
-                R.string.design_appbar_collapsing_toolbar_pin);
-
-        CollapsingToolbarLayout.LayoutParams toolbarLp =
-                (CollapsingToolbarLayout.LayoutParams) mToolbar.getLayoutParams();
-        assertEquals(CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PIN,
-                toolbarLp.getCollapseMode());
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] coordinatorLayoutOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mCoordinatorLayout.getLocationOnScreen(coordinatorLayoutOnScreenXY);
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int toolbarHeight = mToolbar.getHeight();
-        final int appbarHeight = mAppBar.getHeight();
-        final int longSwipeAmount = 3 * appbarHeight / 2;
-        final int reallyLongSwipeAmount = 2 * appbarHeight;
-        final int shortSwipeAmount = toolbarHeight;
-
-        assertAppBarElevation(0f);
-        assertScrimAlpha(0);
-
-        // Perform a swipe-up gesture across the horizontal center of the screen.
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + longSwipeAmount / 2,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be visually snapped below the system status bar.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + toolbarHeight + mAppBar.getTopInset(),
-                appbarOnScreenXY[1] + appbarHeight, 1);
-
-        // Perform another swipe-up gesture
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                appbarOnScreenXY[1] + appbarHeight + 5,
-                shortSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be visually snapped below the system status bar
-        // as it is in the pinned mode. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + toolbarHeight + mAppBar.getTopInset(),
-                appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(255);
-
-        // Perform a short swipe-down gesture across the horizontal center of the screen.
-        // Note that the swipe down is a bit longer than the swipe up to check that the app bar
-        // is not starting to expand too early.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom - shortSwipeAmount,
-                3 * shortSwipeAmount / 2);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be visually snapped below the system status bar
-        // as it is in the pinned mode and we haven't fully swiped down the content below the
-        // app bar. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + toolbarHeight + mAppBar.getTopInset(),
-                appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(255);
-
-        // Perform another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                reallyLongSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(0f);
-        assertScrimAlpha(0);
-
-        // Perform yet another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(0f);
-        assertScrimAlpha(0);
-    }
-
-    @Test
-    public void testScrollingToolbar() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_scroll,
-                R.string.design_appbar_collapsing_toolbar_scroll);
-
-        CollapsingToolbarLayout.LayoutParams toolbarLp =
-                (CollapsingToolbarLayout.LayoutParams) mToolbar.getLayoutParams();
-        assertEquals(CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PIN,
-                toolbarLp.getCollapseMode());
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] coordinatorLayoutOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mCoordinatorLayout.getLocationOnScreen(coordinatorLayoutOnScreenXY);
-
-        final int topInset = mAppBar.getTopInset();
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int toolbarHeight = mToolbar.getHeight();
-        final int appbarHeight = mAppBar.getHeight();
-        final int longSwipeAmount = 3 * appbarHeight / 2;
-        final int reallyLongSwipeAmount = 2 * appbarHeight;
-        final int shortSwipeAmount = toolbarHeight;
-
-        assertAppBarElevation(0f);
-        assertScrimAlpha(0);
-
-        // Perform a swipe-up gesture across the horizontal center of the screen, starting from
-        // just below the AppBarLayout
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + 20,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should not be visually "present" on the screen, with its bottom
-        // edge aligned with the bottom of system status bar. If we're running on a device which
-        // supports a translucent status bar, we need to take the status bar height into account.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight - topInset, 1);
-        assertAppBarElevation(0f);
-        assertScrimAlpha(255);
-
-        // Perform another swipe-up gesture
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                shortSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be off the screen. Allow for off-by-a-pixel
-        // margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight - topInset, 1);
-        assertAppBarElevation(0f);
-        assertScrimAlpha(255);
-
-        // Perform a short swipe-down gesture across the horizontal center of the screen.
-        // Note that the swipe down is a bit longer than the swipe up to fully bring down
-        // the scrolled-away toolbar
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                3 * shortSwipeAmount / 2);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be visually snapped below the system status bar as it
-        // in scrolling mode and we've swiped down, but not fully. Allow for off-by-a-pixel
-        // margin of error.
-        assertEquals(originalAppbarTop + toolbarHeight + topInset,
-                appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(255);
-
-        // Perform another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                reallyLongSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1]);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight);
-        assertAppBarElevation(0f);
-        assertScrimAlpha(0);
-
-        // Perform yet another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(0f);
-        assertScrimAlpha(0);
-    }
-
-    @Test
-    public void testScrollingToolbarEnterAlways() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_scroll_enteralways,
-                R.string.design_appbar_collapsing_toolbar_scroll);
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] coordinatorLayoutOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mCoordinatorLayout.getLocationOnScreen(coordinatorLayoutOnScreenXY);
-
-        final int topInset = mAppBar.getTopInset();
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int toolbarHeight = mToolbar.getHeight();
-        final int appbarHeight = mAppBar.getHeight();
-        final int longSwipeAmount = 3 * appbarHeight / 2;
-        final int reallyLongSwipeAmount = 2 * appbarHeight;
-        final int shortSwipeAmount = toolbarHeight;
-
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(0);
-
-        // Perform a swipe-up gesture across the horizontal center of the screen, starting from
-        // just below the AppBarLayout
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + 20,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should not be visually "present" on the screen, with its bottom
-        // edge aligned with the bottom of system status bar. If we're running on a device which
-        // supports a translucent status bar, we need to take the status bar height into account.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight - topInset, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(255);
-
-        // Perform another swipe-up gesture
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                shortSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be off the screen. Allow for off-by-a-pixel
-        // margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight - topInset, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(255);
-
-        // Perform a short swipe-down gesture across the horizontal center of the screen.
-        // Note that the swipe down is a bit longer than the swipe up to fully bring down
-        // the scrolled-away toolbar
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                3 * shortSwipeAmount / 2);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-
-        // At this point the app bar should be visually below the system status bar as it
-        // in scrolling mode and we've swiped down, not fully but more than collapsed
-        assertThat(appbarOnScreenXY[1] + appbarHeight,
-                is(greaterThan(originalAppbarTop + toolbarHeight + topInset)));
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(255);
-
-        // Perform another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                reallyLongSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1]);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight);
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(0);
-
-        // Perform yet another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-        assertScrimAlpha(0);
-    }
-
-    @Test
-    public void testPinnedToolbarAndAnchoredFab() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_pin_with_fab,
-                R.string.design_appbar_collapsing_toolbar_pin_fab);
-
-        CollapsingToolbarLayout.LayoutParams toolbarLp =
-                (CollapsingToolbarLayout.LayoutParams) mToolbar.getLayoutParams();
-        assertEquals(CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PIN,
-                toolbarLp.getCollapseMode());
-
-        final FloatingActionButton fab =
-                (FloatingActionButton) mCoordinatorLayout.findViewById(R.id.fab);
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] coordinatorLayoutOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mCoordinatorLayout.getLocationOnScreen(coordinatorLayoutOnScreenXY);
-
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int appbarHeight = mAppBar.getHeight();
-        final int longSwipeAmount = 3 * appbarHeight / 2;
-
-        // Perform a swipe-up gesture across the horizontal center of the screen.
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + longSwipeAmount / 2,
-                longSwipeAmount);
-
-        // Since we the visibility change listener path is only exposed via direct calls to
-        // FloatingActionButton.show and not the internal path that FAB's behavior is using,
-        // this test needs to be tied to the internal implementation details of running animation
-        // that scales the FAB to 0/0 scales and interpolates its alpha to 0. Since that animation
-        // starts running partway through our swipe gesture and may complete a bit later then
-        // the swipe gesture, poll to catch the "final" state of the FAB.
-        PollingCheck.waitFor(new PollingCheck.PollingCheckCondition() {
-            @Override
-            public boolean canProceed() {
-                return fab.getScaleX() == 0.0f;
-            }
-        });
-
-        // At this point the FAB should be scaled to 0/0 and set at alpha 0. Since the relevant
-        // getter methods are only available on v11+, wrap the asserts with build version check.
-        assertEquals(0.0f, fab.getScaleX(), 0.0f);
-        assertEquals(0.0f, fab.getScaleY(), 0.0f);
-        assertEquals(0.0f, fab.getAlpha(), 0.0f);
-
-        // Perform a swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        // Same as for swipe-up gesture.
-        PollingCheck.waitFor(new PollingCheck.PollingCheckCondition() {
-            @Override
-            public boolean canProceed() {
-                return fab.getScaleX() == 1.0f;
-            }
-        });
-
-        // At this point the FAB should be scaled back to its original size and be at full opacity.
-        assertEquals(1.0f, fab.getScaleX(), 0.0f);
-        assertEquals(1.0f, fab.getScaleY(), 0.0f);
-        assertEquals(1.0f, fab.getAlpha(), 0.0f);
-    }
-
-    @Test
-    public void testPinnedToolbarAndParallaxImage() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_with_image,
-                R.string.design_appbar_collapsing_toolbar_with_image);
-
-        final ImageView parallaxImageView =
-                (ImageView) mCoordinatorLayout.findViewById(R.id.app_bar_image);
-
-        // We have not set any padding on the ImageView, so ensure that none is set via
-        // window insets handling
-        assertEquals(0, parallaxImageView.getPaddingLeft());
-        assertEquals(0, parallaxImageView.getPaddingTop());
-        assertEquals(0, parallaxImageView.getPaddingRight());
-        assertEquals(0, parallaxImageView.getPaddingBottom());
-
-        CollapsingToolbarLayout.LayoutParams parallaxImageViewLp =
-                (CollapsingToolbarLayout.LayoutParams) parallaxImageView.getLayoutParams();
-        assertEquals(CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PARALLAX,
-                parallaxImageViewLp.getCollapseMode());
-
-        final float parallaxMultiplier = parallaxImageViewLp.getParallaxMultiplier();
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] parallaxImageOnScreenXY = new int[2];
-        final int appbarHeight = mAppBar.getHeight();
-        final int toolbarHeight = mToolbar.getHeight();
-        final int parallaxImageHeight = parallaxImageView.getHeight();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        parallaxImageView.getLocationOnScreen(parallaxImageOnScreenXY);
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int originalParallaxImageTop = parallaxImageOnScreenXY[1];
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        // Test that at the beginning our image is top-aligned with the app bar
-        assertEquals(appbarOnScreenXY[1], parallaxImageOnScreenXY[1]);
-
-        // Swipe up by the toolbar's height
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                toolbarHeight);
-
-        // Test that the top edge of the image (in the screen coordinates) has "moved" by half
-        // the amount that the top edge of the app bar (in the screen coordinates) has.
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        parallaxImageView.getLocationOnScreen(parallaxImageOnScreenXY);
-        assertEquals(parallaxMultiplier * (appbarOnScreenXY[1] - originalAppbarTop),
-                parallaxImageOnScreenXY[1] - originalParallaxImageTop, 1);
-
-        // Swipe up by another toolbar's height
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                toolbarHeight);
-
-        // Test that the top edge of the image (in the screen coordinates) has "moved" by half
-        // the amount that the top edge of the app bar (in the screen coordinates) has.
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        parallaxImageView.getLocationOnScreen(parallaxImageOnScreenXY);
-        assertEquals(parallaxMultiplier * (appbarOnScreenXY[1] - originalAppbarTop),
-                parallaxImageOnScreenXY[1] - originalParallaxImageTop, 1);
-
-        // Swipe down by a different value (150% of the toolbar's height) to test parallax going the
-        // other way
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                3 * toolbarHeight / 2);
-
-        // Test that the top edge of the image (in the screen coordinates) has "moved" by half
-        // the amount that the top edge of the app bar (in the screen coordinates) has.
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        parallaxImageView.getLocationOnScreen(parallaxImageOnScreenXY);
-        assertEquals(parallaxMultiplier * (appbarOnScreenXY[1] - originalAppbarTop),
-                parallaxImageOnScreenXY[1] - originalParallaxImageTop, 1);
-    }
-
-    @Test
-    public void testAddViewWithDefaultLayoutParams() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_pin,
-                R.string.design_appbar_collapsing_toolbar_pin);
-
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                ImageView view = new ImageView(mCollapsingToolbar.getContext());
-                mCollapsingToolbar.addView(view);
-            }
-        });
-
-    }
-
-    @Test
-    public void testPinnedToolbarWithMargins() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_pin_margins,
-                R.string.design_appbar_collapsing_toolbar_pin_margins);
-
-        CollapsingToolbarLayout.LayoutParams toolbarLp =
-                (CollapsingToolbarLayout.LayoutParams) mToolbar.getLayoutParams();
-        assertEquals(CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PIN,
-                toolbarLp.getCollapseMode());
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] toolbarOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mToolbar.getLocationOnScreen(toolbarOnScreenXY);
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = originalAppbarTop + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int toolbarHeight = mToolbar.getHeight();
-        final int toolbarVerticalMargins = toolbarLp.topMargin + toolbarLp.bottomMargin;
-        final int appbarHeight = mAppBar.getHeight();
-
-        // Perform a swipe-up gesture across the horizontal center of the screen.
-        int swipeAmount = appbarHeight - toolbarHeight - toolbarVerticalMargins;
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + (3 * swipeAmount / 2),
-                swipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mToolbar.getLocationOnScreen(toolbarOnScreenXY);
-        // At this point the toolbar should be visually pinned to the bottom of the appbar layout,
-        // observing it's margins and top inset
-        // The toolbar should still be visually pinned to the bottom of the appbar layout
-        assertEquals(originalAppbarTop + mAppBar.getTopInset(),
-                toolbarOnScreenXY[1] - toolbarLp.topMargin, 1);
-
-        // Swipe up again, this time just 50% of the margin size
-        swipeAmount = toolbarVerticalMargins / 2;
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + (3 * swipeAmount / 2),
-                swipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mToolbar.getLocationOnScreen(toolbarOnScreenXY);
-
-        // The toolbar should still be visually pinned to the bottom of the appbar layout
-        assertEquals(appbarOnScreenXY[1] + appbarHeight,
-                toolbarOnScreenXY[1] + toolbarHeight + toolbarLp.bottomMargin, 1);
-    }
-
-    @Test
-    public void testSingleToolbarWithInset() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_collapse_sole_toolbar,
-                R.string.design_appbar_collapsing_toolbar_pin_margins);
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] toolbarOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mToolbar.getLocationOnScreen(toolbarOnScreenXY);
-
-        assertEquals(appbarOnScreenXY[1] + mAppBar.getTopInset(), toolbarOnScreenXY[1], 1);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithDodgingTest.java b/design/tests/src/android/support/design/widget/AppBarWithDodgingTest.java
deleted file mode 100644
index ad337d5..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithDodgingTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2017 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.design.widget;
-
-import static org.junit.Assert.assertTrue;
-
-import android.graphics.Rect;
-import android.support.design.test.R;
-import android.support.test.filters.SmallTest;
-
-import org.junit.Test;
-
-@SmallTest
-public class AppBarWithDodgingTest extends AppBarLayoutBaseTest {
-    @Test
-    public void testLeftDodge() throws Throwable {
-        configureContent(R.layout.design_appbar_dodge_left,
-                R.string.design_appbar_dodge_left);
-
-        final FloatingActionButton fab = mCoordinatorLayout.findViewById(R.id.fab);
-        final FloatingActionButton fab2 = mCoordinatorLayout.findViewById(R.id.fab2);
-
-        final int[] fabOnScreenXY = new int[2];
-        final int[] fab2OnScreenXY = new int[2];
-        fab.getLocationOnScreen(fabOnScreenXY);
-        fab2.getLocationOnScreen(fab2OnScreenXY);
-
-        final Rect fabRect = new Rect();
-        final Rect fab2Rect = new Rect();
-        fab.getContentRect(fabRect);
-        fab2.getContentRect(fab2Rect);
-
-        // Our second FAB is configured to "dodge" the first one - to be displayed to the
-        // right of it
-        int firstRight = fabOnScreenXY[0] + fabRect.right;
-        int secondLeft = fab2OnScreenXY[0] + fab2Rect.left;
-        assertTrue("Second button left edge at " + secondLeft
-                        + " should be dodging the first button right edge at " + firstRight,
-                secondLeft >= firstRight);
-    }
-
-    @Test
-    public void testRightDodge() throws Throwable {
-        configureContent(R.layout.design_appbar_dodge_right,
-                R.string.design_appbar_dodge_right);
-
-        final FloatingActionButton fab = mCoordinatorLayout.findViewById(R.id.fab);
-        final FloatingActionButton fab2 = mCoordinatorLayout.findViewById(R.id.fab2);
-
-        final int[] fabOnScreenXY = new int[2];
-        final int[] fab2OnScreenXY = new int[2];
-        fab.getLocationOnScreen(fabOnScreenXY);
-        fab2.getLocationOnScreen(fab2OnScreenXY);
-
-        final Rect fabRect = new Rect();
-        final Rect fab2Rect = new Rect();
-        fab.getContentRect(fabRect);
-        fab2.getContentRect(fab2Rect);
-
-        // Our second FAB is configured to "dodge" the first one - to be displayed to the
-        // left of it
-        int firstLeft = fabOnScreenXY[0] + fabRect.left;
-        int secondRight = fab2OnScreenXY[0] + fab2Rect.right;
-        assertTrue("Second button right edge at " + secondRight
-                        + " should be dodging the first button left edge at " + firstLeft,
-                secondRight <= firstLeft);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithScrollbarsActivity.java b/design/tests/src/android/support/design/widget/AppBarWithScrollbarsActivity.java
deleted file mode 100644
index bd693d4..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithScrollbarsActivity.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2017 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.design.widget;
-
-import android.support.design.test.R;
-
-public class AppBarWithScrollbarsActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_appbar_with_scrollbars;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithScrollbarsTest.java b/design/tests/src/android/support/design/widget/AppBarWithScrollbarsTest.java
deleted file mode 100644
index f6fe8bf..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithScrollbarsTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2017 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.design.widget;
-
-import android.support.test.filters.SmallTest;
-
-import org.junit.Test;
-
-public class AppBarWithScrollbarsTest extends
-        BaseInstrumentationTestCase<AppBarWithScrollbarsActivity> {
-
-    public AppBarWithScrollbarsTest() {
-        super(AppBarWithScrollbarsActivity.class);
-    }
-
-    @Test
-    @SmallTest
-    public void testInflationNoCrash() {
-        // This is the implicit test for to check that AppBarLayout inflation doesn't crash
-        // when its theme has attributes that would cause onCreateDrawableState to be called
-        // during the super's constructor flow.
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithToolbarAndTabsTest.java b/design/tests/src/android/support/design/widget/AppBarWithToolbarAndTabsTest.java
deleted file mode 100644
index 23ef7c5..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithToolbarAndTabsTest.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.TestUtilsActions.addTabs;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.junit.Assert.assertEquals;
-
-import android.os.SystemClock;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.StringRes;
-import android.support.design.test.R;
-import android.support.design.testutils.Cheeses;
-import android.support.test.filters.FlakyTest;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.Suppress;
-
-import org.junit.Test;
-
-@LargeTest
-public class AppBarWithToolbarAndTabsTest extends AppBarLayoutBaseTest {
-    private TabLayout mTabLayout;
-
-    @Override
-    protected void configureContent(@LayoutRes int layoutResId, @StringRes int titleResId)
-            throws Throwable {
-        super.configureContent(layoutResId, titleResId);
-
-        mTabLayout = (TabLayout) mAppBar.findViewById(R.id.tabs);
-        String[] tabTitles = new String[5];
-        System.arraycopy(Cheeses.sCheeseStrings, 0, tabTitles, 0, 5);
-        onView(withId(R.id.tabs)).perform(addTabs(tabTitles));
-    }
-
-    @Test
-    public void testScrollingToolbarAndScrollingTabs() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_tabs_scroll,
-                R.string.design_appbar_toolbar_scroll_tabs_scroll);
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] coordinatorLayoutOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mCoordinatorLayout.getLocationOnScreen(coordinatorLayoutOnScreenXY);
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int toolbarHeight = mToolbar.getHeight();
-        final int tabsHeight = mTabLayout.getHeight();
-        final int appbarHeight = mAppBar.getHeight();
-        final int longSwipeAmount = 3 * appbarHeight / 2;
-        final int shortSwipeAmount = toolbarHeight;
-
-        // Perform a swipe-up gesture across the horizontal center of the screen, starting from
-        // just below the AppBarLayout
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + 20,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should not be visually "present" on the screen, with its bottom
-        // edge aligned with the system status bar. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform another swipe-up gesture
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                shortSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be off the screen. Allow for off-by-a-pixel
-        // margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a long swipe-down gesture across the horizontal center of the screen.
-        // Note that the swipe down is a bit longer than the swipe up to fully bring down
-        // the scrolled-away toolbar and tab layout
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount * 3 / 2);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be visually snapped below the system status bar as it
-        // in scrolling mode and we've swiped down. Allow for off-by-a-pixel
-        // margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform yet another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-    }
-
-    @Test
-    public void testScrollingToolbarAndPinnedTabs() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_tabs_pinned,
-                R.string.design_appbar_toolbar_scroll_tabs_pin);
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] coordinatorLayoutOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mCoordinatorLayout.getLocationOnScreen(coordinatorLayoutOnScreenXY);
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int toolbarHeight = mToolbar.getHeight();
-        final int tabsHeight = mTabLayout.getHeight();
-        final int appbarHeight = mAppBar.getHeight();
-        final int longSwipeAmount = 3 * appbarHeight / 2;
-        final int shortSwipeAmount = toolbarHeight;
-
-        // Perform a swipe-up gesture across the horizontal center of the screen, starting from
-        // just below the AppBarLayout
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + 20,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the tab bar should be visually snapped below the system status bar.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + tabsHeight, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform another swipe-up gesture
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                shortSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the tab bar should still be visually snapped below the system status bar
-        // as it is in the pinned mode. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + tabsHeight, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a short swipe-down gesture across the horizontal center of the screen.
-        // Note that the swipe down is a bit longer than the swipe up to fully bring down
-        // the scrolled-away toolbar and tab layout
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom - shortSwipeAmount,
-                3 * shortSwipeAmount / 2);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position as it
-        // in scrolling mode and we've swiped down. Allow for off-by-a-pixel
-        // margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform yet another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-    }
-
-    @Suppress
-    @FlakyTest(bugId = 30701044)
-    @LargeTest
-    @Test
-    public void testSnappingToolbarAndSnappingTabs() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_tabs_scroll_snap,
-                R.string.design_appbar_toolbar_scroll_tabs_scroll_snap);
-
-        final int[] appbarOnScreenXY = new int[2];
-        final int[] coordinatorLayoutOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        mCoordinatorLayout.getLocationOnScreen(coordinatorLayoutOnScreenXY);
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int toolbarHeight = mToolbar.getHeight();
-        final int tabsHeight = mTabLayout.getHeight();
-        final int appbarHeight = mAppBar.getHeight();
-
-        // Since AppBarLayout doesn't expose a way to track snap animations, the three possible
-        // options are
-        // a) track how vertical offsets and invalidation is propagated through the
-        // view hierarchy and wait until there are no more events of that kind
-        // b) run a dummy Espresso action that waits until the main thread is idle
-        // c) sleep for a hardcoded period of time to "wait" until the snap animation is done
-        // In this test method we go with option b)
-
-        // Perform a swipe-up gesture across the horizontal center of the screen. The amount
-        // of swipe is 25% of the toolbar height and we expect the snap behavior to "move"
-        // the app bar back to its original position.
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                toolbarHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position as it
-        // in snapping mode and we haven't swiped "enough". Allow for off-by-a-pixel
-        // margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a slightly longer swipe-up gesture, this time by 75% of the toolbar height.
-        // We expect the snap behavior to move the app bar to snap the tab layout below the
-        // system status bar.
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                3 * toolbarHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should "snap" the toolbar away and align the tab layout below
-        // the system status bar. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + tabsHeight, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a short swipe-up gesture, this time by 25% of the tab layout height. We expect
-        // snap behavior to move the app bar back to snap the tab layout below the system status
-        // bar.
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                tabsHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should "snap" back to align the tab layout below
-        // the system status bar. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + tabsHeight, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a longer swipe-up gesture, this time by 75% of the tab layout height. We expect
-        // snap behavior to move the app bar fully away from the screen.
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                3 * tabsHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should not be visually "present" on the screen, with its bottom
-        // edge aligned with the system status bar. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a short swipe-down gesture by 25% of the tab layout height. We expect
-        // snap behavior to move the app bar back fully away from the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                tabsHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still not be visually "present" on the screen, with
-        // its bottom edge aligned with the system status bar. Allow for off-by-a-pixel margin
-        // of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a longer swipe-up gesture, this time by 75% of the tab layout height. We expect
-        // snap behavior to move the app bar to snap the tab layout below the system status
-        // bar.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                3 * tabsHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should "snap" the toolbar away and align the tab layout below
-        // the system status bar. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + tabsHeight, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a short swipe-down gesture by 25% of the toolbar height. We expect
-        // snap behavior to align the tab layout below the system status bar
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                toolbarHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should still align the tab layout below
-        // the system status bar. Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop + tabsHeight, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-
-        // Perform a longer swipe-up gesture, this time by 75% of the toolbar height. We expect
-        // snap behavior to move the app bar back to its original place (fully visible).
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + toolbarHeight,
-                3 * tabsHeight / 4);
-
-        // Wait for the snap animation to be done
-        waitForSnapAnimationToFinish();
-
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        // At this point the app bar should be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-        assertAppBarElevation(mDefaultElevationValue);
-    }
-
-    private void waitForSnapAnimationToFinish() {
-        final AppBarLayout.Behavior behavior = (AppBarLayout.Behavior)
-                ((CoordinatorLayout.LayoutParams) mAppBar.getLayoutParams()).getBehavior();
-        while (behavior.isOffsetAnimatorRunning()) {
-            SystemClock.sleep(16);
-        }
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/AppBarWithToolbarTest.java b/design/tests/src/android/support/design/widget/AppBarWithToolbarTest.java
deleted file mode 100644
index fd5cd26..0000000
--- a/design/tests/src/android/support/design/widget/AppBarWithToolbarTest.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.junit.Assert.assertEquals;
-
-import android.graphics.Rect;
-import android.support.design.test.R;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.v4.view.ViewCompat;
-import android.view.View;
-import android.view.ViewGroup;
-
-import org.junit.Test;
-
-@MediumTest
-public class AppBarWithToolbarTest extends AppBarLayoutBaseTest {
-
-    /**
-     * Tests a Toolbar with fitSystemWindows = undefined, with a fitSystemWindows = true parent
-     */
-    @LargeTest
-    @Test
-    public void testScrollToolbarWithFitSystemWindowsParent() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_fitsystemwindows_parent,
-                R.string.design_appbar_toolbar_scroll_tabs_pin);
-
-        final int[] appbarOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-
-        final int originalAppbarTop = appbarOnScreenXY[1];
-        final int originalAppbarBottom = appbarOnScreenXY[1] + mAppBar.getHeight();
-        final int centerX = appbarOnScreenXY[0] + mAppBar.getWidth() / 2;
-
-        final int appbarHeight = mAppBar.getHeight();
-        final int longSwipeAmount = 3 * appbarHeight / 2;
-
-        // Perform a swipe-up gesture across the horizontal center of the screen.
-        performVerticalSwipeUpGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom + 3 * longSwipeAmount / 2,
-                longSwipeAmount);
-
-        // At this point the tab bar should be visually snapped below the system status bar.
-        // Allow for off-by-a-pixel margin of error.
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1] + appbarHeight, 1);
-
-        // Perform yet another swipe-down gesture across the horizontal center of the screen.
-        performVerticalSwipeDownGesture(
-                R.id.coordinator_layout,
-                centerX,
-                originalAppbarBottom,
-                longSwipeAmount);
-
-        // At this point the app bar should still be in its original position.
-        // Allow for off-by-a-pixel margin of error.
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-        assertEquals(originalAppbarTop, appbarOnScreenXY[1], 1);
-        assertEquals(originalAppbarBottom, appbarOnScreenXY[1] + appbarHeight, 1);
-    }
-
-    /**
-     * Tests a AppBarLayout + scrolling content with fitSystemWindows = undefined,
-     * with a fitSystemWindows = true parent
-     */
-    @Test
-    public void testScrollingContentPositionWithFitSystemWindowsParent() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_fitsystemwindows_parent,
-                R.string.design_appbar_toolbar_scroll_tabs_pin);
-
-        final int[] appbarOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-
-        final View scrollingContent = mCoordinatorLayout.findViewById(R.id.scrolling_content);
-        final int[] scrollingContentOnScreenXY = new int[2];
-        scrollingContent.getLocationOnScreen(scrollingContentOnScreenXY);
-
-        // Assert that they have the same left
-        assertEquals(appbarOnScreenXY[0], scrollingContentOnScreenXY[0]);
-        // ...and the same width
-        assertEquals(mAppBar.getWidth(), scrollingContent.getWidth());
-        // ...and are vertically stacked
-        assertEquals(mAppBar.getBottom(), scrollingContent.getTop());
-    }
-
-    /**
-     * Tests a AppBarLayout + scrolling content with fitSystemWindows = undefined,
-     * with a fitSystemWindows = true parent, in RTL
-     */
-    @Test
-    public void testScrollingContentPositionWithFitSystemWindowsParentInRtl() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_fitsystemwindows_parent,
-                R.string.design_appbar_toolbar_scroll_tabs_pin);
-
-        // Force RTL
-        onView(withId(R.id.app_bar)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
-
-        final int[] appbarOnScreenXY = new int[2];
-        mAppBar.getLocationOnScreen(appbarOnScreenXY);
-
-        final View scrollingContent = mCoordinatorLayout.findViewById(R.id.scrolling_content);
-        final int[] scrollingContentOnScreenXY = new int[2];
-        scrollingContent.getLocationOnScreen(scrollingContentOnScreenXY);
-
-        // Assert that they have the same left
-        assertEquals(appbarOnScreenXY[0], scrollingContentOnScreenXY[0]);
-        // ...and the same width
-        assertEquals(mAppBar.getWidth(), scrollingContent.getWidth());
-        // ...and are vertically stacked
-        assertEquals(mAppBar.getBottom(), scrollingContent.getTop());
-    }
-
-    @Test
-    public void testRequestRectangleWithChildThatDoesNotRequireScroll() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_fitsystemwindows_parent,
-                R.string.design_appbar_toolbar_scroll_tabs_pin);
-
-        final View scrollingContent = mCoordinatorLayout.findViewById(R.id.scrolling_content);
-
-        // Get the initial XY
-        final int[] originalScrollingXY = new int[2];
-        scrollingContent.getLocationInWindow(originalScrollingXY);
-
-        // Now request that the first child has its full rectangle displayed
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final ViewGroup scrollingContentInner = (ViewGroup) scrollingContent
-                        .findViewById(R.id.scrolling_content_inner);
-                View child = scrollingContentInner.getChildAt(0);
-                Rect rect = new Rect(0, 0, child.getWidth(), child.getHeight());
-                child.requestRectangleOnScreen(rect, true);
-            }
-        });
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-
-        final int[] newScrollingXY = new int[2];
-        scrollingContent.getLocationInWindow(newScrollingXY);
-
-        // Assert that the scrolling view has not moved
-        assertEquals(originalScrollingXY[0], newScrollingXY[0]);
-        assertEquals(originalScrollingXY[1], newScrollingXY[1]);
-    }
-
-    @Test
-    public void testRequestRectangleWithChildThatDoesRequireScroll() throws Throwable {
-        configureContent(R.layout.design_appbar_toolbar_scroll_fitsystemwindows_parent,
-                R.string.design_appbar_toolbar_scroll_tabs_pin);
-
-        final View scrollingContent = mCoordinatorLayout.findViewById(R.id.scrolling_content);
-
-        // Get the initial XY
-        final int[] originalScrollingXY = new int[2];
-        scrollingContent.getLocationInWindow(originalScrollingXY);
-
-        // Now request that the first child has its full rectangle displayed
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final ViewGroup scrollingContentInner = (ViewGroup) scrollingContent
-                        .findViewById(R.id.scrolling_content_inner);
-                View child = scrollingContentInner
-                        .getChildAt(scrollingContentInner.getChildCount() - 1);
-                Rect rect = new Rect(0, 0, child.getWidth(), child.getHeight());
-                child.requestRectangleOnScreen(rect, true);
-            }
-        });
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-
-        final int[] newScrollingXY = new int[2];
-        scrollingContent.getLocationInWindow(newScrollingXY);
-
-        // Assert that the appbar has collapsed vertically
-        assertEquals(originalScrollingXY[0], newScrollingXY[0]);
-        assertEquals(originalScrollingXY[1] - mAppBar.getHeight(), newScrollingXY[1]);
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/BaseDynamicCoordinatorLayoutTest.java b/design/tests/src/android/support/design/widget/BaseDynamicCoordinatorLayoutTest.java
deleted file mode 100755
index 32cef17..0000000
--- a/design/tests/src/android/support/design/widget/BaseDynamicCoordinatorLayoutTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-
-import static org.hamcrest.CoreMatchers.allOf;
-import static org.hamcrest.Matchers.any;
-
-import android.support.annotation.LayoutRes;
-import android.support.design.test.R;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.v4.view.ViewCompat;
-import android.view.View;
-import android.view.ViewStub;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-import org.junit.After;
-
-/**
- * Base class for tests that are exercising various aspects of {@link CoordinatorLayout}.
- */
-public abstract class BaseDynamicCoordinatorLayoutTest
-        extends BaseInstrumentationTestCase<DynamicCoordinatorLayoutActivity> {
-    protected CoordinatorLayout mCoordinatorLayout;
-
-    public BaseDynamicCoordinatorLayoutTest() {
-        super(DynamicCoordinatorLayoutActivity.class);
-    }
-
-    @UiThreadTest
-    @After
-    public void tearDown() {
-        // Now that the test is done, replace the activity content view with ViewStub so
-        // that it's ready to be replaced for the next test.
-        final DynamicCoordinatorLayoutActivity activity = mActivityTestRule.getActivity();
-        activity.setContentView(R.layout.dynamic_coordinator_layout);
-        mCoordinatorLayout = null;
-    }
-
-    /**
-     * Matches views that have parents.
-     */
-    private Matcher<View> hasParent() {
-        return new TypeSafeMatcher<View>() {
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("has parent");
-            }
-
-            @Override
-            public boolean matchesSafely(View view) {
-                return view.getParent() != null;
-            }
-        };
-    }
-
-    /**
-     * Inflates the <code>ViewStub</code> with the passed layout resource.
-     */
-    protected ViewAction inflateViewStub(final @LayoutRes int layoutResId) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return allOf(isAssignableFrom(ViewStub.class), hasParent());
-            }
-
-            @Override
-            public String getDescription() {
-                return "Inflates view stub";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewStub viewStub = (ViewStub) view;
-                viewStub.setLayoutResource(layoutResId);
-                viewStub.inflate();
-
-                mCoordinatorLayout = (CoordinatorLayout) mActivityTestRule.getActivity()
-                        .findViewById(viewStub.getInflatedId());
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    protected ViewAction setLayoutDirection(final int layoutDir) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return any(View.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Sets layout direction";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                ViewCompat.setLayoutDirection(view, layoutDir);
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/BaseInstrumentationTestCase.java b/design/tests/src/android/support/design/widget/BaseInstrumentationTestCase.java
deleted file mode 100644
index e06fa0a..0000000
--- a/design/tests/src/android/support/design/widget/BaseInstrumentationTestCase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.app.Activity;
-import android.support.test.rule.BootlegActivityTestRule;
-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 BootlegActivityTestRule<A> mActivityTestRule;
-
-    protected BaseInstrumentationTestCase(Class<A> activityClass) {
-        mActivityTestRule = new BootlegActivityTestRule<>(activityClass);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/BaseTestActivity.java b/design/tests/src/android/support/design/widget/BaseTestActivity.java
deleted file mode 100755
index e1e44e2..0000000
--- a/design/tests/src/android/support/design/widget/BaseTestActivity.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.testutils.RecreatedAppCompatActivity;
-import android.view.WindowManager;
-
-abstract class BaseTestActivity extends RecreatedAppCompatActivity {
-
-    private boolean mDestroyed;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        overridePendingTransition(0, 0);
-
-        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);
-    }
-
-    @Override
-    public void finish() {
-        super.finish();
-        overridePendingTransition(0, 0);
-    }
-
-    @LayoutRes
-    protected abstract int getContentViewLayoutResId();
-
-    protected void onContentViewSet() {}
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mDestroyed = true;
-    }
-
-    @Override
-    public boolean isDestroyed() {
-        return mDestroyed;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/BottomNavigationViewActivity.java b/design/tests/src/android/support/design/widget/BottomNavigationViewActivity.java
deleted file mode 100644
index 2afe695..0000000
--- a/design/tests/src/android/support/design/widget/BottomNavigationViewActivity.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class BottomNavigationViewActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_bottom_navigation_view;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/BottomNavigationViewTest.java b/design/tests/src/android/support/design/widget/BottomNavigationViewTest.java
deleted file mode 100644
index 3365fac..0000000
--- a/design/tests/src/android/support/design/widget/BottomNavigationViewTest.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import static android.support.design.testutils.BottomNavigationViewActions.setIconForMenuItem;
-import static android.support.design.testutils.BottomNavigationViewActions.setItemIconTintList;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-
-import static org.hamcrest.core.AllOf.allOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.app.Activity;
-import android.content.res.Resources;
-import android.os.Build;
-import android.os.Parcelable;
-import android.support.annotation.ColorInt;
-import android.support.design.test.R;
-import android.support.design.testutils.TestDrawable;
-import android.support.design.testutils.TestUtilsMatchers;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.SdkSuppress;
-import android.support.test.filters.SmallTest;
-import android.support.v4.content.res.ResourcesCompat;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.PointerIcon;
-import android.view.View;
-import android.view.ViewGroup;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class BottomNavigationViewTest
-        extends BaseInstrumentationTestCase<BottomNavigationViewActivity> {
-    private static final int[] MENU_CONTENT_ITEM_IDS = { R.id.destination_home,
-            R.id.destination_profile, R.id.destination_people };
-    private Map<Integer, String> mMenuStringContent;
-
-    private BottomNavigationView mBottomNavigation;
-
-    public BottomNavigationViewTest() {
-        super(BottomNavigationViewActivity.class);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        final BottomNavigationViewActivity activity = mActivityTestRule.getActivity();
-        mBottomNavigation = (BottomNavigationView) activity.findViewById(R.id.bottom_navigation);
-
-        final Resources res = activity.getResources();
-        mMenuStringContent = new HashMap<>(MENU_CONTENT_ITEM_IDS.length);
-        mMenuStringContent.put(R.id.destination_home, res.getString(R.string.navigate_home));
-        mMenuStringContent.put(R.id.destination_profile, res.getString(R.string.navigate_profile));
-        mMenuStringContent.put(R.id.destination_people, res.getString(R.string.navigate_people));
-    }
-
-    @UiThreadTest
-    @Test
-    @SmallTest
-    public void testAddItemsWithoutMenuInflation() {
-        BottomNavigationView navigation = new BottomNavigationView(mActivityTestRule.getActivity());
-        mActivityTestRule.getActivity().setContentView(navigation);
-        navigation.getMenu().add("Item1");
-        navigation.getMenu().add("Item2");
-        assertEquals(2, navigation.getMenu().size());
-        navigation.getMenu().removeItem(0);
-        navigation.getMenu().removeItem(0);
-        assertEquals(0, navigation.getMenu().size());
-    }
-
-    @Test
-    @SmallTest
-    public void testBasics() {
-        // Check the contents of the Menu object
-        final Menu menu = mBottomNavigation.getMenu();
-        assertNotNull("Menu should not be null", menu);
-        assertEquals("Should have matching number of items", MENU_CONTENT_ITEM_IDS.length,
-                menu.size());
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            final MenuItem currItem = menu.getItem(i);
-            assertEquals("ID for Item #" + i, MENU_CONTENT_ITEM_IDS[i], currItem.getItemId());
-        }
-
-    }
-
-    @Test
-    @LargeTest
-    public void testNavigationSelectionListener() {
-        BottomNavigationView.OnNavigationItemSelectedListener mockedListener =
-                mock(BottomNavigationView.OnNavigationItemSelectedListener.class);
-        mBottomNavigation.setOnNavigationItemSelectedListener(mockedListener);
-
-        // Make the listener return true to allow selecting the item.
-        when(mockedListener.onNavigationItemSelected(any(MenuItem.class))).thenReturn(true);
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify our listener has been notified of the click
-        verify(mockedListener, times(1)).onNavigationItemSelected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_profile));
-        // Verify the item is now selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-
-        // Select the same item again
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify our listener has been notified of the click
-        verify(mockedListener, times(2)).onNavigationItemSelected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_profile));
-        // Verify the item is still selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-
-        // Make the listener return false to disallow selecting the item.
-        when(mockedListener.onNavigationItemSelected(any(MenuItem.class))).thenReturn(false);
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify our listener has been notified of the click
-        verify(mockedListener, times(1)).onNavigationItemSelected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_people));
-        // Verify the previous item is still selected
-        assertFalse(mBottomNavigation.getMenu().findItem(R.id.destination_people).isChecked());
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-
-        // Set null listener to test that the next click is not going to notify the
-        // previously set listener and will allow selecting items.
-        mBottomNavigation.setOnNavigationItemSelectedListener(null);
-
-        // Click one of our items
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_home)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify that our previous listener has not been notified of the click
-        verifyNoMoreInteractions(mockedListener);
-        // Verify the correct item is now selected.
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_home).isChecked());
-    }
-
-    @UiThreadTest
-    @Test
-    @SmallTest
-    public void testSetSelectedItemId() {
-        BottomNavigationView.OnNavigationItemSelectedListener mockedListener =
-                mock(BottomNavigationView.OnNavigationItemSelectedListener.class);
-        mBottomNavigation.setOnNavigationItemSelectedListener(mockedListener);
-
-        // Make the listener return true to allow selecting the item.
-        when(mockedListener.onNavigationItemSelected(any(MenuItem.class))).thenReturn(true);
-        // Programmatically select an item
-        mBottomNavigation.setSelectedItemId(R.id.destination_profile);
-        // Verify our listener has been notified of the click
-        verify(mockedListener, times(1)).onNavigationItemSelected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_profile));
-        // Verify the item is now selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-
-        // Select the same item
-        mBottomNavigation.setSelectedItemId(R.id.destination_profile);
-        // Verify our listener has been notified of the click
-        verify(mockedListener, times(2)).onNavigationItemSelected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_profile));
-        // Verify the item is still selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-
-        // Make the listener return false to disallow selecting the item.
-        when(mockedListener.onNavigationItemSelected(any(MenuItem.class))).thenReturn(false);
-        // Programmatically select an item
-        mBottomNavigation.setSelectedItemId(R.id.destination_people);
-        // Verify our listener has been notified of the click
-        verify(mockedListener, times(1)).onNavigationItemSelected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_people));
-        // Verify the previous item is still selected
-        assertFalse(mBottomNavigation.getMenu().findItem(R.id.destination_people).isChecked());
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-
-        // Set null listener to test that the next click is not going to notify the
-        // previously set listener and will allow selecting items.
-        mBottomNavigation.setOnNavigationItemSelectedListener(null);
-
-        // Select one of our items
-        mBottomNavigation.setSelectedItemId(R.id.destination_home);
-        // Verify that our previous listener has not been notified of the click
-        verifyNoMoreInteractions(mockedListener);
-        // Verify the correct item is now selected.
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_home).isChecked());
-    }
-
-    @Test
-    @SmallTest
-    public void testNavigationReselectionListener() {
-        // Add an OnNavigationItemReselectedListener
-        BottomNavigationView.OnNavigationItemReselectedListener reselectedListener =
-                mock(BottomNavigationView.OnNavigationItemReselectedListener.class);
-        mBottomNavigation.setOnNavigationItemReselectedListener(reselectedListener);
-
-        // Select an item
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify the item is now selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-        // Verify the listener was not called
-        verify(reselectedListener, never()).onNavigationItemReselected(any(MenuItem.class));
-
-        // Select the same item again
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify the item is still selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-        // Verify the listener was called
-        verify(reselectedListener, times(1)).onNavigationItemReselected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_profile));
-
-        // Add an OnNavigationItemSelectedListener
-        BottomNavigationView.OnNavigationItemSelectedListener selectedListener =
-                mock(BottomNavigationView.OnNavigationItemSelectedListener.class);
-        mBottomNavigation.setOnNavigationItemSelectedListener(selectedListener);
-        // Make the listener return true to allow selecting the item.
-        when(selectedListener.onNavigationItemSelected(any(MenuItem.class))).thenReturn(true);
-
-        // Select another item
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify the item is now selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_people).isChecked());
-        // Verify the correct listeners were called
-        verify(selectedListener, times(1)).onNavigationItemSelected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_people));
-        verify(reselectedListener, never()).onNavigationItemReselected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_people));
-
-        // Select the same item again
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify the item is still selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_people).isChecked());
-        // Verify the correct listeners were called
-        verifyNoMoreInteractions(selectedListener);
-        verify(reselectedListener, times(1)).onNavigationItemReselected(
-                mBottomNavigation.getMenu().findItem(R.id.destination_people));
-
-        // Remove the OnNavigationItemReselectedListener
-        mBottomNavigation.setOnNavigationItemReselectedListener(null);
-
-        // Select the same item again
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        // Verify the item is still selected
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_people).isChecked());
-        // Verify the reselectedListener was not called
-        verifyNoMoreInteractions(reselectedListener);
-    }
-
-    @UiThreadTest
-    @Test
-    @SmallTest
-    public void testSelectedItemIdWithEmptyMenu() {
-        // First item initially selected
-        assertEquals(R.id.destination_home, mBottomNavigation.getSelectedItemId());
-
-        // Remove all the items
-        for (int id : mMenuStringContent.keySet()) {
-            mBottomNavigation.getMenu().removeItem(id);
-        }
-        // Verify selected ID is zero
-        assertEquals(0, mBottomNavigation.getSelectedItemId());
-
-        // Add an item
-        mBottomNavigation.getMenu().add(0, R.id.destination_home, 0, R.string.navigate_home);
-        // Verify item is selected
-        assertEquals(R.id.destination_home, mBottomNavigation.getSelectedItemId());
-
-        // Try selecting an invalid ID
-        mBottomNavigation.setSelectedItemId(R.id.destination_people);
-        // Verify the view has not changed
-        assertEquals(R.id.destination_home, mBottomNavigation.getSelectedItemId());
-    }
-
-    @Test
-    @SmallTest
-    public void testIconTinting() {
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        @ColorInt final int redFill = ResourcesCompat.getColor(res, R.color.test_red, null);
-        @ColorInt final int greenFill = ResourcesCompat.getColor(res, R.color.test_green, null);
-        @ColorInt final int blueFill = ResourcesCompat.getColor(res, R.color.test_blue, null);
-        final int iconSize = res.getDimensionPixelSize(R.dimen.drawable_small_size);
-        onView(withId(R.id.bottom_navigation)).perform(setIconForMenuItem(R.id.destination_home,
-                new TestDrawable(redFill, iconSize, iconSize)));
-        onView(withId(R.id.bottom_navigation)).perform(setIconForMenuItem(R.id.destination_profile,
-                new TestDrawable(greenFill, iconSize, iconSize)));
-        onView(withId(R.id.bottom_navigation)).perform(setIconForMenuItem(R.id.destination_people,
-                new TestDrawable(blueFill, iconSize, iconSize)));
-
-        @ColorInt final int defaultTintColor = ResourcesCompat.getColor(res,
-                R.color.emerald_translucent, null);
-
-        // We're allowing a margin of error in checking the color of the items' icons.
-        // This is due to the translucent color being used in the icon tinting
-        // and off-by-one discrepancies of SRC_IN when it's compositing
-        // translucent color. Note that all the checks below are written for the current
-        // logic on BottomNavigationView that uses the default SRC_IN tint mode - effectively
-        // replacing all non-transparent pixels in the destination (original icon) with
-        // our translucent tint color.
-        final int allowedComponentVariance = 1;
-
-        // Note that here we're tying ourselves to the implementation details of the internal
-        // structure of the BottomNavigationView. Specifically, we're checking the drawable the
-        // ImageView with id R.id.icon. If the internal implementation of BottomNavigationView
-        // changes, the second Matcher in the lookups below will need to be tweaked.
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_home)))).check(
-                matches(TestUtilsMatchers.drawable(defaultTintColor, allowedComponentVariance)));
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_profile)))).check(
-                matches(TestUtilsMatchers.drawable(defaultTintColor, allowedComponentVariance)));
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_people)))).check(
-                matches(TestUtilsMatchers.drawable(defaultTintColor, allowedComponentVariance)));
-
-        @ColorInt final int newTintColor = ResourcesCompat.getColor(res,
-                R.color.red_translucent, null);
-        onView(withId(R.id.bottom_navigation)).perform(setItemIconTintList(
-                ResourcesCompat.getColorStateList(res, R.color.color_state_list_red_translucent,
-                        null)));
-        // Check that all menu items with icons now have icons tinted with the newly set color
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_home)))).check(
-                matches(TestUtilsMatchers.drawable(newTintColor, allowedComponentVariance)));
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_profile)))).check(
-                matches(TestUtilsMatchers.drawable(newTintColor, allowedComponentVariance)));
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_people)))).check(
-                matches(TestUtilsMatchers.drawable(newTintColor, allowedComponentVariance)));
-
-        // And now remove all icon tinting
-        onView(withId(R.id.bottom_navigation)).perform(setItemIconTintList(null));
-        // And verify that all menu items with icons now have the original colors for their icons.
-        // Note that since there is no tinting at this point, we don't allow any color variance
-        // in these checks.
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_home)))).check(
-                matches(TestUtilsMatchers.drawable(redFill, allowedComponentVariance)));
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_profile)))).check(
-                matches(TestUtilsMatchers.drawable(greenFill, allowedComponentVariance)));
-        onView(allOf(withId(R.id.icon), isDescendantOfA(withId(R.id.destination_people)))).check(
-                matches(TestUtilsMatchers.drawable(blueFill, allowedComponentVariance)));
-    }
-
-    @UiThreadTest
-    @Test
-    @SmallTest
-    public void testItemChecking() throws Throwable {
-        final Menu menu = mBottomNavigation.getMenu();
-        assertTrue(menu.getItem(0).isChecked());
-        checkAndVerifyExclusiveItem(menu, R.id.destination_home);
-        checkAndVerifyExclusiveItem(menu, R.id.destination_profile);
-        checkAndVerifyExclusiveItem(menu, R.id.destination_people);
-    }
-
-    @UiThreadTest
-    @Test
-    @SmallTest
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
-    public void testPointerIcon() throws Throwable {
-        final Activity activity = mActivityTestRule.getActivity();
-        final PointerIcon expectedIcon = PointerIcon.getSystemIcon(activity, PointerIcon.TYPE_HAND);
-        final MotionEvent event = MotionEvent.obtain(0, 0, MotionEvent.ACTION_HOVER_MOVE, 0, 0, 0);
-        final Menu menu = mBottomNavigation.getMenu();
-        for (int i = 0; i < menu.size(); i++) {
-            final MenuItem item = menu.getItem(i);
-            assertTrue(item.isEnabled());
-            final View itemView = activity.findViewById(item.getItemId());
-            assertEquals(expectedIcon, itemView.onResolvePointerIcon(event, 0));
-            item.setEnabled(false);
-            assertEquals(null, itemView.onResolvePointerIcon(event, 0));
-            item.setEnabled(true);
-            assertEquals(expectedIcon, itemView.onResolvePointerIcon(event, 0));
-        }
-    }
-
-    @UiThreadTest
-    @Test
-    @SmallTest
-    public void testClearingMenu() throws Throwable {
-        mBottomNavigation.getMenu().clear();
-        assertEquals(0, mBottomNavigation.getMenu().size());
-        mBottomNavigation.inflateMenu(R.menu.bottom_navigation_view_content);
-        assertEquals(3, mBottomNavigation.getMenu().size());
-    }
-
-    @Test
-    @SmallTest
-    public void testSavedState() throws Throwable {
-        // Select an item other than the first
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.bottom_navigation)), isDisplayed())).perform(click());
-        assertTrue(mBottomNavigation.getMenu().findItem(R.id.destination_profile).isChecked());
-        // Save the state
-        final Parcelable state = mBottomNavigation.onSaveInstanceState();
-
-        // Restore the state into a fresh BottomNavigationView
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                BottomNavigationView testView =
-                        new BottomNavigationView(mActivityTestRule.getActivity());
-                testView.inflateMenu(R.menu.bottom_navigation_view_content);
-                testView.onRestoreInstanceState(state);
-                assertTrue(testView.getMenu().findItem(R.id.destination_profile).isChecked());
-            }
-        });
-    }
-
-    @UiThreadTest
-    @Test
-    @SmallTest
-    public void testContentDescription() {
-        ViewGroup menuView = (ViewGroup) mBottomNavigation.getChildAt(0);
-        final int count = menuView.getChildCount();
-        for (int i = 0; i < count; i++) {
-            View child = menuView.getChildAt(i);
-            // We're using the same strings for content description
-            assertEquals(mMenuStringContent.get(child.getId()),
-                    child.getContentDescription().toString());
-        }
-
-        menuView.getChildAt(0).getContentDescription();
-    }
-
-    private void checkAndVerifyExclusiveItem(final Menu menu, final int id) throws Throwable {
-        menu.findItem(id).setChecked(true);
-        for (int i = 0; i < menu.size(); i++) {
-            final MenuItem item = menu.getItem(i);
-            if (item.getItemId() == id) {
-                assertTrue(item.isChecked());
-            } else {
-                assertFalse(item.isChecked());
-            }
-        }
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetBehaviorActivity.java b/design/tests/src/android/support/design/widget/BottomSheetBehaviorActivity.java
deleted file mode 100644
index 6ab6287..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetBehaviorActivity.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.content.Intent;
-import android.support.design.test.R;
-import android.widget.LinearLayout;
-
-
-public class BottomSheetBehaviorActivity extends BaseTestActivity {
-
-    public static String EXTRA_INITIAL_STATE = "initial_state";
-
-    CoordinatorLayout mCoordinatorLayout;
-
-    LinearLayout mBottomSheet;
-
-    BottomSheetBehavior mBehavior;
-
-    FloatingActionButton mFab;
-
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.test_design_bottom_sheet_behavior;
-    }
-
-    @Override
-    protected void onContentViewSet() {
-        mCoordinatorLayout = findViewById(R.id.coordinator);
-        mBottomSheet = findViewById(R.id.bottom_sheet);
-        mBehavior = BottomSheetBehavior.from(mBottomSheet);
-        mFab = findViewById(R.id.fab);
-        Intent intent = getIntent();
-        if (intent != null) {
-            int initialState = intent.getIntExtra(EXTRA_INITIAL_STATE, -1);
-            if (initialState != -1) {
-                //noinspection ResourceType
-                mBehavior.setState(initialState);
-            }
-        }
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetBehaviorInitialStateTest.java b/design/tests/src/android/support/design/widget/BottomSheetBehaviorInitialStateTest.java
deleted file mode 100644
index a59aa87..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetBehaviorInitialStateTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-import android.content.Context;
-import android.content.Intent;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.rule.ActivityTestRule;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class BottomSheetBehaviorInitialStateTest {
-
-    @Rule
-    public final ActivityTestRule<BottomSheetBehaviorActivity> mActivityTestRule
-            = new ActivityTestRule<>(BottomSheetBehaviorActivity.class, true, false);
-
-    @Test
-    public void testSetStateExpanded() {
-        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        Intent intent = new Intent(context, BottomSheetBehaviorActivity.class);
-        intent.putExtra(BottomSheetBehaviorActivity.EXTRA_INITIAL_STATE,
-                BottomSheetBehavior.STATE_EXPANDED);
-        mActivityTestRule.launchActivity(intent);
-        BottomSheetBehaviorActivity activity = mActivityTestRule.getActivity();
-        assertThat(activity.mBehavior.getState(), is(BottomSheetBehavior.STATE_EXPANDED));
-        assertThat(activity.mBottomSheet.getTop(), is(0));
-    }
-
-
-    @Test
-    public void testSetStateHidden() {
-        Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        Intent intent = new Intent(context, BottomSheetBehaviorActivity.class);
-        intent.putExtra(BottomSheetBehaviorActivity.EXTRA_INITIAL_STATE,
-                BottomSheetBehavior.STATE_HIDDEN);
-        mActivityTestRule.launchActivity(intent);
-        BottomSheetBehaviorActivity activity = mActivityTestRule.getActivity();
-        assertThat(activity.mBehavior.getState(), is(BottomSheetBehavior.STATE_HIDDEN));
-        assertThat(activity.mBottomSheet.getTop(), is(activity.mCoordinatorLayout.getHeight()));
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetBehaviorTest.java b/design/tests/src/android/support/design/widget/BottomSheetBehaviorTest.java
deleted file mode 100644
index 4a27d0c..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetBehaviorTest.java
+++ /dev/null
@@ -1,806 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
-import static org.hamcrest.Matchers.lessThanOrEqualTo;
-import static org.junit.Assert.fail;
-
-import android.content.Context;
-import android.os.SystemClock;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.design.test.R;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.IdlingResource;
-import android.support.test.espresso.NoMatchingViewException;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.ViewAssertion;
-import android.support.test.espresso.action.CoordinatesProvider;
-import android.support.test.espresso.action.GeneralLocation;
-import android.support.test.espresso.action.GeneralSwipeAction;
-import android.support.test.espresso.action.MotionEvents;
-import android.support.test.espresso.action.PrecisionDescriber;
-import android.support.test.espresso.action.Press;
-import android.support.test.espresso.action.Swipe;
-import android.support.test.espresso.action.ViewActions;
-import android.support.test.espresso.assertion.ViewAssertions;
-import android.support.test.espresso.matcher.ViewMatchers;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.test.filters.SmallTest;
-import android.support.v4.view.ViewCompat;
-import android.support.v4.widget.NestedScrollView;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-
-import org.hamcrest.Matcher;
-import org.hamcrest.Matchers;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class BottomSheetBehaviorTest extends
-        BaseInstrumentationTestCase<BottomSheetBehaviorActivity> {
-
-    public static class Callback extends BottomSheetBehavior.BottomSheetCallback
-            implements IdlingResource {
-
-        private boolean mIsIdle;
-
-        private IdlingResource.ResourceCallback mResourceCallback;
-
-        public Callback(BottomSheetBehavior behavior) {
-            behavior.setBottomSheetCallback(this);
-            int state = behavior.getState();
-            mIsIdle = isIdleState(state);
-        }
-
-        @Override
-        public void onStateChanged(@NonNull View bottomSheet,
-                @BottomSheetBehavior.State int newState) {
-            boolean wasIdle = mIsIdle;
-            mIsIdle = isIdleState(newState);
-            if (!wasIdle && mIsIdle && mResourceCallback != null) {
-                mResourceCallback.onTransitionToIdle();
-            }
-        }
-
-        @Override
-        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
-            assertThat(slideOffset, is(greaterThanOrEqualTo(-1f)));
-            assertThat(slideOffset, is(lessThanOrEqualTo(1f)));
-        }
-
-        @Override
-        public String getName() {
-            return Callback.class.getSimpleName();
-        }
-
-        @Override
-        public boolean isIdleNow() {
-            return mIsIdle;
-        }
-
-        @Override
-        public void registerIdleTransitionCallback(IdlingResource.ResourceCallback callback) {
-            mResourceCallback = callback;
-        }
-
-        private boolean isIdleState(int state) {
-            return state != BottomSheetBehavior.STATE_DRAGGING &&
-                    state != BottomSheetBehavior.STATE_SETTLING;
-        }
-
-    }
-
-    /**
-     * Wait for a FAB to change its visibility (either shown or hidden).
-     */
-    private static class OnVisibilityChangedListener extends
-            FloatingActionButton.OnVisibilityChangedListener implements IdlingResource {
-
-        private final boolean mShown;
-        private boolean mIsIdle;
-        private ResourceCallback mResourceCallback;
-
-        OnVisibilityChangedListener(boolean shown) {
-            mShown = shown;
-        }
-
-        private void transitionToIdle() {
-            if (!mIsIdle) {
-                mIsIdle = true;
-                if (mResourceCallback != null) {
-                    mResourceCallback.onTransitionToIdle();
-                }
-            }
-        }
-
-        @Override
-        public void onShown(FloatingActionButton fab) {
-            if (mShown) {
-                transitionToIdle();
-            }
-        }
-
-        @Override
-        public void onHidden(FloatingActionButton fab) {
-            if (!mShown) {
-                transitionToIdle();
-            }
-        }
-
-        @Override
-        public String getName() {
-            return OnVisibilityChangedListener.class.getSimpleName();
-        }
-
-        @Override
-        public boolean isIdleNow() {
-            return mIsIdle;
-        }
-
-        @Override
-        public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
-            mResourceCallback = resourceCallback;
-        }
-    }
-
-    /**
-     * This is like {@link GeneralSwipeAction}, but it does not send ACTION_UP at the end.
-     */
-    private static class DragAction implements ViewAction {
-
-        private static final int STEPS = 10;
-        private static final int DURATION = 100;
-
-        private final CoordinatesProvider mStart;
-        private final CoordinatesProvider mEnd;
-        private final PrecisionDescriber mPrecisionDescriber;
-
-        public DragAction(CoordinatesProvider start, CoordinatesProvider end,
-                PrecisionDescriber precisionDescriber) {
-            mStart = start;
-            mEnd = end;
-            mPrecisionDescriber = precisionDescriber;
-        }
-
-        @Override
-        public Matcher<View> getConstraints() {
-            return Matchers.any(View.class);
-        }
-
-        @Override
-        public String getDescription() {
-            return "drag";
-        }
-
-        @Override
-        public void perform(UiController uiController, View view) {
-            float[] precision = mPrecisionDescriber.describePrecision();
-            float[] start = mStart.calculateCoordinates(view);
-            float[] end = mEnd.calculateCoordinates(view);
-            float[][] steps = interpolate(start, end, STEPS);
-            int delayBetweenMovements = DURATION / steps.length;
-            // Down
-            MotionEvent downEvent = MotionEvents.sendDown(uiController, start, precision).down;
-            try {
-                for (int i = 0; i < steps.length; i++) {
-                    // Wait
-                    long desiredTime = downEvent.getDownTime() + (long)(delayBetweenMovements * i);
-                    long timeUntilDesired = desiredTime - SystemClock.uptimeMillis();
-                    if (timeUntilDesired > 10L) {
-                        uiController.loopMainThreadForAtLeast(timeUntilDesired);
-                    }
-                    // Move
-                    if (!MotionEvents.sendMovement(uiController, downEvent, steps[i])) {
-                        MotionEvents.sendCancel(uiController, downEvent);
-                        throw new RuntimeException("Cannot drag: failed to send a move event.");
-                    }
-                }
-                int duration = ViewConfiguration.getPressedStateDuration();
-                if (duration > 0) {
-                    uiController.loopMainThreadForAtLeast((long) duration);
-                }
-            } finally {
-                downEvent.recycle();
-            }
-        }
-
-        private static float[][] interpolate(float[] start, float[] end, int steps) {
-            Assert.assertTrue(1 < start.length);
-            Assert.assertTrue(1 < end.length);
-            float[][] res = new float[steps][2];
-            for(int i = 1; i < steps + 1; ++i) {
-                res[i - 1][0] = start[0] + (end[0] - start[0]) * (float)i / ((float)steps + 2.0F);
-                res[i - 1][1] = start[1] + (end[1] - start[1]) * (float)i / ((float)steps + 2.0F);
-            }
-            return res;
-        }
-    }
-
-    private static class AddViewAction implements ViewAction {
-
-        private final int mLayout;
-
-        public AddViewAction(@LayoutRes int layout) {
-            mLayout = layout;
-        }
-
-        @Override
-        public Matcher<View> getConstraints() {
-            return ViewMatchers.isAssignableFrom(ViewGroup.class);
-        }
-
-        @Override
-        public String getDescription() {
-            return "add view";
-        }
-
-        @Override
-        public void perform(UiController uiController, View view) {
-            ViewGroup parent = (ViewGroup) view;
-            View child = LayoutInflater.from(view.getContext()).inflate(mLayout, parent, false);
-            parent.addView(child);
-        }
-    }
-
-    private Callback mCallback;
-
-    public BottomSheetBehaviorTest() {
-        super(BottomSheetBehaviorActivity.class);
-    }
-
-    @Test
-    @SmallTest
-    public void testInitialSetup() {
-        BottomSheetBehavior behavior = getBehavior();
-        assertThat(behavior.getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-        CoordinatorLayout coordinatorLayout = getCoordinatorLayout();
-        ViewGroup bottomSheet = getBottomSheet();
-        assertThat(bottomSheet.getTop(),
-                is(coordinatorLayout.getHeight() - behavior.getPeekHeight()));
-    }
-
-    @Test
-    @MediumTest
-    public void testSetStateExpandedToCollapsed() throws Throwable {
-        checkSetState(BottomSheetBehavior.STATE_EXPANDED, ViewMatchers.isDisplayed());
-        checkSetState(BottomSheetBehavior.STATE_COLLAPSED, ViewMatchers.isDisplayed());
-    }
-
-    @Test
-    @MediumTest
-    public void testSetStateHiddenToCollapsed() throws Throwable {
-        checkSetState(BottomSheetBehavior.STATE_HIDDEN, not(ViewMatchers.isDisplayed()));
-        checkSetState(BottomSheetBehavior.STATE_COLLAPSED, ViewMatchers.isDisplayed());
-    }
-
-    @Test
-    @MediumTest
-    public void testSetStateCollapsedToCollapsed() throws Throwable {
-        checkSetState(BottomSheetBehavior.STATE_COLLAPSED, ViewMatchers.isDisplayed());
-    }
-
-    @Test
-    @LargeTest
-    public void testSwipeDownToCollapse() throws Throwable {
-        checkSetState(BottomSheetBehavior.STATE_EXPANDED, ViewMatchers.isDisplayed());
-        Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                .perform(DesignViewActions.withCustomConstraints(new GeneralSwipeAction(
-                        Swipe.FAST,
-                        // Manually calculate the starting coordinates to make sure that the touch
-                        // actually falls onto the view on Gingerbread
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                int[] location = new int[2];
-                                view.getLocationInWindow(location);
-                                return new float[]{
-                                        view.getWidth() / 2,
-                                        location[1] + 1
-                                };
-                            }
-                        },
-                        // Manually calculate the ending coordinates to make sure that the bottom
-                        // sheet is collapsed, not hidden
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                BottomSheetBehavior behavior = getBehavior();
-                                return new float[]{
-                                        // x: center of the bottom sheet
-                                        view.getWidth() / 2,
-                                        // y: just above the peek height
-                                        view.getHeight() - behavior.getPeekHeight()};
-                            }
-                        }, Press.FINGER), ViewMatchers.isDisplayingAtLeast(5)));
-        registerIdlingResourceCallback();
-        try {
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
-            assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    @Test
-    @MediumTest
-    public void testSwipeDownToHide() {
-        Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                .perform(DesignViewActions.withCustomConstraints(ViewActions.swipeDown(),
-                        ViewMatchers.isDisplayingAtLeast(5)));
-        registerIdlingResourceCallback();
-        try {
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(not(ViewMatchers.isDisplayed())));
-            assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_HIDDEN));
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    @Test
-    @LargeTest
-    public void testSkipCollapsed() throws Throwable {
-        getBehavior().setSkipCollapsed(true);
-        checkSetState(BottomSheetBehavior.STATE_EXPANDED, ViewMatchers.isDisplayed());
-        Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                .perform(DesignViewActions.withCustomConstraints(new GeneralSwipeAction(
-                        Swipe.FAST,
-                        // Manually calculate the starting coordinates to make sure that the touch
-                        // actually falls onto the view on Gingerbread
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                int[] location = new int[2];
-                                view.getLocationInWindow(location);
-                                return new float[]{
-                                        view.getWidth() / 2,
-                                        location[1] + 1
-                                };
-                            }
-                        },
-                        // Manually calculate the ending coordinates to make sure that the bottom
-                        // sheet is collapsed, not hidden
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                BottomSheetBehavior behavior = getBehavior();
-                                return new float[]{
-                                        // x: center of the bottom sheet
-                                        view.getWidth() / 2,
-                                        // y: just above the peek height
-                                        view.getHeight() - behavior.getPeekHeight()};
-                            }
-                        }, Press.FINGER), ViewMatchers.isDisplayingAtLeast(5)));
-        registerIdlingResourceCallback();
-        try {
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(not(ViewMatchers.isDisplayed())));
-            assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_HIDDEN));
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    @Test
-    @MediumTest
-    public void testSwipeUpToExpand() {
-        Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                .perform(DesignViewActions.withCustomConstraints(
-                        new GeneralSwipeAction(Swipe.FAST,
-                                GeneralLocation.VISIBLE_CENTER, new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                return new float[]{view.getWidth() / 2, 0};
-                            }
-                        }, Press.FINGER),
-                        ViewMatchers.isDisplayingAtLeast(5)));
-        registerIdlingResourceCallback();
-        try {
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
-            assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_EXPANDED));
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    @Test
-    @MediumTest
-    public void testInvisible() throws Throwable {
-        // Make the bottomsheet invisible
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                getBottomSheet().setVisibility(View.INVISIBLE);
-                assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-            }
-        });
-        // Swipe up as if to expand it
-        Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                .perform(DesignViewActions.withCustomConstraints(
-                        new GeneralSwipeAction(Swipe.FAST,
-                                GeneralLocation.VISIBLE_CENTER, new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                return new float[]{view.getWidth() / 2, 0};
-                            }
-                        }, Press.FINGER),
-                        not(ViewMatchers.isDisplayed())));
-        // Check that the bottom sheet stays the same collapsed state
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-            }
-        });
-    }
-
-    @Test
-    @MediumTest
-    public void testInvisibleThenVisible() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                // The bottom sheet is initially invisible
-                getBottomSheet().setVisibility(View.INVISIBLE);
-                // Then it becomes visible when the CoL is touched
-                getCoordinatorLayout().setOnTouchListener(new View.OnTouchListener() {
-                    @Override
-                    public boolean onTouch(View view, MotionEvent e) {
-                        if (e.getAction() == MotionEvent.ACTION_DOWN) {
-                            getBottomSheet().setVisibility(View.VISIBLE);
-                            return true;
-                        }
-                        return false;
-                    }
-                });
-                assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-            }
-        });
-        // Drag over the CoL
-        Espresso.onView(ViewMatchers.withId(R.id.coordinator))
-                // Drag (and not release)
-                .perform(new DragAction(
-                        GeneralLocation.BOTTOM_CENTER,
-                        GeneralLocation.TOP_CENTER,
-                        Press.FINGER))
-                .check(new ViewAssertion() {
-                    @Override
-                    public void check(View view, NoMatchingViewException e) {
-                        // The bottom sheet should not react to the touch events
-                        assertThat(getBottomSheet(), is(ViewMatchers.isDisplayed()));
-                        assertThat(getBehavior().getState(),
-                                is(BottomSheetBehavior.STATE_COLLAPSED));
-                    }
-                });
-    }
-
-    @Test
-    @LargeTest
-    public void testNestedScroll() throws Throwable {
-        final ViewGroup bottomSheet = getBottomSheet();
-        final BottomSheetBehavior behavior = getBehavior();
-        final NestedScrollView scroll = new NestedScrollView(mActivityTestRule.getActivity());
-        // Set up nested scrolling area
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                bottomSheet.addView(scroll, new ViewGroup.LayoutParams(
-                        ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
-                final View view = new View(mActivityTestRule.getActivity());
-                // Make sure that the NestedScrollView is always scrollable
-                view.setMinimumHeight(bottomSheet.getHeight() + 1000);
-                scroll.addView(view);
-                assertThat(behavior.getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-                // The scroll offset is 0 at first
-                assertThat(scroll.getScrollY(), is(0));
-            }
-        });
-        // Swipe from the very bottom of the bottom sheet to the top edge of the screen so that the
-        // scrolling content is also scrolled
-        Espresso.onView(ViewMatchers.withId(R.id.coordinator))
-                .perform(new GeneralSwipeAction(Swipe.SLOW,
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                return new float[]{view.getWidth() / 2, view.getHeight() - 1};
-                            }
-                        },
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                return new float[]{view.getWidth() / 2, 1};
-                            }
-                        }, Press.FINGER));
-        registerIdlingResourceCallback();
-        try {
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
-            mActivityTestRule.runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    assertThat(behavior.getState(), is(BottomSheetBehavior.STATE_EXPANDED));
-                    // This confirms that the nested scrolling area was scrolled continuously after
-                    // the bottom sheet is expanded.
-                    assertThat(scroll.getScrollY(), is(not(0)));
-                }
-            });
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    @Test
-    @MediumTest
-    public void testDragOutside() {
-        // Swipe up outside of the bottom sheet
-        Espresso.onView(ViewMatchers.withId(R.id.coordinator))
-                .perform(DesignViewActions.withCustomConstraints(
-                        new GeneralSwipeAction(Swipe.FAST,
-                                // Just above the bottom sheet
-                                new CoordinatesProvider() {
-                                    @Override
-                                    public float[] calculateCoordinates(View view) {
-                                        return new float[]{
-                                                view.getWidth() / 2,
-                                                view.getHeight() - getBehavior().getPeekHeight() - 9
-                                        };
-                                    }
-                                },
-                                // Top of the CoordinatorLayout
-                                new CoordinatesProvider() {
-                                    @Override
-                                    public float[] calculateCoordinates(View view) {
-                                        return new float[]{view.getWidth() / 2, 1};
-                                    }
-                                }, Press.FINGER),
-                        ViewMatchers.isDisplayed()));
-        registerIdlingResourceCallback();
-        try {
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
-            // The bottom sheet should remain collapsed
-            assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    @Test
-    @MediumTest
-    public void testLayoutWhileDragging() {
-        Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                // Drag (and not release)
-                .perform(new DragAction(
-                        GeneralLocation.VISIBLE_CENTER,
-                        GeneralLocation.TOP_CENTER,
-                        Press.FINGER))
-                // Check that the bottom sheet is in STATE_DRAGGING
-                .check(new ViewAssertion() {
-                    @Override
-                    public void check(View view, NoMatchingViewException e) {
-                        assertThat(view, is(ViewMatchers.isDisplayed()));
-                        BottomSheetBehavior behavior = BottomSheetBehavior.from(view);
-                        assertThat(behavior.getState(), is(BottomSheetBehavior.STATE_DRAGGING));
-                    }
-                })
-                // Add a new view
-                .perform(new AddViewAction(R.layout.frame_layout))
-                // Check that the newly added view is properly laid out
-                .check(new ViewAssertion() {
-                    @Override
-                    public void check(View view, NoMatchingViewException e) {
-                        ViewGroup parent = (ViewGroup) view;
-                        assertThat(parent.getChildCount(), is(1));
-                        View child = parent.getChildAt(0);
-                        assertThat(ViewCompat.isLaidOut(child), is(true));
-                    }
-                });
-    }
-
-    @Test
-    @MediumTest
-    public void testFabVisibility() {
-        withFabVisibilityChange(false, new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    checkSetState(BottomSheetBehavior.STATE_EXPANDED, ViewMatchers.isDisplayed());
-                } catch (Throwable throwable) {
-                    fail(throwable.getMessage());
-                }
-            }
-        });
-        withFabVisibilityChange(true, new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    checkSetState(BottomSheetBehavior.STATE_COLLAPSED, ViewMatchers.isDisplayed());
-                } catch (Throwable throwable) {
-                    fail(throwable.getMessage());
-                }
-            }
-        });
-    }
-
-    @Test
-    @MediumTest
-    public void testAutoPeekHeight() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                getBehavior().setPeekHeight(BottomSheetBehavior.PEEK_HEIGHT_AUTO);
-            }
-        });
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                CoordinatorLayout col = getCoordinatorLayout();
-                assertThat(getBottomSheet().getTop(),
-                        is(Math.min(col.getWidth() * 9 / 16,
-                                col.getHeight() - getBehavior().getPeekHeightMin())));
-            }
-        });
-    }
-
-    @Test
-    @MediumTest
-    public void testAutoPeekHeightHide() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                getBehavior().setHideable(true);
-                getBehavior().setPeekHeight(0);
-                getBehavior().setPeekHeight(BottomSheetBehavior.PEEK_HEIGHT_AUTO);
-            }
-        });
-        checkSetState(BottomSheetBehavior.STATE_HIDDEN, not(ViewMatchers.isDisplayed()));
-    }
-
-    @Test
-    @MediumTest
-    public void testDynamicContent() throws Throwable {
-        registerIdlingResourceCallback();
-        try {
-            mActivityTestRule.runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    ViewGroup.LayoutParams params = getBottomSheet().getLayoutParams();
-                    params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
-                    getBottomSheet().setLayoutParams(params);
-                    View view = new View(getBottomSheet().getContext());
-                    int size = getBehavior().getPeekHeight() * 2;
-                    getBottomSheet().addView(view, new ViewGroup.LayoutParams(size, size));
-                    assertThat(getBottomSheet().getChildCount(), is(1));
-                    // Shrink the content height.
-                    ViewGroup.LayoutParams lp = view.getLayoutParams();
-                    lp.height = (int) (size * 0.8);
-                    view.setLayoutParams(lp);
-                    // Immediately expand the bottom sheet.
-                    getBehavior().setState(BottomSheetBehavior.STATE_EXPANDED);
-                }
-            });
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
-            assertThat(getBehavior().getState(), is(BottomSheetBehavior.STATE_EXPANDED));
-            // Make sure that the bottom sheet is not floating above the bottom.
-            assertThat(getBottomSheet().getBottom(), is(getCoordinatorLayout().getBottom()));
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    @Test
-    @MediumTest
-    public void testExpandedPeekHeight() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                // Make the peek height as tall as the bottom sheet.
-                BottomSheetBehavior behavior = getBehavior();
-                behavior.setPeekHeight(getBottomSheet().getHeight());
-                assertThat(behavior.getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-            }
-        });
-        // Both of these will not animate the sheet , but the state should be changed.
-        checkSetState(BottomSheetBehavior.STATE_EXPANDED, ViewMatchers.isDisplayed());
-        checkSetState(BottomSheetBehavior.STATE_COLLAPSED, ViewMatchers.isDisplayed());
-    }
-
-    @Test
-    @SmallTest
-    public void testFindScrollingChildEnabled() {
-        Context context = mActivityTestRule.getActivity();
-        NestedScrollView disabledParent = new NestedScrollView(context);
-        disabledParent.setNestedScrollingEnabled(false);
-        NestedScrollView enabledChild = new NestedScrollView(context);
-        enabledChild.setNestedScrollingEnabled(true);
-        disabledParent.addView(enabledChild);
-
-        View scrollingChild = getBehavior().findScrollingChild(disabledParent);
-        assertThat(scrollingChild, is((View) enabledChild));
-    }
-
-    private void checkSetState(final int state, Matcher<View> matcher) throws Throwable {
-        registerIdlingResourceCallback();
-        try {
-            mActivityTestRule.runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    getBehavior().setState(state);
-                }
-            });
-            Espresso.onView(ViewMatchers.withId(R.id.bottom_sheet))
-                    .check(ViewAssertions.matches(matcher));
-            assertThat(getBehavior().getState(), is(state));
-        } finally {
-            unregisterIdlingResourceCallback();
-        }
-    }
-
-    private void registerIdlingResourceCallback() {
-        // This cannot be done in setUp(), or swiping action cannot be executed.
-        mCallback = new Callback(getBehavior());
-        Espresso.registerIdlingResources(mCallback);
-    }
-
-    private void unregisterIdlingResourceCallback() {
-        if (mCallback != null) {
-            Espresso.unregisterIdlingResources(mCallback);
-            mCallback = null;
-        }
-    }
-
-    private void withFabVisibilityChange(boolean shown, Runnable action) {
-        OnVisibilityChangedListener listener = new OnVisibilityChangedListener(shown);
-        CoordinatorLayout.LayoutParams lp =
-                (CoordinatorLayout.LayoutParams) mActivityTestRule.getActivity().mFab
-                        .getLayoutParams();
-        FloatingActionButton.Behavior behavior = (FloatingActionButton.Behavior) lp.getBehavior();
-        behavior.setInternalAutoHideListener(listener);
-        Espresso.registerIdlingResources(listener);
-        try {
-            action.run();
-        } finally {
-            Espresso.unregisterIdlingResources(listener);
-        }
-    }
-
-    private ViewGroup getBottomSheet() {
-        return mActivityTestRule.getActivity().mBottomSheet;
-    }
-
-    private BottomSheetBehavior getBehavior() {
-        return mActivityTestRule.getActivity().mBehavior;
-    }
-
-    private CoordinatorLayout getCoordinatorLayout() {
-        return mActivityTestRule.getActivity().mCoordinatorLayout;
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetBehaviorTouchTest.java b/design/tests/src/android/support/design/widget/BottomSheetBehaviorTouchTest.java
deleted file mode 100644
index 51ab0fa..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetBehaviorTouchTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.CoreMatchers.sameInstance;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.NoMatchingViewException;
-import android.support.test.espresso.ViewAssertion;
-import android.support.test.espresso.action.ViewActions;
-import android.support.test.filters.MediumTest;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import org.junit.Before;
-import org.junit.Test;
-
-@MediumTest
-public class BottomSheetBehaviorTouchTest extends
-        BaseInstrumentationTestCase<CoordinatorLayoutActivity> {
-
-    private static final int PEEK_HEIGHT = 100;
-
-    private FrameLayout mBottomSheet;
-
-    private BottomSheetBehavior<FrameLayout> mBehavior;
-
-    private boolean mDown;
-
-    private View.OnTouchListener mOnTouchListener = new View.OnTouchListener() {
-
-        @Override
-        public boolean onTouch(View v, MotionEvent event) {
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_DOWN:
-                    mDown = true;
-                    break;
-            }
-            return true;
-        }
-
-    };
-
-    public BottomSheetBehaviorTouchTest() {
-        super(CoordinatorLayoutActivity.class);
-    }
-
-    @UiThreadTest
-    @Before
-    public void setUpBottomSheet() {
-        CoordinatorLayoutActivity activity = mActivityTestRule.getActivity();
-        activity.mContainer.setOnTouchListener(mOnTouchListener);
-        mBottomSheet = new FrameLayout(activity);
-        CoordinatorLayout.LayoutParams params = new CoordinatorLayout.LayoutParams(
-                CoordinatorLayout.LayoutParams.MATCH_PARENT,
-                CoordinatorLayout.LayoutParams.MATCH_PARENT);
-        mBehavior = new BottomSheetBehavior<>();
-        mBehavior.setPeekHeight(PEEK_HEIGHT);
-        params.setBehavior(mBehavior);
-        activity.mCoordinatorLayout.addView(mBottomSheet, params);
-    }
-
-    @Test
-    public void testSetUp() {
-        assertThat(mBottomSheet, is(notNullValue()));
-        assertThat(mBehavior, is(sameInstance(BottomSheetBehavior.from(mBottomSheet))));
-    }
-
-    @Test
-    public void testTouchCoordinatorLayout() {
-        final CoordinatorLayoutActivity activity = mActivityTestRule.getActivity();
-        mDown = false;
-        Espresso.onView(sameInstance((View) activity.mCoordinatorLayout))
-                .perform(ViewActions.click())  // Click outside the bottom sheet
-                .check(new ViewAssertion() {
-                    @Override
-                    public void check(View view, NoMatchingViewException e) {
-                        assertThat(e, is(nullValue()));
-                        assertThat(view, is(notNullValue()));
-                        // Check that the touch event fell through to the container
-                        assertThat(mDown, is(true));
-                    }
-                });
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetBehaviorWithInsetsActivity.java b/design/tests/src/android/support/design/widget/BottomSheetBehaviorWithInsetsActivity.java
deleted file mode 100644
index c1ab21d..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetBehaviorWithInsetsActivity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-import android.view.View;
-
-
-public class BottomSheetBehaviorWithInsetsActivity extends BottomSheetBehaviorActivity {
-
-    View mBottomSheetContent;
-
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.test_design_bottom_sheet_behavior_with_insets;
-    }
-
-    @Override
-    protected void onContentViewSet() {
-        super.onContentViewSet();
-        mBottomSheetContent = findViewById(R.id.bottom_sheet_content);
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetBehaviorWithInsetsTest.java b/design/tests/src/android/support/design/widget/BottomSheetBehaviorWithInsetsTest.java
deleted file mode 100644
index f77542e..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetBehaviorWithInsetsTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import android.support.test.filters.SmallTest;
-import android.support.v4.view.ViewCompat;
-import android.view.ViewGroup;
-
-import org.junit.Test;
-
-public class BottomSheetBehaviorWithInsetsTest extends
-        BaseInstrumentationTestCase<BottomSheetBehaviorWithInsetsActivity> {
-
-    public BottomSheetBehaviorWithInsetsTest() {
-        super(BottomSheetBehaviorWithInsetsActivity.class);
-    }
-
-    @Test
-    @SmallTest
-    public void testFitsSystemWindows() {
-        BottomSheetBehaviorWithInsetsActivity activity = mActivityTestRule.getActivity();
-        ViewCompat.setFitsSystemWindows(activity.mCoordinatorLayout, true);
-        assertThat(activity.mBehavior.getState(), is(BottomSheetBehavior.STATE_COLLAPSED));
-        ViewGroup bottomSheet = activity.mBottomSheet;
-        assertThat(bottomSheet.getTop(),
-                is(activity.mCoordinatorLayout.getHeight() - activity.mBehavior.getPeekHeight()));
-        assertThat(activity.mBottomSheetContent.getTop(), is(0));
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/BottomSheetDialogActivity.java b/design/tests/src/android/support/design/widget/BottomSheetDialogActivity.java
deleted file mode 100644
index ab273c2..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetDialogActivity.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class BottomSheetDialogActivity extends BaseTestActivity {
-
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.frame_layout;
-    }
-
-}
-
diff --git a/design/tests/src/android/support/design/widget/BottomSheetDialogTest.java b/design/tests/src/android/support/design/widget/BottomSheetDialogTest.java
deleted file mode 100644
index 8ca9b1d..0000000
--- a/design/tests/src/android/support/design/widget/BottomSheetDialogTest.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.lessThan;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.SystemClock;
-import android.support.design.test.R;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.action.ViewActions;
-import android.support.test.espresso.assertion.ViewAssertions;
-import android.support.test.espresso.matcher.ViewMatchers;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.v7.widget.AppCompatTextView;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-import org.junit.Test;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-public class BottomSheetDialogTest extends
-        BaseInstrumentationTestCase<BottomSheetDialogActivity> {
-
-    private BottomSheetDialog mDialog;
-
-    public BottomSheetDialogTest() {
-        super(BottomSheetDialogActivity.class);
-    }
-
-    @Test
-    @MediumTest
-    public void testBasicDialogSetup() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showDialog();
-                // Confirms that the dialog is shown
-                assertThat(mDialog.isShowing(), is(true));
-                FrameLayout bottomSheet = (FrameLayout) mDialog
-                        .findViewById(R.id.design_bottom_sheet);
-                assertThat(bottomSheet, is(notNullValue()));
-                BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(bottomSheet);
-                assertThat(behavior.isHideable(), is(true));
-                assertThat(behavior, is(notNullValue()));
-                // Modal bottom sheets have auto peek height by default.
-                assertThat(behavior.getPeekHeight(), is(BottomSheetBehavior.PEEK_HEIGHT_AUTO));
-            }
-        });
-        // Click outside the bottom sheet
-        Espresso.onView(ViewMatchers.withId(R.id.touch_outside))
-                .perform(ViewActions.click());
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                // Confirm that the dialog is no longer shown
-                assertThat(mDialog.isShowing(), is(false));
-            }
-        });
-    }
-
-    @Test
-    @MediumTest
-    public void testTouchInside() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showDialog();
-                // Confirms that the dialog is shown
-                assertThat(mDialog.isShowing(), is(true));
-                FrameLayout bottomSheet = (FrameLayout) mDialog
-                        .findViewById(R.id.design_bottom_sheet);
-                // The bottom sheet is not clickable
-                assertNotNull(bottomSheet);
-                assertThat(bottomSheet.isClickable(), is(false));
-            }
-        });
-        // Click on the bottom sheet
-        Espresso.onView(ViewMatchers.withId(R.id.design_bottom_sheet))
-                .perform(ViewActions.click());
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                // Confirm that touch didn't fall through as outside touch
-                assertThat(mDialog.isShowing(), is(true));
-            }
-        });
-    }
-
-    @Test
-    @MediumTest
-    public void testClickContent() throws Throwable {
-        final View.OnClickListener mockListener = mock(View.OnClickListener.class);
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showDialog();
-                // Confirms that the dialog is shown
-                assertThat(mDialog.isShowing(), is(true));
-                FrameLayout bottomSheet = (FrameLayout) mDialog
-                        .findViewById(R.id.design_bottom_sheet);
-                // Set up an OnClickListener to the content of the bottom sheet
-                assertNotNull(bottomSheet);
-                View child = bottomSheet.getChildAt(0);
-                child.setOnClickListener(mockListener);
-            }
-        });
-        // Click on the bottom sheet; since the whole sheet is occupied with its only child, this
-        // clicks the child
-        Espresso.onView(ViewMatchers.withParent(ViewMatchers.withId(R.id.design_bottom_sheet)))
-                .perform(ViewActions.click());
-        verify(mockListener, times(1)).onClick(any(View.class));
-    }
-
-    @Test
-    @MediumTest
-    public void testShortDialog() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showDialog();
-            }
-        });
-        // This ensures that the views are laid out before assertions below
-        Espresso.onView(ViewMatchers.withId(R.id.design_bottom_sheet))
-                .perform(setTallPeekHeight())
-                .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                FrameLayout bottomSheet = (FrameLayout) mDialog
-                        .findViewById(R.id.design_bottom_sheet);
-                CoordinatorLayout coordinator = (CoordinatorLayout) bottomSheet.getParent();
-                BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(bottomSheet);
-                assertThat(bottomSheet, is(notNullValue()));
-                assertThat(coordinator, is(notNullValue()));
-                assertThat(behavior, is(notNullValue()));
-                // This bottom sheet is shorter than the peek height
-                assertThat(bottomSheet.getHeight(), is(lessThan(behavior.getPeekHeight())));
-                // Confirm that the bottom sheet is bottom-aligned
-                assertThat(bottomSheet.getTop(),
-                        is(coordinator.getHeight() - bottomSheet.getHeight()));
-            }
-        });
-    }
-
-    @Test
-    @MediumTest
-    public void testNonCancelableDialog() throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showDialog();
-                mDialog.setCancelable(false);
-            }
-        });
-        // Click outside the bottom sheet
-        Espresso.onView(ViewMatchers.withId(R.id.touch_outside))
-                .perform(ViewActions.click());
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                FrameLayout bottomSheet = (FrameLayout) mDialog
-                        .findViewById(R.id.design_bottom_sheet);
-                BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(bottomSheet);
-                assertThat(behavior.isHideable(), is(false));
-                assertThat(mDialog.isShowing(), is(true));
-                mDialog.cancel();
-                assertThat(mDialog.isShowing(), is(false));
-            }
-        });
-    }
-
-    @Test
-    @MediumTest
-    public void testHideBottomSheet() throws Throwable {
-        final AtomicBoolean canceled = new AtomicBoolean(false);
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showDialog();
-                mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
-                    @Override
-                    public void onCancel(DialogInterface dialogInterface) {
-                        canceled.set(true);
-                    }
-                });
-            }
-        });
-        Espresso.onView(ViewMatchers.withId(R.id.design_bottom_sheet))
-                .perform(setState(BottomSheetBehavior.STATE_HIDDEN));
-        // The dialog should be canceled
-        long start = System.currentTimeMillis();
-        while (!canceled.get()) {
-            SystemClock.sleep(31);
-            if (System.currentTimeMillis() - start > 3000) {
-                fail("Timed out while waiting for the dialog to be canceled.");
-            }
-        }
-    }
-
-    @SuppressWarnings("WrongConstant")
-    @Test
-    @LargeTest
-    public void testHideThenShow() throws Throwable {
-        // Hide the bottom sheet and wait for the dialog to be canceled.
-        final DialogInterface.OnCancelListener onCancelListener = mock(
-                DialogInterface.OnCancelListener.class);
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showDialog();
-                mDialog.setOnCancelListener(onCancelListener);
-            }
-        });
-        Espresso.onView(ViewMatchers.withId(R.id.design_bottom_sheet))
-                .perform(setState(BottomSheetBehavior.STATE_HIDDEN));
-        verify(onCancelListener, timeout(3000)).onCancel(any(DialogInterface.class));
-        // Reshow the same dialog instance and wait for the bottom sheet to be collapsed.
-        final BottomSheetBehavior.BottomSheetCallback callback = mock(
-                BottomSheetBehavior.BottomSheetCallback.class);
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                BottomSheetBehavior.from(mDialog.findViewById(R.id.design_bottom_sheet))
-                        .setBottomSheetCallback(callback);
-                mDialog.show(); // Show the same dialog again.
-            }
-        });
-        verify(callback, timeout(3000)).onStateChanged(any(View.class),
-                eq(BottomSheetBehavior.STATE_SETTLING));
-        verify(callback, timeout(3000)).onStateChanged(any(View.class),
-                eq(BottomSheetBehavior.STATE_COLLAPSED));
-    }
-
-    private void showDialog() {
-        Context context = mActivityTestRule.getActivity();
-        mDialog = new BottomSheetDialog(context);
-        AppCompatTextView text = new AppCompatTextView(context);
-        StringBuilder builder = new StringBuilder();
-        builder.append("It is fine today. ");
-        text.setText(builder);
-        mDialog.setContentView(text);
-        mDialog.show();
-    }
-
-    private static ViewAction setTallPeekHeight() {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return ViewMatchers.isDisplayed();
-            }
-
-            @Override
-            public String getDescription() {
-                return "set tall peek height";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                BottomSheetBehavior behavior = BottomSheetBehavior.from(view);
-                behavior.setPeekHeight(view.getHeight() + 100);
-            }
-        };
-    }
-
-    private static ViewAction setState(@BottomSheetBehavior.State final int state) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isBottomSheet();
-            }
-
-            @Override
-            public String getDescription() {
-                return "set state to " + state;
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                BottomSheetBehavior.from(view).setState(state);
-            }
-        };
-    }
-
-    private static Matcher<View> isBottomSheet() {
-        return new TypeSafeMatcher<View>() {
-            @Override
-            protected boolean matchesSafely(View view) {
-                return BottomSheetBehavior.from(view) != null;
-            }
-
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("is a bottom sheet");
-            }
-        };
-    }
-
-}
-
diff --git a/design/tests/src/android/support/design/widget/CoordinatorLayoutActivity.java b/design/tests/src/android/support/design/widget/CoordinatorLayoutActivity.java
deleted file mode 100644
index a42ac8d..0000000
--- a/design/tests/src/android/support/design/widget/CoordinatorLayoutActivity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-import android.widget.FrameLayout;
-
-public class CoordinatorLayoutActivity extends BaseTestActivity {
-
-    FrameLayout mContainer;
-    CoordinatorLayout mCoordinatorLayout;
-
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.activity_coordinator_layout;
-    }
-
-    @Override
-    protected void onContentViewSet() {
-        mContainer = findViewById(R.id.container);
-        mCoordinatorLayout = findViewById(R.id.coordinator);
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/CustomSnackbar.java b/design/tests/src/android/support/design/widget/CustomSnackbar.java
deleted file mode 100644
index caa1dc4..0000000
--- a/design/tests/src/android/support/design/widget/CustomSnackbar.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import android.support.design.test.R;
-import android.view.View;
-import android.widget.TextView;
-
-/**
- * Sample code for a custom snackbar that shows two separate text views and two images
- * in the main content area.
- */
-public class CustomSnackbar extends BaseTransientBottomBar<CustomSnackbar> {
-    public CustomSnackbar(CoordinatorLayout parent, View content,
-            BaseTransientBottomBar.ContentViewCallback contentViewCallback) {
-        super(parent, content, contentViewCallback);
-    }
-
-    /** Sets the title of this custom snackbar. */
-    public CustomSnackbar setTitle(String title) {
-        TextView titleView = (TextView) getView().findViewById(R.id.custom_snackbar_title);
-        titleView.setText(title);
-        return this;
-    }
-
-    /** Sets the subtitle of this custom snackbar. */
-    public CustomSnackbar setSubtitle(String subtitle) {
-        TextView subtitleView = (TextView) getView().findViewById(R.id.custom_snackbar_subtitle);
-        subtitleView.setText(subtitle);
-        return this;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/CustomSnackbarMainContent.java b/design/tests/src/android/support/design/widget/CustomSnackbarMainContent.java
deleted file mode 100644
index 8435bf7..0000000
--- a/design/tests/src/android/support/design/widget/CustomSnackbarMainContent.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import android.content.Context;
-import android.support.design.test.R;
-import android.util.AttributeSet;
-import android.widget.RelativeLayout;
-
-/**
- * Layout for the custom snackbar that shows two separate text views and two images
- * in the main content area.
- */
-public class CustomSnackbarMainContent extends RelativeLayout {
-    private final int mMaxWidth;
-
-    public CustomSnackbarMainContent(Context context) {
-        this(context, null);
-    }
-
-    public CustomSnackbarMainContent(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public CustomSnackbarMainContent(Context context, AttributeSet attrs,
-            int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        mMaxWidth = context.getResources().getDimensionPixelSize(R.dimen.custom_snackbar_max_width);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        if ((mMaxWidth > 0) && (getMeasuredWidth() > mMaxWidth)) {
-            super.onMeasure(MeasureSpec.makeMeasureSpec(mMaxWidth, MeasureSpec.EXACTLY),
-                    heightMeasureSpec);
-        }
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/CustomSnackbarTest.java b/design/tests/src/android/support/design/widget/CustomSnackbarTest.java
deleted file mode 100644
index cc6ed1a..0000000
--- a/design/tests/src/android/support/design/widget/CustomSnackbarTest.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.TestUtilsActions.setLayoutDirection;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.swipeLeft;
-import static android.support.test.espresso.action.ViewActions.swipeRight;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-
-import static org.hamcrest.core.AllOf.allOf;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.support.annotation.Nullable;
-import android.support.design.test.R;
-import android.support.design.testutils.SnackbarUtils;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.ViewInteraction;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.v4.view.ViewCompat;
-import android.view.LayoutInflater;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class CustomSnackbarTest extends BaseInstrumentationTestCase<SnackbarActivity> {
-    private static final String TITLE_TEXT = "Test title";
-    private static final String SUBTITLE_TEXT = "Test subtitle";
-
-    private CoordinatorLayout mCoordinatorLayout;
-
-    private interface DismissAction {
-        void dismiss(CustomSnackbar snackbar);
-    }
-
-    public CustomSnackbarTest() {
-        super(SnackbarActivity.class);
-    }
-
-    @Before
-    public void setup() {
-        mCoordinatorLayout =
-                (CoordinatorLayout) mActivityTestRule.getActivity().findViewById(R.id.col);
-    }
-
-    private void verifySnackbarContent(final CustomSnackbar snackbar, final String expectedTitle,
-            final String expectedSubtitle) throws Throwable {
-        // Show the snackbar
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-
-        // Verify that we're showing the title
-        withText(expectedTitle).matches(allOf(
-                isDescendantOfA(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                isDescendantOfA(isAssignableFrom(CustomSnackbarMainContent.class)),
-                isCompletelyDisplayed()));
-
-        // Verify that we're showing the subtitle
-        withText(expectedSubtitle).matches(allOf(
-                isDescendantOfA(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                isDescendantOfA(isAssignableFrom(CustomSnackbarMainContent.class)),
-                isCompletelyDisplayed()));
-
-        // Dismiss the snackbar
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-    }
-
-    private CustomSnackbar makeCustomSnackbar() {
-        final LayoutInflater inflater = LayoutInflater.from(mCoordinatorLayout.getContext());
-        final CustomSnackbarMainContent content =
-                (CustomSnackbarMainContent) inflater.inflate(
-                        R.layout.custom_snackbar_include, mCoordinatorLayout, false);
-        final BaseTransientBottomBar.ContentViewCallback contentViewCallback =
-                new BaseTransientBottomBar.ContentViewCallback() {
-                    @Override
-                    public void animateContentIn(int delay, int duration) {
-                        content.setAlpha(0f);
-                        content.animate().alpha(1f).setDuration(duration)
-                                .setStartDelay(delay).start();
-                    }
-
-                    @Override
-                    public void animateContentOut(int delay, int duration) {
-                        content.setAlpha(1f);
-                        content.animate().alpha(0f).setDuration(duration)
-                                .setStartDelay(delay).start();
-                    }
-                };
-        return new CustomSnackbar(mCoordinatorLayout, content, contentViewCallback);
-    }
-
-    @Test
-    @LargeTest
-    public void testBasicContent() throws Throwable {
-        // Verify different combinations of snackbar content (title / subtitle and action)
-        // and duration
-
-        // Short duration
-        verifySnackbarContent(
-                makeCustomSnackbar().setTitle(TITLE_TEXT)
-                        .setSubtitle(SUBTITLE_TEXT).setDuration(Snackbar.LENGTH_SHORT),
-                TITLE_TEXT, SUBTITLE_TEXT);
-
-        // Long duration
-        verifySnackbarContent(
-                makeCustomSnackbar().setTitle(TITLE_TEXT)
-                        .setSubtitle(SUBTITLE_TEXT).setDuration(Snackbar.LENGTH_LONG),
-                TITLE_TEXT, SUBTITLE_TEXT);
-
-        // Indefinite duration
-        verifySnackbarContent(
-                makeCustomSnackbar().setTitle(TITLE_TEXT)
-                        .setSubtitle(SUBTITLE_TEXT).setDuration(Snackbar.LENGTH_INDEFINITE),
-                TITLE_TEXT, SUBTITLE_TEXT);
-    }
-
-    private void verifyDismissCallback(final ViewInteraction interaction,
-            @Nullable final ViewAction action, @Nullable final DismissAction dismissAction,
-            final int length, @Snackbar.Callback.DismissEvent final int expectedEvent)
-            throws Throwable {
-        final BaseTransientBottomBar.BaseCallback mockCallback =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        final CustomSnackbar snackbar = makeCustomSnackbar().setTitle(TITLE_TEXT)
-                .setSubtitle(SUBTITLE_TEXT).setDuration(length)
-                .addCallback(mockCallback);
-
-        // Show the snackbar
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        // Verify that our onShown has been called
-        verify(mockCallback, times(1)).onShown(snackbar);
-        // and that the snackbar is either shown or queued to be shown
-        assertTrue(snackbar.isShownOrQueued());
-        // and also check that we have the intended title / subtitle displayed somewhere in
-        // our hierarchy
-        onView(withText(TITLE_TEXT)).check(matches(isCompletelyDisplayed()));
-        onView(withText(SUBTITLE_TEXT)).check(matches(isCompletelyDisplayed()));
-
-        // Now perform the UI interaction
-        SnackbarUtils.performActionAndWaitUntilFullyDismissed(snackbar,
-                new SnackbarUtils.TransientBottomBarAction() {
-                    @Override
-                    public void perform() throws Throwable {
-                        if (action != null) {
-                            interaction.perform(action);
-                        } else if (dismissAction != null) {
-                            mActivityTestRule.runOnUiThread(new Runnable() {
-                                @Override
-                                public void run() {
-                                    dismissAction.dismiss(snackbar);
-                                }
-                            });
-                        }
-                    }
-                });
-
-        // Verify that our onDismissed has been called
-        verify(mockCallback, times(1)).onDismissed(snackbar, expectedEvent);
-        verifyNoMoreInteractions(mockCallback);
-        // and that the snackbar is neither shown nor queued to be shown
-        assertFalse(snackbar.isShownOrQueued());
-    }
-
-    @Test
-    @MediumTest
-    public void testDismissViaSwipe() throws Throwable {
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                swipeRight(),
-                null,
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_SWIPE);
-    }
-
-    @Test
-    @MediumTest
-    public void testDismissViaSwipeRtl() throws Throwable {
-        onView(withId(R.id.col)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
-        if (ViewCompat.getLayoutDirection(mCoordinatorLayout) == ViewCompat.LAYOUT_DIRECTION_RTL) {
-            // On devices that support RTL layout, the start-to-end dismiss swipe is done
-            // with swipeLeft() action
-            verifyDismissCallback(
-                    onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                    swipeLeft(),
-                    null,
-                    Snackbar.LENGTH_LONG,
-                    Snackbar.Callback.DISMISS_EVENT_SWIPE);
-        }
-    }
-
-    @Test
-    @MediumTest
-    public void testDismissViaApi() throws Throwable {
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                null,
-                new DismissAction() {
-                    @Override
-                    public void dismiss(CustomSnackbar snackbar) {
-                        snackbar.dismiss();
-                    }
-                },
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_MANUAL);
-    }
-
-    @Test
-    @LargeTest
-    public void testDismissViaTimeout() throws Throwable {
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                null,
-                null,
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_TIMEOUT);
-    }
-
-    @Test
-    @MediumTest
-    public void testDismissViaAnotherSnackbar() throws Throwable {
-        final CustomSnackbar anotherSnackbar =
-                makeCustomSnackbar().setTitle("Different title")
-                        .setSubtitle("Different subtitle").setDuration(Snackbar.LENGTH_SHORT);
-
-        // Our dismiss action is to show another snackbar (and verify that the original snackbar
-        // is now dismissed with CONSECUTIVE event)
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                null,
-                new DismissAction() {
-                    @Override
-                    public void dismiss(CustomSnackbar snackbar) {
-                        anotherSnackbar.show();
-                    }
-                },
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE);
-
-        // And dismiss the second snackbar to get back to clean state
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(anotherSnackbar);
-    }
-
-    @Test
-    @MediumTest
-    public void testMultipleCallbacks() throws Throwable {
-        final CustomSnackbar snackbar = makeCustomSnackbar().setTitle(TITLE_TEXT)
-                .setSubtitle(SUBTITLE_TEXT).setDuration(Snackbar.LENGTH_INDEFINITE);
-        final BaseTransientBottomBar.BaseCallback mockCallback1 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        final BaseTransientBottomBar.BaseCallback mockCallback2 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        snackbar.addCallback(mockCallback1);
-        snackbar.addCallback(mockCallback2);
-
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        verify(mockCallback1, times(1)).onShown(snackbar);
-        verify(mockCallback2, times(1)).onShown(snackbar);
-
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-        verify(mockCallback1, times(1)).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-        verify(mockCallback2, times(1)).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/DesignViewActions.java b/design/tests/src/android/support/design/widget/DesignViewActions.java
deleted file mode 100644
index 4ae608a..0000000
--- a/design/tests/src/android/support/design/widget/DesignViewActions.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import org.hamcrest.Matcher;
-
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.matcher.ViewMatchers;
-import android.view.View;
-
-public final class DesignViewActions {
-
-    private DesignViewActions() {
-    }
-
-    /**
-     * Overwrites the constraints of the specified {@link ViewAction}.
-     */
-    public static ViewAction withCustomConstraints(final ViewAction action,
-            final Matcher<View> constraints) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return constraints;
-            }
-
-            @Override
-            public String getDescription() {
-                return action.getDescription();
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                action.perform(uiController, view);
-            }
-        };
-    }
-
-    public static ViewAction setVisibility(final int visibility) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return ViewMatchers.isEnabled();
-            }
-
-            @Override
-            public String getDescription() {
-                return "Set view visibility";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-                view.setVisibility(visibility);
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/DynamicCoordinatorLayoutActivity.java b/design/tests/src/android/support/design/widget/DynamicCoordinatorLayoutActivity.java
deleted file mode 100644
index f26ef12..0000000
--- a/design/tests/src/android/support/design/widget/DynamicCoordinatorLayoutActivity.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-/**
- * Test activity for testing various aspects of {@link CoordinatorLayout}.
- */
-public class DynamicCoordinatorLayoutActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.dynamic_coordinator_layout;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/FloatingActionButtonActivity.java b/design/tests/src/android/support/design/widget/FloatingActionButtonActivity.java
deleted file mode 100644
index 3a32827..0000000
--- a/design/tests/src/android/support/design/widget/FloatingActionButtonActivity.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class FloatingActionButtonActivity extends BaseTestActivity {
-
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_fab;
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/FloatingActionButtonTest.java b/design/tests/src/android/support/design/widget/FloatingActionButtonTest.java
deleted file mode 100644
index f7e9286..0000000
--- a/design/tests/src/android/support/design/widget/FloatingActionButtonTest.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.FloatingActionButtonActions.hideThenShow;
-import static android.support.design.testutils.FloatingActionButtonActions.setBackgroundTintColor;
-import static android.support.design.testutils.FloatingActionButtonActions.setBackgroundTintList;
-import static android.support.design.testutils.FloatingActionButtonActions.setCompatElevation;
-import static android.support.design.testutils.FloatingActionButtonActions.setCustomSize;
-import static android.support.design.testutils.FloatingActionButtonActions.setImageResource;
-import static android.support.design.testutils.FloatingActionButtonActions.setLayoutGravity;
-import static android.support.design.testutils.FloatingActionButtonActions.setSize;
-import static android.support.design.testutils.FloatingActionButtonActions.showThenHide;
-import static android.support.design.testutils.TestUtilsActions.setClickable;
-import static android.support.design.testutils.TestUtilsActions.setEnabled;
-import static android.support.design.testutils.TestUtilsActions.setSelected;
-import static android.support.design.testutils.TestUtilsMatchers.isPressed;
-import static android.support.design.testutils.TestUtilsMatchers.withFabBackgroundFill;
-import static android.support.design.testutils.TestUtilsMatchers.withFabContentAreaOnMargins;
-import static android.support.design.testutils.TestUtilsMatchers.withFabContentHeight;
-import static android.support.design.testutils.TestUtilsMatchers.withFabCustomSize;
-import static android.support.design.widget.DesignViewActions.setVisibility;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.hamcrest.Matchers.not;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.app.Activity;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.support.design.test.R;
-import android.support.design.testutils.TestUtils;
-import android.support.test.espresso.action.CoordinatesProvider;
-import android.support.test.espresso.action.GeneralSwipeAction;
-import android.support.test.espresso.action.Press;
-import android.support.test.espresso.action.Swipe;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.test.filters.SmallTest;
-import android.support.v4.content.ContextCompat;
-import android.view.Gravity;
-import android.view.View;
-
-import org.junit.Test;
-
-public class FloatingActionButtonTest
-        extends BaseInstrumentationTestCase<FloatingActionButtonActivity> {
-
-    public FloatingActionButtonTest() {
-        super(FloatingActionButtonActivity.class);
-    }
-
-    @SmallTest
-    @Test
-    public void testDefaultBackgroundTint() {
-        final int colorAccent = TestUtils.getThemeAttrColor(
-                mActivityTestRule.getActivity(), R.attr.colorAccent);
-        onView(withId(R.id.fab_standard))
-                .check(matches(withFabBackgroundFill(colorAccent)));
-    }
-
-    @SmallTest
-    @Test
-    public void testSetTintOnDefaultBackgroundTint() {
-        onView(withId(R.id.fab_standard))
-                .perform(setBackgroundTintColor(Color.GREEN))
-                .check(matches(withFabBackgroundFill(Color.GREEN)));
-    }
-
-    @SmallTest
-    @Test
-    public void testDeclaredBackgroundTint() {
-        onView(withId(R.id.fab_tint))
-                .check(matches(withFabBackgroundFill(Color.MAGENTA)));
-    }
-
-    @SmallTest
-    @Test
-    public void testSetTintOnDeclaredBackgroundTint() {
-        onView(withId(R.id.fab_tint))
-                .perform(setBackgroundTintColor(Color.GREEN))
-                .check(matches(withFabBackgroundFill(Color.GREEN)));
-    }
-
-    @SmallTest
-    @Test
-    public void testSetStatefulTintAcrossStateChanges() {
-        final Activity activity = mActivityTestRule.getActivity();
-
-        final ColorStateList tint = ContextCompat.getColorStateList(activity, R.color.fab_tint);
-        final int normal = ContextCompat.getColor(activity, R.color.sand_default);
-        final int notSelected = ContextCompat.getColor(activity, R.color.sand_disabled);
-
-        // First set the background tint list to the ColorStateList
-        onView(withId(R.id.fab_standard))
-                .perform(setBackgroundTintList(tint));
-
-        // Assert that the background is tinted correctly across state changes
-        onView(withId(R.id.fab_standard))
-                .perform(setSelected(true))
-                .check(matches(withFabBackgroundFill(normal)))
-                .perform(setSelected(false))
-                .check(matches(withFabBackgroundFill(notSelected)))
-                .perform(setSelected(true))
-                .check(matches(withFabBackgroundFill(normal)));
-    }
-
-    @SmallTest
-    @Test
-    public void testDeclaredStatefulTintAcrossStateChanges() {
-        final Activity activity = mActivityTestRule.getActivity();
-        final int normal = ContextCompat.getColor(activity, R.color.sand_default);
-        final int disabled = ContextCompat.getColor(activity, R.color.sand_disabled);
-
-        // Assert that the background is tinted correctly across state changes
-        onView(withId(R.id.fab_state_tint))
-                .perform(setSelected(true))
-                .check(matches(withFabBackgroundFill(normal)))
-                .perform(setSelected(false))
-                .check(matches(withFabBackgroundFill(disabled)));
-    }
-
-    @SmallTest
-    @Test
-    public void setVectorDrawableSrc() {
-        onView(withId(R.id.fab_standard))
-                .perform(setImageResource(R.drawable.vector_icon));
-    }
-
-    @SmallTest
-    @Test
-    public void testSetMiniSize() {
-        final int miniSize = mActivityTestRule.getActivity().getResources()
-                .getDimensionPixelSize(R.dimen.fab_mini_height);
-
-        onView(withId(R.id.fab_standard))
-                .perform(setSize(FloatingActionButton.SIZE_MINI))
-                .check(matches(withFabContentHeight(miniSize)));
-    }
-
-    @SmallTest
-    @Test
-    public void testSetSizeToggle() {
-        final int miniSize = mActivityTestRule.getActivity().getResources()
-                .getDimensionPixelSize(R.dimen.fab_mini_height);
-        final int normalSize = mActivityTestRule.getActivity().getResources()
-                .getDimensionPixelSize(R.dimen.fab_normal_height);
-
-        onView(withId(R.id.fab_standard))
-                .perform(setSize(FloatingActionButton.SIZE_MINI))
-                .check(matches(withFabContentHeight(miniSize)));
-
-        onView(withId(R.id.fab_standard))
-                .perform(setSize(FloatingActionButton.SIZE_NORMAL))
-                .check(matches(withFabContentHeight(normalSize)));
-    }
-
-    @SmallTest
-    @Test
-    public void testOffset() {
-        onView(withId(R.id.fab_standard))
-                .perform(setLayoutGravity(Gravity.LEFT | Gravity.TOP))
-                .check(matches(withFabContentAreaOnMargins(Gravity.LEFT | Gravity.TOP)));
-
-        onView(withId(R.id.fab_standard))
-                .perform(setLayoutGravity(Gravity.RIGHT | Gravity.BOTTOM))
-                .check(matches(withFabContentAreaOnMargins(Gravity.RIGHT | Gravity.BOTTOM)));
-    }
-
-    @SmallTest
-    @Test
-    public void testHideShow() {
-        onView(withId(R.id.fab_standard))
-                .perform(setVisibility(View.VISIBLE))
-                .perform(hideThenShow(FloatingActionButtonImpl.SHOW_HIDE_ANIM_DURATION))
-                .check(matches(isDisplayed()));
-    }
-
-    @MediumTest
-    @Test
-    public void testShowHide() {
-        onView(withId(R.id.fab_standard))
-                .perform(setVisibility(View.GONE))
-                .perform(showThenHide(FloatingActionButtonImpl.SHOW_HIDE_ANIM_DURATION))
-                .check(matches(not(isDisplayed())));
-    }
-
-    @LargeTest
-    @Test
-    public void testClickableTouchAndDragOffView() {
-        onView(withId(R.id.fab_standard))
-                .perform(setClickable(true))
-                .perform(new GeneralSwipeAction(
-                        Swipe.SLOW,
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                // Create coordinators that in the center of the FAB's content area
-                                final FloatingActionButton fab = (FloatingActionButton) view;
-
-                                final int[] xy = new int[2];
-                                fab.getLocationOnScreen(xy);
-                                final Rect rect = new Rect();
-                                fab.getContentRect(rect);
-
-                                return new float[] {
-                                        xy[0] + rect.centerX(),
-                                        xy[1] + rect.centerY()
-                                };
-                            }
-                        },
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                // Create coordinators that in the center horizontally, but well
-                                // below the view vertically (by 50% of the height)
-                                final int[] xy = new int[2];
-                                view.getLocationOnScreen(xy);
-
-                                return new float[]{
-                                        xy[0] + (view.getWidth() / 2f),
-                                        xy[1] + (view.getHeight() * 1.5f)
-                                };
-                            }
-                        },
-                        Press.FINGER))
-                .check(matches(not(isPressed())));
-    }
-
-    @MediumTest
-    @Test
-    public void testOnClickListener() {
-        final View.OnClickListener listener = mock(View.OnClickListener.class);
-        final View view = mActivityTestRule.getActivity().findViewById(R.id.fab_standard);
-        view.setOnClickListener(listener);
-
-        // Click on the fab
-        onView(withId(R.id.fab_standard)).perform(click());
-
-        // And verify that the listener was invoked once
-        verify(listener, times(1)).onClick(view);
-    }
-
-    @SmallTest
-    @Test
-    public void testSetCompatElevation() {
-        onView(withId(R.id.fab_standard))
-                .perform(setEnabled(false))
-                .perform(setCompatElevation(0));
-
-        onView(withId(R.id.fab_standard))
-                .perform(setEnabled(true))
-                .perform(setCompatElevation(8));
-    }
-
-    @SmallTest
-    @Test
-    public void testSetCustomSize() {
-        onView(withId(R.id.fab_standard))
-                .perform(setCustomSize(10))
-                .check(matches(withFabCustomSize(10)));
-
-        onView(withId(R.id.fab_standard))
-                .perform(setCustomSize(20))
-                .check(matches(withFabCustomSize(20)));
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/NavigationTestView.java b/design/tests/src/android/support/design/widget/NavigationTestView.java
deleted file mode 100644
index af3d69e..0000000
--- a/design/tests/src/android/support/design/widget/NavigationTestView.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import android.content.Context;
-import android.support.v4.view.WindowInsetsCompat;
-import android.util.AttributeSet;
-
-/**
- * Expose hasSystemWindowInsets() for testing.
- */
-public class NavigationTestView extends NavigationView {
-
-    boolean mHashSystemWindowInsets;
-
-    public NavigationTestView(Context context) {
-        this(context, null);
-    }
-
-    public NavigationTestView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public NavigationTestView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    @Override
-    protected void onInsetsChanged(WindowInsetsCompat insets) {
-        super.onInsetsChanged(insets);
-        mHashSystemWindowInsets = insets.hasSystemWindowInsets();
-    }
-
-    public boolean hasSystemWindowInsets() {
-        return mHashSystemWindowInsets;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/NavigationViewActivity.java b/design/tests/src/android/support/design/widget/NavigationViewActivity.java
deleted file mode 100644
index c3e810c..0000000
--- a/design/tests/src/android/support/design/widget/NavigationViewActivity.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class NavigationViewActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_navigation_view;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/NavigationViewTest.java b/design/tests/src/android/support/design/widget/NavigationViewTest.java
deleted file mode 100755
index 5ac3580..0000000
--- a/design/tests/src/android/support/design/widget/NavigationViewTest.java
+++ /dev/null
@@ -1,651 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import static android.support.design.testutils.DrawerLayoutActions.closeDrawer;
-import static android.support.design.testutils.DrawerLayoutActions.openDrawer;
-import static android.support.design.testutils.NavigationViewActions.addHeaderView;
-import static android.support.design.testutils.NavigationViewActions.inflateHeaderView;
-import static android.support.design.testutils.NavigationViewActions.removeHeaderView;
-import static android.support.design.testutils.NavigationViewActions.removeMenuItem;
-import static android.support.design.testutils.NavigationViewActions.setCheckedItem;
-import static android.support.design.testutils.NavigationViewActions.setIconForMenuItem;
-import static android.support.design.testutils.NavigationViewActions.setItemBackground;
-import static android.support.design.testutils.NavigationViewActions.setItemBackgroundResource;
-import static android.support.design.testutils.NavigationViewActions.setItemIconTintList;
-import static android.support.design.testutils.NavigationViewActions.setItemTextAppearance;
-import static android.support.design.testutils.NavigationViewActions.setItemTextColor;
-import static android.support.design.testutils.TestUtilsActions.reinflateMenu;
-import static android.support.design.testutils.TestUtilsActions.restoreHierarchyState;
-import static android.support.design.testutils.TestUtilsMatchers.isActionViewOf;
-import static android.support.design.testutils.TestUtilsMatchers.isChildOfA;
-import static android.support.design.testutils.TestUtilsMatchers.withBackgroundFill;
-import static android.support.design.testutils.TestUtilsMatchers.withStartDrawableFilledWith;
-import static android.support.design.testutils.TestUtilsMatchers.withTextColor;
-import static android.support.design.testutils.TestUtilsMatchers.withTextSize;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.Visibility;
-import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isChecked;
-import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.isNotChecked;
-import static android.support.test.espresso.matcher.ViewMatchers.withEffectiveVisibility;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-
-import static org.hamcrest.core.AllOf.allOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.content.res.Resources;
-import android.os.Build;
-import android.os.Parcelable;
-import android.support.annotation.ColorInt;
-import android.support.annotation.IdRes;
-import android.support.design.test.R;
-import android.support.design.testutils.TestDrawable;
-import android.support.test.filters.LargeTest;
-import android.support.v4.content.res.ResourcesCompat;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.widget.DrawerLayout;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.SwitchCompat;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.TextView;
-
-import org.hamcrest.Matcher;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@LargeTest
-public class NavigationViewTest
-        extends BaseInstrumentationTestCase<NavigationViewActivity> {
-    private static final int[] MENU_CONTENT_ITEM_IDS = { R.id.destination_home,
-            R.id.destination_profile, R.id.destination_people, R.id.destination_settings };
-    private Map<Integer, String> mMenuStringContent;
-
-    private DrawerLayout mDrawerLayout;
-
-    private NavigationTestView mNavigationView;
-
-    public NavigationViewTest() {
-        super(NavigationViewActivity.class);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        final NavigationViewActivity activity = mActivityTestRule.getActivity();
-        mDrawerLayout = (DrawerLayout) activity.findViewById(R.id.drawer_layout);
-        mNavigationView = (NavigationTestView) mDrawerLayout.findViewById(R.id.start_drawer);
-
-        // Close the drawer to reset the state for the next test
-        onView(withId(R.id.drawer_layout)).perform(closeDrawer(GravityCompat.START));
-
-        final Resources res = activity.getResources();
-        mMenuStringContent = new HashMap<>(MENU_CONTENT_ITEM_IDS.length);
-        mMenuStringContent.put(R.id.destination_home, res.getString(R.string.navigate_home));
-        mMenuStringContent.put(R.id.destination_profile, res.getString(R.string.navigate_profile));
-        mMenuStringContent.put(R.id.destination_people, res.getString(R.string.navigate_people));
-        mMenuStringContent.put(R.id.destination_settings,
-                res.getString(R.string.navigate_settings));
-    }
-
-    @Test
-    public void testBasics() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        // Check the contents of the Menu object
-        final Menu menu = mNavigationView.getMenu();
-        assertNotNull("Menu should not be null", menu);
-        assertEquals("Should have matching number of items", MENU_CONTENT_ITEM_IDS.length + 1,
-                menu.size());
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            final MenuItem currItem = menu.getItem(i);
-            assertEquals("ID for Item #" + i, MENU_CONTENT_ITEM_IDS[i], currItem.getItemId());
-        }
-
-        // Check that we have the expected menu items in our NavigationView
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            onView(allOf(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i])),
-                    isDescendantOfA(withId(R.id.start_drawer)))).check(matches(isDisplayed()));
-        }
-    }
-
-    @Test
-    public void testWillNotDraw() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        if (Build.VERSION.SDK_INT >= 21) {
-            if (mNavigationView.hasSystemWindowInsets()) {
-                assertFalse(mNavigationView.willNotDraw());
-            } else {
-                assertTrue(mNavigationView.willNotDraw());
-            }
-        } else {
-            assertTrue(mNavigationView.willNotDraw());
-        }
-    }
-
-    @Test
-    public void testTextAppearance() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        final int defaultTextSize = res.getDimensionPixelSize(R.dimen.text_medium_size);
-
-        // Check the default style of the menu items in our NavigationView
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            onView(allOf(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i])),
-                    isDescendantOfA(withId(R.id.start_drawer)))).check(
-                    matches(withTextSize(defaultTextSize)));
-        }
-
-        // Set a new text appearance on our NavigationView
-        onView(withId(R.id.start_drawer)).perform(setItemTextAppearance(R.style.TextSmallStyle));
-
-        // And check that all the menu items have the new style
-        final int newTextSize = res.getDimensionPixelSize(R.dimen.text_small_size);
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            onView(allOf(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i])),
-                    isDescendantOfA(withId(R.id.start_drawer)))).check(
-                    matches(withTextSize(newTextSize)));
-        }
-    }
-
-    @Test
-    public void testTextColor() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        final @ColorInt int defaultTextColor = ResourcesCompat.getColor(res,
-                R.color.emerald_text, null);
-
-        // Check the default text color of the menu items in our NavigationView
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            onView(allOf(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i])),
-                    isDescendantOfA(withId(R.id.start_drawer)))).check(
-                    matches(withTextColor(defaultTextColor)));
-        }
-
-        // Set a new text color on our NavigationView
-        onView(withId(R.id.start_drawer)).perform(setItemTextColor(
-                ResourcesCompat.getColorStateList(res, R.color.color_state_list_lilac, null)));
-
-        // And check that all the menu items have the new color
-        final @ColorInt int newTextColor = ResourcesCompat.getColor(res,
-                R.color.lilac_default, null);
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            onView(allOf(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i])),
-                    isDescendantOfA(withId(R.id.start_drawer)))).check(
-                    matches(withTextColor(newTextColor)));
-        }
-    }
-
-    @Test
-    public void testBackground() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        final @ColorInt int defaultFillColor = ResourcesCompat.getColor(res,
-                R.color.sand_default, null);
-
-        // Check the default fill color of the menu items in our NavigationView
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            // Note that here we're tying ourselves to the implementation details of the
-            // internal structure of the NavigationView. Specifically, we're looking at the
-            // direct child of RecyclerView which is expected to have the background set
-            // on it. If the internal implementation of NavigationView changes, the second
-            // Matcher below will need to be tweaked.
-            Matcher menuItemMatcher = allOf(
-                    hasDescendant(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i]))),
-                    isChildOfA(isAssignableFrom(RecyclerView.class)),
-                    isDescendantOfA(withId(R.id.start_drawer)));
-
-            onView(menuItemMatcher).check(matches(withBackgroundFill(defaultFillColor)));
-        }
-
-        // Set a new background (flat fill color) on our NavigationView
-        onView(withId(R.id.start_drawer)).perform(setItemBackgroundResource(
-                R.drawable.test_background_blue));
-
-        // And check that all the menu items have the new fill
-        final @ColorInt int newFillColorBlue = ResourcesCompat.getColor(res,
-                R.color.test_blue, null);
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            Matcher menuItemMatcher = allOf(
-                    hasDescendant(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i]))),
-                    isChildOfA(isAssignableFrom(RecyclerView.class)),
-                    isDescendantOfA(withId(R.id.start_drawer)));
-
-            onView(menuItemMatcher).check(matches(withBackgroundFill(newFillColorBlue)));
-        }
-
-        // Set another new background on our NavigationView
-        onView(withId(R.id.start_drawer)).perform(setItemBackground(
-                ResourcesCompat.getDrawable(res, R.drawable.test_background_green, null)));
-
-        // And check that all the menu items have the new fill
-        final @ColorInt int newFillColorGreen = ResourcesCompat.getColor(res,
-                R.color.test_green, null);
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            Matcher menuItemMatcher = allOf(
-                    hasDescendant(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i]))),
-                    isChildOfA(isAssignableFrom(RecyclerView.class)),
-                    isDescendantOfA(withId(R.id.start_drawer)));
-
-            onView(menuItemMatcher).check(matches(withBackgroundFill(newFillColorGreen)));
-        }
-    }
-
-    @Test
-    public void testIconTinting() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        final @ColorInt int redFill = ResourcesCompat.getColor(res, R.color.test_red, null);
-        final @ColorInt int greenFill = ResourcesCompat.getColor(res, R.color.test_green, null);
-        final @ColorInt int blueFill = ResourcesCompat.getColor(res, R.color.test_blue, null);
-        final int iconSize = res.getDimensionPixelSize(R.dimen.drawable_small_size);
-        onView(withId(R.id.start_drawer)).perform(setIconForMenuItem(R.id.destination_home,
-                new TestDrawable(redFill, iconSize, iconSize)));
-        onView(withId(R.id.start_drawer)).perform(setIconForMenuItem(R.id.destination_profile,
-                new TestDrawable(greenFill, iconSize, iconSize)));
-        onView(withId(R.id.start_drawer)).perform(setIconForMenuItem(R.id.destination_people,
-                new TestDrawable(blueFill, iconSize, iconSize)));
-
-        final @ColorInt int defaultTintColor = ResourcesCompat.getColor(res,
-                R.color.emerald_translucent, null);
-
-        // We're allowing a margin of error in checking the color of the items' icons.
-        // This is due to the translucent color being used in the icon tinting
-        // and off-by-one discrepancies of SRC_IN when it's compositing
-        // translucent color. Note that all the checks below are written for the current
-        // logic on NavigationView that uses the default SRC_IN tint mode - effectively
-        // replacing all non-transparent pixels in the destination (original icon) with
-        // our translucent tint color.
-        final int allowedComponentVariance = 1;
-
-        // Note that here we're tying ourselves to the implementation details of the
-        // internal structure of the NavigationView. Specifically, we're checking the
-        // start drawable of the text view with the specific text. If the internal
-        // implementation of NavigationView changes, the second Matcher in the lookups
-        // below will need to be tweaked.
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_home)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(defaultTintColor, allowedComponentVariance)));
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(defaultTintColor, allowedComponentVariance)));
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(defaultTintColor, allowedComponentVariance)));
-
-        final @ColorInt int newTintColor = ResourcesCompat.getColor(res,
-                R.color.red_translucent, null);
-
-        onView(withId(R.id.start_drawer)).perform(setItemIconTintList(
-                ResourcesCompat.getColorStateList(res, R.color.color_state_list_red_translucent,
-                        null)));
-        // Check that all menu items with icons now have icons tinted with the newly set color
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_home)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(newTintColor, allowedComponentVariance)));
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(newTintColor, allowedComponentVariance)));
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(newTintColor, allowedComponentVariance)));
-
-        // And now remove all icon tinting
-        onView(withId(R.id.start_drawer)).perform(setItemIconTintList(null));
-        // And verify that all menu items with icons now have the original colors for their icons.
-        // Note that since there is no tinting at this point, we don't allow any color variance
-        // in these checks.
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_home)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(redFill, 0)));
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(greenFill, 0)));
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.start_drawer)))).check(matches(
-                    withStartDrawableFilledWith(blueFill, 0)));
-    }
-
-    /**
-     * Gets the list of header IDs (which can be empty) and verifies that the actual header content
-     * of our navigation view matches the expected header content.
-     */
-    private void verifyHeaders(@IdRes int ... expectedHeaderIds) {
-        final int expectedHeaderCount = (expectedHeaderIds != null) ? expectedHeaderIds.length : 0;
-        final int actualHeaderCount = mNavigationView.getHeaderCount();
-        assertEquals("Header count", expectedHeaderCount, actualHeaderCount);
-
-        if (expectedHeaderCount > 0) {
-            for (int i = 0; i < expectedHeaderCount; i++) {
-                final View currentHeader = mNavigationView.getHeaderView(i);
-                assertEquals("Header at #" + i, expectedHeaderIds[i], currentHeader.getId());
-            }
-        }
-    }
-
-    @Test
-    public void testHeaders() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        // We should have no headers at the start
-        verifyHeaders();
-
-        // Inflate one header and check that it's there in the navigation view
-        onView(withId(R.id.start_drawer)).perform(
-                inflateHeaderView(R.layout.design_navigation_view_header1));
-        verifyHeaders(R.id.header1);
-
-        final LayoutInflater inflater = LayoutInflater.from(mActivityTestRule.getActivity());
-
-        // Add one more header and check that it's there in the navigation view
-        onView(withId(R.id.start_drawer)).perform(
-                addHeaderView(inflater, R.layout.design_navigation_view_header2));
-        verifyHeaders(R.id.header1, R.id.header2);
-
-        final View header1 = mNavigationView.findViewById(R.id.header1);
-        // Remove the first header and check that we still have the second header
-        onView(withId(R.id.start_drawer)).perform(removeHeaderView(header1));
-        verifyHeaders(R.id.header2);
-
-        // Add one more header and check that we now have two headers
-        onView(withId(R.id.start_drawer)).perform(
-                inflateHeaderView(R.layout.design_navigation_view_header3));
-        verifyHeaders(R.id.header2, R.id.header3);
-
-        // Add another "copy" of the header from the just-added layout and check that we now
-        // have three headers
-        onView(withId(R.id.start_drawer)).perform(
-                addHeaderView(inflater, R.layout.design_navigation_view_header3));
-        verifyHeaders(R.id.header2, R.id.header3, R.id.header3);
-    }
-
-    @Test
-    public void testHeaderState() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        // Inflate a header with a toggle switch and check that it's there in the navigation view
-        onView(withId(R.id.start_drawer)).perform(
-                inflateHeaderView(R.layout.design_navigation_view_header_switch));
-        verifyHeaders(R.id.header_frame);
-
-        onView(withId(R.id.header_toggle))
-                .check(matches(isNotChecked()))
-                .perform(click())
-                .check(matches(isChecked()));
-
-        // Save the current state
-        SparseArray<Parcelable> container = new SparseArray<>();
-        mNavigationView.saveHierarchyState(container);
-
-        // Remove the header
-        final View header = mNavigationView.findViewById(R.id.header_frame);
-        onView(withId(R.id.start_drawer)).perform(removeHeaderView(header));
-        verifyHeaders();
-
-        // Inflate the header again
-        onView(withId(R.id.start_drawer)).perform(
-                inflateHeaderView(R.layout.design_navigation_view_header_switch));
-        verifyHeaders(R.id.header_frame);
-
-        // Restore the saved state
-        onView(withId(R.id.start_drawer)).perform(
-                restoreHierarchyState(container));
-
-        // Confirm that the state was restored
-        onView(withId(R.id.header_toggle))
-                .check(matches(isChecked()));
-    }
-
-    @Test
-    public void testActionViewState() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        final Menu menu = mNavigationView.getMenu();
-        onView(isActionViewOf(menu, R.id.destination_people))
-                .check(matches(isNotChecked())) // Not checked by default
-                .perform(click())               // Check it
-                .check(matches(isChecked()));
-
-        // Remove the other action view to simulate the case where it is not yet inflated
-        onView(isActionViewOf(menu, R.id.destination_custom))
-                .check(matches(isDisplayed()));
-        onView(withId(R.id.start_drawer))
-                .perform(removeMenuItem(R.id.destination_custom));
-
-        // Save the current state
-        SparseArray<Parcelable> container = new SparseArray<>();
-        mNavigationView.saveHierarchyState(container);
-
-        // Restore the saved state
-        onView(withId(R.id.start_drawer))
-                .perform(reinflateMenu(R.menu.navigation_view_content))
-                .perform(restoreHierarchyState(container));
-
-        // Checked state should be restored
-        onView(isActionViewOf(menu, R.id.destination_people))
-                .check(matches(isChecked()));
-    }
-
-    @Test
-    public void testNavigationSelectionListener() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        // Click one of our items
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.start_drawer)))).perform(click());
-        // Check that the drawer is still open
-        assertTrue("Drawer is still open after click",
-                mDrawerLayout.isDrawerOpen(GravityCompat.START));
-
-        // Register a listener
-        NavigationView.OnNavigationItemSelectedListener mockedListener =
-                mock(NavigationView.OnNavigationItemSelectedListener.class);
-        mNavigationView.setNavigationItemSelectedListener(mockedListener);
-
-        // Click one of our items
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_profile)),
-                isDescendantOfA(withId(R.id.start_drawer)))).perform(click());
-        // Check that the drawer is still open
-        assertTrue("Drawer is still open after click",
-                mDrawerLayout.isDrawerOpen(GravityCompat.START));
-        // And that our listener has been notified of the click
-        verify(mockedListener, times(1)).onNavigationItemSelected(
-                mNavigationView.getMenu().findItem(R.id.destination_profile));
-
-        // Set null listener to test that the next click is not going to notify the
-        // previously set listener
-        mNavigationView.setNavigationItemSelectedListener(null);
-
-        // Click one of our items
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_settings)),
-                isDescendantOfA(withId(R.id.start_drawer)))).perform(click());
-        // Check that the drawer is still open
-        assertTrue("Drawer is still open after click",
-                mDrawerLayout.isDrawerOpen(GravityCompat.START));
-        // And that our previous listener has not been notified of the click
-        verifyNoMoreInteractions(mockedListener);
-    }
-
-    private void verifyCheckedAppearance(@IdRes int checkedItemId,
-            @ColorInt int uncheckedItemForeground, @ColorInt int checkedItemForeground,
-            @ColorInt int uncheckedItemBackground, @ColorInt int checkedItemBackground) {
-        for (int i = 0; i < MENU_CONTENT_ITEM_IDS.length; i++) {
-            final boolean expectedToBeChecked = (MENU_CONTENT_ITEM_IDS[i] == checkedItemId);
-            final @ColorInt int expectedItemForeground =
-                    expectedToBeChecked ? checkedItemForeground : uncheckedItemForeground;
-            final @ColorInt int expectedItemBackground =
-                    expectedToBeChecked ? checkedItemBackground : uncheckedItemBackground;
-
-            // For the background fill check we need to select a view that has its background
-            // set by the current implementation (see disclaimer in testBackground)
-            Matcher menuItemMatcher = allOf(
-                    hasDescendant(withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i]))),
-                    isChildOfA(isAssignableFrom(RecyclerView.class)),
-                    isDescendantOfA(withId(R.id.start_drawer)));
-            onView(menuItemMatcher).check(matches(withBackgroundFill(expectedItemBackground)));
-
-            // And for the foreground color check we need to select a view with the text content
-            Matcher menuItemTextMatcher = allOf(
-                    withText(mMenuStringContent.get(MENU_CONTENT_ITEM_IDS[i])),
-                    isDescendantOfA(withId(R.id.start_drawer)));
-            onView(menuItemTextMatcher).check(matches(withTextColor(expectedItemForeground)));
-        }
-    }
-
-    @Test
-    public void testCheckedAppearance() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        // Reconfigure our navigation view to use foreground (text) and background visuals
-        // with explicitly different colors for the checked state
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        onView(withId(R.id.start_drawer)).perform(setItemTextColor(
-                ResourcesCompat.getColorStateList(res, R.color.color_state_list_sand, null)));
-        onView(withId(R.id.start_drawer)).perform(setItemBackgroundResource(
-                R.drawable.test_drawable_state_list));
-
-        final @ColorInt int uncheckedItemForeground = ResourcesCompat.getColor(res,
-                R.color.sand_default, null);
-        final @ColorInt int checkedItemForeground = ResourcesCompat.getColor(res,
-                R.color.sand_checked, null);
-        final @ColorInt int uncheckedItemBackground = ResourcesCompat.getColor(res,
-                R.color.test_green, null);
-        final @ColorInt int checkedItemBackground = ResourcesCompat.getColor(res,
-                R.color.test_blue, null);
-
-        // Verify that all items are rendered with unchecked visuals
-        verifyCheckedAppearance(0, uncheckedItemForeground, checkedItemForeground,
-                uncheckedItemBackground, checkedItemBackground);
-
-        // Mark one of the items as checked
-        onView(withId(R.id.start_drawer)).perform(setCheckedItem(R.id.destination_profile));
-        // And verify that it's now rendered with checked visuals
-        verifyCheckedAppearance(R.id.destination_profile,
-                uncheckedItemForeground, checkedItemForeground,
-                uncheckedItemBackground, checkedItemBackground);
-
-        // Register a navigation listener that "marks" the selected item
-        mNavigationView.setNavigationItemSelectedListener(
-                new NavigationView.OnNavigationItemSelectedListener() {
-                    @Override
-                    public boolean onNavigationItemSelected(MenuItem item) {
-                        return true;
-                    }
-                });
-
-        // Click one of our items
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_people)),
-                isDescendantOfA(withId(R.id.start_drawer)))).perform(click());
-        // and verify that it's now checked
-        verifyCheckedAppearance(R.id.destination_people,
-                uncheckedItemForeground, checkedItemForeground,
-                uncheckedItemBackground, checkedItemBackground);
-
-        // Register a navigation listener that doesn't "mark" the selected item
-        mNavigationView.setNavigationItemSelectedListener(
-                new NavigationView.OnNavigationItemSelectedListener() {
-                    @Override
-                    public boolean onNavigationItemSelected(MenuItem item) {
-                        return false;
-                    }
-                });
-
-        // Click another items
-        onView(allOf(withText(mMenuStringContent.get(R.id.destination_settings)),
-                isDescendantOfA(withId(R.id.start_drawer)))).perform(click());
-        // and verify that the checked state remains on the previously clicked item
-        // since the current navigation listener returns false from its callback
-        // implementation
-        verifyCheckedAppearance(R.id.destination_people,
-                uncheckedItemForeground, checkedItemForeground,
-                uncheckedItemBackground, checkedItemBackground);
-    }
-
-    @Test
-    public void testActionLayout() {
-        // Open our drawer
-        onView(withId(R.id.drawer_layout)).perform(openDrawer(GravityCompat.START));
-
-        // There are four conditions to "find" the menu item with action layout (switch):
-        // 1. Is in the NavigationView
-        // 2. Is direct child of a class that extends RecyclerView
-        // 3. Has a child with "people" text
-        // 4. Has fully displayed child that extends SwitchCompat
-        // Note that condition 2 makes a certain assumption about the internal implementation
-        // details of the NavigationMenu, while conditions 3 and 4 aim to be as generic as
-        // possible and to not rely on the internal details of the current layout implementation
-        // of an individual menu item in NavigationMenu.
-        Matcher menuItemMatcher = allOf(
-                isDescendantOfA(withId(R.id.start_drawer)),
-                isChildOfA(isAssignableFrom(RecyclerView.class)),
-                hasDescendant(withText(mMenuStringContent.get(R.id.destination_people))),
-                hasDescendant(allOf(
-                        isAssignableFrom(SwitchCompat.class),
-                        isCompletelyDisplayed())));
-
-        // While we don't need to perform any action on our row, the invocation of perform()
-        // makes our matcher actually run. If for some reason NavigationView fails to inflate and
-        // display our SwitchCompat action layout, the next line will fail in the matcher pass.
-        onView(menuItemMatcher).perform(click());
-
-        // Check that the full custom view is displayed without title and icon.
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        Matcher customItemMatcher = allOf(
-                isDescendantOfA(withId(R.id.start_drawer)),
-                isChildOfA(isAssignableFrom(RecyclerView.class)),
-                hasDescendant(withText(res.getString(R.string.navigate_custom))),
-                hasDescendant(allOf(
-                        isAssignableFrom(TextView.class),
-                        withEffectiveVisibility(Visibility.GONE))));
-        onView(customItemMatcher).perform(click());
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/SnackbarActivity.java b/design/tests/src/android/support/design/widget/SnackbarActivity.java
deleted file mode 100644
index 5d8e118..0000000
--- a/design/tests/src/android/support/design/widget/SnackbarActivity.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class SnackbarActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.test_design_snackbar;
-    }
-}
\ No newline at end of file
diff --git a/design/tests/src/android/support/design/widget/SnackbarActivityWithFAB.java b/design/tests/src/android/support/design/widget/SnackbarActivityWithFAB.java
deleted file mode 100644
index 817af4b..0000000
--- a/design/tests/src/android/support/design/widget/SnackbarActivityWithFAB.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class SnackbarActivityWithFAB extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.test_design_snackbar_fab;
-    }
-}
\ No newline at end of file
diff --git a/design/tests/src/android/support/design/widget/SnackbarActivityWithTranslucentNavBar.java b/design/tests/src/android/support/design/widget/SnackbarActivityWithTranslucentNavBar.java
deleted file mode 100644
index 7ccf69c..0000000
--- a/design/tests/src/android/support/design/widget/SnackbarActivityWithTranslucentNavBar.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class SnackbarActivityWithTranslucentNavBar extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.test_design_snackbar;
-    }
-}
\ No newline at end of file
diff --git a/design/tests/src/android/support/design/widget/SnackbarTest.java b/design/tests/src/android/support/design/widget/SnackbarTest.java
deleted file mode 100644
index 0d0a891..0000000
--- a/design/tests/src/android/support/design/widget/SnackbarTest.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.TestUtilsActions.setLayoutDirection;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.action.ViewActions.swipeLeft;
-import static android.support.test.espresso.action.ViewActions.swipeRight;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-
-import static org.hamcrest.core.AllOf.allOf;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.content.res.Resources;
-import android.support.annotation.Nullable;
-import android.support.annotation.StringRes;
-import android.support.design.test.R;
-import android.support.design.testutils.SnackbarUtils;
-import android.support.test.espresso.ViewAction;
-import android.support.test.espresso.ViewInteraction;
-import android.support.test.espresso.action.CoordinatesProvider;
-import android.support.test.espresso.action.GeneralSwipeAction;
-import android.support.test.espresso.action.Press;
-import android.support.test.espresso.action.Swipe;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.v4.view.ViewCompat;
-import android.text.TextUtils;
-import android.view.View;
-
-import org.junit.Before;
-import org.junit.Test;
-
-@MediumTest
-public class SnackbarTest extends BaseInstrumentationTestCase<SnackbarActivity> {
-    private static final String MESSAGE_TEXT = "Test Message";
-    private static final @StringRes int MESSAGE_ID = R.string.snackbar_text;
-    private static final String ACTION_TEXT = "Action";
-    private static final @StringRes int ACTION_ID = R.string.snackbar_action;
-
-    private CoordinatorLayout mCoordinatorLayout;
-
-    private interface DismissAction {
-        void dismiss(Snackbar snackbar);
-    }
-
-    public SnackbarTest() {
-        super(SnackbarActivity.class);
-    }
-
-    @Before
-    public void setup() {
-        mCoordinatorLayout =
-                (CoordinatorLayout) mActivityTestRule.getActivity().findViewById(R.id.col);
-    }
-
-    private void verifySnackbarContent(final Snackbar snackbar, final String expectedMessage,
-            final String expectedAction) throws Throwable {
-        // Show the snackbar
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-
-        // Verify that we're showing the message
-        withText(expectedMessage).matches(allOf(
-                isDescendantOfA(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                isCompletelyDisplayed()));
-
-        // If the action is not empty, verify that we're showing it
-        if (!TextUtils.isEmpty(expectedAction)) {
-            withText(expectedAction).matches(allOf(
-                    isDescendantOfA(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                    isCompletelyDisplayed()));
-        }
-
-        // Dismiss the snackbar
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-    }
-
-    @LargeTest
-    @Test
-    public void testBasicContent() throws Throwable {
-        // Verify different combinations of snackbar content (message and action) and duration
-
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        final String resolvedMessage = res.getString(MESSAGE_ID);
-        final String resolvedAction = res.getString(ACTION_ID);
-
-        // String message and no action
-        verifySnackbarContent(
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_SHORT),
-                MESSAGE_TEXT, null);
-
-        // Resource message and no action
-        verifySnackbarContent(
-                Snackbar.make(mCoordinatorLayout, MESSAGE_ID, Snackbar.LENGTH_LONG),
-                resolvedMessage, null);
-
-        // String message and string action
-        verifySnackbarContent(
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_INDEFINITE)
-                        .setAction(ACTION_TEXT, mock(View.OnClickListener.class)),
-                MESSAGE_TEXT, ACTION_TEXT);
-
-        // String message and resource action
-        verifySnackbarContent(
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_SHORT)
-                        .setAction(ACTION_ID, mock(View.OnClickListener.class)),
-                MESSAGE_TEXT, resolvedAction);
-
-        // Resource message and resource action
-        verifySnackbarContent(
-                Snackbar.make(mCoordinatorLayout, MESSAGE_ID, Snackbar.LENGTH_LONG)
-                        .setAction(ACTION_ID, mock(View.OnClickListener.class)),
-                resolvedMessage, resolvedAction);
-    }
-
-    private void verifyDismissCallback(final ViewInteraction interaction,
-            final @Nullable ViewAction action, final @Nullable DismissAction dismissAction,
-            final int length, @Snackbar.Callback.DismissEvent final int expectedEvent)
-            throws Throwable {
-        final BaseTransientBottomBar.BaseCallback mockCallback =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        final Snackbar snackbar = Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, length)
-                .setAction(ACTION_TEXT, mock(View.OnClickListener.class))
-                .addCallback(mockCallback);
-
-        // Show the snackbar
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        // Verify that our onShown has been called
-        verify(mockCallback, times(1)).onShown(snackbar);
-        // and that the snackbar is either shown or queued to be shown
-        assertTrue(snackbar.isShownOrQueued());
-        // and also check that we have the intended message / action displayed somewhere in
-        // our hierarchy
-        onView(withText(MESSAGE_TEXT)).check(matches(isCompletelyDisplayed()));
-        onView(withText(ACTION_TEXT)).check(matches(isCompletelyDisplayed()));
-
-        // Now perform the UI interaction
-        SnackbarUtils.performActionAndWaitUntilFullyDismissed(snackbar,
-                new SnackbarUtils.TransientBottomBarAction() {
-                    @Override
-                    public void perform() throws Throwable {
-                        if (action != null) {
-                            interaction.perform(action);
-                        } else if (dismissAction != null) {
-                            mActivityTestRule.runOnUiThread(new Runnable() {
-                                @Override
-                                public void run() {
-                                    dismissAction.dismiss(snackbar);
-                                }
-                            });
-                        }
-                    }
-                });
-
-        // Verify that our onDismissed has been called
-        verify(mockCallback, times(1)).onDismissed(snackbar, expectedEvent);
-        verifyNoMoreInteractions(mockCallback);
-        // and that the snackbar is neither shown nor queued to be shown
-        assertFalse(snackbar.isShownOrQueued());
-    }
-
-    @Test
-    public void testDismissViaActionClick() throws Throwable {
-        verifyDismissCallback(
-                onView(withId(R.id.snackbar_action)),
-                click(),
-                null,
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_ACTION);
-    }
-
-    @Test
-    public void testDismissViaSwipe() throws Throwable {
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                swipeRight(),
-                null,
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_SWIPE);
-    }
-
-    @Test
-    public void testDismissViaSwipeRtl() throws Throwable {
-        onView(withId(R.id.col)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
-        if (ViewCompat.getLayoutDirection(mCoordinatorLayout) == ViewCompat.LAYOUT_DIRECTION_RTL) {
-            // On devices that support RTL layout, the start-to-end dismiss swipe is done
-            // with swipeLeft() action
-            verifyDismissCallback(
-                    onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                    swipeLeft(),
-                    null,
-                    Snackbar.LENGTH_LONG,
-                    Snackbar.Callback.DISMISS_EVENT_SWIPE);
-        }
-    }
-
-    @Test
-    public void testDismissViaApi() throws Throwable {
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                null,
-                new DismissAction() {
-                    @Override
-                    public void dismiss(Snackbar snackbar) {
-                        snackbar.dismiss();
-                    }
-                },
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_MANUAL);
-    }
-
-    @LargeTest
-    @Test
-    public void testDismissViaTimeout() throws Throwable {
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                null,
-                null,
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_TIMEOUT);
-    }
-
-    @LargeTest
-    @Test
-    public void testSwipeUpDismissesViaTimeout() throws Throwable {
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                // This is a swipe up, from the middle center of the view, to above the view
-                // (outside the bounds)
-                new GeneralSwipeAction(
-                        Swipe.SLOW,
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                final int[] loc = new int[2];
-                                view.getLocationOnScreen(loc);
-                                return new float[]{
-                                        loc[0] + view.getWidth() / 2,
-                                        loc[1] + view.getHeight() / 2};
-                            }
-                        },
-                        new CoordinatesProvider() {
-                            @Override
-                            public float[] calculateCoordinates(View view) {
-                                final int[] loc = new int[2];
-                                view.getLocationOnScreen(loc);
-                                return new float[]{
-                                        loc[0] + view.getWidth() / 2,
-                                        loc[1] - view.getHeight()};
-                            }
-                        },
-                        Press.FINGER
-                ),
-                null,
-                Snackbar.LENGTH_SHORT,
-                Snackbar.Callback.DISMISS_EVENT_TIMEOUT);
-    }
-
-    @Test
-    public void testDismissViaAnotherSnackbar() throws Throwable {
-        final Snackbar anotherSnackbar =
-                Snackbar.make(mCoordinatorLayout, "A different message", Snackbar.LENGTH_SHORT);
-
-        // Our dismiss action is to show another snackbar (and verify that the original snackbar
-        // is now dismissed with CONSECUTIVE event)
-        verifyDismissCallback(
-                onView(isAssignableFrom(Snackbar.SnackbarLayout.class)),
-                null,
-                new DismissAction() {
-                    @Override
-                    public void dismiss(Snackbar snackbar) {
-                        anotherSnackbar.show();
-                    }
-                },
-                Snackbar.LENGTH_LONG,
-                Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE);
-
-        // And dismiss the second snackbar to get back to clean state
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(anotherSnackbar);
-    }
-
-    @Test
-    public void testActionClickListener() {
-        final View.OnClickListener mockClickListener = mock(View.OnClickListener.class);
-        final Snackbar snackbar =
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_SHORT)
-                    .setAction(ACTION_TEXT, mockClickListener);
-
-        // Show the snackbar
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        // perform the action click
-        onView(withId(R.id.snackbar_action)).perform(click());
-        // and verify that our click listener has been called
-        verify(mockClickListener, times(1)).onClick(any(View.class));
-    }
-
-    @Test
-    public void testSetCallback() throws Throwable {
-        final Snackbar snackbar =
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_INDEFINITE)
-                        .setAction(ACTION_TEXT, mock(View.OnClickListener.class));
-        final Snackbar.Callback mockCallback = spy(new Snackbar.Callback());
-        snackbar.setCallback(mockCallback);
-
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        verify(mockCallback, times(1)).onShown(snackbar);
-
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-        verify(mockCallback, times(1)).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-    }
-
-    @Test
-    public void testSingleCallback() throws Throwable {
-        final Snackbar snackbar =
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_INDEFINITE)
-                        .setAction(ACTION_TEXT, mock(View.OnClickListener.class));
-        final BaseTransientBottomBar.BaseCallback mockCallback1 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        final BaseTransientBottomBar.BaseCallback mockCallback2 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        snackbar.addCallback(mockCallback1);
-
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        verify(mockCallback1, times(1)).onShown(snackbar);
-        verify(mockCallback2, never()).onShown(snackbar);
-
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-        verify(mockCallback1, times(1)).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-        verify(mockCallback2, never()).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-    }
-
-    @Test
-    public void testMultipleCallbacks() throws Throwable {
-        final Snackbar snackbar =
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_INDEFINITE)
-                        .setAction(ACTION_TEXT, mock(View.OnClickListener.class));
-        final BaseTransientBottomBar.BaseCallback mockCallback1 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        final BaseTransientBottomBar.BaseCallback mockCallback2 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        snackbar.addCallback(mockCallback1);
-        snackbar.addCallback(mockCallback2);
-
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        verify(mockCallback1, times(1)).onShown(snackbar);
-        verify(mockCallback2, times(1)).onShown(snackbar);
-
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-        verify(mockCallback1, times(1)).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-        verify(mockCallback2, times(1)).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-    }
-
-    @Test
-    public void testMultipleCallbacksWithRemoval() throws Throwable {
-        final Snackbar snackbar =
-                Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT, Snackbar.LENGTH_INDEFINITE)
-                        .setAction(ACTION_TEXT, mock(View.OnClickListener.class));
-        final BaseTransientBottomBar.BaseCallback mockCallback1 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        final BaseTransientBottomBar.BaseCallback mockCallback2 =
-                mock(BaseTransientBottomBar.BaseCallback.class);
-        snackbar.addCallback(mockCallback1);
-        snackbar.addCallback(mockCallback2);
-
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-        verify(mockCallback1, times(1)).onShown(snackbar);
-        verify(mockCallback2, times(1)).onShown(snackbar);
-
-        snackbar.removeCallback(mockCallback2);
-
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-        verify(mockCallback1, times(1)).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-        verify(mockCallback2, never()).onDismissed(snackbar,
-                BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_MANUAL);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/SnackbarTestWithFAB.java b/design/tests/src/android/support/design/widget/SnackbarTestWithFAB.java
deleted file mode 100644
index 5ffe3ca..0000000
--- a/design/tests/src/android/support/design/widget/SnackbarTestWithFAB.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.junit.Assert.assertEquals;
-
-import android.support.design.test.R;
-import android.support.design.testutils.SnackbarUtils;
-import android.support.test.filters.LargeTest;
-import android.view.View;
-
-import org.junit.Before;
-import org.junit.Test;
-
-@LargeTest
-public class SnackbarTestWithFAB extends BaseInstrumentationTestCase<SnackbarActivityWithFAB> {
-
-    private static final String MESSAGE_TEXT = "Test Message";
-
-    private CoordinatorLayout mCoordinatorLayout;
-
-    public SnackbarTestWithFAB() {
-        super(SnackbarActivityWithFAB.class);
-    }
-
-    @Before
-    public void setup() {
-        mCoordinatorLayout =
-                (CoordinatorLayout) mActivityTestRule.getActivity().findViewById(R.id.col);
-    }
-
-    @Test
-    public void testShortSnackbarDodgesFab() {
-        final int[] originalFabPosition = new int[2];
-        final View fab = mCoordinatorLayout.findViewById(R.id.fab);
-        fab.getLocationOnScreen(originalFabPosition);
-
-        // Show a simple Snackbar and wait for it to be shown
-        final Snackbar snackbar = Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT,
-                Snackbar.LENGTH_SHORT);
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-
-        // Now check that the FAB has shifted up to make space for the Snackbar
-        final int[] fabPosition = new int[2];
-        fab.getLocationOnScreen(fabPosition);
-        assertEquals(originalFabPosition[0], fabPosition[0]);
-        assertEquals(originalFabPosition[1] - snackbar.getView().getHeight(), fabPosition[1]);
-
-        // Now wait until the Snackbar has been dismissed
-        SnackbarUtils.waitUntilFullyDismissed(snackbar);
-
-        // And check that the FAB is back in its original position
-        fab.getLocationOnScreen(fabPosition);
-        assertEquals(originalFabPosition[0], fabPosition[0]);
-        assertEquals(originalFabPosition[1], fabPosition[1]);
-    }
-
-    @Test
-    public void testIndefiniteSnackbarDodgesFab() throws Throwable {
-        final int[] originalFabPosition = new int[2];
-        final View fab = mCoordinatorLayout.findViewById(R.id.fab);
-        fab.getLocationOnScreen(originalFabPosition);
-
-        // Show a simple Snackbar and wait for it to be shown
-        final Snackbar snackbar = Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT,
-                Snackbar.LENGTH_INDEFINITE);
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-
-        // Now check that the FAB has shifted up to make space for the Snackbar
-        final int[] fabPosition = new int[2];
-        fab.getLocationOnScreen(fabPosition);
-        assertEquals(originalFabPosition[0], fabPosition[0]);
-        assertEquals(originalFabPosition[1] - snackbar.getView().getHeight(), fabPosition[1]);
-
-        // Now dismiss the Snackbar and wait for it to be dismissed
-        SnackbarUtils.dismissTransientBottomBarAndWaitUntilFullyDismissed(snackbar);
-
-        // And check that the FAB is back in its original position
-        fab.getLocationOnScreen(fabPosition);
-        assertEquals(originalFabPosition[0], fabPosition[0]);
-        assertEquals(originalFabPosition[1], fabPosition[1]);
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/SnackbarTestWithTranslucentNavBar.java b/design/tests/src/android/support/design/widget/SnackbarTestWithTranslucentNavBar.java
deleted file mode 100644
index 07a8d0f..0000000
--- a/design/tests/src/android/support/design/widget/SnackbarTestWithTranslucentNavBar.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import android.support.design.test.R;
-import android.support.design.testutils.SnackbarUtils;
-import android.support.test.filters.MediumTest;
-import android.support.test.filters.SdkSuppress;
-import android.support.v4.view.WindowInsetsCompat;
-import android.view.View;
-
-import org.junit.Before;
-import org.junit.Test;
-
-@SdkSuppress(minSdkVersion = 21)
-public class SnackbarTestWithTranslucentNavBar
-        extends BaseInstrumentationTestCase<SnackbarActivityWithTranslucentNavBar> {
-
-    private static final String MESSAGE_TEXT = "Test Message";
-
-    private CoordinatorLayout mCoordinatorLayout;
-
-    public SnackbarTestWithTranslucentNavBar() {
-        super(SnackbarActivityWithTranslucentNavBar.class);
-    }
-
-    @Before
-    public void setup() {
-        mCoordinatorLayout =
-                (CoordinatorLayout) mActivityTestRule.getActivity().findViewById(R.id.col);
-    }
-
-    @Test
-    @MediumTest
-    public void testDrawsAboveNavigationBar() {
-        // Show a simple Snackbar and wait for it to be shown
-        final Snackbar snackbar = Snackbar.make(mCoordinatorLayout, MESSAGE_TEXT,
-                Snackbar.LENGTH_SHORT);
-        SnackbarUtils.showTransientBottomBarAndWaitUntilFullyShown(snackbar);
-
-        final WindowInsetsCompat colLastInsets = mCoordinatorLayout.getLastWindowInsets();
-        assertNotNull(colLastInsets);
-
-        // Check that the Snackbar view has padding set to display above the nav bar
-        final View view = snackbar.getView();
-        assertNotNull(view);
-        assertEquals(colLastInsets.getSystemWindowInsetBottom(), view.getPaddingBottom());
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/TabLayoutPoolingActivity.java b/design/tests/src/android/support/design/widget/TabLayoutPoolingActivity.java
deleted file mode 100644
index 2108235..0000000
--- a/design/tests/src/android/support/design/widget/TabLayoutPoolingActivity.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class TabLayoutPoolingActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_tabs_twice;
-    }
-}
\ No newline at end of file
diff --git a/design/tests/src/android/support/design/widget/TabLayoutPoolingTest.java b/design/tests/src/android/support/design/widget/TabLayoutPoolingTest.java
deleted file mode 100755
index a805a2e..0000000
--- a/design/tests/src/android/support/design/widget/TabLayoutPoolingTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static org.junit.Assert.assertTrue;
-
-import android.app.Activity;
-import android.support.design.test.R;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.SmallTest;
-
-import org.junit.Test;
-
-public class TabLayoutPoolingTest extends BaseInstrumentationTestCase<TabLayoutPoolingActivity> {
-
-    public TabLayoutPoolingTest() {
-        super(TabLayoutPoolingActivity.class);
-    }
-
-    @UiThreadTest
-    @SmallTest
-    @Test
-    public void testUsingTabsFromOtherInstance() {
-        final Activity activity = mActivityTestRule.getActivity();
-
-        // TabLayout1 has items added via the layout, so we'll just check they're
-        // there first
-        final TabLayout tabLayout1 = (TabLayout) activity.findViewById(R.id.tabs_1);
-        assertTrue(tabLayout1.getTabCount() > 0);
-
-        // Now remove all tabs. TabLayout will pool the Tab instances...
-        tabLayout1.removeAllTabs();
-
-        // Now add some tabs to the second TabLayout and make sure that we don't crash
-        final TabLayout tabLayout2 = (TabLayout) activity.findViewById(R.id.tabs_2);
-        tabLayout2.addTab(tabLayout2.newTab());
-        tabLayout2.addTab(tabLayout2.newTab());
-        tabLayout2.addTab(tabLayout2.newTab());
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/TabLayoutTest.java b/design/tests/src/android/support/design/widget/TabLayoutTest.java
deleted file mode 100755
index 730ff56..0000000
--- a/design/tests/src/android/support/design/widget/TabLayoutTest.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.TabLayoutActions.selectTab;
-import static android.support.design.testutils.TabLayoutActions.setScrollPosition;
-import static android.support.design.testutils.TestUtilsActions.setLayoutDirection;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.os.Build;
-import android.support.design.test.R;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.IdlingResource;
-import android.support.test.espresso.NoMatchingViewException;
-import android.support.test.espresso.ViewAssertion;
-import android.support.test.filters.SdkSuppress;
-import android.support.test.filters.SmallTest;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.app.AppCompatActivity;
-import android.view.InflateException;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.PointerIcon;
-import android.view.View;
-
-import org.junit.Test;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-@SmallTest
-public class TabLayoutTest extends BaseInstrumentationTestCase<AppCompatActivity> {
-    public TabLayoutTest() {
-        super(AppCompatActivity.class);
-    }
-
-    @Test
-    @UiThreadTest
-    public void testInflateTabLayoutWithTabItems() {
-        final LayoutInflater inflater = LayoutInflater.from(mActivityTestRule.getActivity());
-        final TabLayout tabLayout = (TabLayout) inflater.inflate(R.layout.design_tabs_items, null);
-
-        assertEquals(3, tabLayout.getTabCount());
-
-        // Tab 0 has text, but no icon or custom view
-        TabLayout.Tab tab = tabLayout.getTabAt(0);
-        assertEquals(mActivityTestRule.getActivity().getString(R.string.tab_layout_text),
-                tab.getText());
-        assertNull(tab.getIcon());
-        assertNull(tab.getCustomView());
-
-        // Tab 1 has an icon, but no text or custom view
-        tab = tabLayout.getTabAt(1);
-        assertNull(tab.getText());
-        assertNotNull(tab.getIcon());
-        assertNull(tab.getCustomView());
-
-        // Tab 2 has a custom view, but no text or icon
-        tab = tabLayout.getTabAt(2);
-        assertNull(tab.getText());
-        assertNull(tab.getIcon());
-        assertNotNull(tab.getCustomView());
-        assertEquals(R.id.my_custom_tab, tab.getCustomView().getId());
-    }
-
-    @Test
-    @UiThreadTest
-    public void testInflateTabLayoutWithNonTabItem() throws Throwable {
-        try {
-            final LayoutInflater inflater =
-                    LayoutInflater.from(mActivityTestRule.getActivity());
-            inflater.inflate(R.layout.design_tabs_with_non_tabitems, null);
-        } catch (Throwable throwable) {
-            assertTrue(throwable instanceof InflateException
-                    || throwable instanceof IllegalArgumentException);
-        }
-    }
-
-    @Test
-    @UiThreadTest
-    public void testTabWithCustomLayoutSelection1() {
-        final TabLayout.OnTabSelectedListener mockListener =
-                mock(TabLayout.OnTabSelectedListener.class);
-        final LayoutInflater inflater = LayoutInflater.from(mActivityTestRule.getActivity());
-
-        final TabLayout tabLayout = (TabLayout) inflater.inflate(R.layout.design_tabs, null);
-        tabLayout.addOnTabSelectedListener(mockListener);
-        final TabLayout.Tab tab = tabLayout.newTab();
-        tab.setCustomView(R.layout.design_tab_item_custom);
-        tabLayout.addTab(tab);
-        verify(mockListener, times(1)).onTabSelected(eq(tab));
-        verify(mockListener, times(0)).onTabUnselected(any(TabLayout.Tab.class));
-
-        assertNotNull("Tab has custom view", tab.getCustomView());
-        assertEquals("First tab is selected", 0, tabLayout.getSelectedTabPosition());
-        assertTabCustomViewSelected(tabLayout);
-    }
-
-    @Test
-    @UiThreadTest
-    public void testTabWithCustomLayoutSelection2() {
-        final TabLayout.OnTabSelectedListener mockListener =
-                mock(TabLayout.OnTabSelectedListener.class);
-        final LayoutInflater inflater = LayoutInflater.from(mActivityTestRule.getActivity());
-
-        final TabLayout tabLayout = (TabLayout) inflater.inflate(R.layout.design_tabs, null);
-        tabLayout.addOnTabSelectedListener(mockListener);
-        final TabLayout.Tab tab = tabLayout.newTab();
-        tabLayout.addTab(tab);
-        verify(mockListener, times(1)).onTabSelected(eq(tab));
-        verify(mockListener, times(0)).onTabUnselected(any(TabLayout.Tab.class));
-        tab.setCustomView(R.layout.design_tab_item_custom);
-
-        assertNotNull("Tab has custom view", tab.getCustomView());
-        assertEquals("First tab is selected", 0, tabLayout.getSelectedTabPosition());
-        assertTabCustomViewSelected(tabLayout);
-    }
-
-    @Test
-    @UiThreadTest
-    public void testMultipleTabsWithCustomLayoutSelection1() {
-        final TabLayout.OnTabSelectedListener mockListener =
-                mock(TabLayout.OnTabSelectedListener.class);
-        final LayoutInflater inflater = LayoutInflater.from(mActivityTestRule.getActivity());
-        final TabLayout tabs = (TabLayout) inflater.inflate(R.layout.design_tabs, null);
-        tabs.addOnTabSelectedListener(mockListener);
-
-        final TabLayout.Tab tab1 = tabs.newTab().setCustomView(R.layout.design_tab_item_custom);
-        tabs.addTab(tab1);
-        verify(mockListener, times(1)).onTabSelected(eq(tab1));
-        verify(mockListener, times(0)).onTabUnselected(any(TabLayout.Tab.class));
-        final TabLayout.Tab tab2 = tabs.newTab().setCustomView(R.layout.design_tab_item_custom);
-        tabs.addTab(tab2, true);
-        verify(mockListener, times(1)).onTabSelected(eq(tab2));
-        verify(mockListener, times(1)).onTabUnselected(eq(tab1));
-        final TabLayout.Tab tab3 = tabs.newTab().setCustomView(R.layout.design_tab_item_custom);
-        tabs.addTab(tab3);
-        verifyNoMoreInteractions(mockListener);
-
-        assertEquals("Second tab is selected", 1, tabs.getSelectedTabPosition());
-        assertTabCustomViewSelected(tabs);
-    }
-
-    @Test
-    @UiThreadTest
-    public void testMultipleTabsWithCustomLayoutSelection2() {
-        final TabLayout.OnTabSelectedListener mockListener =
-                mock(TabLayout.OnTabSelectedListener.class);
-        final LayoutInflater inflater = LayoutInflater.from(mActivityTestRule.getActivity());
-        final TabLayout tabs = (TabLayout) inflater.inflate(R.layout.design_tabs, null);
-        tabs.addOnTabSelectedListener(mockListener);
-
-        final TabLayout.Tab tab1 = tabs.newTab();
-        tabs.addTab(tab1);
-        verify(mockListener, times(1)).onTabSelected(eq(tab1));
-        verify(mockListener, times(0)).onTabUnselected(any(TabLayout.Tab.class));
-        final TabLayout.Tab tab2 = tabs.newTab();
-        tabs.addTab(tab2, true);
-        verify(mockListener, times(1)).onTabSelected(eq(tab2));
-        verify(mockListener, times(1)).onTabUnselected(eq(tab1));
-        final TabLayout.Tab tab3 = tabs.newTab();
-        tabs.addTab(tab3);
-        verifyNoMoreInteractions(mockListener);
-
-        tabs.getTabAt(0).setCustomView(R.layout.design_tab_item_custom);
-        tabs.getTabAt(1).setCustomView(R.layout.design_tab_item_custom);
-        tabs.getTabAt(2).setCustomView(R.layout.design_tab_item_custom);
-
-        assertEquals("Second tab is selected", 1, tabs.getSelectedTabPosition());
-        assertTabCustomViewSelected(tabs);
-    }
-
-    @Test
-    @UiThreadTest
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
-    public void testPointerIcon() {
-        final LayoutInflater inflater = LayoutInflater.from(mActivityTestRule.getActivity());
-        final TabLayout tabLayout = (TabLayout) inflater.inflate(R.layout.design_tabs_items, null);
-        final PointerIcon expectedIcon =
-                PointerIcon.getSystemIcon(mActivityTestRule.getActivity(), PointerIcon.TYPE_HAND);
-
-        final int tabCount = tabLayout.getTabCount();
-        assertEquals(3, tabCount);
-
-        final MotionEvent event = MotionEvent.obtain(0, 0, MotionEvent.ACTION_HOVER_MOVE, 0, 0, 0);
-        for (int i = 0; i < tabCount; i++) {
-            assertEquals(expectedIcon, tabLayout.getTabAt(i).mView.onResolvePointerIcon(event, 0));
-        }
-    }
-
-    private static void assertTabCustomViewSelected(final TabLayout tabLayout) {
-        for (int i = 0, count = tabLayout.getTabCount(); i < count; i++) {
-            final TabLayout.Tab tab = tabLayout.getTabAt(i);
-            final View tabCustomView = tab.getCustomView();
-            if (tabCustomView != null) {
-                assertEquals(tab.isSelected(), tabCustomView.isSelected());
-            }
-        }
-    }
-
-    @Test
-    public void setScrollPositionLtr() throws Throwable {
-        testSetScrollPosition(true);
-    }
-
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN_MR1)
-    @Test
-    public void setScrollPositionRtl() throws Throwable {
-        testSetScrollPosition(false);
-    }
-
-    private void testSetScrollPosition(final boolean isLtr) throws Throwable {
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mActivityTestRule.getActivity().setContentView(R.layout.design_tabs_fixed_width);
-            }
-        });
-        final TabLayout tabs = (TabLayout) mActivityTestRule.getActivity().findViewById(R.id.tabs);
-        assertEquals(TabLayout.MODE_SCROLLABLE, tabs.getTabMode());
-
-        final TabLayoutScrollIdlingResource idler = new TabLayoutScrollIdlingResource(tabs);
-        Espresso.registerIdlingResources(idler);
-
-        // We're going to call setScrollPosition() incrementally, as if scrolling between one tab
-        // and the next. Use the middle tab for best results. The positionOffsets should be in the
-        // range [0, 1), so the final call will wrap to 0 but use the next tab's position.
-        final int middleTab = tabs.getTabCount() / 2;
-        final int[] positions = {middleTab, middleTab, middleTab, middleTab, middleTab + 1};
-        final float[] positionOffsets = {0f, .25f, .5f, .75f, 0f};
-
-        // Set layout direction
-        onView(withId(R.id.tabs)).perform(setLayoutDirection(
-                isLtr ? ViewCompat.LAYOUT_DIRECTION_LTR : ViewCompat.LAYOUT_DIRECTION_RTL));
-        // Make sure it's scrolled all the way to the start
-        onView(withId(R.id.tabs)).perform(selectTab(0));
-
-        // Perform a series of setScrollPosition() calls
-        final AtomicInteger lastScrollX = new AtomicInteger(tabs.getScrollX());
-        for (int i = 0; i < positions.length; i++) {
-            onView(withId(R.id.tabs))
-                    .perform(setScrollPosition(positions[i], positionOffsets[i]))
-                    .check(new ViewAssertion() {
-                        @Override
-                        public void check(View view, NoMatchingViewException notFoundException) {
-                            if (view == null) {
-                                throw notFoundException;
-                            }
-                            // Verify increasing or decreasing scroll X values
-                            int sx = view.getScrollX();
-                            assertTrue(isLtr ? sx > lastScrollX.get() : sx < lastScrollX.get());
-                            lastScrollX.set(sx);
-                        }
-                    });
-        }
-
-        Espresso.unregisterIdlingResources(idler);
-    }
-
-    static class TabLayoutScrollIdlingResource implements IdlingResource {
-
-        private boolean mIsIdle = true;
-        private ResourceCallback mCallback;
-
-        TabLayoutScrollIdlingResource(final TabLayout tabLayout) {
-            tabLayout.setScrollAnimatorListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationStart(Animator animator) {
-                    setIdle(false);
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animator) {
-                    setIdle(true);
-                }
-            });
-        }
-
-        @Override
-        public String getName() {
-            return "TabLayoutScrollIdlingResource";
-        }
-
-        @Override
-        public boolean isIdleNow() {
-            return mIsIdle;
-        }
-
-        @Override
-        public void registerIdleTransitionCallback(ResourceCallback callback) {
-            mCallback = callback;
-        }
-
-        private void setIdle(boolean idle) {
-            boolean wasIdle = mIsIdle;
-            mIsIdle = idle;
-            if (mIsIdle && !wasIdle && mCallback != null) {
-                mCallback.onTransitionToIdle();
-            }
-        }
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerActivity.java b/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerActivity.java
deleted file mode 100644
index 39db827..0000000
--- a/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerActivity.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import android.support.design.test.R;
-import android.support.v7.widget.Toolbar;
-
-public class TabLayoutWithViewPagerActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_tabs_viewpager;
-    }
-
-    @Override
-    protected void onContentViewSet() {
-        Toolbar toolbar = findViewById(R.id.toolbar);
-        setSupportActionBar(toolbar);
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerTest.java b/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerTest.java
deleted file mode 100755
index b169dad..0000000
--- a/design/tests/src/android/support/design/widget/TabLayoutWithViewPagerTest.java
+++ /dev/null
@@ -1,628 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import static android.support.design.testutils.TabLayoutActions.setupWithViewPager;
-import static android.support.design.testutils.ViewPagerActions.setAdapter;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withParent;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-
-import static org.hamcrest.Matchers.allOf;
-import static org.hamcrest.Matchers.not;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.support.annotation.DimenRes;
-import android.support.annotation.LayoutRes;
-import android.support.design.test.R;
-import android.support.design.testutils.TabLayoutActions;
-import android.support.design.testutils.TestUtilsActions;
-import android.support.design.testutils.TestUtilsMatchers;
-import android.support.design.testutils.ViewPagerActions;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.SmallTest;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.util.Pair;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.HorizontalScrollView;
-import android.widget.TextView;
-
-import org.hamcrest.Matcher;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-
-public class TabLayoutWithViewPagerTest
-        extends BaseInstrumentationTestCase<TabLayoutWithViewPagerActivity> {
-    private TabLayout mTabLayout;
-
-    private ViewPager mViewPager;
-
-    private ColorPagerAdapter mDefaultPagerAdapter;
-
-    protected static class BasePagerAdapter<Q> extends PagerAdapter {
-        protected ArrayList<Pair<String, Q>> mEntries = new ArrayList<>();
-
-        public void add(String title, Q content) {
-            mEntries.add(new Pair<>(title, content));
-        }
-
-        @Override
-        public int getCount() {
-            return mEntries.size();
-        }
-
-        protected void configureInstantiatedItem(View view, int position) {
-            switch (position) {
-                case 0:
-                    view.setId(R.id.page_0);
-                    break;
-                case 1:
-                    view.setId(R.id.page_1);
-                    break;
-                case 2:
-                    view.setId(R.id.page_2);
-                    break;
-                case 3:
-                    view.setId(R.id.page_3);
-                    break;
-                case 4:
-                    view.setId(R.id.page_4);
-                    break;
-                case 5:
-                    view.setId(R.id.page_5);
-                    break;
-                case 6:
-                    view.setId(R.id.page_6);
-                    break;
-                case 7:
-                    view.setId(R.id.page_7);
-                    break;
-                case 8:
-                    view.setId(R.id.page_8);
-                    break;
-                case 9:
-                    view.setId(R.id.page_9);
-                    break;
-            }
-        }
-
-        @Override
-        public void destroyItem(ViewGroup container, int position, Object object) {
-            // The adapter is also responsible for removing the view.
-            container.removeView(((ViewHolder) object).view);
-        }
-
-        @Override
-        public int getItemPosition(Object object) {
-            return ((ViewHolder) object).position;
-        }
-
-        @Override
-        public boolean isViewFromObject(View view, Object object) {
-            return ((ViewHolder) object).view == view;
-        }
-
-        @Override
-        public CharSequence getPageTitle(int position) {
-            return mEntries.get(position).first;
-        }
-
-        protected static class ViewHolder {
-            final View view;
-            final int position;
-
-            public ViewHolder(View view, int position) {
-                this.view = view;
-                this.position = position;
-            }
-        }
-    }
-
-    protected static class ColorPagerAdapter extends BasePagerAdapter<Integer> {
-        @Override
-        public Object instantiateItem(ViewGroup container, int position) {
-            final View view = new View(container.getContext());
-            view.setBackgroundColor(mEntries.get(position).second);
-            configureInstantiatedItem(view, position);
-
-            // Unlike ListView adapters, the ViewPager adapter is responsible
-            // for adding the view to the container.
-            container.addView(view);
-
-            return new ViewHolder(view, position);
-        }
-    }
-
-    protected static class TextPagerAdapter extends BasePagerAdapter<String> {
-        @Override
-        public Object instantiateItem(ViewGroup container, int position) {
-            final TextView view = new TextView(container.getContext());
-            view.setText(mEntries.get(position).second);
-            configureInstantiatedItem(view, position);
-
-            // Unlike ListView adapters, the ViewPager adapter is responsible
-            // for adding the view to the container.
-            container.addView(view);
-
-            return new ViewHolder(view, position);
-        }
-    }
-
-    private static <Q> ViewAction addItemToPager(final String title, final Q content) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(ViewPager.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Add item and notify on content change";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final ViewPager viewPager = (ViewPager) view;
-                final BasePagerAdapter<Q> viewPagerAdapter =
-                        (BasePagerAdapter<Q>) viewPager.getAdapter();
-                viewPagerAdapter.add(title, content);
-                viewPagerAdapter.notifyDataSetChanged();
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    private static <Q> ViewAction addItemsToPager(final String[] title, final Q[] content) {
-        return new ViewAction() {
-            @Override
-            public Matcher<View> getConstraints() {
-                return isAssignableFrom(ViewPager.class);
-            }
-
-            @Override
-            public String getDescription() {
-                return "Add items and notify on content change";
-            }
-
-            @Override
-            public void perform(UiController uiController, View view) {
-                uiController.loopMainThreadUntilIdle();
-
-                final ViewPager viewPager = (ViewPager) view;
-                final BasePagerAdapter<Q> viewPagerAdapter =
-                        (BasePagerAdapter<Q>) viewPager.getAdapter();
-                int itemCount = title.length;
-                for (int i = 0; i < itemCount; i++) {
-                    viewPagerAdapter.add(title[i], content[i]);
-                }
-                viewPagerAdapter.notifyDataSetChanged();
-
-                uiController.loopMainThreadUntilIdle();
-            }
-        };
-    }
-
-    public TabLayoutWithViewPagerTest() {
-        super(TabLayoutWithViewPagerActivity.class);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        final TabLayoutWithViewPagerActivity activity = mActivityTestRule.getActivity();
-        mTabLayout = (TabLayout) activity.findViewById(R.id.tabs);
-        mViewPager = (ViewPager) activity.findViewById(R.id.tabs_viewpager);
-
-        mDefaultPagerAdapter = new ColorPagerAdapter();
-        mDefaultPagerAdapter.add("Red", Color.RED);
-        mDefaultPagerAdapter.add("Green", Color.GREEN);
-        mDefaultPagerAdapter.add("Blue", Color.BLUE);
-
-        // Configure view pager
-        onView(withId(R.id.tabs_viewpager)).perform(
-                setAdapter(mDefaultPagerAdapter),
-                ViewPagerActions.scrollToPage(0));
-    }
-
-    private void setupTabLayoutWithViewPager() {
-        // And wire the tab layout to it
-        onView(withId(R.id.tabs)).perform(setupWithViewPager(mViewPager));
-    }
-
-    /**
-     * Verifies that selecting pages in <code>ViewPager</code> also updates the tab selection
-     * in the wired <code>TabLayout</code>
-     */
-    private void verifyViewPagerSelection() {
-        int itemCount = mViewPager.getAdapter().getCount();
-
-        onView(withId(R.id.tabs_viewpager)).perform(ViewPagerActions.scrollToPage(0));
-        assertEquals("Selected page", 0, mViewPager.getCurrentItem());
-        assertEquals("Selected tab", 0, mTabLayout.getSelectedTabPosition());
-
-        // Scroll tabs to the right
-        for (int i = 0; i < (itemCount - 1); i++) {
-            // Scroll one tab to the right
-            onView(withId(R.id.tabs_viewpager)).perform(ViewPagerActions.scrollRight());
-            final int expectedCurrentTabIndex = i + 1;
-            assertEquals("Scroll right #" + i, expectedCurrentTabIndex,
-                    mViewPager.getCurrentItem());
-            assertEquals("Selected tab after scrolling right #" + i, expectedCurrentTabIndex,
-                    mTabLayout.getSelectedTabPosition());
-        }
-
-        // Scroll tabs to the left
-        for (int i = 0; i < (itemCount - 1); i++) {
-            // Scroll one tab to the left
-            onView(withId(R.id.tabs_viewpager)).perform(ViewPagerActions.scrollLeft());
-            final int expectedCurrentTabIndex = itemCount - i - 2;
-            assertEquals("Scroll left #" + i, expectedCurrentTabIndex, mViewPager.getCurrentItem());
-            assertEquals("Selected tab after scrolling left #" + i, expectedCurrentTabIndex,
-                    mTabLayout.getSelectedTabPosition());
-        }
-    }
-
-    /**
-     * Verifies that selecting pages in <code>ViewPager</code> also updates the tab selection
-     * in the wired <code>TabLayout</code>
-     */
-    private void verifyTabLayoutSelection() {
-        int itemCount = mTabLayout.getTabCount();
-
-        onView(withId(R.id.tabs_viewpager)).perform(ViewPagerActions.scrollToPage(0));
-        assertEquals("Selected tab", 0, mTabLayout.getSelectedTabPosition());
-        assertEquals("Selected page", 0, mViewPager.getCurrentItem());
-
-        // Select tabs "going" to the right. Note that the first loop iteration tests the
-        // scenario of "selecting" the first tab when it's already selected.
-        for (int i = 0; i < itemCount; i++) {
-            onView(withId(R.id.tabs)).perform(TabLayoutActions.selectTab(i));
-            assertEquals("Selected tab after selecting #" + i, i,
-                    mTabLayout.getSelectedTabPosition());
-            assertEquals("Select tab #" + i, i, mViewPager.getCurrentItem());
-        }
-
-        // Select tabs "going" to the left. Note that the first loop iteration tests the
-        // scenario of "selecting" the last tab when it's already selected.
-        for (int i = itemCount - 1; i >= 0; i--) {
-            onView(withId(R.id.tabs)).perform(TabLayoutActions.selectTab(i));
-            assertEquals("Scroll left #" + i, i, mViewPager.getCurrentItem());
-            assertEquals("Selected tab after scrolling left #" + i, i,
-                    mTabLayout.getSelectedTabPosition());
-        }
-    }
-
-    @Test
-    @SmallTest
-    public void testBasics() {
-        setupTabLayoutWithViewPager();
-
-        final int itemCount = mViewPager.getAdapter().getCount();
-
-        assertEquals("Matching item count", itemCount, mTabLayout.getTabCount());
-
-        for (int i = 0; i < itemCount; i++) {
-            assertEquals("Tab #" +i, mViewPager.getAdapter().getPageTitle(i),
-                    mTabLayout.getTabAt(i).getText());
-        }
-
-        assertEquals("Selected tab", mViewPager.getCurrentItem(),
-                mTabLayout.getSelectedTabPosition());
-
-        verifyViewPagerSelection();
-    }
-
-    @Test
-    @SmallTest
-    public void testInteraction() {
-        setupTabLayoutWithViewPager();
-
-        assertEquals("Default selected page", 0, mViewPager.getCurrentItem());
-        assertEquals("Default selected tab", 0, mTabLayout.getSelectedTabPosition());
-
-        verifyTabLayoutSelection();
-    }
-
-    @Test
-    @SmallTest
-    public void testAdapterContentChange() {
-        setupTabLayoutWithViewPager();
-
-        // Verify that we have the expected initial adapter
-        PagerAdapter initialAdapter = mViewPager.getAdapter();
-        assertEquals("Initial adapter class", ColorPagerAdapter.class, initialAdapter.getClass());
-        assertEquals("Initial adapter page count", 3, initialAdapter.getCount());
-
-        // Add two more entries to our adapter
-        onView(withId(R.id.tabs_viewpager)).perform(
-                addItemsToPager(new String[] { "Yellow", "Magenta"},
-                        new Integer[] { Color.YELLOW, Color.MAGENTA }));
-
-        // We have more comprehensive test coverage for changing the ViewPager adapter in v4/tests.
-        // Here we are focused on testing the continuous integration of TabLayout with the new
-        // content of ViewPager
-
-        final int newItemCount = mDefaultPagerAdapter.getCount();
-        assertEquals("Matching item count", newItemCount, mTabLayout.getTabCount());
-
-        for (int i = 0; i < newItemCount; i++) {
-            assertEquals("Tab #" +i, mViewPager.getAdapter().getPageTitle(i),
-                    mTabLayout.getTabAt(i).getText());
-        }
-
-        verifyViewPagerSelection();
-        verifyTabLayoutSelection();
-    }
-
-    @Test
-    @SmallTest
-    public void testAdapterContentChangeWithAutoRefreshDisabled() {
-        onView(withId(R.id.tabs)).perform(setupWithViewPager(mViewPager, false));
-
-        // Verify that we have the expected initial adapter
-        PagerAdapter initialAdapter = mViewPager.getAdapter();
-        assertEquals("Initial adapter class", ColorPagerAdapter.class, initialAdapter.getClass());
-        assertEquals("Initial adapter page count", 3, initialAdapter.getCount());
-
-        // Add two entries to our adapter
-        onView(withId(R.id.tabs_viewpager)).perform(
-                addItemsToPager(new String[] { "Yellow", "Magenta"},
-                        new Integer[] { Color.YELLOW, Color.MAGENTA }));
-
-        // Assert that the TabLayout did not update and add the new items
-        final int newItemCount = mDefaultPagerAdapter.getCount();
-        assertNotEquals("Matching item count", newItemCount, mTabLayout.getTabCount());
-    }
-
-    @Test
-    @SmallTest
-    public void testBasicAutoRefreshDisabled() {
-        onView(withId(R.id.tabs)).perform(setupWithViewPager(mViewPager, false));
-
-        // Check that the TabLayout has the same number of items are the adapter
-        PagerAdapter initialAdapter = mViewPager.getAdapter();
-        assertEquals("Initial adapter page count", initialAdapter.getCount(),
-                mTabLayout.getTabCount());
-
-        // Add two more entries to our adapter
-        mDefaultPagerAdapter.add("Yellow", Color.YELLOW);
-        mDefaultPagerAdapter.add("Magenta", Color.MAGENTA);
-        final int newItemCount = mDefaultPagerAdapter.getCount();
-
-        // Assert that the TabLayout did not update and add the new items
-        assertNotEquals("Matching item count", newItemCount, mTabLayout.getTabCount());
-
-        // Now setup again to update the tabs
-        onView(withId(R.id.tabs)).perform(setupWithViewPager(mViewPager, false));
-
-        // Assert that the TabLayout updated and added the new items
-        assertEquals("Matching item count", newItemCount, mTabLayout.getTabCount());
-    }
-
-    @Test
-    @SmallTest
-    public void testAdapterChange() {
-        setupTabLayoutWithViewPager();
-
-        // Verify that we have the expected initial adapter
-        PagerAdapter initialAdapter = mViewPager.getAdapter();
-        assertEquals("Initial adapter class", ColorPagerAdapter.class, initialAdapter.getClass());
-        assertEquals("Initial adapter page count", 3, initialAdapter.getCount());
-
-        // Create a new adapter
-        TextPagerAdapter newAdapter = new TextPagerAdapter();
-        final int newItemCount = 6;
-        for (int i = 0; i < newItemCount; i++) {
-            newAdapter.add("Title " + i, "Body " + i);
-        }
-        // And set it on the ViewPager
-        onView(withId(R.id.tabs_viewpager)).perform(setAdapter(newAdapter),
-                ViewPagerActions.scrollToPage(0));
-
-        // As TabLayout doesn't track adapter changes, we need to re-wire the new adapter
-        onView(withId(R.id.tabs)).perform(setupWithViewPager(mViewPager));
-
-        // We have more comprehensive test coverage for changing the ViewPager adapter in v4/tests.
-        // Here we are focused on testing the integration of TabLayout with the new
-        // content of ViewPager
-
-        assertEquals("Matching item count", newItemCount, mTabLayout.getTabCount());
-
-        for (int i = 0; i < newItemCount; i++) {
-            assertEquals("Tab #" +i, mViewPager.getAdapter().getPageTitle(i),
-                    mTabLayout.getTabAt(i).getText());
-        }
-
-        verifyViewPagerSelection();
-        verifyTabLayoutSelection();
-    }
-
-    @Test
-    @LargeTest
-    public void testFixedTabMode() {
-        // Create a new adapter (with no content)
-        final TextPagerAdapter newAdapter = new TextPagerAdapter();
-        // And set it on the ViewPager
-        onView(withId(R.id.tabs_viewpager)).perform(setAdapter(newAdapter));
-        // As TabLayout doesn't track adapter changes, we need to re-wire the new adapter
-        onView(withId(R.id.tabs)).perform(setupWithViewPager(mViewPager));
-
-        // Set fixed mode on the TabLayout
-        onView(withId(R.id.tabs)).perform(TabLayoutActions.setTabMode(TabLayout.MODE_FIXED));
-        assertEquals("Fixed tab mode", TabLayout.MODE_FIXED, mTabLayout.getTabMode());
-
-        // Add a bunch of tabs and verify that all of them are visible on the screen
-        for (int i = 0; i < 8; i++) {
-            onView(withId(R.id.tabs_viewpager)).perform(addItemToPager("Title " + i, "Body " + i));
-
-            int expectedTabCount = i + 1;
-            assertEquals("Tab count after adding #" + i, expectedTabCount,
-                    mTabLayout.getTabCount());
-            assertEquals("Page count after adding #" + i, expectedTabCount,
-                    mViewPager.getAdapter().getCount());
-
-            verifyViewPagerSelection();
-            verifyTabLayoutSelection();
-
-            // Check that all tabs are fully visible (the content may or may not be elided)
-            for (int j = 0; j < expectedTabCount; j++) {
-                onView(allOf(isDescendantOfA(withId(R.id.tabs)), withText("Title " + j))).
-                        check(matches(isCompletelyDisplayed()));
-            }
-        }
-    }
-
-    /**
-     * Helper method to verify support for min and max tab width on TabLayout in scrollable mode.
-     * It replaces the TabLayout based on the passed layout resource ID and then adds a bunch of
-     * tab titles to the wired ViewPager with progressively longer texts. After each tab is added
-     * this method then checks that all tab views respect the minimum and maximum tab width set
-     * on TabLayout.
-     *
-     * @param tabLayoutResId Layout resource for the TabLayout to be wired to the ViewPager.
-     * @param tabMinWidthResId If non zero, points to the dimension resource to use for tab min
-     * width check.
-     * @param tabMaxWidthResId If non zero, points to the dimension resource to use for tab max
-     * width check.
-     */
-    private void verifyMinMaxTabWidth(@LayoutRes int tabLayoutResId, @DimenRes int tabMinWidthResId,
-            @DimenRes int tabMaxWidthResId) {
-        setupTabLayoutWithViewPager();
-
-        assertEquals("Scrollable tab mode", TabLayout.MODE_SCROLLABLE, mTabLayout.getTabMode());
-
-        final Resources res = mActivityTestRule.getActivity().getResources();
-        final int minTabWidth = (tabMinWidthResId == 0) ? -1 :
-                res.getDimensionPixelSize(tabMinWidthResId);
-        final int maxTabWidth = (tabMaxWidthResId == 0) ? -1 :
-                res.getDimensionPixelSize(tabMaxWidthResId);
-
-        // Create a new adapter (with no content)
-        final TextPagerAdapter newAdapter = new TextPagerAdapter();
-        // And set it on the ViewPager
-        onView(withId(R.id.tabs_viewpager)).perform(setAdapter(newAdapter));
-
-        // Replace the default TabLayout with the passed one
-        onView(withId(R.id.container)).perform(TestUtilsActions.replaceTabLayout(tabLayoutResId));
-
-        // Now that we have a new TabLayout, wire it to the new content of our ViewPager
-        onView(withId(R.id.tabs)).perform(setupWithViewPager(mViewPager));
-
-        // Since TabLayout doesn't expose a getter for fetching the configured max tab width,
-        // start adding a variety of tabs with progressively longer tab titles and test that
-        // no tab is wider than the configured max width. Before we start that test,
-        // verify that we're in the scrollable mode so that each tab title gets as much width
-        // as needed to display its text.
-        assertEquals("Scrollable tab mode", TabLayout.MODE_SCROLLABLE, mTabLayout.getTabMode());
-
-        final StringBuilder tabTitleBuilder = new StringBuilder();
-        for (int i = 0; i < 40; i++) {
-            final char titleComponent = (char) ('A' + i);
-            for (int j = 0; j <= (i + 1); j++) {
-                tabTitleBuilder.append(titleComponent);
-            }
-            final String tabTitle = tabTitleBuilder.toString();
-            onView(withId(R.id.tabs_viewpager)).perform(addItemToPager(tabTitle, "Body " + i));
-
-            int expectedTabCount = i + 1;
-            // Check that all tabs are at least as wide as min width *and* at most as wide as max
-            // width specified in the XML for the newly loaded TabLayout
-            for (int j = 0; j < expectedTabCount; j++) {
-                // Find the view that is our tab title. It should be:
-                // 1. Descendant of our TabLayout
-                // 2. But not a direct child of the horizontal scroller
-                // 3. With just-added title text
-                // These conditions make sure that we're selecting the "top-level" tab view
-                // instead of the inner (and narrower) TextView
-                Matcher<View> tabMatcher = allOf(
-                        isDescendantOfA(withId(R.id.tabs)),
-                        not(withParent(isAssignableFrom(HorizontalScrollView.class))),
-                        hasDescendant(withText(tabTitle)));
-                if (minTabWidth >= 0) {
-                    onView(tabMatcher).check(matches(
-                            TestUtilsMatchers.isNotNarrowerThan(minTabWidth)));
-                }
-                if (maxTabWidth >= 0) {
-                    onView(tabMatcher).check(matches(
-                            TestUtilsMatchers.isNotWiderThan(maxTabWidth)));
-                }
-            }
-
-            // Reset the title builder for the next tab
-            tabTitleBuilder.setLength(0);
-            tabTitleBuilder.trimToSize();
-        }
-
-    }
-
-    @Test
-    @LargeTest
-    public void testMinTabWidth() {
-        verifyMinMaxTabWidth(R.layout.tab_layout_bound_min, R.dimen.tab_width_limit_medium, 0);
-    }
-
-    @Test
-    @LargeTest
-    public void testMaxTabWidth() {
-        verifyMinMaxTabWidth(R.layout.tab_layout_bound_max, 0, R.dimen.tab_width_limit_medium);
-    }
-
-    @Test
-    @LargeTest
-    public void testMinMaxTabWidth() {
-        verifyMinMaxTabWidth(R.layout.tab_layout_bound_minmax, R.dimen.tab_width_limit_small,
-                R.dimen.tab_width_limit_large);
-    }
-
-    @Test
-    @SmallTest
-    public void testSetupAfterViewPagerScrolled() {
-        // Scroll to the last item
-        final int selected = mViewPager.getAdapter().getCount() - 1;
-        onView(withId(R.id.tabs_viewpager)).perform(ViewPagerActions.scrollToPage(selected));
-
-        // Now setup the TabLayout with the ViewPager
-        setupTabLayoutWithViewPager();
-
-        assertEquals("Selected page", selected, mViewPager.getCurrentItem());
-        assertEquals("Selected tab", selected, mTabLayout.getSelectedTabPosition());
-    }
-
-    @Test
-    @SmallTest
-    public void testEmptyAdapter() {
-        ColorPagerAdapter adapter = new ColorPagerAdapter();
-        onView(withId(R.id.tabs_viewpager)).perform(setAdapter(adapter));
-    }
-
-}
diff --git a/design/tests/src/android/support/design/widget/TextInputLayoutActivity.java b/design/tests/src/android/support/design/widget/TextInputLayoutActivity.java
deleted file mode 100644
index 613ae6e..0000000
--- a/design/tests/src/android/support/design/widget/TextInputLayoutActivity.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.support.design.widget;
-
-import android.support.design.test.R;
-
-public class TextInputLayoutActivity extends BaseTestActivity {
-    @Override
-    protected int getContentViewLayoutResId() {
-        return R.layout.design_text_input;
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/TextInputLayoutPseudoLocaleTest.java b/design/tests/src/android/support/design/widget/TextInputLayoutPseudoLocaleTest.java
deleted file mode 100755
index 9d705db..0000000
--- a/design/tests/src/android/support/design/widget/TextInputLayoutPseudoLocaleTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2017 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.design.widget;
-
-import static android.support.test.InstrumentationRegistry.getContext;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.typeText;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.support.design.test.R;
-import android.support.test.filters.MediumTest;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.util.Locale;
-
-@MediumTest
-public class TextInputLayoutPseudoLocaleTest extends
-        BaseInstrumentationTestCase<TextInputLayoutActivity> {
-
-    private static final String ORIGINAL_LANGUAGE = Locale.getDefault().getLanguage();
-    private static final String ORIGINAL_COUNTRY = Locale.getDefault().getLanguage();
-
-    @BeforeClass
-    public static void setup() {
-        // Change language to pseudo locale.
-        setLocale("ar", "XB", getContext());
-    }
-
-    public TextInputLayoutPseudoLocaleTest() {
-        super(TextInputLayoutActivity.class);
-    }
-
-    private static void setLocale(String language,  String country,  Context context) {
-        context = context.getApplicationContext();
-        Resources resources = context.getResources();
-        Configuration configuration = resources.getConfiguration();
-        configuration.setLocale(new Locale(language, country));
-        resources.updateConfiguration(configuration, resources.getDisplayMetrics());
-    }
-
-    @Test
-    public void testSimpleEdit() {
-        // Type some text
-        onView(withId(R.id.textinput_edittext)).perform(typeText("123"));
-    }
-
-    @AfterClass
-    public static void  cleanup() {
-        setLocale(ORIGINAL_LANGUAGE, ORIGINAL_COUNTRY, getContext());
-    }
-}
diff --git a/design/tests/src/android/support/design/widget/TextInputLayoutTest.java b/design/tests/src/android/support/design/widget/TextInputLayoutTest.java
deleted file mode 100755
index 5969235..0000000
--- a/design/tests/src/android/support/design/widget/TextInputLayoutTest.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.design.widget;
-
-import static android.support.design.testutils.TestUtilsActions.setCompoundDrawablesRelative;
-import static android.support.design.testutils.TestUtilsActions.setEnabled;
-import static android.support.design.testutils.TestUtilsMatchers.withCompoundDrawable;
-import static android.support.design.testutils.TestUtilsMatchers.withTextColor;
-import static android.support.design.testutils.TestUtilsMatchers.withTypeface;
-import static android.support.design.testutils.TextInputLayoutActions.clickPasswordToggle;
-import static android.support.design.testutils.TextInputLayoutActions.setCounterEnabled;
-import static android.support.design.testutils.TextInputLayoutActions.setCounterMaxLength;
-import static android.support.design.testutils.TextInputLayoutActions.setError;
-import static android.support.design.testutils.TextInputLayoutActions.setErrorEnabled;
-import static android.support.design.testutils.TextInputLayoutActions.setErrorTextAppearance;
-import static android.support.design.testutils.TextInputLayoutActions
-        .setPasswordVisibilityToggleEnabled;
-import static android.support.design.testutils.TextInputLayoutActions.setTypeface;
-import static android.support.design.testutils.TextInputLayoutMatchers.doesNotShowPasswordToggle;
-import static android.support.design.testutils.TextInputLayoutMatchers
-        .passwordToggleHasContentDescription;
-import static android.support.design.testutils.TextInputLayoutMatchers.passwordToggleIsNotChecked;
-import static android.support.test.InstrumentationRegistry.getInstrumentation;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.action.ViewActions.typeText;
-import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.contrib.AccessibilityChecks.accessibilityAssertion;
-import static android.support.test.espresso.matcher.ViewMatchers.hasFocus;
-import static android.support.test.espresso.matcher.ViewMatchers.isDescendantOfA;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.isEnabled;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.core.AllOf.allOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.os.Parcelable;
-import android.support.design.test.R;
-import android.support.design.testutils.TestUtils;
-import android.support.design.testutils.ViewStructureImpl;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.espresso.NoMatchingViewException;
-import android.support.test.espresso.ViewAssertion;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.test.filters.SdkSuppress;
-import android.support.testutils.AppCompatActivityUtils;
-import android.support.testutils.RecreatedAppCompatActivity;
-import android.support.v4.widget.TextViewCompat;
-import android.text.method.PasswordTransformationMethod;
-import android.text.method.TransformationMethod;
-import android.util.AttributeSet;
-import android.util.SparseArray;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-
-import org.junit.Test;
-
-@MediumTest
-public class TextInputLayoutTest extends BaseInstrumentationTestCase<TextInputLayoutActivity> {
-
-    private static final String ERROR_MESSAGE_1 = "An error has occured";
-    private static final String ERROR_MESSAGE_2 = "Some other error has occured";
-
-    private static final String INPUT_TEXT = "Random input text";
-
-    private static final Typeface CUSTOM_TYPEFACE = Typeface.SANS_SERIF;
-
-    public class TestTextInputLayout extends TextInputLayout {
-        public int animateToExpansionFractionCount = 0;
-        public float animateToExpansionFractionRecentValue = -1;
-
-        public TestTextInputLayout(Context context) {
-            super(context);
-        }
-
-        public TestTextInputLayout(Context context, AttributeSet attrs) {
-            super(context, attrs);
-        }
-
-        public TestTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-            super(context, attrs, defStyleAttr);
-        }
-
-        @Override
-        protected void animateToExpansionFraction(float target) {
-            super.animateToExpansionFraction(target);
-            animateToExpansionFractionRecentValue = target;
-            animateToExpansionFractionCount++;
-        }
-    }
-
-    public TextInputLayoutTest() {
-        super(TextInputLayoutActivity.class);
-    }
-
-    @Test
-    public void testTypingTextCollapsesHint() {
-        // Type some text
-        onView(withId(R.id.textinput_edittext)).perform(typeText(INPUT_TEXT));
-        // ...and check that the hint has collapsed
-        onView(withId(R.id.textinput)).check(isHintExpanded(false));
-    }
-
-    @Test
-    public void testSetErrorEnablesErrorIsDisplayed() {
-        onView(withId(R.id.textinput)).perform(setError(ERROR_MESSAGE_1));
-        onView(withText(ERROR_MESSAGE_1)).check(matches(isDisplayed()));
-    }
-
-    @Test
-    public void testDisabledErrorIsNotDisplayed() {
-        // First show an error, and then disable error functionality
-        onView(withId(R.id.textinput))
-                .perform(setError(ERROR_MESSAGE_1))
-                .perform(setErrorEnabled(false));
-
-        // Check that the error is no longer there
-        onView(withText(ERROR_MESSAGE_1)).check(doesNotExist());
-    }
-
-    @Test
-    public void testSetErrorOnDisabledSetErrorIsDisplayed() {
-        // First show an error, and then disable error functionality
-        onView(withId(R.id.textinput))
-                .perform(setError(ERROR_MESSAGE_1))
-                .perform(setErrorEnabled(false));
-
-        // Now show a different error message
-        onView(withId(R.id.textinput)).perform(setError(ERROR_MESSAGE_2));
-        // And check that it is displayed
-        onView(withText(ERROR_MESSAGE_2)).check(matches(isDisplayed()));
-    }
-
-    @Test
-    public void testPasswordToggleClick() {
-        // Type some text on the EditText
-        onView(withId(R.id.textinput_edittext_pwd)).perform(typeText(INPUT_TEXT));
-
-        final Activity activity = mActivityTestRule.getActivity();
-        final EditText textInput = (EditText) activity.findViewById(R.id.textinput_edittext_pwd);
-
-        // Assert that the password is disguised
-        assertNotEquals(INPUT_TEXT, textInput.getLayout().getText().toString());
-
-        // Now click the toggle button
-        onView(withId(R.id.textinput_password)).perform(clickPasswordToggle());
-
-        // And assert that the password is not disguised
-        assertEquals(INPUT_TEXT, textInput.getLayout().getText().toString());
-    }
-
-    @Test
-    public void testPasswordToggleDisable() {
-        final Activity activity = mActivityTestRule.getActivity();
-        final EditText textInput = (EditText) activity.findViewById(R.id.textinput_edittext_pwd);
-
-        // Set some text on the EditText
-        onView(withId(R.id.textinput_edittext_pwd))
-                .perform(typeText(INPUT_TEXT));
-        // Assert that the password is disguised
-        assertNotEquals(INPUT_TEXT, textInput.getLayout().getText().toString());
-
-        // Disable the password toggle
-        onView(withId(R.id.textinput_password))
-                .perform(setPasswordVisibilityToggleEnabled(false));
-
-        // Check that the password toggle view is not visible
-        onView(withId(R.id.textinput_password)).check(matches(doesNotShowPasswordToggle()));
-        // ...and that the password is disguised still
-        assertNotEquals(INPUT_TEXT, textInput.getLayout().getText().toString());
-    }
-
-    @Test
-    public void testPasswordToggleDisableWhenVisible() {
-        final Activity activity = mActivityTestRule.getActivity();
-        final EditText textInput = (EditText) activity.findViewById(R.id.textinput_edittext_pwd);
-
-        // Type some text on the EditText
-        onView(withId(R.id.textinput_edittext_pwd)).perform(typeText(INPUT_TEXT));
-        // Assert that the password is disguised
-        assertNotEquals(INPUT_TEXT, textInput.getLayout().getText().toString());
-
-        // Now click the toggle button
-        onView(withId(R.id.textinput_password)).perform(clickPasswordToggle());
-        // Disable the password toggle
-        onView(withId(R.id.textinput_password))
-                .perform(setPasswordVisibilityToggleEnabled(false));
-
-        // Check that the password is disguised again
-        assertNotEquals(INPUT_TEXT, textInput.getLayout().getText().toString());
-    }
-
-    @Test
-    public void testPasswordToggleMaintainsCompoundDrawables() {
-        // Set a known set of test compound drawables on the EditText
-        final Drawable start = new ColorDrawable(Color.RED);
-        final Drawable top = new ColorDrawable(Color.GREEN);
-        final Drawable end = new ColorDrawable(Color.BLUE);
-        final Drawable bottom = new ColorDrawable(Color.BLACK);
-        onView(withId(R.id.textinput_edittext_pwd))
-                .perform(setCompoundDrawablesRelative(start, top, end, bottom));
-
-        // Enable the password toggle and check that the start, top and bottom drawables are
-        // maintained
-        onView(withId(R.id.textinput_password))
-                .perform(setPasswordVisibilityToggleEnabled(true));
-        onView(withId(R.id.textinput_edittext_pwd))
-                .check(matches(withCompoundDrawable(0, start)))
-                .check(matches(withCompoundDrawable(1, top)))
-                .check(matches(not(withCompoundDrawable(2, end))))
-                .check(matches(withCompoundDrawable(3, bottom)));
-
-        // Now disable the password toggle and check that all of the original compound drawables
-        // are set
-        onView(withId(R.id.textinput_password))
-                .perform(setPasswordVisibilityToggleEnabled(false));
-        onView(withId(R.id.textinput_edittext_pwd))
-                .check(matches(withCompoundDrawable(0, start)))
-                .check(matches(withCompoundDrawable(1, top)))
-                .check(matches(withCompoundDrawable(2, end)))
-                .check(matches(withCompoundDrawable(3, bottom)));
-    }
-
-    @Test
-    public void testPasswordToggleIsHiddenAfterReenable() {
-        final Activity activity = mActivityTestRule.getActivity();
-        final EditText textInput = (EditText) activity.findViewById(R.id.textinput_edittext_pwd);
-
-        // Type some text on the EditText and then click the toggle button
-        onView(withId(R.id.textinput_edittext_pwd)).perform(typeText(INPUT_TEXT));
-        onView(withId(R.id.textinput_password)).perform(clickPasswordToggle());
-
-        // Disable the password toggle, and then re-enable it
-        onView(withId(R.id.textinput_password))
-                .perform(setPasswordVisibilityToggleEnabled(false))
-                .perform(setPasswordVisibilityToggleEnabled(true));
-
-        // Check that the password is disguised and the toggle button reflects the same state
-        assertNotEquals(INPUT_TEXT, textInput.getLayout().getText().toString());
-        onView(withId(R.id.textinput_password)).check(matches(passwordToggleIsNotChecked()));
-    }
-
-    @Test
-    public void testSetEnabledFalse() {
-        // First click on the EditText, so that it is focused and the hint collapses...
-        onView(withId(R.id.textinput_edittext)).perform(click());
-
-        // Now disable the TextInputLayout and check that the hint expands
-        onView(withId(R.id.textinput))
-                .perform(setEnabled(false))
-                .check(isHintExpanded(true));
-
-        // Finally check that the EditText is no longer enabled
-        onView(withId(R.id.textinput_edittext)).check(matches(not(isEnabled())));
-    }
-
-    @Test
-    public void testSetEnabledFalseWithText() {
-        // First set some text, then disable the TextInputLayout
-        onView(withId(R.id.textinput_edittext))
-                .perform(typeText(INPUT_TEXT));
-        onView(withId(R.id.textinput)).perform(setEnabled(false));
-
-        // Now check that the EditText is no longer enabled
-        onView(withId(R.id.textinput_edittext)).check(matches(not(isEnabled())));
-    }
-
-    @UiThreadTest
-    @Test
-    public void testExtractUiHintSet() {
-        final Activity activity = mActivityTestRule.getActivity();
-
-        // Set a hint on the TextInputLayout
-        final TextInputLayout layout = (TextInputLayout) activity.findViewById(R.id.textinput);
-        layout.setHint(INPUT_TEXT);
-
-        final EditText editText = (EditText) activity.findViewById(R.id.textinput_edittext);
-
-        // Now manually pass in a EditorInfo to the EditText and make sure it updates the
-        // hintText to our known value
-        final EditorInfo info = new EditorInfo();
-        editText.onCreateInputConnection(info);
-
-        assertEquals(INPUT_TEXT, info.hintText);
-    }
-
-    @UiThreadTest
-    @Test
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-    public void testDispatchProvideAutofillStructure() {
-        final Activity activity = mActivityTestRule.getActivity();
-
-        final TextInputLayout layout = activity.findViewById(R.id.textinput);
-
-        final ViewStructureImpl structure = new ViewStructureImpl();
-        layout.dispatchProvideAutofillStructure(structure, 0);
-
-        assertEquals(2, structure.getChildCount()); // EditText and TextView
-
-        // Asserts the structure.
-        final ViewStructureImpl childStructure = structure.getChildAt(0);
-        assertEquals(EditText.class.getName(), childStructure.getClassName());
-        assertEquals("Hint to the user", childStructure.getHint());
-
-        // Make sure the widget's hint was restored.
-        assertEquals("Hint to the user", layout.getHint());
-        final EditText editText = activity.findViewById(R.id.textinput_edittext);
-        assertNull(editText.getHint());
-    }
-
-    /**
-     * Regression test for b/31663756.
-     */
-    @UiThreadTest
-    @Test
-    public void testDrawableStateChanged() {
-        final Activity activity = mActivityTestRule.getActivity();
-        final TextInputLayout layout = (TextInputLayout) activity.findViewById(R.id.textinput);
-
-        // Force a drawable state change.
-        layout.drawableStateChanged();
-    }
-
-    @UiThreadTest
-    @Test
-    public void testSaveRestoreStateAnimation() {
-        final Activity activity = mActivityTestRule.getActivity();
-        final TestTextInputLayout layout = new TestTextInputLayout(activity);
-        layout.setId(R.id.textinputlayout);
-        final TextInputEditText editText = new TextInputEditText(activity);
-        editText.setText(INPUT_TEXT);
-        editText.setId(R.id.textinputedittext);
-        layout.addView(editText);
-
-        SparseArray<Parcelable> container = new SparseArray<>();
-        layout.saveHierarchyState(container);
-        layout.restoreHierarchyState(container);
-        assertEquals("Expected no animations since we simply saved/restored state",
-                0, layout.animateToExpansionFractionCount);
-
-        editText.setText("");
-        assertEquals("Expected one call to animate because we cleared text in editText",
-                1, layout.animateToExpansionFractionCount);
-        assertEquals(0f, layout.animateToExpansionFractionRecentValue, 0f);
-
-        container = new SparseArray<>();
-        layout.saveHierarchyState(container);
-        layout.restoreHierarchyState(container);
-        assertEquals("Expected no additional animations since we simply saved/restored state",
-                1, layout.animateToExpansionFractionCount);
-    }
-
-    @UiThreadTest
-    @Test
-    public void testMaintainsLeftRightCompoundDrawables() throws Throwable {
-        final Activity activity = mActivityTestRule.getActivity();
-
-        // Set a known set of test compound drawables on the EditText
-        final Drawable left = new ColorDrawable(Color.RED);
-        final Drawable top = new ColorDrawable(Color.GREEN);
-        final Drawable right = new ColorDrawable(Color.BLUE);
-        final Drawable bottom = new ColorDrawable(Color.BLACK);
-
-        final TextInputEditText editText = new TextInputEditText(activity);
-        editText.setCompoundDrawables(left, top, right, bottom);
-
-        // Now add the EditText to a TextInputLayout
-        TextInputLayout til = (TextInputLayout)
-                activity.findViewById(R.id.textinput_noedittext);
-        til.addView(editText);
-
-        // Finally assert that all of the drawables are untouched
-        final Drawable[] compoundDrawables = editText.getCompoundDrawables();
-        assertSame(left, compoundDrawables[0]);
-        assertSame(top, compoundDrawables[1]);
-        assertSame(right, compoundDrawables[2]);
-        assertSame(bottom, compoundDrawables[3]);
-    }
-
-    @UiThreadTest
-    @Test
-    public void testMaintainsStartEndCompoundDrawables() throws Throwable {
-        final Activity activity = mActivityTestRule.getActivity();
-
-        // Set a known set of test compound drawables on the EditText
-        final Drawable start = new ColorDrawable(Color.RED);
-        final Drawable top = new ColorDrawable(Color.GREEN);
-        final Drawable end = new ColorDrawable(Color.BLUE);
-        final Drawable bottom = new ColorDrawable(Color.BLACK);
-
-        final TextInputEditText editText = new TextInputEditText(activity);
-        TextViewCompat.setCompoundDrawablesRelative(editText, start, top, end, bottom);
-
-        // Now add the EditText to a TextInputLayout
-        TextInputLayout til = (TextInputLayout)
-                activity.findViewById(R.id.textinput_noedittext);
-        til.addView(editText);
-
-        // Finally assert that all of the drawables are untouched
-        final Drawable[] compoundDrawables = TextViewCompat.getCompoundDrawablesRelative(editText);
-        assertSame(start, compoundDrawables[0]);
-        assertSame(top, compoundDrawables[1]);
-        assertSame(end, compoundDrawables[2]);
-        assertSame(bottom, compoundDrawables[3]);
-    }
-
-    @Test
-    public void testPasswordToggleHasDefaultContentDescription() {
-        // Check that the TextInputLayout says that it has a content description and that the
-        // underlying toggle has content description as well
-        onView(withId(R.id.textinput_password))
-                .check(matches(passwordToggleHasContentDescription()));
-    }
-
-    /**
-     * Simple test that uses AccessibilityChecks to check that the password toggle icon is
-     * 'accessible'.
-     */
-    @Test
-    public void testPasswordToggleIsAccessible() {
-        onView(allOf(withId(R.id.text_input_password_toggle),
-                isDescendantOfA(withId(R.id.textinput_password)))).check(accessibilityAssertion());
-    }
-
-    @Test
-    public void testSetTypefaceUpdatesErrorView() {
-        onView(withId(R.id.textinput))
-                .perform(setErrorEnabled(true))
-                .perform(setError(ERROR_MESSAGE_1))
-                .perform(setTypeface(CUSTOM_TYPEFACE));
-
-        // Check that the error message is updated
-        onView(withText(ERROR_MESSAGE_1))
-                .check(matches(withTypeface(CUSTOM_TYPEFACE)));
-    }
-
-    @Test
-    public void testSetTypefaceUpdatesCharacterCountView() {
-        // Turn on character counting
-        onView(withId(R.id.textinput))
-                .perform(setCounterEnabled(true), setCounterMaxLength(10))
-                .perform(setTypeface(CUSTOM_TYPEFACE));
-
-        // Check that the counter message is updated
-        onView(withId(R.id.textinput_counter))
-                .check(matches(withTypeface(CUSTOM_TYPEFACE)));
-    }
-
-    @Test
-    public void testThemedColorStateListForErrorTextColor() {
-        final Activity activity = mActivityTestRule.getActivity();
-        final int textColor = TestUtils.getThemeAttrColor(activity, R.attr.colorAccent);
-
-        onView(withId(R.id.textinput))
-                .perform(setErrorEnabled(true))
-                .perform(setError(ERROR_MESSAGE_1))
-                .perform(setErrorTextAppearance(R.style.TextAppearanceWithThemedCslTextColor));
-
-        onView(withText(ERROR_MESSAGE_1))
-                .check(matches(withTextColor(textColor)));
-    }
-
-    @Test
-    public void testTextSetViaAttributeCollapsedHint() {
-        onView(withId(R.id.textinput_with_text)).check(isHintExpanded(false));
-    }
-
-    @Test
-    public void testFocusMovesToEditTextWithPasswordEnabled() {
-        // Focus the preceding EditText
-        onView(withId(R.id.textinput_edittext))
-                .perform(click())
-                .check(matches(hasFocus()));
-
-        // Then send a TAB to focus the next view
-        getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_TAB);
-
-        // And check that the EditText is focused
-        onView(withId(R.id.textinput_edittext_pwd))
-                .check(matches(hasFocus()));
-    }
-
-    @Test
-    @LargeTest
-    public void testSaveAndRestorePasswordVisibility() throws Throwable {
-        // Type some text on the EditText
-        onView(withId(R.id.textinput_edittext_pwd)).perform(typeText(INPUT_TEXT));
-        onView(withId(R.id.textinput_password)).check(isPasswordToggledVisible(false));
-
-        // Toggle password to be shown as plain text
-        onView(withId(R.id.textinput_password)).perform(clickPasswordToggle());
-        onView(withId(R.id.textinput_password)).check(isPasswordToggledVisible(true));
-
-        RecreatedAppCompatActivity activity = mActivityTestRule.getActivity();
-        AppCompatActivityUtils.recreateActivity(mActivityTestRule, activity);
-        AppCompatActivityUtils.waitForExecution(mActivityTestRule);
-
-        // Check that the password is still toggled to be shown as plain text
-        onView(withId(R.id.textinput_password)).check(isPasswordToggledVisible(true));
-    }
-
-    static ViewAssertion isHintExpanded(final boolean expanded) {
-        return new ViewAssertion() {
-            @Override
-            public void check(View view, NoMatchingViewException noViewFoundException) {
-                assertTrue(view instanceof TextInputLayout);
-                assertEquals(expanded, ((TextInputLayout) view).isHintExpanded());
-            }
-        };
-    }
-
-    static ViewAssertion isPasswordToggledVisible(final boolean isToggledVisible) {
-        return new ViewAssertion() {
-            @Override
-            public void check(View view, NoMatchingViewException noViewFoundException) {
-                assertTrue(view instanceof TextInputLayout);
-                EditText editText = ((TextInputLayout) view).getEditText();
-                TransformationMethod transformationMethod = editText.getTransformationMethod();
-                if (isToggledVisible) {
-                    assertNull(transformationMethod);
-                } else {
-                    assertEquals(PasswordTransformationMethod.getInstance(), transformationMethod);
-                }
-            }
-        };
-    }
-}
diff --git a/design/tests/src/android/support/test/rule/BootlegActivityTestRule.java b/design/tests/src/android/support/test/rule/BootlegActivityTestRule.java
deleted file mode 100644
index b12edfa..0000000
--- a/design/tests/src/android/support/test/rule/BootlegActivityTestRule.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2017 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.test.rule;
-
-import android.app.Activity;
-import android.support.annotation.NonNull;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.intercepting.SingleActivityFactory;
-
-/**
- * An extension of existing {@link ActivityTestRule} that contains a fix for finishActivity()
- * method (cr/138555678).
- *
- * Remove this once we move to Android Test Runner 0.7.
- */
-public class BootlegActivityTestRule<T extends Activity> extends ActivityTestRule {
-    public BootlegActivityTestRule(Class activityClass) {
-        super(activityClass);
-    }
-
-    public BootlegActivityTestRule(Class<T> activityClass, boolean initialTouchMode) {
-        super(activityClass, initialTouchMode);
-    }
-
-    public BootlegActivityTestRule(Class<T> activityClass, boolean initialTouchMode,
-            boolean launchActivity) {
-        super(activityClass, initialTouchMode, launchActivity);
-    }
-
-    public BootlegActivityTestRule(
-            SingleActivityFactory activityFactory,
-            boolean initialTouchMode, boolean launchActivity) {
-        super(activityFactory, initialTouchMode, launchActivity);
-    }
-
-    public BootlegActivityTestRule(Class<T> activityClass,
-            @NonNull String targetPackage, int launchFlags,
-            boolean initialTouchMode, boolean launchActivity) {
-        super(activityClass, targetPackage, launchFlags, initialTouchMode, launchActivity);
-    }
-
-    @Override
-    public void finishActivity() {
-        super.finishActivity();
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-    }
-
-    @Override
-    public T getActivity() {
-        return (T) super.getActivity();
-    }
-}
diff --git a/development/unbundled-build b/development/unbundled-build
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/development/unbundled-build
diff --git a/dynamic-animation/Android.mk b/dynamic-animation/Android.mk
deleted file mode 100644
index 98e8f45..0000000
--- a/dynamic-animation/Android.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (C) 2017 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)
-
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-dynamic-animation
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/dynamic-animation/api/27.1.0.txt b/dynamic-animation/api/27.1.0.txt
new file mode 100644
index 0000000..73d20b8
--- /dev/null
+++ b/dynamic-animation/api/27.1.0.txt
@@ -0,0 +1,103 @@
+package android.support.animation {
+
+  public abstract class DynamicAnimation<T extends android.support.animation.DynamicAnimation<T>> {
+    method public T addEndListener(android.support.animation.DynamicAnimation.OnAnimationEndListener);
+    method public T addUpdateListener(android.support.animation.DynamicAnimation.OnAnimationUpdateListener);
+    method public void cancel();
+    method public float getMinimumVisibleChange();
+    method public boolean isRunning();
+    method public void removeEndListener(android.support.animation.DynamicAnimation.OnAnimationEndListener);
+    method public void removeUpdateListener(android.support.animation.DynamicAnimation.OnAnimationUpdateListener);
+    method public T setMaxValue(float);
+    method public T setMinValue(float);
+    method public T setMinimumVisibleChange(float);
+    method public T setStartValue(float);
+    method public T setStartVelocity(float);
+    method public void start();
+    field public static final android.support.animation.DynamicAnimation.ViewProperty ALPHA;
+    field public static final float MIN_VISIBLE_CHANGE_ALPHA = 0.00390625f;
+    field public static final float MIN_VISIBLE_CHANGE_PIXELS = 1.0f;
+    field public static final float MIN_VISIBLE_CHANGE_ROTATION_DEGREES = 0.1f;
+    field public static final float MIN_VISIBLE_CHANGE_SCALE = 0.002f;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION_X;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty ROTATION_Y;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty SCALE_X;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty SCALE_Y;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty SCROLL_X;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty SCROLL_Y;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_X;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_Y;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty TRANSLATION_Z;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty X;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty Y;
+    field public static final android.support.animation.DynamicAnimation.ViewProperty Z;
+  }
+
+  public static abstract interface DynamicAnimation.OnAnimationEndListener {
+    method public abstract void onAnimationEnd(android.support.animation.DynamicAnimation, boolean, float, float);
+  }
+
+  public static abstract interface DynamicAnimation.OnAnimationUpdateListener {
+    method public abstract void onAnimationUpdate(android.support.animation.DynamicAnimation, float, float);
+  }
+
+  public static abstract class DynamicAnimation.ViewProperty extends android.support.animation.FloatPropertyCompat {
+  }
+
+  public final class FlingAnimation extends android.support.animation.DynamicAnimation {
+    ctor public FlingAnimation(android.support.animation.FloatValueHolder);
+    ctor public FlingAnimation(K, android.support.animation.FloatPropertyCompat<K>);
+    method public float getFriction();
+    method public android.support.animation.FlingAnimation setFriction(float);
+    method public android.support.animation.FlingAnimation setMaxValue(float);
+    method public android.support.animation.FlingAnimation setMinValue(float);
+    method public android.support.animation.FlingAnimation setStartVelocity(float);
+  }
+
+  public abstract class FloatPropertyCompat<T> {
+    ctor public FloatPropertyCompat(java.lang.String);
+    method public static <T> android.support.animation.FloatPropertyCompat<T> createFloatPropertyCompat(android.util.FloatProperty<T>);
+    method public abstract float getValue(T);
+    method public abstract void setValue(T, float);
+  }
+
+  public final class FloatValueHolder {
+    ctor public FloatValueHolder();
+    ctor public FloatValueHolder(float);
+    method public float getValue();
+    method public void setValue(float);
+  }
+
+  public final class SpringAnimation extends android.support.animation.DynamicAnimation {
+    ctor public SpringAnimation(android.support.animation.FloatValueHolder);
+    ctor public SpringAnimation(K, android.support.animation.FloatPropertyCompat<K>);
+    ctor public SpringAnimation(K, android.support.animation.FloatPropertyCompat<K>, float);
+    method public void animateToFinalPosition(float);
+    method public boolean canSkipToEnd();
+    method public android.support.animation.SpringForce getSpring();
+    method public android.support.animation.SpringAnimation setSpring(android.support.animation.SpringForce);
+    method public void skipToEnd();
+  }
+
+  public final class SpringForce {
+    ctor public SpringForce();
+    ctor public SpringForce(float);
+    method public float getDampingRatio();
+    method public float getFinalPosition();
+    method public float getStiffness();
+    method public android.support.animation.SpringForce setDampingRatio(float);
+    method public android.support.animation.SpringForce setFinalPosition(float);
+    method public android.support.animation.SpringForce setStiffness(float);
+    field public static final float DAMPING_RATIO_HIGH_BOUNCY = 0.2f;
+    field public static final float DAMPING_RATIO_LOW_BOUNCY = 0.75f;
+    field public static final float DAMPING_RATIO_MEDIUM_BOUNCY = 0.5f;
+    field public static final float DAMPING_RATIO_NO_BOUNCY = 1.0f;
+    field public static final float STIFFNESS_HIGH = 10000.0f;
+    field public static final float STIFFNESS_LOW = 200.0f;
+    field public static final float STIFFNESS_MEDIUM = 1500.0f;
+    field public static final float STIFFNESS_VERY_LOW = 50.0f;
+  }
+
+}
+
diff --git a/emoji/Android.mk b/emoji/Android.mk
deleted file mode 100644
index 337f5b9..0000000
--- a/emoji/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2017 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)
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/emoji/appcompat/Android.mk b/emoji/appcompat/Android.mk
deleted file mode 100644
index 0ef8cb7..0000000
--- a/emoji/appcompat/Android.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2017 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-emoji-appcompat \
-#       android-support-v7-appcompat \
-#       android-support-emoji \
-#       android-support-compat
-#
-# in their makefiles to include the resources and their dependencies in their package.
-#
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-emoji-appcompat
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v7-appcompat \
-    android-support-emoji \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/emoji/appcompat/api/27.1.0.txt b/emoji/appcompat/api/27.1.0.txt
new file mode 100644
index 0000000..2c5e5c0
--- /dev/null
+++ b/emoji/appcompat/api/27.1.0.txt
@@ -0,0 +1,24 @@
+package android.support.text.emoji.widget {
+
+  public class EmojiAppCompatButton extends android.support.v7.widget.AppCompatButton {
+    ctor public EmojiAppCompatButton(android.content.Context);
+    ctor public EmojiAppCompatButton(android.content.Context, android.util.AttributeSet);
+    ctor public EmojiAppCompatButton(android.content.Context, android.util.AttributeSet, int);
+  }
+
+  public class EmojiAppCompatEditText extends android.support.v7.widget.AppCompatEditText {
+    ctor public EmojiAppCompatEditText(android.content.Context);
+    ctor public EmojiAppCompatEditText(android.content.Context, android.util.AttributeSet);
+    ctor public EmojiAppCompatEditText(android.content.Context, android.util.AttributeSet, int);
+    method public int getMaxEmojiCount();
+    method public void setMaxEmojiCount(int);
+  }
+
+  public class EmojiAppCompatTextView extends android.support.v7.widget.AppCompatTextView {
+    ctor public EmojiAppCompatTextView(android.content.Context);
+    ctor public EmojiAppCompatTextView(android.content.Context, android.util.AttributeSet);
+    ctor public EmojiAppCompatTextView(android.content.Context, android.util.AttributeSet, int);
+  }
+
+}
+
diff --git a/emoji/bundled/Android.mk b/emoji/bundled/Android.mk
deleted file mode 100644
index c5c1ac9..0000000
--- a/emoji/bundled/Android.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (C) 2017 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-emoji-bundled \
-#       android-support-emoji \
-#       android-support-compat
-#
-# in their makefiles to include the resources and their dependencies in their package.
-#
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-emoji-bundled
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-emoji \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/emoji/bundled/api/27.1.0.txt b/emoji/bundled/api/27.1.0.txt
new file mode 100644
index 0000000..8812247
--- /dev/null
+++ b/emoji/bundled/api/27.1.0.txt
@@ -0,0 +1,8 @@
+package android.support.text.emoji.bundled {
+
+  public class BundledEmojiCompatConfig extends android.support.text.emoji.EmojiCompat.Config {
+    ctor public BundledEmojiCompatConfig(android.content.Context);
+  }
+
+}
+
diff --git a/emoji/core/Android.mk b/emoji/core/Android.mk
deleted file mode 100644
index 89426f0..0000000
--- a/emoji/core/Android.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (C) 2017 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-emoji \
-#       android-support-compat
-#
-# in their makefiles to include the resources and their dependencies in their package.
-#
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-emoji
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/src/main/res
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    noto-emoji-compat-java
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/emoji/core/api/27.1.0.txt b/emoji/core/api/27.1.0.txt
new file mode 100644
index 0000000..40bd7d8
--- /dev/null
+++ b/emoji/core/api/27.1.0.txt
@@ -0,0 +1,136 @@
+package android.support.text.emoji {
+
+  public class EmojiCompat {
+    method public static android.support.text.emoji.EmojiCompat get();
+    method public java.lang.String getAssetSignature();
+    method public int getLoadState();
+    method public static boolean handleDeleteSurroundingText(android.view.inputmethod.InputConnection, android.text.Editable, int, int, boolean);
+    method public static boolean handleOnKeyDown(android.text.Editable, int, android.view.KeyEvent);
+    method public boolean hasEmojiGlyph(java.lang.CharSequence);
+    method public boolean hasEmojiGlyph(java.lang.CharSequence, int);
+    method public static android.support.text.emoji.EmojiCompat init(android.support.text.emoji.EmojiCompat.Config);
+    method public java.lang.CharSequence process(java.lang.CharSequence);
+    method public java.lang.CharSequence process(java.lang.CharSequence, int, int);
+    method public java.lang.CharSequence process(java.lang.CharSequence, int, int, int);
+    method public java.lang.CharSequence process(java.lang.CharSequence, int, int, int, int);
+    method public void registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+    method public void unregisterInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+    field public static final java.lang.String EDITOR_INFO_METAVERSION_KEY = "android.support.text.emoji.emojiCompat_metadataVersion";
+    field public static final java.lang.String EDITOR_INFO_REPLACE_ALL_KEY = "android.support.text.emoji.emojiCompat_replaceAll";
+    field public static final int LOAD_STATE_FAILED = 2; // 0x2
+    field public static final int LOAD_STATE_LOADING = 0; // 0x0
+    field public static final int LOAD_STATE_SUCCEEDED = 1; // 0x1
+    field public static final int REPLACE_STRATEGY_ALL = 1; // 0x1
+    field public static final int REPLACE_STRATEGY_DEFAULT = 0; // 0x0
+    field public static final int REPLACE_STRATEGY_NON_EXISTENT = 2; // 0x2
+  }
+
+  public static abstract class EmojiCompat.Config {
+    ctor protected EmojiCompat.Config(android.support.text.emoji.EmojiCompat.MetadataRepoLoader);
+    method protected final android.support.text.emoji.EmojiCompat.MetadataRepoLoader getMetadataRepoLoader();
+    method public android.support.text.emoji.EmojiCompat.Config registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+    method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorColor(int);
+    method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorEnabled(boolean);
+    method public android.support.text.emoji.EmojiCompat.Config setReplaceAll(boolean);
+    method public android.support.text.emoji.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean);
+    method public android.support.text.emoji.EmojiCompat.Config setUseEmojiAsDefaultStyle(boolean, java.util.List<java.lang.Integer>);
+    method public android.support.text.emoji.EmojiCompat.Config unregisterInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
+  }
+
+  public static abstract class EmojiCompat.InitCallback {
+    ctor public EmojiCompat.InitCallback();
+    method public void onFailed(java.lang.Throwable);
+    method public void onInitialized();
+  }
+
+  public static abstract interface EmojiCompat.MetadataRepoLoader {
+    method public abstract void load(android.support.text.emoji.EmojiCompat.MetadataRepoLoaderCallback);
+  }
+
+  public static abstract class EmojiCompat.MetadataRepoLoaderCallback {
+    ctor public EmojiCompat.MetadataRepoLoaderCallback();
+    method public abstract void onFailed(java.lang.Throwable);
+    method public abstract void onLoaded(android.support.text.emoji.MetadataRepo);
+  }
+
+  public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
+    method public int getSize(android.graphics.Paint, java.lang.CharSequence, int, int, android.graphics.Paint.FontMetricsInt);
+  }
+
+  public class FontRequestEmojiCompatConfig extends android.support.text.emoji.EmojiCompat.Config {
+    ctor public FontRequestEmojiCompatConfig(android.content.Context, android.support.v4.provider.FontRequest);
+    method public android.support.text.emoji.FontRequestEmojiCompatConfig setHandler(android.os.Handler);
+    method public android.support.text.emoji.FontRequestEmojiCompatConfig setRetryPolicy(android.support.text.emoji.FontRequestEmojiCompatConfig.RetryPolicy);
+  }
+
+  public static class FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy extends android.support.text.emoji.FontRequestEmojiCompatConfig.RetryPolicy {
+    ctor public FontRequestEmojiCompatConfig.ExponentialBackoffRetryPolicy(long);
+    method public long getRetryDelay();
+  }
+
+  public static abstract class FontRequestEmojiCompatConfig.RetryPolicy {
+    ctor public FontRequestEmojiCompatConfig.RetryPolicy();
+    method public abstract long getRetryDelay();
+  }
+
+  public final class MetadataRepo {
+    method public static android.support.text.emoji.MetadataRepo create(android.graphics.Typeface, java.io.InputStream) throws java.io.IOException;
+    method public static android.support.text.emoji.MetadataRepo create(android.graphics.Typeface, java.nio.ByteBuffer) throws java.io.IOException;
+    method public static android.support.text.emoji.MetadataRepo create(android.content.res.AssetManager, java.lang.String) throws java.io.IOException;
+  }
+
+}
+
+package android.support.text.emoji.widget {
+
+  public class EmojiButton extends android.widget.Button {
+    ctor public EmojiButton(android.content.Context);
+    ctor public EmojiButton(android.content.Context, android.util.AttributeSet);
+    ctor public EmojiButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public EmojiButton(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public class EmojiEditText extends android.widget.EditText {
+    ctor public EmojiEditText(android.content.Context);
+    ctor public EmojiEditText(android.content.Context, android.util.AttributeSet);
+    ctor public EmojiEditText(android.content.Context, android.util.AttributeSet, int);
+    ctor public EmojiEditText(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getMaxEmojiCount();
+    method public void setMaxEmojiCount(int);
+  }
+
+  public final class EmojiEditTextHelper {
+    ctor public EmojiEditTextHelper(android.widget.EditText);
+    method public android.text.method.KeyListener getKeyListener(android.text.method.KeyListener);
+    method public int getMaxEmojiCount();
+    method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method public void setMaxEmojiCount(int);
+  }
+
+  public class EmojiExtractTextLayout extends android.widget.LinearLayout {
+    ctor public EmojiExtractTextLayout(android.content.Context);
+    ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet);
+    ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public EmojiExtractTextLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getEmojiReplaceStrategy();
+    method public void onUpdateExtractingViews(android.inputmethodservice.InputMethodService, android.view.inputmethod.EditorInfo);
+    method public void setEmojiReplaceStrategy(int);
+  }
+
+  public class EmojiTextView extends android.widget.TextView {
+    ctor public EmojiTextView(android.content.Context);
+    ctor public EmojiTextView(android.content.Context, android.util.AttributeSet);
+    ctor public EmojiTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public EmojiTextView(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public final class EmojiTextViewHelper {
+    ctor public EmojiTextViewHelper(android.widget.TextView);
+    method public android.text.InputFilter[] getFilters(android.text.InputFilter[]);
+    method public void setAllCaps(boolean);
+    method public void updateTransformationMethod();
+    method public android.text.method.TransformationMethod wrapTransformationMethod(android.text.method.TransformationMethod);
+  }
+
+}
+
diff --git a/exifinterface/Android.mk b/exifinterface/Android.mk
deleted file mode 100644
index 18ffcf3..0000000
--- a/exifinterface/Android.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must include it with
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := android-support-exifinterface
-#
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-exifinterface
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/exifinterface/api/27.1.0.txt b/exifinterface/api/27.1.0.txt
new file mode 100644
index 0000000..8533011
--- /dev/null
+++ b/exifinterface/api/27.1.0.txt
@@ -0,0 +1,332 @@
+package android.support.media {
+
+  public class ExifInterface {
+    ctor public ExifInterface(java.lang.String) throws java.io.IOException;
+    ctor public ExifInterface(java.io.InputStream) throws java.io.IOException;
+    method public void flipHorizontally();
+    method public void flipVertically();
+    method public double getAltitude(double);
+    method public java.lang.String getAttribute(java.lang.String);
+    method public double getAttributeDouble(java.lang.String, double);
+    method public int getAttributeInt(java.lang.String, int);
+    method public deprecated boolean getLatLong(float[]);
+    method public double[] getLatLong();
+    method public int getRotationDegrees();
+    method public byte[] getThumbnail();
+    method public android.graphics.Bitmap getThumbnailBitmap();
+    method public byte[] getThumbnailBytes();
+    method public long[] getThumbnailRange();
+    method public boolean hasThumbnail();
+    method public boolean isFlipped();
+    method public boolean isThumbnailCompressed();
+    method public void resetOrientation();
+    method public void rotate(int);
+    method public void saveAttributes() throws java.io.IOException;
+    method public void setAltitude(double);
+    method public void setAttribute(java.lang.String, java.lang.String);
+    method public void setGpsInfo(android.location.Location);
+    method public void setLatLong(double, double);
+    field public static final short ALTITUDE_ABOVE_SEA_LEVEL = 0; // 0x0
+    field public static final short ALTITUDE_BELOW_SEA_LEVEL = 1; // 0x1
+    field public static final int[] BITS_PER_SAMPLE_GREYSCALE_1;
+    field public static final int[] BITS_PER_SAMPLE_GREYSCALE_2;
+    field public static final int[] BITS_PER_SAMPLE_RGB;
+    field public static final int COLOR_SPACE_S_RGB = 1; // 0x1
+    field public static final int COLOR_SPACE_UNCALIBRATED = 65535; // 0xffff
+    field public static final short CONTRAST_HARD = 2; // 0x2
+    field public static final short CONTRAST_NORMAL = 0; // 0x0
+    field public static final short CONTRAST_SOFT = 1; // 0x1
+    field public static final int DATA_DEFLATE_ZIP = 8; // 0x8
+    field public static final int DATA_HUFFMAN_COMPRESSED = 2; // 0x2
+    field public static final int DATA_JPEG = 6; // 0x6
+    field public static final int DATA_JPEG_COMPRESSED = 7; // 0x7
+    field public static final int DATA_LOSSY_JPEG = 34892; // 0x884c
+    field public static final int DATA_PACK_BITS_COMPRESSED = 32773; // 0x8005
+    field public static final int DATA_UNCOMPRESSED = 1; // 0x1
+    field public static final short EXPOSURE_MODE_AUTO = 0; // 0x0
+    field public static final short EXPOSURE_MODE_AUTO_BRACKET = 2; // 0x2
+    field public static final short EXPOSURE_MODE_MANUAL = 1; // 0x1
+    field public static final short EXPOSURE_PROGRAM_ACTION = 6; // 0x6
+    field public static final short EXPOSURE_PROGRAM_APERTURE_PRIORITY = 3; // 0x3
+    field public static final short EXPOSURE_PROGRAM_CREATIVE = 5; // 0x5
+    field public static final short EXPOSURE_PROGRAM_LANDSCAPE_MODE = 8; // 0x8
+    field public static final short EXPOSURE_PROGRAM_MANUAL = 1; // 0x1
+    field public static final short EXPOSURE_PROGRAM_NORMAL = 2; // 0x2
+    field public static final short EXPOSURE_PROGRAM_NOT_DEFINED = 0; // 0x0
+    field public static final short EXPOSURE_PROGRAM_PORTRAIT_MODE = 7; // 0x7
+    field public static final short EXPOSURE_PROGRAM_SHUTTER_PRIORITY = 4; // 0x4
+    field public static final short FILE_SOURCE_DSC = 3; // 0x3
+    field public static final short FILE_SOURCE_OTHER = 0; // 0x0
+    field public static final short FILE_SOURCE_REFLEX_SCANNER = 2; // 0x2
+    field public static final short FILE_SOURCE_TRANSPARENT_SCANNER = 1; // 0x1
+    field public static final short FLAG_FLASH_FIRED = 1; // 0x1
+    field public static final short FLAG_FLASH_MODE_AUTO = 24; // 0x18
+    field public static final short FLAG_FLASH_MODE_COMPULSORY_FIRING = 8; // 0x8
+    field public static final short FLAG_FLASH_MODE_COMPULSORY_SUPPRESSION = 16; // 0x10
+    field public static final short FLAG_FLASH_NO_FLASH_FUNCTION = 32; // 0x20
+    field public static final short FLAG_FLASH_RED_EYE_SUPPORTED = 64; // 0x40
+    field public static final short FLAG_FLASH_RETURN_LIGHT_DETECTED = 6; // 0x6
+    field public static final short FLAG_FLASH_RETURN_LIGHT_NOT_DETECTED = 4; // 0x4
+    field public static final short FORMAT_CHUNKY = 1; // 0x1
+    field public static final short FORMAT_PLANAR = 2; // 0x2
+    field public static final short GAIN_CONTROL_HIGH_GAIN_DOWN = 4; // 0x4
+    field public static final short GAIN_CONTROL_HIGH_GAIN_UP = 2; // 0x2
+    field public static final short GAIN_CONTROL_LOW_GAIN_DOWN = 3; // 0x3
+    field public static final short GAIN_CONTROL_LOW_GAIN_UP = 1; // 0x1
+    field public static final short GAIN_CONTROL_NONE = 0; // 0x0
+    field public static final java.lang.String GPS_DIRECTION_MAGNETIC = "M";
+    field public static final java.lang.String GPS_DIRECTION_TRUE = "T";
+    field public static final java.lang.String GPS_DISTANCE_KILOMETERS = "K";
+    field public static final java.lang.String GPS_DISTANCE_MILES = "M";
+    field public static final java.lang.String GPS_DISTANCE_NAUTICAL_MILES = "N";
+    field public static final java.lang.String GPS_MEASUREMENT_2D = "2";
+    field public static final java.lang.String GPS_MEASUREMENT_3D = "3";
+    field public static final short GPS_MEASUREMENT_DIFFERENTIAL_CORRECTED = 1; // 0x1
+    field public static final java.lang.String GPS_MEASUREMENT_INTERRUPTED = "V";
+    field public static final java.lang.String GPS_MEASUREMENT_IN_PROGRESS = "A";
+    field public static final short GPS_MEASUREMENT_NO_DIFFERENTIAL = 0; // 0x0
+    field public static final java.lang.String GPS_SPEED_KILOMETERS_PER_HOUR = "K";
+    field public static final java.lang.String GPS_SPEED_KNOTS = "N";
+    field public static final java.lang.String GPS_SPEED_MILES_PER_HOUR = "M";
+    field public static final java.lang.String LATITUDE_NORTH = "N";
+    field public static final java.lang.String LATITUDE_SOUTH = "S";
+    field public static final short LIGHT_SOURCE_CLOUDY_WEATHER = 10; // 0xa
+    field public static final short LIGHT_SOURCE_COOL_WHITE_FLUORESCENT = 14; // 0xe
+    field public static final short LIGHT_SOURCE_D50 = 23; // 0x17
+    field public static final short LIGHT_SOURCE_D55 = 20; // 0x14
+    field public static final short LIGHT_SOURCE_D65 = 21; // 0x15
+    field public static final short LIGHT_SOURCE_D75 = 22; // 0x16
+    field public static final short LIGHT_SOURCE_DAYLIGHT = 1; // 0x1
+    field public static final short LIGHT_SOURCE_DAYLIGHT_FLUORESCENT = 12; // 0xc
+    field public static final short LIGHT_SOURCE_DAY_WHITE_FLUORESCENT = 13; // 0xd
+    field public static final short LIGHT_SOURCE_FINE_WEATHER = 9; // 0x9
+    field public static final short LIGHT_SOURCE_FLASH = 4; // 0x4
+    field public static final short LIGHT_SOURCE_FLUORESCENT = 2; // 0x2
+    field public static final short LIGHT_SOURCE_ISO_STUDIO_TUNGSTEN = 24; // 0x18
+    field public static final short LIGHT_SOURCE_OTHER = 255; // 0xff
+    field public static final short LIGHT_SOURCE_SHADE = 11; // 0xb
+    field public static final short LIGHT_SOURCE_STANDARD_LIGHT_A = 17; // 0x11
+    field public static final short LIGHT_SOURCE_STANDARD_LIGHT_B = 18; // 0x12
+    field public static final short LIGHT_SOURCE_STANDARD_LIGHT_C = 19; // 0x13
+    field public static final short LIGHT_SOURCE_TUNGSTEN = 3; // 0x3
+    field public static final short LIGHT_SOURCE_UNKNOWN = 0; // 0x0
+    field public static final short LIGHT_SOURCE_WARM_WHITE_FLUORESCENT = 16; // 0x10
+    field public static final short LIGHT_SOURCE_WHITE_FLUORESCENT = 15; // 0xf
+    field public static final java.lang.String LONGITUDE_EAST = "E";
+    field public static final java.lang.String LONGITUDE_WEST = "W";
+    field public static final short METERING_MODE_AVERAGE = 1; // 0x1
+    field public static final short METERING_MODE_CENTER_WEIGHT_AVERAGE = 2; // 0x2
+    field public static final short METERING_MODE_MULTI_SPOT = 4; // 0x4
+    field public static final short METERING_MODE_OTHER = 255; // 0xff
+    field public static final short METERING_MODE_PARTIAL = 6; // 0x6
+    field public static final short METERING_MODE_PATTERN = 5; // 0x5
+    field public static final short METERING_MODE_SPOT = 3; // 0x3
+    field public static final short METERING_MODE_UNKNOWN = 0; // 0x0
+    field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2
+    field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4
+    field public static final int ORIENTATION_NORMAL = 1; // 0x1
+    field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3
+    field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8
+    field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6
+    field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5
+    field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7
+    field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+    field public static final int ORIGINAL_RESOLUTION_IMAGE = 0; // 0x0
+    field public static final int PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO = 1; // 0x1
+    field public static final int PHOTOMETRIC_INTERPRETATION_RGB = 2; // 0x2
+    field public static final int PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO = 0; // 0x0
+    field public static final int PHOTOMETRIC_INTERPRETATION_YCBCR = 6; // 0x6
+    field public static final int REDUCED_RESOLUTION_IMAGE = 1; // 0x1
+    field public static final short RENDERED_PROCESS_CUSTOM = 1; // 0x1
+    field public static final short RENDERED_PROCESS_NORMAL = 0; // 0x0
+    field public static final short RESOLUTION_UNIT_CENTIMETERS = 3; // 0x3
+    field public static final short RESOLUTION_UNIT_INCHES = 2; // 0x2
+    field public static final short SATURATION_HIGH = 0; // 0x0
+    field public static final short SATURATION_LOW = 0; // 0x0
+    field public static final short SATURATION_NORMAL = 0; // 0x0
+    field public static final short SCENE_CAPTURE_TYPE_LANDSCAPE = 1; // 0x1
+    field public static final short SCENE_CAPTURE_TYPE_NIGHT = 3; // 0x3
+    field public static final short SCENE_CAPTURE_TYPE_PORTRAIT = 2; // 0x2
+    field public static final short SCENE_CAPTURE_TYPE_STANDARD = 0; // 0x0
+    field public static final short SCENE_TYPE_DIRECTLY_PHOTOGRAPHED = 1; // 0x1
+    field public static final short SENSITIVITY_TYPE_ISO_SPEED = 3; // 0x3
+    field public static final short SENSITIVITY_TYPE_REI = 2; // 0x2
+    field public static final short SENSITIVITY_TYPE_REI_AND_ISO = 6; // 0x6
+    field public static final short SENSITIVITY_TYPE_SOS = 1; // 0x1
+    field public static final short SENSITIVITY_TYPE_SOS_AND_ISO = 5; // 0x5
+    field public static final short SENSITIVITY_TYPE_SOS_AND_REI = 4; // 0x4
+    field public static final short SENSITIVITY_TYPE_SOS_AND_REI_AND_ISO = 7; // 0x7
+    field public static final short SENSITIVITY_TYPE_UNKNOWN = 0; // 0x0
+    field public static final short SENSOR_TYPE_COLOR_SEQUENTIAL = 5; // 0x5
+    field public static final short SENSOR_TYPE_COLOR_SEQUENTIAL_LINEAR = 8; // 0x8
+    field public static final short SENSOR_TYPE_NOT_DEFINED = 1; // 0x1
+    field public static final short SENSOR_TYPE_ONE_CHIP = 2; // 0x2
+    field public static final short SENSOR_TYPE_THREE_CHIP = 4; // 0x4
+    field public static final short SENSOR_TYPE_TRILINEAR = 7; // 0x7
+    field public static final short SENSOR_TYPE_TWO_CHIP = 3; // 0x3
+    field public static final short SHARPNESS_HARD = 2; // 0x2
+    field public static final short SHARPNESS_NORMAL = 0; // 0x0
+    field public static final short SHARPNESS_SOFT = 1; // 0x1
+    field public static final short SUBJECT_DISTANCE_RANGE_CLOSE_VIEW = 2; // 0x2
+    field public static final short SUBJECT_DISTANCE_RANGE_DISTANT_VIEW = 3; // 0x3
+    field public static final short SUBJECT_DISTANCE_RANGE_MACRO = 1; // 0x1
+    field public static final short SUBJECT_DISTANCE_RANGE_UNKNOWN = 0; // 0x0
+    field public static final java.lang.String TAG_APERTURE_VALUE = "ApertureValue";
+    field public static final java.lang.String TAG_ARTIST = "Artist";
+    field public static final java.lang.String TAG_BITS_PER_SAMPLE = "BitsPerSample";
+    field public static final java.lang.String TAG_BODY_SERIAL_NUMBER = "BodySerialNumber";
+    field public static final java.lang.String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
+    field public static final java.lang.String TAG_CAMARA_OWNER_NAME = "CameraOwnerName";
+    field public static final java.lang.String TAG_CFA_PATTERN = "CFAPattern";
+    field public static final java.lang.String TAG_COLOR_SPACE = "ColorSpace";
+    field public static final java.lang.String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
+    field public static final java.lang.String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
+    field public static final java.lang.String TAG_COMPRESSION = "Compression";
+    field public static final java.lang.String TAG_CONTRAST = "Contrast";
+    field public static final java.lang.String TAG_COPYRIGHT = "Copyright";
+    field public static final java.lang.String TAG_CUSTOM_RENDERED = "CustomRendered";
+    field public static final java.lang.String TAG_DATETIME = "DateTime";
+    field public static final java.lang.String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
+    field public static final java.lang.String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
+    field public static final java.lang.String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
+    field public static final java.lang.String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
+    field public static final java.lang.String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
+    field public static final java.lang.String TAG_DNG_VERSION = "DNGVersion";
+    field public static final java.lang.String TAG_EXIF_VERSION = "ExifVersion";
+    field public static final java.lang.String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
+    field public static final java.lang.String TAG_EXPOSURE_INDEX = "ExposureIndex";
+    field public static final java.lang.String TAG_EXPOSURE_MODE = "ExposureMode";
+    field public static final java.lang.String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
+    field public static final java.lang.String TAG_EXPOSURE_TIME = "ExposureTime";
+    field public static final java.lang.String TAG_FILE_SOURCE = "FileSource";
+    field public static final java.lang.String TAG_FLASH = "Flash";
+    field public static final java.lang.String TAG_FLASHPIX_VERSION = "FlashpixVersion";
+    field public static final java.lang.String TAG_FLASH_ENERGY = "FlashEnergy";
+    field public static final java.lang.String TAG_FOCAL_LENGTH = "FocalLength";
+    field public static final java.lang.String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
+    field public static final java.lang.String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
+    field public static final java.lang.String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
+    field public static final java.lang.String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
+    field public static final java.lang.String TAG_F_NUMBER = "FNumber";
+    field public static final java.lang.String TAG_GAIN_CONTROL = "GainControl";
+    field public static final java.lang.String TAG_GAMMA = "Gamma";
+    field public static final java.lang.String TAG_GPS_ALTITUDE = "GPSAltitude";
+    field public static final java.lang.String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
+    field public static final java.lang.String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
+    field public static final java.lang.String TAG_GPS_DATESTAMP = "GPSDateStamp";
+    field public static final java.lang.String TAG_GPS_DEST_BEARING = "GPSDestBearing";
+    field public static final java.lang.String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
+    field public static final java.lang.String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
+    field public static final java.lang.String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
+    field public static final java.lang.String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
+    field public static final java.lang.String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
+    field public static final java.lang.String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
+    field public static final java.lang.String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
+    field public static final java.lang.String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
+    field public static final java.lang.String TAG_GPS_DOP = "GPSDOP";
+    field public static final java.lang.String TAG_GPS_H_POSITIONING_ERROR = "GPSHPositioningError";
+    field public static final java.lang.String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
+    field public static final java.lang.String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
+    field public static final java.lang.String TAG_GPS_LATITUDE = "GPSLatitude";
+    field public static final java.lang.String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
+    field public static final java.lang.String TAG_GPS_LONGITUDE = "GPSLongitude";
+    field public static final java.lang.String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
+    field public static final java.lang.String TAG_GPS_MAP_DATUM = "GPSMapDatum";
+    field public static final java.lang.String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
+    field public static final java.lang.String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
+    field public static final java.lang.String TAG_GPS_SATELLITES = "GPSSatellites";
+    field public static final java.lang.String TAG_GPS_SPEED = "GPSSpeed";
+    field public static final java.lang.String TAG_GPS_SPEED_REF = "GPSSpeedRef";
+    field public static final java.lang.String TAG_GPS_STATUS = "GPSStatus";
+    field public static final java.lang.String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
+    field public static final java.lang.String TAG_GPS_TRACK = "GPSTrack";
+    field public static final java.lang.String TAG_GPS_TRACK_REF = "GPSTrackRef";
+    field public static final java.lang.String TAG_GPS_VERSION_ID = "GPSVersionID";
+    field public static final java.lang.String TAG_IMAGE_DESCRIPTION = "ImageDescription";
+    field public static final java.lang.String TAG_IMAGE_LENGTH = "ImageLength";
+    field public static final java.lang.String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
+    field public static final java.lang.String TAG_IMAGE_WIDTH = "ImageWidth";
+    field public static final java.lang.String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
+    field public static final java.lang.String TAG_ISO_SPEED = "ISOSpeed";
+    field public static final java.lang.String TAG_ISO_SPEED_LATITUDE_YYY = "ISOSpeedLatitudeyyy";
+    field public static final java.lang.String TAG_ISO_SPEED_LATITUDE_ZZZ = "ISOSpeedLatitudezzz";
+    field public static final deprecated java.lang.String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
+    field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
+    field public static final java.lang.String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
+    field public static final java.lang.String TAG_LENS_MAKE = "LensMake";
+    field public static final java.lang.String TAG_LENS_MODEL = "LensModel";
+    field public static final java.lang.String TAG_LENS_SERIAL_NUMBER = "LensSerialNumber";
+    field public static final java.lang.String TAG_LENS_SPECIFICATION = "LensSpecification";
+    field public static final java.lang.String TAG_LIGHT_SOURCE = "LightSource";
+    field public static final java.lang.String TAG_MAKE = "Make";
+    field public static final java.lang.String TAG_MAKER_NOTE = "MakerNote";
+    field public static final java.lang.String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
+    field public static final java.lang.String TAG_METERING_MODE = "MeteringMode";
+    field public static final java.lang.String TAG_MODEL = "Model";
+    field public static final java.lang.String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
+    field public static final java.lang.String TAG_OECF = "OECF";
+    field public static final java.lang.String TAG_ORF_ASPECT_FRAME = "AspectFrame";
+    field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
+    field public static final java.lang.String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
+    field public static final java.lang.String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
+    field public static final java.lang.String TAG_ORIENTATION = "Orientation";
+    field public static final java.lang.String TAG_PHOTOGRAPHIC_SENSITIVITY = "PhotographicSensitivity";
+    field public static final java.lang.String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
+    field public static final java.lang.String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
+    field public static final java.lang.String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
+    field public static final java.lang.String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
+    field public static final java.lang.String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
+    field public static final java.lang.String TAG_RECOMMENDED_EXPOSURE_INDEX = "RecommendedExposureIndex";
+    field public static final java.lang.String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
+    field public static final java.lang.String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
+    field public static final java.lang.String TAG_RESOLUTION_UNIT = "ResolutionUnit";
+    field public static final java.lang.String TAG_ROWS_PER_STRIP = "RowsPerStrip";
+    field public static final java.lang.String TAG_RW2_ISO = "ISO";
+    field public static final java.lang.String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+    field public static final java.lang.String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
+    field public static final java.lang.String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
+    field public static final java.lang.String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
+    field public static final java.lang.String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
+    field public static final java.lang.String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
+    field public static final java.lang.String TAG_SATURATION = "Saturation";
+    field public static final java.lang.String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
+    field public static final java.lang.String TAG_SCENE_TYPE = "SceneType";
+    field public static final java.lang.String TAG_SENSING_METHOD = "SensingMethod";
+    field public static final java.lang.String TAG_SENSITIVITY_TYPE = "SensitivityType";
+    field public static final java.lang.String TAG_SHARPNESS = "Sharpness";
+    field public static final java.lang.String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
+    field public static final java.lang.String TAG_SOFTWARE = "Software";
+    field public static final java.lang.String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
+    field public static final java.lang.String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
+    field public static final java.lang.String TAG_STANDARD_OUTPUT_SENSITIVITY = "StandardOutputSensitivity";
+    field public static final java.lang.String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
+    field public static final java.lang.String TAG_STRIP_OFFSETS = "StripOffsets";
+    field public static final java.lang.String TAG_SUBFILE_TYPE = "SubfileType";
+    field public static final java.lang.String TAG_SUBJECT_AREA = "SubjectArea";
+    field public static final java.lang.String TAG_SUBJECT_DISTANCE = "SubjectDistance";
+    field public static final java.lang.String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
+    field public static final java.lang.String TAG_SUBJECT_LOCATION = "SubjectLocation";
+    field public static final java.lang.String TAG_SUBSEC_TIME = "SubSecTime";
+    field public static final java.lang.String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
+    field public static final java.lang.String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
+    field public static final java.lang.String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
+    field public static final java.lang.String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
+    field public static final java.lang.String TAG_TRANSFER_FUNCTION = "TransferFunction";
+    field public static final java.lang.String TAG_USER_COMMENT = "UserComment";
+    field public static final java.lang.String TAG_WHITE_BALANCE = "WhiteBalance";
+    field public static final java.lang.String TAG_WHITE_POINT = "WhitePoint";
+    field public static final java.lang.String TAG_X_RESOLUTION = "XResolution";
+    field public static final java.lang.String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
+    field public static final java.lang.String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
+    field public static final java.lang.String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
+    field public static final java.lang.String TAG_Y_RESOLUTION = "YResolution";
+    field public static final deprecated int WHITEBALANCE_AUTO = 0; // 0x0
+    field public static final deprecated int WHITEBALANCE_MANUAL = 1; // 0x1
+    field public static final short WHITE_BALANCE_AUTO = 0; // 0x0
+    field public static final short WHITE_BALANCE_MANUAL = 1; // 0x1
+    field public static final short Y_CB_CR_POSITIONING_CENTERED = 1; // 0x1
+    field public static final short Y_CB_CR_POSITIONING_CO_SITED = 2; // 0x2
+  }
+
+}
+
diff --git a/fragment/Android.mk b/fragment/Android.mk
deleted file mode 100644
index adb6764..0000000
--- a/fragment/Android.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-fragment \
-#       android-support-compat \
-#       android-support-media-compat \
-#       android-support-core-ui \
-#       android-support-core-utils
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-fragment
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat \
-    android-support-core-ui \
-    android-support-core-utils
-LOCAL_STATIC_ANDROID_LIBRARIES := \
-    android-arch-lifecycle-livedata-core \
-    android-arch-lifecycle-viewmodel
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/fragment/api/27.1.0.txt b/fragment/api/27.1.0.txt
new file mode 100644
index 0000000..5df18f8
--- /dev/null
+++ b/fragment/api/27.1.0.txt
@@ -0,0 +1,404 @@
+package android.support.v4.app {
+
+  public class DialogFragment extends android.support.v4.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    ctor public DialogFragment();
+    method public void dismiss();
+    method public void dismissAllowingStateLoss();
+    method public android.app.Dialog getDialog();
+    method public boolean getShowsDialog();
+    method public int getTheme();
+    method public boolean isCancelable();
+    method public void onCancel(android.content.DialogInterface);
+    method public android.app.Dialog onCreateDialog(android.os.Bundle);
+    method public void onDismiss(android.content.DialogInterface);
+    method public void setCancelable(boolean);
+    method public void setShowsDialog(boolean);
+    method public void setStyle(int, int);
+    method public void show(android.support.v4.app.FragmentManager, java.lang.String);
+    method public int show(android.support.v4.app.FragmentTransaction, java.lang.String);
+    method public void showNow(android.support.v4.app.FragmentManager, java.lang.String);
+    field public static final int STYLE_NORMAL = 0; // 0x0
+    field public static final int STYLE_NO_FRAME = 2; // 0x2
+    field public static final int STYLE_NO_INPUT = 3; // 0x3
+    field public static final int STYLE_NO_TITLE = 1; // 0x1
+  }
+
+  public class Fragment implements android.content.ComponentCallbacks android.arch.lifecycle.LifecycleOwner android.view.View.OnCreateContextMenuListener android.arch.lifecycle.ViewModelStoreOwner {
+    ctor public Fragment();
+    method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public final boolean equals(java.lang.Object);
+    method public final android.support.v4.app.FragmentActivity getActivity();
+    method public boolean getAllowEnterTransitionOverlap();
+    method public boolean getAllowReturnTransitionOverlap();
+    method public final android.os.Bundle getArguments();
+    method public final android.support.v4.app.FragmentManager getChildFragmentManager();
+    method public android.content.Context getContext();
+    method public java.lang.Object getEnterTransition();
+    method public java.lang.Object getExitTransition();
+    method public final android.support.v4.app.FragmentManager getFragmentManager();
+    method public final java.lang.Object getHost();
+    method public final int getId();
+    method public final android.view.LayoutInflater getLayoutInflater();
+    method public android.arch.lifecycle.Lifecycle getLifecycle();
+    method public android.support.v4.app.LoaderManager getLoaderManager();
+    method public final android.support.v4.app.Fragment getParentFragment();
+    method public java.lang.Object getReenterTransition();
+    method public final android.content.res.Resources getResources();
+    method public final boolean getRetainInstance();
+    method public java.lang.Object getReturnTransition();
+    method public java.lang.Object getSharedElementEnterTransition();
+    method public java.lang.Object getSharedElementReturnTransition();
+    method public final java.lang.String getString(int);
+    method public final java.lang.String getString(int, java.lang.Object...);
+    method public final java.lang.String getTag();
+    method public final android.support.v4.app.Fragment getTargetFragment();
+    method public final int getTargetRequestCode();
+    method public final java.lang.CharSequence getText(int);
+    method public boolean getUserVisibleHint();
+    method public android.view.View getView();
+    method public android.arch.lifecycle.ViewModelStore getViewModelStore();
+    method public final int hashCode();
+    method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String);
+    method public static android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+    method public final boolean isAdded();
+    method public final boolean isDetached();
+    method public final boolean isHidden();
+    method public final boolean isInLayout();
+    method public final boolean isRemoving();
+    method public final boolean isResumed();
+    method public final boolean isStateSaved();
+    method public final boolean isVisible();
+    method public void onActivityCreated(android.os.Bundle);
+    method public void onActivityResult(int, int, android.content.Intent);
+    method public void onAttach(android.content.Context);
+    method public deprecated void onAttach(android.app.Activity);
+    method public void onAttachFragment(android.support.v4.app.Fragment);
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public boolean onContextItemSelected(android.view.MenuItem);
+    method public void onCreate(android.os.Bundle);
+    method public android.view.animation.Animation onCreateAnimation(int, boolean, int);
+    method public android.animation.Animator onCreateAnimator(int, boolean, int);
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+    method public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public void onDestroy();
+    method public void onDestroyOptionsMenu();
+    method public void onDestroyView();
+    method public void onDetach();
+    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+    method public void onHiddenChanged(boolean);
+    method public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+    method public deprecated void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+    method public void onLowMemory();
+    method public void onMultiWindowModeChanged(boolean);
+    method public boolean onOptionsItemSelected(android.view.MenuItem);
+    method public void onOptionsMenuClosed(android.view.Menu);
+    method public void onPause();
+    method public void onPictureInPictureModeChanged(boolean);
+    method public void onPrepareOptionsMenu(android.view.Menu);
+    method public void onRequestPermissionsResult(int, java.lang.String[], int[]);
+    method public void onResume();
+    method public void onSaveInstanceState(android.os.Bundle);
+    method public void onStart();
+    method public void onStop();
+    method public void onViewCreated(android.view.View, android.os.Bundle);
+    method public void onViewStateRestored(android.os.Bundle);
+    method public void postponeEnterTransition();
+    method public void registerForContextMenu(android.view.View);
+    method public final void requestPermissions(java.lang.String[], int);
+    method public final android.support.v4.app.FragmentActivity requireActivity();
+    method public final android.content.Context requireContext();
+    method public final android.support.v4.app.FragmentManager requireFragmentManager();
+    method public final java.lang.Object requireHost();
+    method public void setAllowEnterTransitionOverlap(boolean);
+    method public void setAllowReturnTransitionOverlap(boolean);
+    method public void setArguments(android.os.Bundle);
+    method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+    method public void setEnterTransition(java.lang.Object);
+    method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+    method public void setExitTransition(java.lang.Object);
+    method public void setHasOptionsMenu(boolean);
+    method public void setInitialSavedState(android.support.v4.app.Fragment.SavedState);
+    method public void setMenuVisibility(boolean);
+    method public void setReenterTransition(java.lang.Object);
+    method public void setRetainInstance(boolean);
+    method public void setReturnTransition(java.lang.Object);
+    method public void setSharedElementEnterTransition(java.lang.Object);
+    method public void setSharedElementReturnTransition(java.lang.Object);
+    method public void setTargetFragment(android.support.v4.app.Fragment, int);
+    method public void setUserVisibleHint(boolean);
+    method public boolean shouldShowRequestPermissionRationale(java.lang.String);
+    method public void startActivity(android.content.Intent);
+    method public void startActivity(android.content.Intent, android.os.Bundle);
+    method public void startActivityForResult(android.content.Intent, int);
+    method public void startActivityForResult(android.content.Intent, int, android.os.Bundle);
+    method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public void startPostponedEnterTransition();
+    method public void unregisterForContextMenu(android.view.View);
+  }
+
+  public static class Fragment.InstantiationException extends java.lang.RuntimeException {
+    ctor public Fragment.InstantiationException(java.lang.String, java.lang.Exception);
+  }
+
+  public static class Fragment.SavedState implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.app.Fragment.SavedState> CREATOR;
+  }
+
+  public class FragmentActivity extends android.support.v4.app.SupportActivity implements android.support.v4.app.ActivityCompat.OnRequestPermissionsResultCallback android.support.v4.app.ActivityCompat.RequestPermissionsRequestCodeValidator android.arch.lifecycle.ViewModelStoreOwner {
+    ctor public FragmentActivity();
+    method public java.lang.Object getLastCustomNonConfigurationInstance();
+    method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+    method public android.support.v4.app.LoaderManager getSupportLoaderManager();
+    method public android.arch.lifecycle.ViewModelStore getViewModelStore();
+    method public void onAttachFragment(android.support.v4.app.Fragment);
+    method public void onMultiWindowModeChanged(boolean);
+    method public void onPictureInPictureModeChanged(boolean);
+    method protected void onResumeFragments();
+    method public java.lang.Object onRetainCustomNonConfigurationInstance();
+    method public final java.lang.Object onRetainNonConfigurationInstance();
+    method public void setEnterSharedElementCallback(android.support.v4.app.SharedElementCallback);
+    method public void setExitSharedElementCallback(android.support.v4.app.SharedElementCallback);
+    method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+    method public void startActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+    method public void startIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public void supportFinishAfterTransition();
+    method public deprecated void supportInvalidateOptionsMenu();
+    method public void supportPostponeEnterTransition();
+    method public void supportStartPostponedEnterTransition();
+    method public final void validateRequestPermissionsRequestCode(int);
+  }
+
+  public abstract class FragmentContainer {
+    ctor public FragmentContainer();
+    method public android.support.v4.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
+    method public abstract android.view.View onFindViewById(int);
+    method public abstract boolean onHasView();
+  }
+
+  public class FragmentController {
+    method public void attachHost(android.support.v4.app.Fragment);
+    method public static android.support.v4.app.FragmentController createController(android.support.v4.app.FragmentHostCallback<?>);
+    method public void dispatchActivityCreated();
+    method public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method public boolean dispatchContextItemSelected(android.view.MenuItem);
+    method public void dispatchCreate();
+    method public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method public void dispatchDestroy();
+    method public void dispatchDestroyView();
+    method public void dispatchLowMemory();
+    method public void dispatchMultiWindowModeChanged(boolean);
+    method public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+    method public void dispatchOptionsMenuClosed(android.view.Menu);
+    method public void dispatchPause();
+    method public void dispatchPictureInPictureModeChanged(boolean);
+    method public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+    method public void dispatchReallyStop();
+    method public void dispatchResume();
+    method public void dispatchStart();
+    method public void dispatchStop();
+    method public deprecated void doLoaderDestroy();
+    method public deprecated void doLoaderRetain();
+    method public deprecated void doLoaderStart();
+    method public deprecated void doLoaderStop(boolean);
+    method public deprecated void dumpLoaders(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public boolean execPendingActions();
+    method public android.support.v4.app.Fragment findFragmentByWho(java.lang.String);
+    method public java.util.List<android.support.v4.app.Fragment> getActiveFragments(java.util.List<android.support.v4.app.Fragment>);
+    method public int getActiveFragmentsCount();
+    method public android.support.v4.app.FragmentManager getSupportFragmentManager();
+    method public deprecated android.support.v4.app.LoaderManager getSupportLoaderManager();
+    method public void noteStateNotSaved();
+    method public android.view.View onCreateView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+    method public deprecated void reportLoaderStart();
+    method public deprecated void restoreAllState(android.os.Parcelable, java.util.List<android.support.v4.app.Fragment>);
+    method public void restoreAllState(android.os.Parcelable, android.support.v4.app.FragmentManagerNonConfig);
+    method public deprecated void restoreLoaderNonConfig(android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager>);
+    method public deprecated android.support.v4.util.SimpleArrayMap<java.lang.String, android.support.v4.app.LoaderManager> retainLoaderNonConfig();
+    method public android.support.v4.app.FragmentManagerNonConfig retainNestedNonConfig();
+    method public deprecated java.util.List<android.support.v4.app.Fragment> retainNonConfig();
+    method public android.os.Parcelable saveAllState();
+  }
+
+  public abstract class FragmentHostCallback<E> extends android.support.v4.app.FragmentContainer {
+    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public android.view.View onFindViewById(int);
+    method public abstract E onGetHost();
+    method public android.view.LayoutInflater onGetLayoutInflater();
+    method public int onGetWindowAnimations();
+    method public boolean onHasView();
+    method public boolean onHasWindowAnimations();
+    method public void onRequestPermissionsFromFragment(android.support.v4.app.Fragment, java.lang.String[], int);
+    method public boolean onShouldSaveFragmentState(android.support.v4.app.Fragment);
+    method public boolean onShouldShowRequestPermissionRationale(java.lang.String);
+    method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int);
+    method public void onStartActivityFromFragment(android.support.v4.app.Fragment, android.content.Intent, int, android.os.Bundle);
+    method public void onStartIntentSenderFromFragment(android.support.v4.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public void onSupportInvalidateOptionsMenu();
+  }
+
+  public abstract class FragmentManager {
+    ctor public FragmentManager();
+    method public abstract void addOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+    method public abstract android.support.v4.app.FragmentTransaction beginTransaction();
+    method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public static void enableDebugLogging(boolean);
+    method public abstract boolean executePendingTransactions();
+    method public abstract android.support.v4.app.Fragment findFragmentById(int);
+    method public abstract android.support.v4.app.Fragment findFragmentByTag(java.lang.String);
+    method public abstract android.support.v4.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+    method public abstract int getBackStackEntryCount();
+    method public abstract android.support.v4.app.Fragment getFragment(android.os.Bundle, java.lang.String);
+    method public abstract java.util.List<android.support.v4.app.Fragment> getFragments();
+    method public abstract android.support.v4.app.Fragment getPrimaryNavigationFragment();
+    method public abstract boolean isDestroyed();
+    method public abstract boolean isStateSaved();
+    method public abstract void popBackStack();
+    method public abstract void popBackStack(java.lang.String, int);
+    method public abstract void popBackStack(int, int);
+    method public abstract boolean popBackStackImmediate();
+    method public abstract boolean popBackStackImmediate(java.lang.String, int);
+    method public abstract boolean popBackStackImmediate(int, int);
+    method public abstract void putFragment(android.os.Bundle, java.lang.String, android.support.v4.app.Fragment);
+    method public abstract void registerFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+    method public abstract void removeOnBackStackChangedListener(android.support.v4.app.FragmentManager.OnBackStackChangedListener);
+    method public abstract android.support.v4.app.Fragment.SavedState saveFragmentInstanceState(android.support.v4.app.Fragment);
+    method public abstract void unregisterFragmentLifecycleCallbacks(android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks);
+    field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+  }
+
+  public static abstract interface FragmentManager.BackStackEntry {
+    method public abstract java.lang.CharSequence getBreadCrumbShortTitle();
+    method public abstract int getBreadCrumbShortTitleRes();
+    method public abstract java.lang.CharSequence getBreadCrumbTitle();
+    method public abstract int getBreadCrumbTitleRes();
+    method public abstract int getId();
+    method public abstract java.lang.String getName();
+  }
+
+  public static abstract class FragmentManager.FragmentLifecycleCallbacks {
+    ctor public FragmentManager.FragmentLifecycleCallbacks();
+    method public void onFragmentActivityCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+    method public void onFragmentAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+    method public void onFragmentCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+    method public void onFragmentDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+    method public void onFragmentDetached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+    method public void onFragmentPaused(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+    method public void onFragmentPreAttached(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.content.Context);
+    method public void onFragmentPreCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+    method public void onFragmentResumed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+    method public void onFragmentSaveInstanceState(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.os.Bundle);
+    method public void onFragmentStarted(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+    method public void onFragmentStopped(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+    method public void onFragmentViewCreated(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment, android.view.View, android.os.Bundle);
+    method public void onFragmentViewDestroyed(android.support.v4.app.FragmentManager, android.support.v4.app.Fragment);
+  }
+
+  public static abstract interface FragmentManager.OnBackStackChangedListener {
+    method public abstract void onBackStackChanged();
+  }
+
+  public class FragmentManagerNonConfig {
+  }
+
+  public abstract class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+    ctor public FragmentPagerAdapter(android.support.v4.app.FragmentManager);
+    method public abstract android.support.v4.app.Fragment getItem(int);
+    method public long getItemId(int);
+    method public boolean isViewFromObject(android.view.View, java.lang.Object);
+  }
+
+  public abstract class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+    ctor public FragmentStatePagerAdapter(android.support.v4.app.FragmentManager);
+    method public abstract android.support.v4.app.Fragment getItem(int);
+    method public boolean isViewFromObject(android.view.View, java.lang.Object);
+  }
+
+  public class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+    ctor public FragmentTabHost(android.content.Context);
+    ctor public FragmentTabHost(android.content.Context, android.util.AttributeSet);
+    method public void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+    method public void onTabChanged(java.lang.String);
+    method public deprecated void setup();
+    method public void setup(android.content.Context, android.support.v4.app.FragmentManager);
+    method public void setup(android.content.Context, android.support.v4.app.FragmentManager, int);
+  }
+
+  public abstract class FragmentTransaction {
+    ctor public FragmentTransaction();
+    method public abstract android.support.v4.app.FragmentTransaction add(android.support.v4.app.Fragment, java.lang.String);
+    method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment);
+    method public abstract android.support.v4.app.FragmentTransaction add(int, android.support.v4.app.Fragment, java.lang.String);
+    method public abstract android.support.v4.app.FragmentTransaction addSharedElement(android.view.View, java.lang.String);
+    method public abstract android.support.v4.app.FragmentTransaction addToBackStack(java.lang.String);
+    method public abstract android.support.v4.app.FragmentTransaction attach(android.support.v4.app.Fragment);
+    method public abstract int commit();
+    method public abstract int commitAllowingStateLoss();
+    method public abstract void commitNow();
+    method public abstract void commitNowAllowingStateLoss();
+    method public abstract android.support.v4.app.FragmentTransaction detach(android.support.v4.app.Fragment);
+    method public abstract android.support.v4.app.FragmentTransaction disallowAddToBackStack();
+    method public abstract android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment);
+    method public abstract boolean isAddToBackStackAllowed();
+    method public abstract boolean isEmpty();
+    method public abstract android.support.v4.app.FragmentTransaction remove(android.support.v4.app.Fragment);
+    method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment);
+    method public abstract android.support.v4.app.FragmentTransaction replace(int, android.support.v4.app.Fragment, java.lang.String);
+    method public abstract android.support.v4.app.FragmentTransaction runOnCommit(java.lang.Runnable);
+    method public abstract deprecated android.support.v4.app.FragmentTransaction setAllowOptimization(boolean);
+    method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(int);
+    method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(java.lang.CharSequence);
+    method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(int);
+    method public abstract android.support.v4.app.FragmentTransaction setBreadCrumbTitle(java.lang.CharSequence);
+    method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int);
+    method public abstract android.support.v4.app.FragmentTransaction setCustomAnimations(int, int, int, int);
+    method public abstract android.support.v4.app.FragmentTransaction setPrimaryNavigationFragment(android.support.v4.app.Fragment);
+    method public abstract android.support.v4.app.FragmentTransaction setReorderingAllowed(boolean);
+    method public abstract android.support.v4.app.FragmentTransaction setTransition(int);
+    method public abstract android.support.v4.app.FragmentTransaction setTransitionStyle(int);
+    method public abstract android.support.v4.app.FragmentTransaction show(android.support.v4.app.Fragment);
+    field public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
+    field public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
+    field public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
+    field public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
+    field public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
+    field public static final int TRANSIT_NONE = 0; // 0x0
+    field public static final int TRANSIT_UNSET = -1; // 0xffffffff
+  }
+
+  public class ListFragment extends android.support.v4.app.Fragment {
+    ctor public ListFragment();
+    method public android.widget.ListAdapter getListAdapter();
+    method public android.widget.ListView getListView();
+    method public long getSelectedItemId();
+    method public int getSelectedItemPosition();
+    method public void onListItemClick(android.widget.ListView, android.view.View, int, long);
+    method public void setEmptyText(java.lang.CharSequence);
+    method public void setListAdapter(android.widget.ListAdapter);
+    method public void setListShown(boolean);
+    method public void setListShownNoAnimation(boolean);
+    method public void setSelection(int);
+  }
+
+  public abstract class LoaderManager {
+    ctor public LoaderManager();
+    method public abstract void destroyLoader(int);
+    method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public static void enableDebugLogging(boolean);
+    method public abstract <D> android.support.v4.content.Loader<D> getLoader(int);
+    method public boolean hasRunningLoaders();
+    method public abstract <D> android.support.v4.content.Loader<D> initLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract <D> android.support.v4.content.Loader<D> restartLoader(int, android.os.Bundle, android.support.v4.app.LoaderManager.LoaderCallbacks<D>);
+  }
+
+  public static abstract interface LoaderManager.LoaderCallbacks<D> {
+    method public abstract android.support.v4.content.Loader<D> onCreateLoader(int, android.os.Bundle);
+    method public abstract void onLoadFinished(android.support.v4.content.Loader<D>, D);
+    method public abstract void onLoaderReset(android.support.v4.content.Loader<D>);
+  }
+
+}
+
diff --git a/fragment/src/androidTest/java/android/support/v4/app/LoaderViewModelTest.java b/fragment/src/androidTest/java/android/support/v4/app/LoaderViewModelTest.java
index b53f7dd..911e169 100644
--- a/fragment/src/androidTest/java/android/support/v4/app/LoaderViewModelTest.java
+++ b/fragment/src/androidTest/java/android/support/v4/app/LoaderViewModelTest.java
@@ -17,6 +17,7 @@
 package android.support.v4.app;
 
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import android.content.Context;
@@ -63,6 +64,8 @@
         assertFalse("LoaderInfo shouldn't be destroyed before onCleared", info.mDestroyed);
         loaderViewModel.onCleared();
         assertTrue("LoaderInfo should be destroyed after onCleared", info.mDestroyed);
+        assertNull("LoaderInfo should be removed from LoaderViewModel after onCleared",
+                loaderViewModel.getLoader(0));
     }
 
     private class AlwaysRunningLoaderInfo extends LoaderManagerImpl.LoaderInfo<Boolean> {
diff --git a/fragment/src/androidTest/java/android/support/v4/app/test/LoaderActivity.java b/fragment/src/androidTest/java/android/support/v4/app/test/LoaderActivity.java
index cb02efd..3ae5bab 100644
--- a/fragment/src/androidTest/java/android/support/v4/app/test/LoaderActivity.java
+++ b/fragment/src/androidTest/java/android/support/v4/app/test/LoaderActivity.java
@@ -33,6 +33,8 @@
 
 public class LoaderActivity extends RecreatedActivity
         implements LoaderManager.LoaderCallbacks<String> {
+    private static final int TEXT_LOADER_ID = 14;
+
     public TextView textView;
     public TextView textViewB;
 
@@ -55,7 +57,7 @@
     @Override
     protected void onResume() {
         super.onResume();
-        getSupportLoaderManager().initLoader(0, null, this);
+        getSupportLoaderManager().initLoader(TEXT_LOADER_ID, null, this);
     }
 
     @NonNull
@@ -96,7 +98,7 @@
         @Override
         public void onCreate(@Nullable Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
-            getLoaderManager().initLoader(0, null, this);
+            getLoaderManager().initLoader(TEXT_LOADER_ID, null, this);
         }
 
         @Nullable
diff --git a/fragment/src/main/java/android/support/v4/app/LoaderManagerImpl.java b/fragment/src/main/java/android/support/v4/app/LoaderManagerImpl.java
index 951d908..fdde79f 100644
--- a/fragment/src/main/java/android/support/v4/app/LoaderManagerImpl.java
+++ b/fragment/src/main/java/android/support/v4/app/LoaderManagerImpl.java
@@ -294,6 +294,7 @@
                 LoaderInfo info = mLoaders.valueAt(index);
                 info.destroy();
             }
+            mLoaders.clear();
         }
 
         public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
diff --git a/graphics/Android.mk b/graphics/Android.mk
deleted file mode 100644
index 365b3b1..0000000
--- a/graphics/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH:= $(call my-dir)
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/graphics/OWNERS b/graphics/OWNERS
deleted file mode 100644
index 4e6deac..0000000
--- a/graphics/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-ztenghui@google.com
\ No newline at end of file
diff --git a/graphics/drawable/Android.mk b/graphics/drawable/Android.mk
deleted file mode 100644
index 6667dd9..0000000
--- a/graphics/drawable/Android.mk
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-# ---------------------------------------------
-#
-# Static vector drawable library
-#
-# ---------------------------------------------
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-vectordrawable
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, static/src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/static/res
-LOCAL_MANIFEST_FILE := static/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-# ---------------------------------------------
-#
-# Animated vector drawable library
-#
-# ---------------------------------------------
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-animatedvectordrawable
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, animated/src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/animated/res
-LOCAL_MANIFEST_FILE := animated/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat \
-    android-support-vectordrawable \
-    android-support-core-ui
-LOCAL_AAPT_FLAGS := --no-version-vectors --add-javadoc-annotation doconly
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/graphics/drawable/animated/api/27.1.0.txt b/graphics/drawable/animated/api/27.1.0.txt
new file mode 100644
index 0000000..ebdc90b
--- /dev/null
+++ b/graphics/drawable/animated/api/27.1.0.txt
@@ -0,0 +1,34 @@
+package android.support.graphics.drawable {
+
+  public abstract interface Animatable2Compat implements android.graphics.drawable.Animatable {
+    method public abstract void clearAnimationCallbacks();
+    method public abstract void registerAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+    method public abstract boolean unregisterAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+  }
+
+  public static abstract class Animatable2Compat.AnimationCallback {
+    ctor public Animatable2Compat.AnimationCallback();
+    method public void onAnimationEnd(android.graphics.drawable.Drawable);
+    method public void onAnimationStart(android.graphics.drawable.Drawable);
+  }
+
+  public class AnimatedVectorDrawableCompat extends android.graphics.drawable.Drawable implements android.support.graphics.drawable.Animatable2Compat android.support.v4.graphics.drawable.TintAwareDrawable {
+    method public void clearAnimationCallbacks();
+    method public static void clearAnimationCallbacks(android.graphics.drawable.Drawable);
+    method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat create(android.content.Context, int);
+    method public static android.support.graphics.drawable.AnimatedVectorDrawableCompat createFromXmlInner(android.content.Context, 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 void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public boolean isRunning();
+    method public void registerAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+    method public static void registerAnimationCallback(android.graphics.drawable.Drawable, android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void start();
+    method public void stop();
+    method public boolean unregisterAnimationCallback(android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+    method public static boolean unregisterAnimationCallback(android.graphics.drawable.Drawable, android.support.graphics.drawable.Animatable2Compat.AnimationCallback);
+  }
+
+}
+
diff --git a/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
index cff61bc..bc521cc 100644
--- a/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
+++ b/graphics/drawable/animated/src/main/java/android/support/graphics/drawable/AnimatedVectorDrawableCompat.java
@@ -118,6 +118,9 @@
  *         <td>trimPathStart</td>
  *     </tr>
  *     <tr>
+ *         <td>trimPathEnd</td>
+ *     </tr>
+ *     <tr>
  *         <td>trimPathOffset</td>
  *     </tr>
  * </table>
diff --git a/graphics/drawable/static/api/27.1.0.txt b/graphics/drawable/static/api/27.1.0.txt
new file mode 100644
index 0000000..2fe60b8
--- /dev/null
+++ b/graphics/drawable/static/api/27.1.0.txt
@@ -0,0 +1,13 @@
+package android.support.graphics.drawable {
+
+  public class VectorDrawableCompat extends android.graphics.drawable.Drawable implements android.support.v4.graphics.drawable.TintAwareDrawable {
+    method public static android.support.graphics.drawable.VectorDrawableCompat create(android.content.res.Resources, int, android.content.res.Resources.Theme);
+    method public static android.support.graphics.drawable.VectorDrawableCompat createFromXmlInner(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 void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+  }
+
+}
+
diff --git a/graphics/drawable/static/src/main/java/android/support/graphics/drawable/AndroidResources.java b/graphics/drawable/static/src/main/java/android/support/graphics/drawable/AndroidResources.java
index 31370a2..804c623 100644
--- a/graphics/drawable/static/src/main/java/android/support/graphics/drawable/AndroidResources.java
+++ b/graphics/drawable/static/src/main/java/android/support/graphics/drawable/AndroidResources.java
@@ -89,8 +89,7 @@
 
     public static final int[] STYLEABLE_ANIMATOR = {
             0x01010141, 0x01010198, 0x010101be, 0x010101bf,
-            0x010101c0, 0x010102de, 0x010102df, 0x010102e0,
-            0x0111009c
+            0x010101c0, 0x010102de, 0x010102df, 0x010102e0
     };
 
     public static final int STYLEABLE_ANIMATOR_INTERPOLATOR = 0;
@@ -101,7 +100,6 @@
     public static final int STYLEABLE_ANIMATOR_VALUE_FROM = 5;
     public static final int STYLEABLE_ANIMATOR_VALUE_TO = 6;
     public static final int STYLEABLE_ANIMATOR_VALUE_TYPE = 7;
-    public static final int STYLEABLE_ANIMATOR_REMOVE_BEFORE_M_RELEASE = 8;
     public static final int[] STYLEABLE_ANIMATOR_SET = {
             0x010102e2
     };
diff --git a/include-composite-deps.gradle b/include-composite-deps.gradle
new file mode 100644
index 0000000..c8a795f
--- /dev/null
+++ b/include-composite-deps.gradle
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+
+// This file is part of a a workaround for https://github.com/gradle/gradle/issues/1909 to enable
+// including this Support Library build as an included build. See include-support-library.gradle
+// for usage instructions.
+
+boolean currentBuildIsRootBuild = (gradle.parent == null)
+
+// Add included builds. This only works if this is currently the root build, so this script should
+// be applied to several builds and will only enable itself when part of the root build.
+if (currentBuildIsRootBuild) {
+  String buildScriptDir = buildscript.sourceFile.parent
+  File externalRoot = new File(buildScriptDir, '../../external')
+
+  includeBuild(new File(externalRoot, 'doclava'))
+  includeBuild(new File(externalRoot, 'jdiff'))
+}
+
+
diff --git a/include-support-library.gradle b/include-support-library.gradle
new file mode 100644
index 0000000..fec8041
--- /dev/null
+++ b/include-support-library.gradle
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+// This file enables using Support Library in a Composite Build. More information about Composite
+// Builds can be found at https://docs.gradle.org/current/userguide/composite_builds.html .
+// This file is a workaround for https://github.com/gradle/gradle/issues/1909 .
+
+// Projects that want to include the build of Support Library should apply this file to their
+// settings.gradle . For example, if Support Library is at the file path ~/support-library, then
+// to include Support Library in your build, add this line to the bottom of your settings.gradle:
+//
+//   apply(from:'~/support-library/frameworks/support/include-support-library.gradle')
+
+String buildScriptDir = buildscript.sourceFile.parent
+
+// include any builds required by Support Library
+apply(from:new File(buildScriptDir, 'include-composite-deps.gradle'))
+
+// include Support Library itself
+includeBuild(buildScriptDir)
+
diff --git a/jetifier/OWNERS b/jetifier/OWNERS
new file mode 100644
index 0000000..8ae348f
--- /dev/null
+++ b/jetifier/OWNERS
@@ -0,0 +1 @@
+pavlis@google.com
diff --git a/jetifier/jetifier/build.gradle b/jetifier/jetifier/build.gradle
index 0f13962..e69de29 100644
--- a/jetifier/jetifier/build.gradle
+++ b/jetifier/jetifier/build.gradle
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2017 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
- */
-
-buildscript {
-    ext.supportRootFolder = "${project.projectDir}/../.."
-    def prebuiltsDir = "${ext.supportRootFolder}/../../prebuilts"
-    repositories {
-        maven {
-            url "${prebuiltsDir}/tools/common/m2/repository"
-        }
-    }
-
-    ext.kotlin_version = '1.2.0'
-
-    dependencies {
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-    }
-}
-
-// upload anchor for subprojects to upload their artifacts to the local repo.
-task(mainUpload)
-
-subprojects {
-    group 'androidx.tools.jetifier'
-
-    ext.supportRootFolder = "${project.projectDir}/../../.."
-    def prebuiltsDir = "${ext.supportRootFolder}/../../prebuilts"
-    repositories {
-        maven {
-            url "${prebuiltsDir}/tools/common/m2/repository"
-        }
-    }
-
-    apply plugin: 'kotlin'
-
-    compileKotlin {
-        kotlinOptions.jvmTarget = "1.8"
-    }
-    compileTestKotlin {
-        kotlinOptions.jvmTarget = "1.8"
-    }
-
-    dependencies {
-        compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
-    }
-}
-
-ext.runningInBuildServer = System.env.DIST_DIR != null && System.env.OUT_DIR != null
-def setupOutDirs() {
-    /*
-     * With the build server you are given two env variables.
-     * The OUT_DIR is a temporary directory you can use to put things during the build.
-     * The DIST_DIR is where you want to save things from the build.
-     *
-     * The build server will copy the contents of DIST_DIR to somewhere and make it available.
-     */
-    if (ext.runningInBuildServer) {
-        buildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/support/build')
-                .getCanonicalFile()
-        project.ext.distDir = new File(System.env.DIST_DIR).getCanonicalFile()
-        // the build server does not pass the build number so we infer it from the last folder of
-        // the dist path.
-        ext.buildNumber = project.ext.distDir.getName()
-
-        // the build server should always print out full stack traces for any failures.
-        gradle.startParameter.showStacktrace = ShowStacktrace.ALWAYS
-    } else {
-        buildDir = file("${ext.supportRootFolder}/../../out/host/gradle/frameworks/support/jetifier/build")
-        project.ext.distDir = new File("${ext.supportRootFolder}/../../out/dist")
-        ext.buildNumber = 0
-    }
-
-    ext.repoDir = "file://$project.buildDir/repo"
-
-    subprojects {
-        // Change buildDir so that all plugins pick up the new value.
-        project.buildDir = new File("$project.parent.buildDir/../$project.name/build")
-        project.ext.distDir = new File("${ext.supportRootFolder}/../../out/dist")
-    }
-}
-
-def configureBuildOnServer() {
-    def buildOnServerTask = rootProject.tasks.create("buildOnServer")
-    rootProject.tasks.whenTaskAdded { task ->
-        if ("build".equals(task.name)) {
-            buildOnServerTask.dependsOn task
-        }
-    }
-    subprojects {
-        project.tasks.whenTaskAdded { task ->
-            if ("fatJar".equals(task.name)) {
-                buildOnServerTask.dependsOn task
-            }
-        }
-    }
-    buildOnServerTask.dependsOn "createArchive"
-}
-
-setupOutDirs()
-configureBuildOnServer()
-
-// anchor for prepare repo. This is post unzip.
-task prepareRepo() {
-    description "This task clears the repo folder to ensure that we run a fresh build every" +
-            " time we create arhives. Otherwise, snapshots will accumulate in the builds folder."
-    doFirst {
-        file(rootProject.ext.repoDir).deleteDir()
-        file(rootProject.ext.repoDir).mkdirs()
-    }
-}
-
-task createArchive(type : Zip) {
-    description "Creates a maven repository that includes just the libraries compiled in this" +
-            " project, without any history from prebuilts."
-    from rootProject.ext.repoDir
-    destinationDir rootProject.ext.distDir
-    into 'm2repository'
-    baseName = String.format("top-of-tree-m2repository-%s", project.ext.buildNumber)
-    dependsOn mainUpload
-}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/build.gradle b/jetifier/jetifier/core/build.gradle
index 72edcfa..2bf4d08 100644
--- a/jetifier/jetifier/core/build.gradle
+++ b/jetifier/jetifier/core/build.gradle
@@ -14,26 +14,31 @@
  * limitations under the License
  */
 
-apply plugin: 'maven'
+import static android.support.dependencies.DependenciesKt.KOTLIN_STDLIB
 
-version '0.2'
+import android.support.LibraryGroups
+import android.support.LibraryVersions
+
+plugins {
+    id("SupportKotlinLibraryPlugin")
+}
 
 dependencies {
     compile("org.ow2.asm:asm:5.2")
     compile("org.ow2.asm:asm-commons:5.2")
     compile("com.google.code.gson:gson:2.8.0")
     compile("org.jdom:jdom2:2.0.6")
+    compile(KOTLIN_STDLIB)
     testCompile("junit:junit:4.12")
     testCompile("com.google.truth:truth:0.31")
 }
 
-uploadArchives {
-    repositories {
-        mavenDeployer {
-            repository(url: rootProject.ext.repoDir)
-        }
-    }
+supportLibrary {
+    name = "Android Jetifier Core"
+    publish = true
+    mavenVersion = LibraryVersions.JETIFIER
+    mavenGroup = LibraryGroups.JETIFIER
+    generateDocs = false
+    inceptionYear = "2017"
+    description = "Android Jetifier Core"
 }
-
-rootProject.mainUpload.dependsOn tasks["uploadArchives"]
-tasks["uploadArchives"].dependsOn rootProject.prepareRepo
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/Processor.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/Processor.kt
index 5af8fb2..aa2e1e3 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/Processor.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/Processor.kt
@@ -23,6 +23,7 @@
 import android.support.tools.jetifier.core.transform.TransformationContext
 import android.support.tools.jetifier.core.transform.Transformer
 import android.support.tools.jetifier.core.transform.bytecode.ByteCodeTransformer
+import android.support.tools.jetifier.core.transform.metainf.MetaInfTransformer
 import android.support.tools.jetifier.core.transform.pom.PomDocument
 import android.support.tools.jetifier.core.transform.pom.PomScanner
 import android.support.tools.jetifier.core.transform.proguard.ProGuardTransformer
@@ -30,7 +31,6 @@
 import android.support.tools.jetifier.core.utils.Log
 import java.io.File
 import java.io.FileNotFoundException
-import java.nio.file.Files
 import java.nio.file.Path
 
 /**
@@ -38,20 +38,75 @@
  * the registered [Transformer]s over the set and creates new archives that will contain the
  * transformed files.
  */
-class Processor(private val config : Config) : ArchiveItemVisitor {
+class Processor private constructor (
+    private val context: TransformationContext,
+    private val transformers: List<Transformer>
+) : ArchiveItemVisitor {
 
     companion object {
         private const val TAG = "Processor"
-    }
 
-    private val context = TransformationContext(config)
+        /**
+         * Value of "restrictToPackagePrefixes" config for reversed jetification.
+         */
+        private const val REVERSE_RESTRICT_TO_PACKAGE = "androidx"
 
-    private val transformers = listOf(
+        /**
+         * Transformers to be used when refactoring general libraries.
+         */
+        private fun createTransformers(context: TransformationContext) = listOf(
             // Register your transformers here
             ByteCodeTransformer(context),
             XmlResourcesTransformer(context),
             ProGuardTransformer(context)
-    )
+        )
+
+        /**
+         * Transformers to be used when refactoring the support library itself.
+         */
+        private fun createSLTransformers(context: TransformationContext) = listOf(
+            // Register your transformers here
+            ByteCodeTransformer(context),
+            XmlResourcesTransformer(context),
+            ProGuardTransformer(context),
+            MetaInfTransformer(context)
+        )
+
+        /**
+         * Creates a new instance of the [Processor].
+         * [config] Transformation configuration
+         * [reversedMode] Whether the processor should run in reversed mode
+         * [rewritingSupportLib] Whether we are rewriting the support library itself
+         */
+        fun createProcessor(
+            config: Config,
+            reversedMode: Boolean = false,
+            rewritingSupportLib: Boolean = false
+        ): Processor {
+            var newConfig = config
+
+            if (reversedMode) {
+                newConfig = Config(
+                    restrictToPackagePrefixes = listOf(REVERSE_RESTRICT_TO_PACKAGE),
+                    rewriteRules = config.rewriteRules,
+                    slRules = config.slRules,
+                    pomRewriteRules = emptyList(), // TODO: This will need a new set of rules
+                    typesMap = config.typesMap.reverseMapOrDie(),
+                    proGuardMap = config.proGuardMap.reverseMapOrDie(),
+                    packageMap = config.packageMap.reverse()
+                )
+            }
+
+            val context = TransformationContext(newConfig, rewritingSupportLib, reversedMode)
+            val transformers = if (rewritingSupportLib) {
+                createSLTransformers(context)
+            } else {
+                createTransformers(context)
+            }
+
+            return Processor(context, transformers)
+        }
+    }
 
     /**
      * Transforms the input libraries given in [inputLibraries] using all the registered
@@ -62,7 +117,17 @@
      * - [XmlResourcesTransformer] for java native code
      * - [ProGuardTransformer] for PorGuard files
      */
-    fun transform(inputLibraries: Set<File>, outputPath: Path) : TransformationResult {
+    fun transform(inputLibraries: Set<File>,
+            outputPath: Path,
+            outputIsDir: Boolean
+    ): TransformationResult {
+        // 0) Validate arguments
+        if (!outputIsDir && inputLibraries.size > 1) {
+            throw IllegalArgumentException("Cannot process more than 1 library (" + inputLibraries +
+                    ") when it is requested tha the destination (" + outputPath +
+                    ") be made a file")
+        }
+
         // 1) Extract and load all libraries
         val libraries = loadLibraries(inputLibraries)
 
@@ -70,10 +135,10 @@
         val pomFiles = scanPomFiles(libraries)
 
         // 3) Transform all the libraries
-        libraries.forEach{ transformLibrary(it) }
+        libraries.forEach { transformLibrary(it) }
 
-        if (context.wasErrorFound()) {
-            throw IllegalArgumentException("There were ${context.mappingNotFoundFailuresCount}" +
+        if (context.errorsTotal() > 0) {
+            throw IllegalArgumentException("There were ${context.errorsTotal()}" +
                 " errors found during the remapping. Check the logs for more details.")
         }
 
@@ -84,7 +149,13 @@
         transformPomFiles(pomFiles)
 
         // 5) Repackage the libraries back to archives
-        val outputLibraries = libraries.map{ it.writeSelfToDir(outputPath) }.toSet()
+        val outputLibraries = libraries.map {
+            if (outputIsDir) {
+                it.writeSelfToDir(outputPath)
+            } else {
+                it.writeSelfToFile(outputPath)
+            }
+        }.toSet()
 
         // TODO: Filter out only the libraries that have been really changed
         return TransformationResult(
@@ -92,7 +163,7 @@
             filesToAdd = outputLibraries)
     }
 
-    private fun loadLibraries(inputLibraries : Iterable<File>) : List<Archive> {
+    private fun loadLibraries(inputLibraries: Iterable<File>): List<Archive> {
         val libraries = mutableListOf<Archive>()
         for (library in inputLibraries) {
             if (!library.canRead()) {
@@ -104,8 +175,8 @@
         return libraries.toList()
     }
 
-    private fun scanPomFiles(libraries: List<Archive>) : List<PomDocument> {
-        val scanner = PomScanner(config)
+    private fun scanPomFiles(libraries: List<Archive>): List<PomDocument> {
+        val scanner = PomScanner(context.config)
 
         libraries.forEach { scanner.scanArchiveForPomFile(it) }
         if (scanner.wasErrorFound()) {
@@ -118,7 +189,7 @@
 
     private fun transformPomFiles(files: List<PomDocument>) {
         files.forEach {
-            it.applyRules(config.pomRewriteRules)
+            it.applyRules(context.config.pomRewriteRules)
             it.saveBackToFileIfNeeded()
         }
     }
@@ -127,11 +198,12 @@
         Log.i(TAG, "Started new transformation")
         Log.i(TAG, "- Input file: %s", archive.relativePath)
 
+        context.libraryName = archive.fileName
         archive.accept(this)
     }
 
     override fun visit(archive: Archive) {
-        archive.files.forEach{ it.accept(this) }
+        archive.files.forEach { it.accept(this) }
     }
 
     override fun visit(archiveFile: ArchiveFile) {
@@ -145,5 +217,4 @@
         Log.i(TAG, "[Applied: %s] %s", transformer.javaClass.simpleName, archiveFile.relativePath)
         transformer.runTransform(archiveFile)
     }
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/Archive.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/Archive.kt
index 70ea68c..bac2ffb 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/Archive.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/Archive.kt
@@ -53,16 +53,21 @@
     }
 
     @Throws(IOException::class)
-    fun writeSelfToDir(outputDirPath: Path) : File {
+    fun writeSelfToDir(outputDirPath: Path): File {
         val outputPath = Paths.get(outputDirPath.toString(), fileName)
 
+        return writeSelfToFile(outputPath)
+    }
+
+    @Throws(IOException::class)
+    fun writeSelfToFile(outputPath: Path): File {
         if (Files.exists(outputPath)) {
             Log.i(TAG, "Deleting old output file")
             Files.delete(outputPath)
         }
 
         // Create directories if they don't exist yet
-        Files.createDirectories(outputDirPath)
+        Files.createDirectories(outputPath.parent)
 
         Log.i(TAG, "Writing archive: %s", outputPath.toUri())
         val file = outputPath.toFile()
@@ -88,7 +93,6 @@
         out.finish()
     }
 
-
     object Builder {
 
         @Throws(IOException::class)
@@ -102,8 +106,7 @@
         }
 
         @Throws(IOException::class)
-        private fun extractArchive(inputStream: InputStream, relativePath: Path)
-                : Archive {
+        private fun extractArchive(inputStream: InputStream, relativePath: Path): Archive {
             val zipIn = ZipInputStream(inputStream)
             val files = mutableListOf<ArchiveItem>()
 
@@ -136,9 +139,8 @@
             return ArchiveFile(relativePath, data)
         }
 
-        private fun isArchive(zipEntry: ZipEntry) : Boolean {
+        private fun isArchive(zipEntry: ZipEntry): Boolean {
             return ARCHIVE_EXTENSIONS.any { zipEntry.name.endsWith(it, ignoreCase = true) }
         }
-
     }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/ArchiveFile.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/ArchiveFile.kt
index 3054b71..8443773 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/ArchiveFile.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/archive/ArchiveFile.kt
@@ -23,9 +23,13 @@
 /**
  * Represents a file in the archive that is not an archive.
  */
-class ArchiveFile(override val relativePath: Path, var data: ByteArray) : ArchiveItem {
+class ArchiveFile(relativePath: Path, var data: ByteArray) : ArchiveItem {
 
-    override val fileName: String = relativePath.fileName.toString()
+    override var relativePath = relativePath
+        private set
+
+    override var fileName: String = relativePath.fileName.toString()
+        private set
 
     override fun accept(visitor: ArchiveItemVisitor) {
         visitor.visit(this)
@@ -36,4 +40,8 @@
         outputStream.write(data)
     }
 
+    fun updateRelativePath(newRelativePath: Path) {
+        this.relativePath = newRelativePath
+        this.fileName = relativePath.fileName.toString()
+    }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/config/Config.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/config/Config.kt
index 8d70d87..007130d 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/config/Config.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/config/Config.kt
@@ -19,6 +19,7 @@
 import android.support.tools.jetifier.core.rules.RewriteRule
 import android.support.tools.jetifier.core.transform.pom.PomRewriteRule
 import android.support.tools.jetifier.core.map.TypesMap
+import android.support.tools.jetifier.core.transform.PackageMap
 import android.support.tools.jetifier.core.transform.proguard.ProGuardTypesMap
 import com.google.gson.annotations.SerializedName
 
@@ -27,38 +28,44 @@
  *
  * [restrictToPackagePrefixes] Package prefixes that limit the scope of the rewriting
  * [rewriteRules] Rules to scan support libraries to generate [TypesMap]
+ * [slRules] List of rules used when rewriting the support library itself in the reversed mode to
+ * ignore packages that don't need rewriting anymore.
  * [pomRewriteRules] Rules to rewrite POM files
  * [typesMap] Map of all java types and fields to be used to rewrite libraries.
+ * [packageMap] Package map to be used to rewrite packages, used only during the support library
+ * rewrite.
  */
 data class Config(
         val restrictToPackagePrefixes: List<String>,
         val rewriteRules: List<RewriteRule>,
+        val slRules: List<RewriteRule>,
         val pomRewriteRules: List<PomRewriteRule>,
         val typesMap: TypesMap,
-        val proGuardMap: ProGuardTypesMap) {
+        val proGuardMap: ProGuardTypesMap,
+        val packageMap: PackageMap = PackageMap(PackageMap.DEFAULT_RULES)) {
 
     companion object {
         /** Path to the default config file located within the jar file. */
         const val DEFAULT_CONFIG_RES_PATH = "/default.generated.config"
     }
 
-    fun setNewMap(mappings: TypesMap) : Config {
-        return Config(
-            restrictToPackagePrefixes, rewriteRules, pomRewriteRules, mappings, proGuardMap)
+    fun setNewMap(mappings: TypesMap): Config {
+        return Config(restrictToPackagePrefixes, rewriteRules, slRules, pomRewriteRules,
+            mappings, proGuardMap)
     }
 
     /** Returns JSON data model of this class */
-    fun toJson() : JsonData {
+    fun toJson(): JsonData {
         return JsonData(
             restrictToPackagePrefixes,
             rewriteRules.map { it.toJson() }.toList(),
+            slRules.map { it.toJson() }.toList(),
             pomRewriteRules.map { it.toJson() }.toList(),
             typesMap.toJson(),
             proGuardMap.toJson()
         )
     }
 
-
     /**
      * JSON data model for [Config].
      */
@@ -69,6 +76,9 @@
             @SerializedName("rules")
             val rules: List<RewriteRule.JsonData?>,
 
+            @SerializedName("slRules")
+            val slRules: List<RewriteRule.JsonData?>?,
+
             @SerializedName("pomRules")
             val pomRules: List<PomRewriteRule.JsonData?>,
 
@@ -79,15 +89,15 @@
             val proGuardMap: ProGuardTypesMap.JsonData? = null) {
 
         /** Creates instance of [Config] */
-        fun toConfig() : Config {
+        fun toConfig(): Config {
             return Config(
-                restrictToPackages.filterNotNull(),
-                rules.filterNotNull().map { it.toRule() },
-                pomRules.filterNotNull().map { it.toRule() },
-                mappings?.toMappings() ?: TypesMap.EMPTY,
-                proGuardMap?.toMappings() ?: ProGuardTypesMap.EMPTY
+                restrictToPackagePrefixes = restrictToPackages.filterNotNull(),
+                rewriteRules = rules.filterNotNull().map { it.toRule() },
+                slRules = slRules?.filterNotNull()?.map { it.toRule() } ?: listOf(),
+                pomRewriteRules = pomRules.filterNotNull().map { it.toRule() },
+                typesMap = mappings?.toMappings() ?: TypesMap.EMPTY,
+                proGuardMap = proGuardMap?.toMappings() ?: ProGuardTypesMap.EMPTY
             )
         }
     }
-
 }
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/LibraryMapGenerator.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/LibraryMapGenerator.kt
index e52009f..c9d8f9f 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/LibraryMapGenerator.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/LibraryMapGenerator.kt
@@ -42,9 +42,7 @@
      * Creates the [TypesMap] based on the meta-data aggregated via previous [scanFile] calls
      */
     fun generateMap(): TypesMap {
-        val map = remapper.createTypesMap()
-        map.validateThatMapIsReversibleOrDie()
-        return map
+        return remapper.createTypesMap()
     }
 
     override fun visit(archive: Archive) {
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt
index 10abe1e..369cf91 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt
@@ -17,18 +17,16 @@
 package android.support.tools.jetifier.core.map
 
 import android.support.tools.jetifier.core.config.Config
-import android.support.tools.jetifier.core.rules.JavaField
 import android.support.tools.jetifier.core.rules.JavaType
 import android.support.tools.jetifier.core.transform.bytecode.CoreRemapper
-import android.support.tools.jetifier.core.transform.bytecode.asm.CustomClassRemapper
 import android.support.tools.jetifier.core.transform.bytecode.asm.CustomRemapper
 import android.support.tools.jetifier.core.utils.Log
 import org.objectweb.asm.ClassVisitor
-import java.util.regex.Pattern
+import org.objectweb.asm.commons.ClassRemapper
 
 /**
  * Hooks to asm remapping to collect data for [TypesMap] by applying all the [RewriteRule]s from the
- * given [config] on all discovered and eligible types and fields.
+ * given [config] on all discovered and eligible types.
  */
 class MapGeneratorRemapper(private val config: Config) : CoreRemapper {
 
@@ -36,26 +34,13 @@
         private const val TAG: String = "MapGeneratorRemapper"
     }
 
-    private val typesRewritesMap = hashMapOf<JavaType, JavaType>()
-    private val fieldsRewritesMap = hashMapOf<JavaField, JavaField>()
+    private val typesRewritesMap = mutableMapOf<JavaType, JavaType>()
 
     var isMapNotComplete = false
         private set
 
-    /**
-     * Ignore mPrefix types and anything that contains $ as these are internal fields that won't be
-     * ever referenced.
-     */
-    private val ignoredFields = Pattern.compile("(^m[A-Z]+.*$)|(.*\\$.*)")
-
-    /**
-     * Ignores types ending with '$digit' as these are private inner classes and won't be ever
-     * referenced.
-     */
-    private val ignoredTypes = Pattern.compile("^(.*)\\$[0-9]+$")
-
-    fun createClassRemapper(visitor: ClassVisitor): CustomClassRemapper {
-        return CustomClassRemapper(visitor, CustomRemapper(this))
+    fun createClassRemapper(visitor: ClassVisitor): ClassRemapper {
+        return ClassRemapper(visitor, CustomRemapper(this))
     }
 
     override fun rewriteType(type: JavaType): JavaType {
@@ -67,10 +52,6 @@
             return type
         }
 
-        if (isTypeIgnored(type)) {
-            return type
-        }
-
         // Try to find a rule
         for (rule in config.rewriteRules) {
             val typeRewriteResult = rule.apply(type)
@@ -92,58 +73,16 @@
         return type
     }
 
-    override fun rewriteField(field: JavaField): JavaField {
-        if (!isTypeSupported(field.owner)) {
-            return field
-        }
-
-        if (isTypeIgnored(field.owner) || isFieldIgnored(field)) {
-            return field
-        }
-
-        if (fieldsRewritesMap.contains(field)) {
-            return field
-        }
-
-        // Try to find a rule
-        for (rule in config.rewriteRules) {
-            val fieldRewriteResult = rule.apply(field)
-            if (fieldRewriteResult.isIgnored) {
-                Log.i(TAG, "Ignoring: " + field)
-                return field
-            }
-            if (fieldRewriteResult.result == null) {
-                continue
-            }
-            fieldsRewritesMap.put(field, fieldRewriteResult.result)
-            Log.i(TAG, "  map: %s -> %s", field, fieldRewriteResult.result)
-            return fieldRewriteResult.result
-        }
-
-        isMapNotComplete = true
-        Log.e(TAG, "No rule for: " + field)
-        fieldsRewritesMap.put(field, field) // Identity
-        return field
-    }
-
     override fun rewriteString(value: String): String {
         // We don't build map from strings
         return value
     }
 
     fun createTypesMap(): TypesMap {
-        return TypesMap(typesRewritesMap, fieldsRewritesMap)
+        return TypesMap(typesRewritesMap)
     }
 
     private fun isTypeSupported(type: JavaType): Boolean {
         return config.restrictToPackagePrefixes.any { type.fullName.startsWith(it) }
     }
-
-    private fun isTypeIgnored(type: JavaType): Boolean {
-        return ignoredTypes.matcher(type.fullName).matches()
-    }
-
-    private fun isFieldIgnored(field: JavaField): Boolean {
-        return ignoredFields.matcher(field.name).matches()
-    }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/TypesMap.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/TypesMap.kt
index b33d4bc..c5f221e 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/TypesMap.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/TypesMap.kt
@@ -16,54 +16,35 @@
 
 package android.support.tools.jetifier.core.map
 
-import android.support.tools.jetifier.core.rules.JavaField
 import android.support.tools.jetifier.core.rules.JavaType
 import android.support.tools.jetifier.core.rules.RewriteRule
 import android.support.tools.jetifier.core.utils.Log
 
 /**
- * Contains all the mappings needed to rewrite java types and fields.
+ * Contains all the mappings needed to rewrite java types.
  *
  * These mappings are generated by the preprocessor from existing support libraries and by applying
  * the given [RewriteRule]s.
  */
 data class TypesMap(
-        val types: Map<JavaType, JavaType>,
-        val fields: Map<JavaField, JavaField>) {
+        val types: Map<JavaType, JavaType>) {
 
     companion object {
         private const val TAG = "TypesMap"
 
-        val EMPTY = TypesMap(emptyMap(), emptyMap())
+        val EMPTY = TypesMap(emptyMap())
     }
 
     /** Returns JSON data model of this class */
     fun toJson(): JsonData {
-        return JsonData(
-                types = types.map { it.key.fullName to it.value.fullName }
-                        .toMap(),
-                fields = mapFields())
-    }
-
-    private fun mapFields(): Map<String, Map<String, List<String>>> {
-        val rawMap = mutableMapOf<String, MutableMap<String, MutableList<String>>>()
-
-        fields.forEach {
-            rawMap
-                .getOrPut(it.key.owner.fullName, { mutableMapOf() })
-                .getOrPut(it.value.owner.fullName, { mutableListOf() })
-                .add(it.key.name)
-        }
-        return rawMap
+        return JsonData(types.map { it.key.fullName to it.value.fullName }.toMap())
     }
 
     /**
-     * Validates that the current map can be used in reversed mode (values become keys). Throws
-     * exception if the map does not satisfy that.
+     * Creates reversed version of this map (values become keys). Throws exception if the map does
+     * not satisfy that.
      */
-    fun validateThatMapIsReversibleOrDie() {
-        Log.i(TAG, "Validating that the map is reversible")
-
+    fun reverseMapOrDie(): TypesMap {
         val typesReversed = mutableMapOf<JavaType, JavaType>()
         for ((from, to) in types) {
             val conflictFrom = typesReversed[to]
@@ -74,29 +55,32 @@
             typesReversed[to] = from
         }
 
-        val fieldsReversed = mutableMapOf<JavaField, JavaField>()
-        for ((from, to) in fields) {
-            val conflictFrom = fieldsReversed[to]
-            if (conflictFrom != null) {
-                Log.e(TAG, "Conflict: %s -> (%s, %s)", to, from, conflictFrom)
-                continue
-            }
-            fieldsReversed[to] = from
+        if (types.size != typesReversed.size) {
+            throw IllegalArgumentException("Types map is not reversible as conflicts were found! " +
+                "See the log for more details.")
         }
 
-        if (types.size != typesReversed.size || fields.size != fieldsReversed.size) {
-            throw IllegalArgumentException(
-                "Map is not reversible as conflicts were found! See the log for more details.")
+        return TypesMap(types= typesReversed)
+    }
+
+    fun mergetWith(typesMap: TypesMap): TypesMap {
+        val mergedMap = mutableMapOf<JavaType, JavaType>()
+        mergedMap.putAll(types)
+        typesMap.types.forEach {
+            if (mergedMap.containsKey(it.key)) {
+                throw RuntimeException("Failed to merge the given types maps as there is" +
+                    " a duplicity with key '${it.key.fullName}' for values '${it.value}' and " +
+                    "'${mergedMap[it.key]}'.")
+            }
+            mergedMap.put(it.key, it.value)
         }
-        Log.i(TAG, "Map is reversible. Success!")
+        return TypesMap(mergedMap)
     }
 
     /**
      * JSON data model for [TypesMap].
      */
-    data class JsonData(
-            val types: Map<String, String>,
-            val fields: Map<String, Map<String, List<String>>>) {
+    data class JsonData(val types: Map<String, String>) {
 
         /** Creates instance of [TypesMap] */
         fun toMappings(): TypesMap {
@@ -104,18 +88,6 @@
                 types = types
                     .orEmpty()
                     .map { JavaType(it.key) to JavaType(it.value) }
-                    .toMap(),
-                fields = fields
-                    .orEmpty().entries
-                    .flatMap {
-                        top ->
-                        top.value.flatMap {
-                            mid ->
-                            mid.value.map {
-                                JavaField(top.key, it) to JavaField(mid.key, it)
-                            }
-                        }
-                    }
                     .toMap())
         }
     }
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaField.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaField.kt
deleted file mode 100644
index c423f0a..0000000
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaField.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2017 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.tools.jetifier.core.rules
-
-/**
- * Wrapper for Java field declaration.
- */
-data class JavaField(val owner : JavaType, val name : String) {
-
-    constructor(owner : String, name : String) : this(JavaType(owner), name)
-
-
-    fun renameOwner(newOwner: JavaType) = JavaField(newOwner, name)
-
-    override fun toString() = owner.toString() + "." + name
-
-}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaType.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaType.kt
index d7a077b..744ec29 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaType.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaType.kt
@@ -18,6 +18,8 @@
 
 /**
  * Wrapper for Java type declaration.
+ *
+ * For packages use [PackageName].
  */
 data class JavaType(val fullName: String) {
 
@@ -29,17 +31,15 @@
 
     companion object {
         /** Creates the type from notation where packages are separated using '.' */
-        fun fromDotVersion(fullName: String) : JavaType {
+        fun fromDotVersion(fullName: String): JavaType {
             return JavaType(fullName.replace('.', '/'))
         }
     }
 
     /** Returns the type as a string where packages are separated using '.' */
-    fun toDotNotation() : String {
+    fun toDotNotation(): String {
         return fullName.replace('/', '.')
     }
 
-
     override fun toString() = fullName
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaTypeXmlRef.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaTypeXmlRef.kt
deleted file mode 100644
index 9d58046..0000000
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/JavaTypeXmlRef.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2017 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.tools.jetifier.core.rules
-
-/**
- * Wrapper for Java type reference used in XML.
- *
- * In XML we use '.' as a package separator.
- */
-data class JavaTypeXmlRef(val fullName : String) {
-
-    constructor(type: JavaType)
-        : this(type.fullName.replace('/', '.'))
-
-    fun toJavaType() : JavaType {
-        return JavaType(fullName.replace('.', '/'))
-    }
-
-    override fun toString() = fullName
-}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/PackageName.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/PackageName.kt
new file mode 100644
index 0000000..c42f995
--- /dev/null
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/PackageName.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2018 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.tools.jetifier.core.rules
+
+/**
+ * Wrapper for Java package name declaration.
+ */
+data class PackageName(val fullName: String) {
+
+    init {
+        if (fullName.contains('.')) {
+            throw IllegalArgumentException("The type does not support '.' as a package separator!")
+        }
+    }
+
+    companion object {
+        /** Creates the package from notation where packages are separated using '.' */
+        fun fromDotVersion(fullName: String): PackageName {
+            return PackageName(fullName.replace('.', '/'))
+        }
+    }
+
+    /** Returns the package as a string where packages are separated using '.' */
+    fun toDotNotation(): String {
+        return fullName.replace('/', '.')
+    }
+
+    override fun toString() = fullName
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/RewriteRule.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/RewriteRule.kt
index 40497d8..0a7fbde 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/RewriteRule.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/rules/RewriteRule.kt
@@ -16,11 +16,12 @@
 
 package android.support.tools.jetifier.core.rules
 
+import android.support.tools.jetifier.core.transform.proguard.ProGuardType
 import com.google.gson.annotations.SerializedName
 import java.util.regex.Pattern
 
 /**
- * Rule that rewrites a Java type or field based on the given arguments.
+ * Rule that rewrites a Java type based on the given arguments.
  *
  * Used in the preprocessor when generating [TypesMap].
  *
@@ -28,62 +29,52 @@
  * is "$". Used to match the input type.
  * @param to A string to be used as a replacement if the 'from' pattern is matched. It can also
  * apply groups matched from the original pattern using {x} annotation, e.g. {0}.
- * @param fieldSelectors Collection of regular expressions that are used to match fields. If the
- * type is matched (using 'from') and the field is matched (or the list of fields selectors is
- * empty) the field's type gets rewritten according to the 'to' parameter.
  */
 class RewriteRule(
         private val from: String,
-        private val to: String,
-        private val fieldSelectors: List<String> = emptyList()) {
+        private val to: String) {
+
+    companion object {
+        const val IGNORE_RUNTIME = "ignore"
+        const val IGNORE_PREPROCESSOR_ONLY = "ignoreInPreprocessorOnly"
+    }
 
     // We escape '$' so we don't conflict with regular expression symbols.
     private val inputPattern = Pattern.compile("^${from.replace("$", "\\$")}$")
     private val outputPattern = to.replace("$", "\$")
 
-    private val fields = fieldSelectors.map { Pattern.compile("^$it$") }
+    /*
+     * Whether this is any type of an ignore rule.
+     */
+    fun isIgnoreRule() = isRuntimeIgnoreRule() || isPreprocessorOnlyIgnoreRule()
+
+    /*
+     * Whether this rules is an ignore rule.
+     *
+     * Any type matched to [from] will be in such case ignored by the preprocessor (thus missing
+     * from the map) but it will be also ignored during rewriting.
+     */
+    fun isRuntimeIgnoreRule() = to == IGNORE_RUNTIME
+
+    /*
+     * Whether this rule is an ignore rule that should be used only in the preprocessor.
+     *
+     * That means that error is still thrown if [from] is found in a library that is being
+     * rewritten. Use this for types that are internal to support library. This is weaker version of
+     * [isRuntimeIgnoreRule].
+     */
+    fun isPreprocessorOnlyIgnoreRule() = to == IGNORE_PREPROCESSOR_ONLY
 
     /**
      * Rewrites the given java type. Returns null if this rule is not applicable for the given type.
      */
     fun apply(input: JavaType): TypeRewriteResult {
-        if (fields.isNotEmpty()) {
-            return TypeRewriteResult.NOT_APPLIED
-        }
-
-        return applyInternal(input)
-    }
-
-    /**
-     * Rewrites the given field type. Returns null if this rule is not applicable for the given
-     * type.
-     */
-    fun apply(inputField: JavaField): FieldRewriteResult {
-        val typeRewriteResult = applyInternal(inputField.owner)
-
-        if (typeRewriteResult.isIgnored) {
-            return FieldRewriteResult.IGNORED
-        }
-        if (typeRewriteResult.result == null) {
-            return FieldRewriteResult.NOT_APPLIED
-        }
-
-        val isFieldInTheFilter = fields.isEmpty()
-                || fields.any { it.matcher(inputField.name).matches() }
-        if (!isFieldInTheFilter) {
-            return FieldRewriteResult.NOT_APPLIED
-        }
-
-        return FieldRewriteResult(inputField.renameOwner(typeRewriteResult.result))
-    }
-
-    private fun applyInternal(input: JavaType): TypeRewriteResult {
         val matcher = inputPattern.matcher(input.fullName)
         if (!matcher.matches()) {
             return TypeRewriteResult.NOT_APPLIED
         }
 
-        if (to == "ignore") {
+        if (isIgnoreRule()) {
             return TypeRewriteResult.IGNORED
         }
 
@@ -95,13 +86,25 @@
         return TypeRewriteResult(JavaType(result))
     }
 
+    /*
+     * Returns whether this rule is an ignore rule and applies to the given proGuard type.
+     */
+    fun doesThisIgnoreProGuard(type: ProGuardType): Boolean {
+        if (!isIgnoreRule()) {
+            return false
+        }
+
+        val matcher = inputPattern.matcher(type.value)
+        return matcher.matches()
+    }
+
     override fun toString(): String {
-        return "$inputPattern -> $outputPattern " + fields.joinToString { it.toString() }
+        return "$inputPattern -> $outputPattern "
     }
 
     /** Returns JSON data model of this class */
     fun toJson(): JsonData {
-        return JsonData(from, to, fieldSelectors)
+        return JsonData(from, to)
     }
 
     /**
@@ -112,14 +115,11 @@
             val from: String,
 
             @SerializedName("to")
-            val to: String,
-
-            @SerializedName("fieldSelectors")
-            val fieldSelectors: List<String>? = null) {
+            val to: String) {
 
         /** Creates instance of [RewriteRule] */
         fun toRule(): RewriteRule {
-            return RewriteRule(from, to, fieldSelectors.orEmpty())
+            return RewriteRule(from, to)
         }
     }
 
@@ -134,16 +134,4 @@
             val IGNORED = TypeRewriteResult(result = null, isIgnored = true)
         }
     }
-
-    /**
-     * Result of java field rewrite using [RewriteRule]
-     */
-    data class FieldRewriteResult(val result: JavaField?, val isIgnored: Boolean = false) {
-
-        companion object {
-            val NOT_APPLIED = FieldRewriteResult(result = null, isIgnored = false)
-
-            val IGNORED = FieldRewriteResult(result = null, isIgnored = true)
-        }
-    }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/PackageMap.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/PackageMap.kt
new file mode 100644
index 0000000..639dfb8
--- /dev/null
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/PackageMap.kt
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2017 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.tools.jetifier.core.transform
+
+import android.support.tools.jetifier.core.rules.PackageName
+
+/**
+ * Package map to be used to rewrite packages. The rewrite rules allow duplicities where the
+ * artifact name prefix defined in a rule determines if such rule should be used or skipped.
+ * The priority is determined only by the order (top to bottom). Having a rule with no file prefix
+ * as first means that it is always applied.
+ *
+ * We use this only for the support library rewriting to rewrite packages in manifest files.
+ */
+class PackageMap(private val rules: List<PackageRule>) {
+
+    companion object {
+        val DEFAULT_RULES = listOf(
+            PackageRule(
+                from = "android/support/exifinterface",
+                to = "android/support/exifinterface"
+            ),
+            PackageRule(
+                from = "android/support/graphics/drawable",
+                to = "androidx/graphics/drawable"
+            ),
+            PackageRule(
+                from = "android/support/graphics/drawable/animated",
+                to = "androidx/graphics/drawable/animated"
+            ),
+            PackageRule(
+                from = "androidx/media/tv",
+                to = "androidx/media/tv"
+            ),
+            PackageRule(
+                from = "androidx/view/textclassifier",
+                to = "androidx/view/textclassifier"
+            ),
+            PackageRule(
+                from = "androidx/widget/recyclerview/selection",
+                to = "androidx/widget/recyclerview/selection"),
+            PackageRule(
+                from = "android/support/v4",
+                to = "android/support/v4"
+            ),
+            PackageRule(
+                from = "android/support/v7/palette",
+                to = "android/support/v7/palette"
+            ),
+            PackageRule(
+                from = "android/support/v7/cardview",
+                to = "android/support/v7/cardview"
+            ),
+            PackageRule(
+                from = "android/support/v7/mediarouter",
+                to = "android/support/v7/mediarouter"
+            ),
+            PackageRule(
+                from = "android/support/v7/appcompat",
+                to = "android/support/v7/appcompat"
+            ),
+            PackageRule(
+                from = "android/support/v7/recyclerview",
+                to = "android/support/v7/recyclerview"
+            ),
+            PackageRule(
+                from = "android/support/v7/gridlayout",
+                to = "android/support/v7/gridlayout"
+            ),
+            PackageRule(
+                from = "android/support/v13",
+                to = "android/support/v13"
+            ),
+            PackageRule(
+                from = "android/support/v7/preference",
+                to = "androidx/preference",
+                filePrefix = "preference-v7"
+            ),
+            PackageRule(
+                from = "android/support/v14/preference",
+                to = "androidx/preference",
+                filePrefix = "preference-v14"
+            ),
+            PackageRule(
+                from = "android/support/v17/lexanback",
+                to = "androidx/leanback"
+            ),
+            PackageRule(
+                from = "android/support/v17/preference",
+                to = "androidx/leanback/preference"
+            ),
+            PackageRule(
+                from = "android/support/compat",
+                to = "android/support/compat"
+            ),
+            PackageRule(
+                from = "android/support/mediacompat",
+                to = "android/support/mediacompat"
+            ),
+            PackageRule(
+                from = "android/support/fragment",
+                to = "android/support/fragment"
+            ),
+            PackageRule(
+                from = "android/support/coreutils",
+                to = "android/support/coreutils"
+            ),
+            PackageRule(
+                from = "android/support/dynamicanimation",
+                to = "android/support/dynamicanimation"
+            ),
+            PackageRule(
+                from = "android/support/customtabs",
+                to = "androidx/browser/customtabs"
+            ),
+            PackageRule(
+                from = "android/support/coreui",
+                to = "android/support/coreui"
+            ),
+            PackageRule(
+                from = "android/support/content",
+                to = "android/support/content"
+            ),
+            PackageRule(
+                from = "android/support/transition",
+                to = "androidx/transition"
+            ),
+            PackageRule(
+                from = "android/support/v17/leanback",
+                to = "androidx/leanback"
+            ),
+            PackageRule(
+                from = "android/support/recommendation",
+                to = "android/support/recommendation"
+            ),
+            PackageRule(
+                from = "android/support/wear",
+                to = "androidx/wear"
+            ),
+            PackageRule(
+                from = "android/support/design",
+                to = "androidx/design"
+            ),
+            PackageRule(
+                from = "androidx/text/emoji",
+                to = "androidx/text/emoji"
+            ),
+            PackageRule(
+                from = "androidx/text/emoji/appcompat",
+                to = "androidx/text/emoji/appcompat"
+            ),
+            PackageRule(
+                from = "androidx/text/emoji/bundled",
+                to = "androidx/text/emoji/bundled"
+            )
+        )
+
+        val EMPTY = PackageMap(emptyList())
+    }
+
+    /**
+     * Creates reversed version of this map (from becomes to and vice versa).
+     */
+    fun reverse(): PackageMap {
+        return PackageMap(rules
+            .map { PackageRule(from = it.to, to = it.from, filePrefix = it.filePrefix) }
+            .toList())
+    }
+
+    /**
+     * Returns a new package name for the given [fromPackage] defined in artifact being called
+     * [libraryName].
+     */
+    fun getPackageFor(fromPackage: PackageName, libraryName: String): PackageName? {
+        val rule = rules.find {
+            it.from == fromPackage.fullName
+                && (it.filePrefix == null
+                || libraryName.startsWith(it.filePrefix, ignoreCase = true))
+        }
+        if (rule != null) {
+            return PackageName(rule.to)
+        }
+        return null
+    }
+
+    data class PackageRule(val from: String, val to: String, val filePrefix: String? = null)
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt
index 3f8af95..08a22a4 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt
@@ -18,13 +18,18 @@
 
 import android.support.tools.jetifier.core.config.Config
 import android.support.tools.jetifier.core.rules.JavaType
+import android.support.tools.jetifier.core.rules.RewriteRule.TypeRewriteResult
 import android.support.tools.jetifier.core.transform.proguard.ProGuardType
 import java.util.regex.Pattern
 
 /**
  * Context to share the transformation state between individual [Transformer]s.
  */
-class TransformationContext(val config: Config) {
+class TransformationContext(
+    val config: Config,
+    val rewritingSupportLib: Boolean = false,
+    val isInReversedMode: Boolean = false
+) {
 
     // Merges all packages prefixes into one regEx pattern
     private val packagePrefixPattern = Pattern.compile(
@@ -38,19 +43,38 @@
     var proGuardMappingNotFoundFailuresCount = 0
         private set
 
-    /** Returns whether any errors were found during the transformation process */
-    fun wasErrorFound() = mappingNotFoundFailuresCount > 0
+    /** Counter for [reportNoPackageMappingFoundFailure] calls. */
+    var packageMappingNotFoundFailuresCounts = 0
+
+    var libraryName: String = ""
+
+    private var runtimeIgnoreRules =
+        (
+            if (rewritingSupportLib) {
+                config.slRules
+            } else {
+                config.rewriteRules
+            }
+        )
+        .filter { it.isRuntimeIgnoreRule() }
+        .toTypedArray()
+
+    /** Total amount of errors found during the transformation process */
+    fun errorsTotal() = mappingNotFoundFailuresCount + proGuardMappingNotFoundFailuresCount +
+        packageMappingNotFoundFailuresCounts
 
     /**
      * Returns whether the given type is eligible for rewrite.
      *
      * If not, the transformers should ignore it.
      */
-    fun isEligibleForRewrite(type: JavaType) : Boolean {
-        if (config.restrictToPackagePrefixes.isEmpty()) {
+    fun isEligibleForRewrite(type: JavaType): Boolean {
+        if (!isEligibleForRewriteInternal(type.fullName)) {
             return false
         }
-        return packagePrefixPattern.matcher(type.fullName).matches()
+
+        val isIgnored = runtimeIgnoreRules.any { it.apply(type) == TypeRewriteResult.IGNORED }
+        return !isIgnored
     }
 
     /**
@@ -60,15 +84,24 @@
      * like *.v7 are not matched by prefix support.v7. So don't rely on it and use
      * the [ProGuardTypesMap] as first.
      */
-    fun isEligibleForRewrite(type: ProGuardType) : Boolean {
+    fun isEligibleForRewrite(type: ProGuardType): Boolean {
+        if (!isEligibleForRewriteInternal(type.value)) {
+            return false
+        }
+
+        val isIgnored = runtimeIgnoreRules.any { it.doesThisIgnoreProGuard(type) }
+        return !isIgnored
+    }
+
+    private fun isEligibleForRewriteInternal(type: String): Boolean {
         if (config.restrictToPackagePrefixes.isEmpty()) {
             return false
         }
-        return packagePrefixPattern.matcher(type.value).matches()
+        return packagePrefixPattern.matcher(type).matches()
     }
 
     /**
-     * Used to report that there was a reference found that satisfies [isEligibleForRewrite] but no
+     * Reports that there was a reference found that satisfies [isEligibleForRewrite] but no
      * mapping was found to rewrite it.
      */
     fun reportNoMappingFoundFailure() {
@@ -76,10 +109,18 @@
     }
 
     /**
-     * Used to report that there was a reference found in the ProGuard file that satisfies
+     * Reports that there was a reference found in a ProGuard file that satisfies
      * [isEligibleForRewrite] but no mapping was found to rewrite it.
      */
     fun reportNoProGuardMappingFoundFailure() {
         proGuardMappingNotFoundFailuresCount++
     }
+
+    /**
+     * Reports that there was a package reference found in a manifest file during a support library
+     * artifact rewrite but no mapping was found for it.
+     */
+    fun reportNoPackageMappingFoundFailure() {
+        packageMappingNotFoundFailuresCounts++
+    }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/ByteCodeTransformer.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/ByteCodeTransformer.kt
index 33235e0..296ce49 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/ByteCodeTransformer.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/ByteCodeTransformer.kt
@@ -17,7 +17,6 @@
 package android.support.tools.jetifier.core.transform.bytecode
 
 import android.support.tools.jetifier.core.archive.ArchiveFile
-import android.support.tools.jetifier.core.config.Config
 import android.support.tools.jetifier.core.transform.TransformationContext
 import android.support.tools.jetifier.core.transform.Transformer
 import org.objectweb.asm.ClassReader
@@ -30,7 +29,6 @@
 
     private val remapper: CoreRemapperImpl = CoreRemapperImpl(context)
 
-
     override fun canTransform(file: ArchiveFile) = file.isClassFile()
 
     override fun runTransform(file: ArchiveFile) {
@@ -42,5 +40,6 @@
         reader.accept(visitor, 0 /* flags */)
 
         file.data = writer.toByteArray()
+        file.updateRelativePath(remapper.rewritePath(file.relativePath))
     }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt
index 38ce393..1b91088 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt
@@ -16,7 +16,6 @@
 
 package android.support.tools.jetifier.core.transform.bytecode
 
-import android.support.tools.jetifier.core.rules.JavaField
 import android.support.tools.jetifier.core.rules.JavaType
 
 /**
@@ -25,7 +24,5 @@
 interface CoreRemapper {
     fun rewriteType(type: JavaType): JavaType
 
-    fun rewriteField(field: JavaField): JavaField
-
     fun rewriteString(value: String): String
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt
index 71c4e9e..2ff0081 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt
@@ -17,13 +17,13 @@
 package android.support.tools.jetifier.core.transform.bytecode
 
 import android.support.tools.jetifier.core.map.TypesMap
-import android.support.tools.jetifier.core.rules.JavaField
 import android.support.tools.jetifier.core.rules.JavaType
 import android.support.tools.jetifier.core.transform.TransformationContext
-import android.support.tools.jetifier.core.transform.bytecode.asm.CustomClassRemapper
 import android.support.tools.jetifier.core.transform.bytecode.asm.CustomRemapper
 import android.support.tools.jetifier.core.utils.Log
 import org.objectweb.asm.ClassVisitor
+import org.objectweb.asm.commons.ClassRemapper
+import java.nio.file.Path
 
 /**
  * Applies mappings defined in [TypesMap] during the remapping process.
@@ -36,8 +36,8 @@
 
     private val typesMap = context.config.typesMap
 
-    fun createClassRemapper(visitor: ClassVisitor): CustomClassRemapper {
-        return CustomClassRemapper(visitor, CustomRemapper(this))
+    fun createClassRemapper(visitor: ClassVisitor): ClassRemapper {
+        return ClassRemapper(visitor, CustomRemapper(this))
     }
 
     override fun rewriteType(type: JavaType): JavaType {
@@ -56,22 +56,6 @@
         return type
     }
 
-    override fun rewriteField(field: JavaField): JavaField {
-        if (!context.isEligibleForRewrite(field.owner)) {
-            return field
-        }
-
-        val result = typesMap.fields[field]
-        if (result != null) {
-            Log.i(TAG, "  map: %s -> %s", field, result)
-            return result
-        }
-
-        context.reportNoMappingFoundFailure()
-        Log.e(TAG, "No mapping for: " + field)
-        return field
-    }
-
     override fun rewriteString(value: String): String {
         val type = JavaType.fromDotVersion(value)
         if (!context.isEligibleForRewrite(type)) {
@@ -87,5 +71,25 @@
         // We do not treat string content mismatches as errors
         return value
     }
-}
 
+    fun rewritePath(path: Path): Path {
+        if (!context.rewritingSupportLib) {
+            return path
+        }
+
+        val owner = path.toFile().path.replace('\\', '/').removeSuffix(".class")
+        val type = JavaType(owner)
+        if (!context.isEligibleForRewrite(type)) {
+            return path
+        }
+
+        val result = rewriteType(type)
+        if (result != type) {
+            return path.fileSystem.getPath(result.fullName + ".class")
+        }
+
+        context.reportNoMappingFoundFailure()
+        Log.e(TAG, "No mapping for: " + type)
+        return path
+    }
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomClassRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomClassRemapper.kt
deleted file mode 100644
index 692e65d..0000000
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomClassRemapper.kt
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2017 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.tools.jetifier.core.transform.bytecode.asm
-
-import org.objectweb.asm.ClassVisitor
-import org.objectweb.asm.FieldVisitor
-import org.objectweb.asm.MethodVisitor
-import org.objectweb.asm.Opcodes
-import org.objectweb.asm.commons.ClassRemapper
-
-/**
- * Currently only adds field context awareness into [ClassRemapper] and substitutes the default
- * method remapper with [CustomMethodRemapper]
- */
-class CustomClassRemapper(cv: ClassVisitor, private val customRemapper: CustomRemapper)
-    : ClassRemapper(Opcodes.ASM5, cv, customRemapper) {
-
-    override fun visitField(access: Int,
-                            name: String,
-                            desc: String?,
-                            signature: String?,
-                            value: Any?) : FieldVisitor? {
-        cv ?: return null
-
-        val field = customRemapper.mapField(className, name)
-        val fieldVisitor = cv.visitField(
-                access,
-                field.name,
-                remapper.mapDesc(desc),
-                remapper.mapSignature(signature, true),
-                remapper.mapValue(value))
-
-        fieldVisitor ?: return null
-
-        return createFieldRemapper(fieldVisitor)
-    }
-
-    override fun createMethodRemapper(mv: MethodVisitor) : MethodVisitor {
-        return CustomMethodRemapper(mv, customRemapper)
-    }
-}
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomMethodRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomMethodRemapper.kt
deleted file mode 100644
index cc60cbf..0000000
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomMethodRemapper.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2017 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.tools.jetifier.core.transform.bytecode.asm
-
-import org.objectweb.asm.MethodVisitor
-import org.objectweb.asm.Opcodes
-import org.objectweb.asm.commons.MethodRemapper
-
-/**
- * Currently only adds field context awareness into [MethodRemapper]
- */
-internal class CustomMethodRemapper(mv:MethodVisitor,
-                                    private val customRemapper: CustomRemapper)
-    : MethodRemapper(Opcodes.ASM5, mv, customRemapper) {
-
-    override fun visitFieldInsn(opcode: Int, owner: String, name: String, desc: String?) {
-        mv ?: return
-
-        val field = customRemapper.mapField(owner, name)
-        mv.visitFieldInsn(opcode, field.owner.fullName, field.name, remapper.mapDesc(desc))
-    }
-}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt
index aba4725..a54e8bd 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt
@@ -16,13 +16,12 @@
 
 package android.support.tools.jetifier.core.transform.bytecode.asm
 
-import android.support.tools.jetifier.core.rules.JavaField
 import android.support.tools.jetifier.core.rules.JavaType
 import android.support.tools.jetifier.core.transform.bytecode.CoreRemapper
 import org.objectweb.asm.commons.Remapper
 
 /**
- * Extends [Remapper] with a capability to rewrite field names together with their owner.
+ * Extends [Remapper] to allow further customizations.
  */
 class CustomRemapper(private val remapper: CoreRemapper) : Remapper() {
 
@@ -38,12 +37,4 @@
 
         return remapper.rewriteString(stringMaybe)
     }
-
-    fun mapField(ownerName: String, fieldName: String): JavaField {
-        return remapper.rewriteField(JavaField(ownerName, fieldName))
-    }
-
-    override fun mapFieldName(owner: String?, name: String, desc: String?): String {
-        throw RuntimeException("This should not be called")
-    }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/metainf/MetaInfTransformer.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/metainf/MetaInfTransformer.kt
new file mode 100644
index 0000000..3220dae
--- /dev/null
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/metainf/MetaInfTransformer.kt
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2018 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.tools.jetifier.core.transform.metainf
+
+import android.support.tools.jetifier.core.archive.ArchiveFile
+import android.support.tools.jetifier.core.transform.TransformationContext
+import android.support.tools.jetifier.core.transform.Transformer
+import java.nio.charset.StandardCharsets
+
+/**
+ * Transformer for META-INF/(.*).version files.
+ *
+ * Replaces version files from the META-INF directory. This should be used only for processing
+ * of the support library itself.
+ */
+class MetaInfTransformer internal constructor(
+    private val context: TransformationContext
+) : Transformer {
+
+    companion object {
+        const val FROM_VERSION = "28.0.0-SNAPSHOT"
+
+        const val TO_VERSION = "1.0.0-SNAPSHOT"
+
+        const val META_INF_DIR = "meta-inf"
+
+        const val VERSION_FILE_SUFFIX = ".version"
+    }
+
+    override fun canTransform(file: ArchiveFile): Boolean {
+        return context.rewritingSupportLib
+            && file.relativePath.toString().contains(META_INF_DIR, ignoreCase = true)
+            && file.fileName.endsWith(VERSION_FILE_SUFFIX, ignoreCase = true)
+    }
+
+    override fun runTransform(file: ArchiveFile) {
+        val sb = StringBuilder(file.data.toString(StandardCharsets.UTF_8))
+
+        var from = FROM_VERSION
+        var to = TO_VERSION
+        if (context.isInReversedMode) {
+            from = TO_VERSION
+            to = FROM_VERSION
+        }
+
+        if (sb.toString() != from) {
+            return
+        }
+
+        file.data = to.toByteArray()
+    }
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMap.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMap.kt
index 03d6282..f232a35 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMap.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMap.kt
@@ -16,28 +16,56 @@
 
 package android.support.tools.jetifier.core.transform.proguard
 
+import android.support.tools.jetifier.core.utils.Log
+
 /**
  * Contains custom mappings to map support library types referenced in ProGuard to new ones.
  */
 data class ProGuardTypesMap(val rules: Map<ProGuardType, ProGuardType>) {
 
     companion object {
+        const val TAG = "ProGuardTypesMap"
+
         val EMPTY = ProGuardTypesMap(emptyMap())
     }
 
     /** Returns JSON data model of this class */
-    fun toJson() : JsonData {
+    fun toJson(): JsonData {
         return JsonData(rules.map { it.key.value to it.value.value }.toMap())
     }
 
     /**
      * JSON data model for [ProGuardTypesMap].
      */
-    data class JsonData(val rules: Map<String, String>)  {
+    data class JsonData(val rules: Map<String, String>) {
 
         /** Creates instance of [ProGuardTypesMap] */
-        fun toMappings() : ProGuardTypesMap {
-            return ProGuardTypesMap(rules.map { ProGuardType(it.key) to ProGuardType(it.value) }.toMap())
+        fun toMappings(): ProGuardTypesMap {
+            return ProGuardTypesMap(
+                rules.map { ProGuardType(it.key) to ProGuardType(it.value) }.toMap())
         }
     }
+
+    /**
+     * Creates reversed version of this map (values become keys). Throws exception if the map does
+     * not satisfy that.
+     */
+    fun reverseMapOrDie(): ProGuardTypesMap {
+        val reversed = mutableMapOf<ProGuardType, ProGuardType>()
+        for ((from, to) in rules) {
+            val conflictFrom = reversed[to]
+            if (conflictFrom != null) {
+                Log.e(TAG, "Conflict: %s -> (%s, %s)", to, from, conflictFrom)
+                continue
+            }
+            reversed[to] = from
+        }
+
+        if (rules.size != reversed.size || rules.size != reversed.size) {
+            throw IllegalArgumentException("Types map is not reversible as conflicts were found! " +
+                "See the log for more details.")
+        }
+
+        return ProGuardTypesMap(reversed)
+    }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/patterns/ReplacersRunner.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/patterns/ReplacersRunner.kt
index 54501f9..bd2fc12 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/patterns/ReplacersRunner.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/patterns/ReplacersRunner.kt
@@ -27,7 +27,7 @@
      * The replacers have to be distinct as this method can't guarantee that output of one replacer
      * won't be matched by another replacer.
      */
-    fun applyReplacers(input : String) : String {
+    fun applyReplacers(input: String): String {
         val sb = StringBuilder()
         var lastSeenChar = 0
         var processedInput = input
@@ -37,7 +37,7 @@
 
             while (matcher.find()) {
                 if (lastSeenChar < matcher.start()) {
-                    sb.append(input, lastSeenChar, matcher.start())
+                    sb.append(processedInput, lastSeenChar, matcher.start())
                 }
 
                 val result = replacer.runReplacements(matcher)
@@ -57,8 +57,6 @@
             processedInput = sb.toString()
             sb.setLength(0)
         }
-
         return processedInput
     }
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt
index 0a29828..4f81c71 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt
@@ -18,7 +18,8 @@
 
 import android.support.tools.jetifier.core.archive.ArchiveFile
 import android.support.tools.jetifier.core.map.TypesMap
-import android.support.tools.jetifier.core.rules.JavaTypeXmlRef
+import android.support.tools.jetifier.core.rules.JavaType
+import android.support.tools.jetifier.core.rules.PackageName
 import android.support.tools.jetifier.core.transform.TransformationContext
 import android.support.tools.jetifier.core.transform.Transformer
 import android.support.tools.jetifier.core.utils.Log
@@ -40,10 +41,13 @@
         const val TAG = "XmlResourcesTransformer"
 
         const val PATTERN_TYPE_GROUP = 1
+
+        const val MANIFEST_FILE_NAME = "AndroidManifest.xml"
     }
 
     /**
-     * List of regular expression patterns used to find support library references in XML files.
+     * List of regular expression patterns used to find support library types references in XML
+     * files.
      *
      * Matches xml tags in form of:
      * 1. '<(/)prefix(SOMETHING)'.
@@ -57,42 +61,39 @@
         Pattern.compile("<view[^>]*class=\"([a-zA-Z0-9.\$_]+)\"[^>]*>")
     )
 
+    /**
+     * List of regular expression patterns used to find support library package references in
+     * manifest files.
+     *
+     * Matches xml tag in form of:
+     * 1. <manifest package="package.name" ...>
+     */
+    private val packagePatterns = listOf(
+        Pattern.compile("<manifest[^>]*package=\"([a-zA-Z0-9._]+)\"[^>]*>")
+    )
+
     private val typesMap = context.config.typesMap
 
     override fun canTransform(file: ArchiveFile) = file.isXmlFile() && !file.isPomFile()
 
     override fun runTransform(file: ArchiveFile) {
-        file.data = transform(file.data)
-    }
+        val isManifestFile = file.fileName.equals(MANIFEST_FILE_NAME, ignoreCase = true)
+        val charset = getCharset(file.data)
+        val sb = StringBuilder(file.data.toString(charset))
 
-    fun transform(data: ByteArray) : ByteArray {
-        var changesDone = false
+        var changesDone = replaceWithPatterns(sb, patterns, { rewriteType(it) })
 
-        val charset = getCharset(data)
-        val sb = StringBuilder(data.toString(charset))
-        for (pattern in patterns) {
-            var matcher = pattern.matcher(sb)
-            while (matcher.find()) {
-                val typeToReplace = JavaTypeXmlRef(matcher.group(PATTERN_TYPE_GROUP))
-                val result = rewriteType(typeToReplace)
-                if (result == typeToReplace) {
-                    continue
-                }
-                sb.replace(matcher.start(PATTERN_TYPE_GROUP), matcher.end(PATTERN_TYPE_GROUP),
-                    result.fullName)
-                changesDone = true
-                matcher = pattern.matcher(sb)
-            }
+        if (isManifestFile && context.rewritingSupportLib) {
+            changesDone = replaceWithPatterns(sb, packagePatterns,
+                { rewritePackage(it, context.libraryName) }) || changesDone
         }
 
         if (changesDone) {
-            return sb.toString().toByteArray(charset)
+            file.data = sb.toString().toByteArray(charset)
         }
-
-        return data
     }
 
-    fun getCharset(data: ByteArray) : Charset {
+    fun getCharset(data: ByteArray): Charset {
         data.inputStream().use {
             val xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(it)
 
@@ -107,20 +108,78 @@
         }
     }
 
-    fun rewriteType(type: JavaTypeXmlRef): JavaTypeXmlRef {
-        val javaType = type.toJavaType()
-        if (!context.isEligibleForRewrite(javaType)) {
-            return type
+    /**
+     * For each pattern in [patterns] matching a portion of the string represented by [sb], applies
+     * [mappingFunction] to the match and puts the result back into [sb].
+     */
+    private fun replaceWithPatterns(
+        sb: StringBuilder,
+        patterns: List<Pattern>,
+        mappingFunction: (String) -> String
+    ): Boolean {
+        var changesDone = false
+
+        for (pattern in patterns) {
+            var lastSeenChar = 0
+            val processedInput = sb.toString()
+            sb.setLength(0)
+            val matcher = pattern.matcher(processedInput)
+
+            while (matcher.find()) {
+                if (lastSeenChar < matcher.start()) {
+                    sb.append(processedInput, lastSeenChar, matcher.start())
+                }
+
+                val toReplace = matcher.group(PATTERN_TYPE_GROUP)
+                val matched = matcher.group(0)
+                val replacement = mappingFunction(toReplace)
+                changesDone = changesDone || replacement != toReplace
+
+                val localStart = matcher.start(PATTERN_TYPE_GROUP) - matcher.start()
+                val localEnd = matcher.end(PATTERN_TYPE_GROUP) - matcher.start()
+
+                val result = matched.replaceRange(
+                    startIndex = localStart,
+                    endIndex = localEnd,
+                    replacement = replacement)
+
+                sb.append(result)
+                lastSeenChar = matcher.end()
+            }
+
+            if (lastSeenChar <= processedInput.length - 1) {
+                sb.append(processedInput, lastSeenChar, processedInput.length)
+            }
         }
 
-        val result = typesMap.types[javaType]
+        return changesDone
+    }
+
+    private fun rewriteType(typeName: String): String {
+        val type = JavaType.fromDotVersion(typeName)
+        if (!context.isEligibleForRewrite(type)) {
+            return typeName
+        }
+
+        val result = typesMap.types[type]
         if (result != null) {
             Log.i(TAG, "  map: %s -> %s", type, result)
-            return JavaTypeXmlRef(result)
+            return result.toDotNotation()
         }
 
         context.reportNoMappingFoundFailure()
         Log.e(TAG, "No mapping for: " + type)
-        return type
+        return typeName
+    }
+
+    private fun rewritePackage(packageName: String, archiveName: String): String {
+        val pckg = PackageName.fromDotVersion(packageName)
+        val result = context.config.packageMap.getPackageFor(pckg, archiveName)
+        if (result != null) {
+            return result.toDotNotation()
+        }
+        context.reportNoPackageMappingFoundFailure()
+        Log.e(TAG, "No mapping for package: '$pckg' in artifact: '$archiveName'")
+        return packageName
     }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/utils/Log.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/utils/Log.kt
index 902dea4..b1bb0af 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/utils/Log.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/utils/Log.kt
@@ -18,17 +18,17 @@
 
 object Log {
 
-    var currentLevel : LogLevel = LogLevel.INFO
+    var currentLevel: LogLevel = LogLevel.INFO
 
-    var logConsumer : LogConsumer = StdOutLogConsumer()
+    var logConsumer: LogConsumer = StdOutLogConsumer()
 
     fun setLevel(level: String?) {
         currentLevel = when (level) {
+            "error" -> LogLevel.ERROR
             "debug" -> LogLevel.DEBUG
             "verbose" -> LogLevel.VERBOSE
             else -> LogLevel.INFO
         }
-
     }
 
     fun e(tag: String, message: String, vararg args: Any?) {
@@ -54,5 +54,4 @@
             logConsumer.verbose("[$tag] $message".format(*args))
         }
     }
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/resources/default.config b/jetifier/jetifier/core/src/main/resources/default.config
index a64d7eb..54d561c 100644
--- a/jetifier/jetifier/core/src/main/resources/default.config
+++ b/jetifier/jetifier/core/src/main/resources/default.config
@@ -15,93 +15,206 @@
 {
     # Skip packages that don't match the following regex
     restrictToPackagePrefixes: [
-        "android/support/"
+        "android/support/",
+        "android/arch"
     ],
     rules: [
         # Ignore
         {
             from: "(.*)BuildConfig",
-            to: "ignore"
-        },
-        {
-            from: "android/support/v7/preference/R(.*)",
-            to: "ignore"
+            to: "ignoreInPreprocessorOnly"
         },
         {
             from: "(.*)/package-info",
+            to: "ignoreInPreprocessorOnly"
+        },
+        {
+            from: "android/support/test/(.*)",
             to: "ignore"
         },
 
         # Legacy
         {
-            from: "android/support/v13/app/FragmentTabHost(.*)",
-            to: "androidx/app/legacy/FragmentTabHost{0}"
+            from: "android/support/v4/app/ActionBarDrawerToggle(.*)",
+            to: "androidx/legacy/app/ActionBarDrawerToggle{0}"
+        },
+        {
+            from: "android/support/v13/view/ViewCompat(.*)",
+            to: "androidx/legacy/view/ViewCompat{0}"
+        },
+        {
+            from: "android/support/v13/app/ActivityCompat(.*)",
+            to: "androidx/legacy/app/ActivityCompat{0}"
+        },
+        {
+            from: "android/support/v13/app/FragmentCompat(.*)",
+            to: "androidx/legacy/app/FragmentCompat{0}"
         },
         {
             from: "android/support/v13/app/FragmentPagerAdapter(.*)",
-            to: "androidx/app/legacy/FragmentPagerAdapter{0}"
+            to: "androidx/legacy/app/FragmentPagerAdapter{0}"
         },
         {
             from: "android/support/v13/app/FragmentStatePagerAdapter(.*)",
-            to: "androidx/app/legacy/FragmentStatePagerAdapter{0}"
+            to: "androidx/legacy/app/FragmentStatePagerAdapter{0}"
         },
         {
-            from: "android/support/v4/app/ActionBarDrawerToggle(.*)",
-            to: "androidx/app/legacy/ActionBarDrawerToggle{0}"
-        },
-        {
-            from: "android/support/v4/app/ActivityCompat(.*)",
-            to: "androidx/app/legacy/ActivityCompat{0}"
-        },
-        {
-            from: "android/support/v4/view/ViewCompat(.*)",
-            to: "androidx/view/legacy/ViewCompat{0}"
+            from: "android/support/v13/app/FragmentTabHost(.*)",
+            to: "androidx/legacy/app/FragmentTabHost{0}"
         },
 
-        # Internal
+        # Re-map Recycler view
         {
-            from: "android/support/v4/graphics/drawable/DrawableWrapper",
-            to: "androidx/graphics/drawable/internal/DrawableWrapper"
+            from: "android/support/v7/widget/AdapterHelper(.*)",
+            to: "androidx/widget/recyclerview/AdapterHelper{0}"
         },
         {
-            from: "android/support/v7/widget/ListViewCompat(.*)",
-            to: "androidx/widget/internal/ListViewCompat{0}"
+            from: "android/support/v7/widget/ChildHelper(.*)",
+            to: "androidx/widget/recyclerview/ChildHelper{0}"
+        },
+        {
+            from: "android/support/v7/widget/DefaultItemAnimator(.*)",
+            to: "androidx/widget/recyclerview/DefaultItemAnimator{0}"
+        },
+        {
+            from: "android/support/v7/widget/DividerItemDecoration(.*)",
+            to: "androidx/widget/recyclerview/DividerItemDecoration{0}"
+        },
+        {
+            from: "android/support/v7/widget/FastScroller(.*)",
+            to: "androidx/widget/recyclerview/FastScroller{0}"
+        },
+        {
+            from: "android/support/v7/widget/GapWorker(.*)",
+            to: "androidx/widget/recyclerview/GapWorker{0}"
+        },
+        {
+            from: "android/support/v7/widget/GridLayoutManager(.*)",
+            to: "androidx/widget/recyclerview/GridLayoutManager{0}"
+        },
+        {
+            from: "android/support/v7/widget/LayoutState(.*)",
+            to: "androidx/widget/recyclerview/LayoutState{0}"
+        },
+        {
+            from: "android/support/v7/widget/LinearLayoutManager(.*)",
+            to: "androidx/widget/recyclerview/LinearLayoutManager{0}"
+        },
+        {
+            from: "android/support/v7/widget/LinearSmoothScroller(.*)",
+            to: "androidx/widget/recyclerview/LinearSmoothScroller{0}"
+        },
+        {
+            from: "android/support/v7/widget/LinearSnapHelper(.*)",
+            to: "androidx/widget/recyclerview/LinearSnapHelper{0}"
+        },
+        {
+            from: "android/support/v7/widget/OpReorderer(.*)",
+            to: "androidx/widget/recyclerview/OpReorderer{0}"
+        },
+        {
+            from: "android/support/v7/widget/OrientationHelper(.*)",
+            to: "androidx/widget/recyclerview/OrientationHelper{0}"
+        },
+        {
+            from: "android/support/v7/widget/PagerSnapHelper(.*)",
+            to: "androidx/widget/recyclerview/PagerSnapHelper{0}"
+        },
+        {
+            from: "android/support/v7/widget/PositionMap(.*)",
+            to: "androidx/widget/recyclerview/PositionMap{0}"
+        },
+        {
+            from: "android/support/v7/widget/RecyclerViewAccessibilityDelegate(.*)",
+            to: "androidx/widget/recyclerview/RecyclerViewAccessibilityDelegate{0}"
+        },
+        {
+            from: "android/support/v7/widget/RecyclerView(.*)",
+            to: "androidx/widget/recyclerview/RecyclerView{0}"
+        },
+        {
+            from: "android/support/v7/widget/ScrollbarHelper(.*)",
+            to: "androidx/widget/recyclerview/ScrollbarHelper{0}"
+        },
+        {
+            from: "android/support/v7/widget/SimpleItemAnimator(.*)",
+            to: "androidx/widget/recyclerview/SimpleItemAnimator{0}"
+        },
+        {
+            from: "android/support/v7/widget/SnapHelper(.*)",
+            to: "androidx/widget/recyclerview/SnapHelper{0}"
+        },
+        {
+            from: "android/support/v7/widget/StaggeredGridLayoutManager(.*)",
+            to: "androidx/widget/recyclerview/StaggeredGridLayoutManager{0}"
+        },
+        {
+            from: "android/support/v7/widget/ViewBoundsCheck(.*)",
+            to: "androidx/widget/recyclerview/ViewBoundsCheck{0}"
+        },
+        {
+            from: "android/support/v7/widget/ViewInfoStore(.*)",
+            to: "androidx/widget/recyclerview/ViewInfoStore{0}"
+        },
+        {
+            from: "android/support/v7/widget/helper/(.*)",
+            to: "androidx/widget/recyclerview/{0}"
+        },
+        {
+            from: "android/support/v7/widget/util/SortedListAdapterCallback",
+            to: "androidx/widget/recyclerview/SortedListAdapterCallback"
+        },
+        {
+            from: "android/support/v7/recyclerview/extensions/(.*)",
+            to: "androidx/widget/recyclerview/{0}"
+        },
+        {
+            from: "android/support/v7/util/(.*)",
+            to: "androidx/widget/recyclerview/{0}"
         },
 
         # Re-map
         {
-            from: "android/support/design/widget/CoordinatorLayout",
-            to: "androidx/widget/CoordinatorLayout"
+            from: "android/support/design/widget/CoordinatorLayout(.*)",
+            to: "androidx/widget/CoordinatorLayout{0}"
         },
         {
-            from: "android/support/design/widget/DirectedAcyclicGraph",
-            to: "androidx/widget/DirectedAcyclicGraph"
+            from: "android/support/design/widget/DirectedAcyclicGraph(.*)",
+            to: "androidx/widget/DirectedAcyclicGraph{0}"
         },
         {
-            from: "android/support/design/widget/ViewGroupUtils",
-            to: "androidx/widget/ViewGroupUtils"
+            from: "android/support/design/widget/ViewGroupUtils(.*)",
+            to: "androidx/widget/ViewGroupUtils{0}"
         },
         {
-            from: "android/support/v4/view/ViewPager",
-            to: "androidx/widget/ViewPager"
+            from: "android/support/constraint/(.*)",
+            to: "androidx/widget/constraint/{0}"
         },
         {
-            from: "android/support/v4/view/PagerAdapter",
-            to: "androidx/widget/PagerAdapter"
+            from: "android/support/v4/view/ViewPager(.*)",
+            to: "androidx/widget/ViewPager{0}"
         },
         {
-            from: "android/support/v4/view/PagerTabStrip",
-            to: "androidx/widget/PagerTabStrip"
+            from: "android/support/v4/view/PagerAdapter(.*)",
+            to: "androidx/widget/PagerAdapter{0}"
         },
         {
-            from: "android/support/v4/view/PagerTitleStrip",
-            to: "androidx/widget/PagerTitleStrip"
+            from: "android/support/v4/view/PagerTabStrip(.*)",
+            to: "androidx/widget/PagerTabStrip{0}"
+        },
+        {
+            from: "android/support/v4/view/PagerTitleStrip(.*)",
+            to: "androidx/widget/PagerTitleStrip{0}"
         },
         {
             from: "android/support/v17/preference/(.*)",
             to: "androidx/leanback/preference/{0}"
         },
         {
+            from: "android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout(.*)",
+            to: "androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout{0}"
+        },
+        {
             from: "android/support/customtabs/(.*)",
             to: "androidx/browser/customtabs/{0}"
         },
@@ -110,22 +223,30 @@
             to: "androidx/{0}"
         },
         {
-            from: "android/support/v7/graphics/ColorCutQuantizer",
-            to: "androidx/graphics/palette/ColorCutQuantizer"
+            from: "android/support/v7/graphics/ColorCutQuantizer(.*)",
+            to: "androidx/graphics/palette/ColorCutQuantizer{0}"
         },
         {
-            from: "android/support/v7/graphics/Palette",
-            to: "androidx/graphics/palette/Palette"
+            from: "android/support/v7/graphics/Palette(.*)",
+            to: "androidx/graphics/palette/Palette{0}"
         },
         {
-            from: "android/support/v7/graphics/Target",
-            to: "androidx/graphics/palette/Target"
+            from: "android/support/v7/graphics/Target(.*)",
+            to: "androidx/graphics/palette/Target{0}"
+        },
+        {
+            from: "android/support/v7/internal/widget/PreferenceImageView(.*)",
+            to: "androidx/preference/internal/PreferenceImageView{0}"
         },
         {
             from: "android/support/v7/(.*)",
             to: "androidx/{0}"
         },
         {
+            from: "android/support/v8/(.*)",
+            to: "androidx/{0}"
+        },
+        {
             from: "android/support/v13/(.*)",
             to: "androidx/{0}"
         },
@@ -138,8 +259,12 @@
             to: "androidx/{0}"
         },
         {
+            from: "android/support/content/(.*)",
+            to: "androidx/util/contentpaging/{0}"
+        },
+        {
             from: "android/support/percent/(.*)",
-            to: "androidx/{0}"
+            to: "androidx/widget/{0}"
         },
         {
             from: "android/support/(.*)",
@@ -148,6 +273,33 @@
         {
             from: "android/arch/(.*)",
             to: "androidx/{0}"
+        },
+        {
+            from: "android/databinding/(.*)",
+            to: "androidx/databinding/{0}"
+        }
+    ],
+    slRules: [
+        # Ignore
+        {
+            from: "(.*)/package-info",
+            to: "ignore"
+        },
+        {
+            from: "androidx/text/emoji/flatbuffer/(.*)",
+            to: "ignore"
+        },
+        {
+            from: "androidx/textclassifier/(.*)",
+            to: "ignore"
+        },
+        {
+            from: "androidx/widget/recyclerview/selection/(.*)",
+            to: "ignore"
+        },
+        {
+            from: "androidx/browser/browseractions/(.*)",
+            to: "ignore"
         }
     ],
     pomRules: [
@@ -286,6 +438,10 @@
             from: { groupId: "com.android.support", artifactId: "support-vector-drawable", version: "27.0.1" },
             to: [{ groupId: "com.androidx", artifactId: "vector-drawable", version: "28.0.0" }]
         },
+	{
+	    from: { groupId: "com.android.support", artifactId: "textclassifier", version: "28.0.0" },
+	    to: [{ groupId: "com.androidx.view.textclassifier", artifactId: "textclassifier", version: "28.0.0" }]
+	},
         {
             from: { groupId: "com.android.support", artifactId: "transition", version: "27.0.1" },
             to: [{ groupId: "com.androidx", artifactId: "transition", version: "28.0.0" }]
@@ -298,5 +454,20 @@
             from: { groupId: "com.android.support", artifactId: "wearable", version: "26.0.0-alpha1" },
             to: [{ groupId: "com.androidx", artifactId: "wearable", version: "28.0.0" }]
         }
-    ]
-}
\ No newline at end of file
+    ],
+    map: {
+        # Types added in 28.0.0 (missing in 27.1.0)
+        types: {
+            "android/support/v4/app/NotificationCompat$Action$SemanticAction": "androidx/app/NotificationCompat$Action$SemanticAction",
+            "android/support/v4/graphics/TypefaceCompatApi28Impl": "androidx/graphics/TypefaceCompatApi28Impl",
+            "android/support/v7/util/AdapterListUpdateCallback": "androidx/widget/recyclerview/AdapterListUpdateCallback",
+            "android/support/v7/recyclerview/extensions/ListAdapterConfig$Builder$MainThreadExecutor": "androidx/widget/recyclerview/ListAdapterConfig$Builder$MainThreadExecutor"
+        }
+    },
+    proGuardMap: {
+        rules: {
+            "android/support/transition/ChangeBounds$*": "androidx/transition/ChangeBounds$*",
+            "android/support/graphics/drawable/VectorDrawableCompat$*": "androidx/graphics/drawable/VectorDrawableCompat$*"
+        }
+    }
+}
diff --git a/jetifier/jetifier/core/src/main/resources/default.generated.config b/jetifier/jetifier/core/src/main/resources/default.generated.config
index d74d4c7..6e447a5 100644
--- a/jetifier/jetifier/core/src/main/resources/default.generated.config
+++ b/jetifier/jetifier/core/src/main/resources/default.generated.config
@@ -1,4 +1,4 @@
-# Copyright (C) 2017 The Android Open Source Project
+# Copyright (C) 2018 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.
@@ -18,163 +18,283 @@
 
 {
   "restrictToPackagePrefixes": [
-    "android/support/"
+    "android/support/",
+    "android/arch"
   ],
   "rules": [
     {
       "from": "(.*)BuildConfig",
-      "to": "ignore",
-      "fieldSelectors": []
-    },
-    {
-      "from": "android/support/v7/preference/R(.*)",
-      "to": "ignore",
-      "fieldSelectors": []
+      "to": "ignoreInPreprocessorOnly"
     },
     {
       "from": "(.*)/package-info",
-      "to": "ignore",
-      "fieldSelectors": []
+      "to": "ignoreInPreprocessorOnly"
     },
     {
-      "from": "android/support/v13/app/FragmentTabHost(.*)",
-      "to": "androidx/app/legacy/FragmentTabHost{0}",
-      "fieldSelectors": []
-    },
-    {
-      "from": "android/support/v13/app/FragmentPagerAdapter(.*)",
-      "to": "androidx/app/legacy/FragmentPagerAdapter{0}",
-      "fieldSelectors": []
-    },
-    {
-      "from": "android/support/v13/app/FragmentStatePagerAdapter(.*)",
-      "to": "androidx/app/legacy/FragmentStatePagerAdapter{0}",
-      "fieldSelectors": []
+      "from": "android/support/test/(.*)",
+      "to": "ignore"
     },
     {
       "from": "android/support/v4/app/ActionBarDrawerToggle(.*)",
-      "to": "androidx/app/legacy/ActionBarDrawerToggle{0}",
-      "fieldSelectors": []
+      "to": "androidx/legacy/app/ActionBarDrawerToggle{0}"
     },
     {
-      "from": "android/support/v4/app/ActivityCompat(.*)",
-      "to": "androidx/app/legacy/ActivityCompat{0}",
-      "fieldSelectors": []
+      "from": "android/support/v13/view/ViewCompat(.*)",
+      "to": "androidx/legacy/view/ViewCompat{0}"
     },
     {
-      "from": "android/support/v4/view/ViewCompat(.*)",
-      "to": "androidx/view/legacy/ViewCompat{0}",
-      "fieldSelectors": []
+      "from": "android/support/v13/app/ActivityCompat(.*)",
+      "to": "androidx/legacy/app/ActivityCompat{0}"
     },
     {
-      "from": "android/support/v4/graphics/drawable/DrawableWrapper",
-      "to": "androidx/graphics/drawable/internal/DrawableWrapper",
-      "fieldSelectors": []
+      "from": "android/support/v13/app/FragmentCompat(.*)",
+      "to": "androidx/legacy/app/FragmentCompat{0}"
     },
     {
-      "from": "android/support/v7/widget/ListViewCompat(.*)",
-      "to": "androidx/widget/internal/ListViewCompat{0}",
-      "fieldSelectors": []
+      "from": "android/support/v13/app/FragmentPagerAdapter(.*)",
+      "to": "androidx/legacy/app/FragmentPagerAdapter{0}"
     },
     {
-      "from": "android/support/design/widget/CoordinatorLayout",
-      "to": "androidx/widget/CoordinatorLayout",
-      "fieldSelectors": []
+      "from": "android/support/v13/app/FragmentStatePagerAdapter(.*)",
+      "to": "androidx/legacy/app/FragmentStatePagerAdapter{0}"
     },
     {
-      "from": "android/support/design/widget/DirectedAcyclicGraph",
-      "to": "androidx/widget/DirectedAcyclicGraph",
-      "fieldSelectors": []
+      "from": "android/support/v13/app/FragmentTabHost(.*)",
+      "to": "androidx/legacy/app/FragmentTabHost{0}"
     },
     {
-      "from": "android/support/design/widget/ViewGroupUtils",
-      "to": "androidx/widget/ViewGroupUtils",
-      "fieldSelectors": []
+      "from": "android/support/v7/widget/AdapterHelper(.*)",
+      "to": "androidx/widget/recyclerview/AdapterHelper{0}"
     },
     {
-      "from": "android/support/v4/view/ViewPager",
-      "to": "androidx/widget/ViewPager",
-      "fieldSelectors": []
+      "from": "android/support/v7/widget/ChildHelper(.*)",
+      "to": "androidx/widget/recyclerview/ChildHelper{0}"
     },
     {
-      "from": "android/support/v4/view/PagerAdapter",
-      "to": "androidx/widget/PagerAdapter",
-      "fieldSelectors": []
+      "from": "android/support/v7/widget/DefaultItemAnimator(.*)",
+      "to": "androidx/widget/recyclerview/DefaultItemAnimator{0}"
     },
     {
-      "from": "android/support/v4/view/PagerTabStrip",
-      "to": "androidx/widget/PagerTabStrip",
-      "fieldSelectors": []
+      "from": "android/support/v7/widget/DividerItemDecoration(.*)",
+      "to": "androidx/widget/recyclerview/DividerItemDecoration{0}"
     },
     {
-      "from": "android/support/v4/view/PagerTitleStrip",
-      "to": "androidx/widget/PagerTitleStrip",
-      "fieldSelectors": []
+      "from": "android/support/v7/widget/FastScroller(.*)",
+      "to": "androidx/widget/recyclerview/FastScroller{0}"
+    },
+    {
+      "from": "android/support/v7/widget/GapWorker(.*)",
+      "to": "androidx/widget/recyclerview/GapWorker{0}"
+    },
+    {
+      "from": "android/support/v7/widget/GridLayoutManager(.*)",
+      "to": "androidx/widget/recyclerview/GridLayoutManager{0}"
+    },
+    {
+      "from": "android/support/v7/widget/LayoutState(.*)",
+      "to": "androidx/widget/recyclerview/LayoutState{0}"
+    },
+    {
+      "from": "android/support/v7/widget/LinearLayoutManager(.*)",
+      "to": "androidx/widget/recyclerview/LinearLayoutManager{0}"
+    },
+    {
+      "from": "android/support/v7/widget/LinearSmoothScroller(.*)",
+      "to": "androidx/widget/recyclerview/LinearSmoothScroller{0}"
+    },
+    {
+      "from": "android/support/v7/widget/LinearSnapHelper(.*)",
+      "to": "androidx/widget/recyclerview/LinearSnapHelper{0}"
+    },
+    {
+      "from": "android/support/v7/widget/OpReorderer(.*)",
+      "to": "androidx/widget/recyclerview/OpReorderer{0}"
+    },
+    {
+      "from": "android/support/v7/widget/OrientationHelper(.*)",
+      "to": "androidx/widget/recyclerview/OrientationHelper{0}"
+    },
+    {
+      "from": "android/support/v7/widget/PagerSnapHelper(.*)",
+      "to": "androidx/widget/recyclerview/PagerSnapHelper{0}"
+    },
+    {
+      "from": "android/support/v7/widget/PositionMap(.*)",
+      "to": "androidx/widget/recyclerview/PositionMap{0}"
+    },
+    {
+      "from": "android/support/v7/widget/RecyclerViewAccessibilityDelegate(.*)",
+      "to": "androidx/widget/recyclerview/RecyclerViewAccessibilityDelegate{0}"
+    },
+    {
+      "from": "android/support/v7/widget/RecyclerView(.*)",
+      "to": "androidx/widget/recyclerview/RecyclerView{0}"
+    },
+    {
+      "from": "android/support/v7/widget/ScrollbarHelper(.*)",
+      "to": "androidx/widget/recyclerview/ScrollbarHelper{0}"
+    },
+    {
+      "from": "android/support/v7/widget/SimpleItemAnimator(.*)",
+      "to": "androidx/widget/recyclerview/SimpleItemAnimator{0}"
+    },
+    {
+      "from": "android/support/v7/widget/SnapHelper(.*)",
+      "to": "androidx/widget/recyclerview/SnapHelper{0}"
+    },
+    {
+      "from": "android/support/v7/widget/StaggeredGridLayoutManager(.*)",
+      "to": "androidx/widget/recyclerview/StaggeredGridLayoutManager{0}"
+    },
+    {
+      "from": "android/support/v7/widget/ViewBoundsCheck(.*)",
+      "to": "androidx/widget/recyclerview/ViewBoundsCheck{0}"
+    },
+    {
+      "from": "android/support/v7/widget/ViewInfoStore(.*)",
+      "to": "androidx/widget/recyclerview/ViewInfoStore{0}"
+    },
+    {
+      "from": "android/support/v7/widget/helper/(.*)",
+      "to": "androidx/widget/recyclerview/{0}"
+    },
+    {
+      "from": "android/support/v7/widget/util/SortedListAdapterCallback",
+      "to": "androidx/widget/recyclerview/SortedListAdapterCallback"
+    },
+    {
+      "from": "android/support/v7/recyclerview/extensions/(.*)",
+      "to": "androidx/widget/recyclerview/{0}"
+    },
+    {
+      "from": "android/support/v7/util/(.*)",
+      "to": "androidx/widget/recyclerview/{0}"
+    },
+    {
+      "from": "android/support/design/widget/CoordinatorLayout(.*)",
+      "to": "androidx/widget/CoordinatorLayout{0}"
+    },
+    {
+      "from": "android/support/design/widget/DirectedAcyclicGraph(.*)",
+      "to": "androidx/widget/DirectedAcyclicGraph{0}"
+    },
+    {
+      "from": "android/support/design/widget/ViewGroupUtils(.*)",
+      "to": "androidx/widget/ViewGroupUtils{0}"
+    },
+    {
+      "from": "android/support/constraint/(.*)",
+      "to": "androidx/widget/constraint/{0}"
+    },
+    {
+      "from": "android/support/v4/view/ViewPager(.*)",
+      "to": "androidx/widget/ViewPager{0}"
+    },
+    {
+      "from": "android/support/v4/view/PagerAdapter(.*)",
+      "to": "androidx/widget/PagerAdapter{0}"
+    },
+    {
+      "from": "android/support/v4/view/PagerTabStrip(.*)",
+      "to": "androidx/widget/PagerTabStrip{0}"
+    },
+    {
+      "from": "android/support/v4/view/PagerTitleStrip(.*)",
+      "to": "androidx/widget/PagerTitleStrip{0}"
     },
     {
       "from": "android/support/v17/preference/(.*)",
-      "to": "androidx/leanback/preference/{0}",
-      "fieldSelectors": []
+      "to": "androidx/leanback/preference/{0}"
+    },
+    {
+      "from": "android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout(.*)",
+      "to": "androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout{0}"
     },
     {
       "from": "android/support/customtabs/(.*)",
-      "to": "androidx/browser/customtabs/{0}",
-      "fieldSelectors": []
+      "to": "androidx/browser/customtabs/{0}"
     },
     {
       "from": "android/support/v4/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/{0}"
     },
     {
-      "from": "android/support/v7/graphics/ColorCutQuantizer",
-      "to": "androidx/graphics/palette/ColorCutQuantizer",
-      "fieldSelectors": []
+      "from": "android/support/v7/graphics/ColorCutQuantizer(.*)",
+      "to": "androidx/graphics/palette/ColorCutQuantizer{0}"
     },
     {
-      "from": "android/support/v7/graphics/Palette",
-      "to": "androidx/graphics/palette/Palette",
-      "fieldSelectors": []
+      "from": "android/support/v7/graphics/Palette(.*)",
+      "to": "androidx/graphics/palette/Palette{0}"
     },
     {
-      "from": "android/support/v7/graphics/Target",
-      "to": "androidx/graphics/palette/Target",
-      "fieldSelectors": []
+      "from": "android/support/v7/graphics/Target(.*)",
+      "to": "androidx/graphics/palette/Target{0}"
+    },
+    {
+      "from": "android/support/v7/internal/widget/PreferenceImageView(.*)",
+      "to": "androidx/preference/internal/PreferenceImageView{0}"
     },
     {
       "from": "android/support/v7/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/{0}"
+    },
+    {
+      "from": "android/support/v8/(.*)",
+      "to": "androidx/{0}"
     },
     {
       "from": "android/support/v13/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/{0}"
     },
     {
       "from": "android/support/v14/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/{0}"
     },
     {
       "from": "android/support/v17/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/{0}"
+    },
+    {
+      "from": "android/support/content/(.*)",
+      "to": "androidx/util/contentpaging/{0}"
     },
     {
       "from": "android/support/percent/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/widget/{0}"
     },
     {
       "from": "android/support/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/{0}"
     },
     {
       "from": "android/arch/(.*)",
-      "to": "androidx/{0}",
-      "fieldSelectors": []
+      "to": "androidx/{0}"
+    },
+    {
+      "from": "android/databinding/(.*)",
+      "to": "androidx/databinding/{0}"
+    }
+  ],
+  "slRules": [
+    {
+      "from": "(.*)/package-info",
+      "to": "ignore"
+    },
+    {
+      "from": "androidx/text/emoji/flatbuffer/(.*)",
+      "to": "ignore"
+    },
+    {
+      "from": "androidx/textclassifier/(.*)",
+      "to": "ignore"
+    },
+    {
+      "from": "androidx/widget/recyclerview/selection/(.*)",
+      "to": "ignore"
+    },
+    {
+      "from": "androidx/browser/browseractions/(.*)",
+      "to": "ignore"
     }
   ],
   "pomRules": [
@@ -690,13356 +810,4147 @@
   ],
   "map": {
     "types": {
-      "android/support/v4/provider/FontsContractCompat$Columns": "androidx/provider/FontsContractCompat$Columns",
-      "android/support/design/widget/AppBarLayout$Behavior$SavedState": "androidx/design/widget/AppBarLayout$Behavior$SavedState",
-      "android/support/v4/internal/view/SupportMenu": "androidx/internal/view/SupportMenu",
-      "android/support/v4/media/MediaDescriptionCompat": "androidx/media/MediaDescriptionCompat",
-      "android/support/transition/ChangeTransform$GhostListener": "androidx/transition/ChangeTransform$GhostListener",
-      "android/support/design/widget/BaseTransientBottomBar$BaseCallback": "androidx/design/widget/BaseTransientBottomBar$BaseCallback",
-      "android/support/v4/print/PrintHelper$ColorMode": "androidx/print/PrintHelper$ColorMode",
-      "android/support/annotation/RequiresPermission$Write": "androidx/annotation/RequiresPermission$Write",
-      "android/support/v7/widget/FastScroller$AnimatorUpdater": "androidx/widget/FastScroller$AnimatorUpdater",
-      "android/support/multidex/MultiDex$V14": "androidx/multidex/MultiDex$V14",
-      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentAdapterRegistry": "androidx/leanback/app/BrowseSupportFragment$MainFragmentAdapterRegistry",
-      "android/support/v7/preference/PreferenceDataStore": "androidx/preference/PreferenceDataStore",
-      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper$PlaybackControlStateCallback": "androidx/leanback/app/DetailsBackgroundVideoHelper$PlaybackControlStateCallback",
-      "android/support/v4/content/LocalBroadcastManager": "androidx/content/LocalBroadcastManager",
-      "android/support/v7/view/ActionBarPolicy": "androidx/view/ActionBarPolicy",
-      "android/support/v4/content/Loader$OnLoadCanceledListener": "androidx/content/Loader$OnLoadCanceledListener",
-      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImplBase": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImplBase",
-      "android/support/v4/app/SharedElementCallback$OnSharedElementsReadyListener": "androidx/app/SharedElementCallback$OnSharedElementsReadyListener",
-      "android/support/v7/app/MediaRouteVolumeSlider": "androidx/app/MediaRouteVolumeSlider",
-      "android/support/multidex/MultiDex$V19": "androidx/multidex/MultiDex$V19",
-      "android/support/v17/leanback/widget/StaggeredGridDefault": "androidx/leanback/widget/StaggeredGridDefault",
-      "android/support/v17/leanback/widget/GuidedActionAdapter$ActionOnKeyListener": "androidx/leanback/widget/GuidedActionAdapter$ActionOnKeyListener",
-      "android/support/design/widget/BottomNavigationView$OnNavigationItemReselectedListener": "androidx/design/widget/BottomNavigationView$OnNavigationItemReselectedListener",
-      "android/support/app/recommendation/ContentRecommendation$ContentPricing": "androidx/app/recommendation/ContentRecommendation$ContentPricing",
-      "android/support/v17/leanback/widget/BaseCardView$LayoutParams": "androidx/leanback/widget/BaseCardView$LayoutParams",
-      "android/support/text/emoji/MetadataListReader": "androidx/text/emoji/MetadataListReader",
-      "android/support/v7/appcompat/R$drawable": "androidx/appcompat/R$drawable",
-      "android/support/design/widget/BaseTransientBottomBar$OnAttachStateChangeListener": "androidx/design/widget/BaseTransientBottomBar$OnAttachStateChangeListener",
-      "android/support/v4/view/GravityCompat": "androidx/view/GravityCompat",
-      "android/support/v7/view/menu/SubMenuWrapperICS": "androidx/view/menu/SubMenuWrapperICS",
-      "android/support/graphics/drawable/VectorDrawableCompat": "androidx/graphics/drawable/VectorDrawableCompat",
-      "android/support/v4/view/AsyncLayoutInflater$InflateRequest": "androidx/view/AsyncLayoutInflater$InflateRequest",
-      "android/support/v17/leanback/app/HeadersFragment$NoOverlappingFrameLayout": "androidx/leanback/app/HeadersFragment$NoOverlappingFrameLayout",
-      "android/support/v17/leanback/widget/ShadowHelperJbmr2": "androidx/leanback/widget/ShadowHelperJbmr2",
-      "android/support/design/internal/ScrimInsetsFrameLayout": "androidx/design/internal/ScrimInsetsFrameLayout",
-      "android/support/v17/leanback/widget/HorizontalHoverCardSwitcher": "androidx/leanback/widget/HorizontalHoverCardSwitcher",
-      "android/support/v7/widget/RecyclerView$Recycler": "androidx/widget/RecyclerView$Recycler",
-      "android/support/v7/widget/FastScroller$State": "androidx/widget/FastScroller$State",
-      "android/support/v7/media/SystemMediaRouteProvider$JellybeanMr2Impl": "androidx/media/SystemMediaRouteProvider$JellybeanMr2Impl",
-      "android/support/wear/R$id": "androidx/wear/R$id",
-      "android/support/v17/leanback/widget/FocusHighlight": "androidx/leanback/widget/FocusHighlight",
-      "android/support/v7/view/menu/ExpandedMenuView": "androidx/view/menu/ExpandedMenuView",
-      "android/support/graphics/drawable/PathInterpolatorCompat": "androidx/graphics/drawable/PathInterpolatorCompat",
-      "android/support/v17/leanback/widget/MediaItemActionPresenter": "androidx/leanback/widget/MediaItemActionPresenter",
-      "android/support/v4/content/Loader$OnLoadCompleteListener": "androidx/content/Loader$OnLoadCompleteListener",
-      "android/support/v17/leanback/widget/NonOverlappingLinearLayout": "androidx/leanback/widget/NonOverlappingLinearLayout",
-      "android/support/v7/view/menu/MenuItemWrapperICS$CollapsibleActionViewWrapper": "androidx/view/menu/MenuItemWrapperICS$CollapsibleActionViewWrapper",
-      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImplJB": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImplJB",
-      "android/support/v17/leanback/app/ErrorFragment": "androidx/leanback/app/ErrorFragment",
-      "android/support/v7/view/menu/MenuItemWrapperICS$OnActionExpandListenerWrapper": "androidx/view/menu/MenuItemWrapperICS$OnActionExpandListenerWrapper",
-      "android/support/v7/app/AppCompatActivity": "androidx/app/AppCompatActivity",
-      "android/support/v17/preference/LeanbackSettingsFragment$DummyFragment": "androidx/leanback/preference/LeanbackSettingsFragment$DummyFragment",
-      "android/support/app/recommendation/ContentRecommendation$IntentType": "androidx/app/recommendation/ContentRecommendation$IntentType",
-      "android/support/v17/leanback/widget/PlaybackControlsRowView": "androidx/leanback/widget/PlaybackControlsRowView",
-      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicLocale": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicLocale",
-      "android/support/v4/util/SparseArrayCompat": "androidx/util/SparseArrayCompat",
-      "android/support/v4/net/TrafficStatsCompat": "androidx/net/TrafficStatsCompat",
-      "android/support/design/widget/TabLayout$Tab": "androidx/design/widget/TabLayout$Tab",
-      "android/support/v7/view/CollapsibleActionView": "androidx/view/CollapsibleActionView",
-      "android/support/v17/leanback/R$id": "androidx/leanback/R$id",
-      "android/support/v4/content/MimeTypeFilter": "androidx/content/MimeTypeFilter",
-      "android/support/media/tv/TvContractCompat$WatchNextPrograms$WatchNextType": "androidx/media/tv/TvContractCompat$WatchNextPrograms$WatchNextType",
-      "android/support/transition/ViewUtilsImpl": "androidx/transition/ViewUtilsImpl",
-      "android/support/v17/leanback/app/DetailsFragment$SetSelectionRunnable": "androidx/leanback/app/DetailsFragment$SetSelectionRunnable",
-      "android/support/v7/app/MediaRouteControllerDialog$ClickListener": "androidx/app/MediaRouteControllerDialog$ClickListener",
-      "android/support/design/widget/VisibilityAwareImageButton": "androidx/design/widget/VisibilityAwareImageButton",
-      "android/support/transition/ViewGroupUtilsImpl": "androidx/transition/ViewGroupUtilsImpl",
-      "android/support/v7/widget/SearchView$SearchAutoComplete": "androidx/widget/SearchView$SearchAutoComplete",
-      "android/support/v17/leanback/widget/GuidedActionAdapterGroup": "androidx/leanback/widget/GuidedActionAdapterGroup",
-      "android/support/v7/widget/AppCompatBackgroundHelper": "androidx/widget/AppCompatBackgroundHelper",
-      "android/support/v4/widget/EdgeEffectCompat$EdgeEffectApi21Impl": "androidx/widget/EdgeEffectCompat$EdgeEffectApi21Impl",
-      "android/support/v17/leanback/R$fraction": "androidx/leanback/R$fraction",
-      "android/support/wear/widget/drawer/WearableActionDrawerMenu": "androidx/wear/widget/drawer/WearableActionDrawerMenu",
-      "android/support/v4/content/IntentCompat": "androidx/content/IntentCompat",
-      "android/support/compat/R": "androidx/compat/R",
-      "android/support/v7/widget/RecyclerView$ViewCacheExtension": "androidx/widget/RecyclerView$ViewCacheExtension",
-      "android/support/v7/widget/DecorContentParent": "androidx/widget/DecorContentParent",
-      "android/support/design/widget/BaseTransientBottomBar$Behavior": "androidx/design/widget/BaseTransientBottomBar$Behavior",
-      "android/support/design/widget/TabLayout$ViewPagerOnTabSelectedListener": "androidx/design/widget/TabLayout$ViewPagerOnTabSelectedListener",
-      "android/support/v7/preference/EditTextPreference$SavedState": "androidx/preference/EditTextPreference$SavedState",
-      "android/support/design/widget/ShadowViewDelegate": "androidx/design/widget/ShadowViewDelegate",
-      "android/support/v7/app/AlertController$ButtonHandler": "androidx/app/AlertController$ButtonHandler",
-      "android/support/v4/widget/AutoScrollHelper$ScrollAnimationRunnable": "androidx/widget/AutoScrollHelper$ScrollAnimationRunnable",
-      "android/support/v7/view/menu/ShowableListMenu": "androidx/view/menu/ShowableListMenu",
-      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper": "androidx/leanback/widget/DetailsOverviewSharedElementHelper",
-      "android/support/v7/widget/MenuPopupWindow$MenuDropDownListView": "androidx/widget/MenuPopupWindow$MenuDropDownListView",
-      "android/support/v17/leanback/transition/LeanbackTransitionHelper": "androidx/leanback/transition/LeanbackTransitionHelper",
-      "android/support/design/widget/BottomSheetDialogFragment": "androidx/design/widget/BottomSheetDialogFragment",
-      "android/support/v4/app/NotificationCompat$Extender": "androidx/app/NotificationCompat$Extender",
-      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicInternal": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicInternal",
-      "android/support/wear/widget/SwipeDismissLayout$OnPreSwipeListener": "androidx/wear/widget/SwipeDismissLayout$OnPreSwipeListener",
-      "android/support/v4/graphics/BitmapCompat$BitmapCompatApi18Impl": "androidx/graphics/BitmapCompat$BitmapCompatApi18Impl",
-      "android/support/v4/view/ViewCompat$AutofillImportance": "androidx/view/legacy/ViewCompat$AutofillImportance",
-      "android/support/v4/app/AppOpsManagerCompat": "androidx/app/AppOpsManagerCompat",
-      "android/support/annotation/FractionRes": "androidx/annotation/FractionRes",
-      "android/support/media/instantvideo/widget/InstantVideoView": "androidx/media/instantvideo/widget/InstantVideoView",
-      "android/support/design/internal/NavigationMenuPresenter$NormalViewHolder": "androidx/design/internal/NavigationMenuPresenter$NormalViewHolder",
-      "android/support/v4/view/accessibility/AccessibilityRecordCompat": "androidx/view/accessibility/AccessibilityRecordCompat",
-      "android/support/v7/view/menu/MenuWrapperFactory": "androidx/view/menu/MenuWrapperFactory",
-      "android/support/v17/leanback/app/HeadersSupportFragment$NoOverlappingFrameLayout": "androidx/leanback/app/HeadersSupportFragment$NoOverlappingFrameLayout",
-      "android/support/v7/widget/ScrollingTabContainerView$VisibilityAnimListener": "androidx/widget/ScrollingTabContainerView$VisibilityAnimListener",
-      "android/support/v4/media/MediaBrowserServiceCompatApi26$ResultWrapper": "androidx/media/MediaBrowserServiceCompatApi26$ResultWrapper",
-      "android/support/v4/media/MediaBrowserServiceCompat$ResultFlags": "androidx/media/MediaBrowserServiceCompat$ResultFlags",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraBinderRequestResultReceiver": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraBinderRequestResultReceiver",
-      "android/support/v17/leanback/widget/OnChildSelectedListener": "androidx/leanback/widget/OnChildSelectedListener",
-      "android/support/v4/os/LocaleListHelper": "androidx/os/LocaleListHelper",
-      "android/support/v7/widget/ChildHelper": "androidx/widget/ChildHelper",
-      "android/support/v17/leanback/widget/BaseOnItemViewClickedListener": "androidx/leanback/widget/BaseOnItemViewClickedListener",
-      "android/support/v17/leanback/widget/VerticalGridPresenter": "androidx/leanback/widget/VerticalGridPresenter",
-      "android/support/v7/widget/Toolbar$LayoutParams": "androidx/widget/Toolbar$LayoutParams",
-      "android/support/v4/provider/SelfDestructiveThread": "androidx/provider/SelfDestructiveThread",
-      "android/support/v17/leanback/widget/DetailsParallax": "androidx/leanback/widget/DetailsParallax",
-      "android/support/v4/content/pm/ActivityInfoCompat": "androidx/content/pm/ActivityInfoCompat",
-      "android/support/percent/PercentFrameLayout$LayoutParams": "androidx/PercentFrameLayout$LayoutParams",
-      "android/support/v7/widget/RecyclerView$ItemAnimator$ItemAnimatorFinishedListener": "androidx/widget/RecyclerView$ItemAnimator$ItemAnimatorFinishedListener",
-      "android/support/v4/media/MediaBrowserCompat$ConnectionCallback": "androidx/media/MediaBrowserCompat$ConnectionCallback",
-      "android/support/design/widget/ThemeUtils": "androidx/design/widget/ThemeUtils",
-      "android/support/wear/widget/drawer/RecyclerViewFlingWatcher": "androidx/wear/widget/drawer/RecyclerViewFlingWatcher",
-      "android/support/v4/app/SupportActivity": "androidx/app/SupportActivity",
-      "android/support/transition/TransitionUtils": "androidx/transition/TransitionUtils",
-      "android/support/v4/graphics/TypefaceCompatApi21Impl": "androidx/graphics/TypefaceCompatApi21Impl",
-      "android/support/v7/media/MediaRouter$CallbackRecord": "androidx/media/MediaRouter$CallbackRecord",
-      "android/support/wear/widget/drawer/NestedScrollViewFlingWatcher": "androidx/wear/widget/drawer/NestedScrollViewFlingWatcher",
-      "android/support/v4/graphics/drawable/TintAwareDrawable": "androidx/graphics/drawable/TintAwareDrawable",
-      "android/support/text/emoji/widget/EmojiTextViewHelper$HelperInternal": "androidx/text/emoji/widget/EmojiTextViewHelper$HelperInternal",
-      "android/support/transition/Styleable": "androidx/transition/Styleable",
-      "android/support/v17/leanback/widget/BaseCardView": "androidx/leanback/widget/BaseCardView",
-      "android/support/v17/leanback/app/DetailsSupportFragment": "androidx/leanback/app/DetailsSupportFragment",
-      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuSeparatorItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuSeparatorItem",
-      "android/support/app/recommendation/ContentRecommendation$IntentData": "androidx/app/recommendation/ContentRecommendation$IntentData",
-      "android/support/wear/widget/drawer/WearableDrawerLayout$DrawerStateCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$DrawerStateCallback",
-      "android/support/wear/widget/CircularProgressLayoutController$CircularProgressTimer": "androidx/wear/widget/CircularProgressLayoutController$CircularProgressTimer",
-      "android/support/v4/widget/CircleImageView": "androidx/widget/CircleImageView",
-      "android/support/v17/leanback/app/BaseRowFragment": "androidx/leanback/app/BaseRowFragment",
-      "android/support/text/emoji/EmojiCompat$ReplaceStrategy": "androidx/text/emoji/EmojiCompat$ReplaceStrategy",
-      "android/support/v7/widget/ViewInfoStore$InfoRecord": "androidx/widget/ViewInfoStore$InfoRecord",
-      "android/support/transition/TransitionInflater": "androidx/transition/TransitionInflater",
-      "android/support/v17/leanback/media/PlaybackControlGlue$UpdatePlaybackStateHandler": "androidx/leanback/media/PlaybackControlGlue$UpdatePlaybackStateHandler",
-      "android/support/v7/widget/RecyclerView$State$LayoutState": "androidx/widget/RecyclerView$State$LayoutState",
-      "android/support/v17/leanback/widget/RoundedRectHelper": "androidx/leanback/widget/RoundedRectHelper",
-      "android/support/v4/app/ServiceCompat": "androidx/app/ServiceCompat",
-      "android/support/percent/PercentRelativeLayout$LayoutParams": "androidx/PercentRelativeLayout$LayoutParams",
-      "android/support/v17/leanback/widget/RowHeaderPresenter": "androidx/leanback/widget/RowHeaderPresenter",
-      "android/support/v7/widget/SearchView$UpdatableTouchDelegate": "androidx/widget/SearchView$UpdatableTouchDelegate",
-      "android/support/media/tv/TvContractCompat$PreviewProgramColumns$AspectRatio": "androidx/media/tv/TvContractCompat$PreviewProgramColumns$AspectRatio",
-      "android/support/text/emoji/EmojiMetadata$HasGlyph": "androidx/text/emoji/EmojiMetadata$HasGlyph",
-      "android/support/media/tv/BasePreviewProgram$Builder": "androidx/media/tv/BasePreviewProgram$Builder",
-      "android/support/multidex/ZipUtil$CentralDirectory": "androidx/multidex/ZipUtil$CentralDirectory",
-      "android/support/v7/widget/helper/ItemTouchUIUtil": "androidx/widget/helper/ItemTouchUIUtil",
-      "android/support/v4/widget/DrawerLayout$ChildAccessibilityDelegate": "androidx/widget/DrawerLayout$ChildAccessibilityDelegate",
-      "android/support/v7/media/SystemMediaRouteProvider": "androidx/media/SystemMediaRouteProvider",
-      "android/support/v4/app/LoaderManagerImpl": "androidx/app/LoaderManagerImpl",
-      "android/support/media/ExifInterface$IfdType": "androidx/media/ExifInterface$IfdType",
-      "android/support/v4/widget/CompoundButtonCompat$CompoundButtonCompatBaseImpl": "androidx/widget/CompoundButtonCompat$CompoundButtonCompatBaseImpl",
-      "android/support/v4/graphics/drawable/DrawableWrapperApi14": "androidx/graphics/drawable/DrawableWrapperApi14",
-      "android/support/wear/widget/drawer/WearableDrawerLayout$BottomDrawerDraggerCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$BottomDrawerDraggerCallback",
-      "android/support/v4/view/TintableBackgroundView": "androidx/view/TintableBackgroundView",
-      "android/support/v17/leanback/graphics/BoundsRule": "androidx/leanback/graphics/BoundsRule",
-      "android/support/v17/leanback/widget/RecyclerViewParallax$ChildPositionProperty": "androidx/leanback/widget/RecyclerViewParallax$ChildPositionProperty",
-      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicImpl": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicImpl",
-      "android/support/v17/leanback/widget/PlaybackControlsPresenter": "androidx/leanback/widget/PlaybackControlsPresenter",
-      "android/support/v7/app/ActionBarDrawerToggle": "androidx/app/ActionBarDrawerToggle",
-      "android/support/design/internal/BaselineLayout": "androidx/design/internal/BaselineLayout",
-      "android/support/v7/preference/PreferenceScreen": "androidx/preference/PreferenceScreen",
-      "android/support/v4/graphics/drawable/DrawableWrapperApi19": "androidx/graphics/drawable/DrawableWrapperApi19",
-      "android/support/v17/leanback/app/DetailsFragment": "androidx/leanback/app/DetailsFragment",
-      "android/support/annotation/ColorLong": "androidx/annotation/ColorLong",
-      "android/support/annotation/IntRange": "androidx/annotation/IntRange",
-      "android/support/v7/widget/LinearLayoutCompat$DividerMode": "androidx/widget/LinearLayoutCompat$DividerMode",
+      "android/support/v17/leanback/animation/LogAccelerateInterpolator": "androidx/leanback/animation/LogAccelerateInterpolator",
       "android/support/annotation/RestrictTo": "androidx/annotation/RestrictTo",
-      "android/support/v4/media/session/PlaybackStateCompat": "androidx/media/session/PlaybackStateCompat",
-      "android/support/v17/leanback/widget/RecyclerViewParallax": "androidx/leanback/widget/RecyclerViewParallax",
-      "android/support/v7/widget/ChildHelper$Callback": "androidx/widget/ChildHelper$Callback",
-      "android/support/v17/leanback/widget/DetailsOverviewLogoPresenter": "androidx/leanback/widget/DetailsOverviewLogoPresenter",
-      "android/support/constraint/Guideline": "androidx/constraint/Guideline",
-      "android/support/design/widget/CircularBorderDrawable": "androidx/design/widget/CircularBorderDrawable",
-      "android/support/text/emoji/widget/EmojiInputConnection": "androidx/text/emoji/widget/EmojiInputConnection",
-      "android/support/v4/widget/ImageViewCompat$ImageViewCompatImpl": "androidx/widget/ImageViewCompat$ImageViewCompatImpl",
-      "android/support/v17/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper": "androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper",
-      "android/support/v7/view/menu/MenuBuilder": "androidx/view/menu/MenuBuilder",
-      "android/support/v7/media/MediaRouteDiscoveryRequest": "androidx/media/MediaRouteDiscoveryRequest",
-      "android/support/design/widget/AppBarLayout$ScrollingViewBehavior": "androidx/design/widget/AppBarLayout$ScrollingViewBehavior",
-      "android/support/v17/leanback/widget/PersistentFocusWrapper$SavedState": "androidx/leanback/widget/PersistentFocusWrapper$SavedState",
-      "android/support/v7/widget/RecyclerView$ItemAnimator$ItemAnimatorListener": "androidx/widget/RecyclerView$ItemAnimator$ItemAnimatorListener",
-      "android/support/v17/leanback/media/PlaybackBannerControlGlue": "androidx/leanback/media/PlaybackBannerControlGlue",
-      "android/support/design/internal/NavigationMenuPresenter$ViewHolder": "androidx/design/internal/NavigationMenuPresenter$ViewHolder",
-      "android/support/v7/widget/AppCompatDrawableManager$VdcInflateDelegate": "androidx/widget/AppCompatDrawableManager$VdcInflateDelegate",
-      "android/support/graphics/drawable/AndroidResources": "androidx/graphics/drawable/AndroidResources",
-      "android/support/v7/widget/RecyclerView$RecyclerViewDataObserver": "androidx/widget/RecyclerView$RecyclerViewDataObserver",
-      "android/support/design/R$integer": "androidx/design/R$integer",
-      "android/support/v4/app/AppLaunchChecker": "androidx/app/AppLaunchChecker",
-      "android/support/v17/leanback/transition/ParallaxTransition": "androidx/leanback/transition/ParallaxTransition",
-      "android/support/text/emoji/widget/SpannableBuilder": "androidx/text/emoji/widget/SpannableBuilder",
-      "android/support/text/emoji/widget/ExtractButtonCompat": "androidx/text/emoji/widget/ExtractButtonCompat",
-      "android/support/v17/leanback/app/ListRowDataAdapter$QueueBasedDataObserver": "androidx/leanback/app/ListRowDataAdapter$QueueBasedDataObserver",
-      "android/support/content/ContentPager$QueryRunner": "androidx/content/ContentPager$QueryRunner",
-      "android/support/v4/app/FragmentTabHost$SavedState": "androidx/app/FragmentTabHost$SavedState",
-      "android/support/v7/widget/OpReorderer$Callback": "androidx/widget/OpReorderer$Callback",
-      "android/support/multidex/MultiDexExtractor$ExtractedDex": "androidx/multidex/MultiDexExtractor$ExtractedDex",
-      "android/support/design/widget/SwipeDismissBehavior": "androidx/design/widget/SwipeDismissBehavior",
-      "android/support/v4/content/FileProvider": "androidx/content/FileProvider",
-      "android/support/v17/leanback/app/BrowseFragment$BrowseTransitionListener": "androidx/leanback/app/BrowseFragment$BrowseTransitionListener",
-      "android/support/design/widget/ViewOffsetBehavior": "androidx/design/widget/ViewOffsetBehavior",
-      "android/support/v17/leanback/app/ListRowDataAdapter$SimpleDataObserver": "androidx/leanback/app/ListRowDataAdapter$SimpleDataObserver",
-      "android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat": "androidx/accessibilityservice/AccessibilityServiceInfoCompat",
-      "android/support/v7/widget/ScrollbarHelper": "androidx/widget/ScrollbarHelper",
-      "android/support/v17/leanback/widget/BaseCardView$InfoAlphaAnimation": "androidx/leanback/widget/BaseCardView$InfoAlphaAnimation",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$RepeatAction": "androidx/leanback/widget/PlaybackControlsRow$RepeatAction",
-      "android/support/v7/widget/LinearSnapHelper": "androidx/widget/LinearSnapHelper",
-      "android/support/v7/view/menu/BaseWrapper": "androidx/view/menu/BaseWrapper",
-      "android/support/wear/utils/MetadataConstants": "androidx/wear/utils/MetadataConstants",
-      "android/support/v7/widget/RecyclerView$ItemAnimator": "androidx/widget/RecyclerView$ItemAnimator",
-      "android/support/v17/leanback/media/PlaybackGlueHost$HostCallback": "androidx/leanback/media/PlaybackGlueHost$HostCallback",
-      "android/support/v7/widget/ActionMenuPresenter$ActionMenuPopupCallback": "androidx/widget/ActionMenuPresenter$ActionMenuPopupCallback",
-      "android/support/v7/widget/GridLayout$Interval": "androidx/widget/GridLayout$Interval",
-      "android/support/v17/leanback/widget/GuidedActionsStylist$ViewHolder": "androidx/leanback/widget/GuidedActionsStylist$ViewHolder",
-      "android/support/v4/app/Fragment$InstantiationException": "androidx/app/Fragment$InstantiationException",
-      "android/support/v14/preference/EditTextPreferenceDialogFragment": "androidx/preference/EditTextPreferenceDialogFragment",
-      "android/support/text/emoji/EmojiCompat$CompatInternal": "androidx/text/emoji/EmojiCompat$CompatInternal",
-      "android/support/v4/app/FragmentManagerNonConfig": "androidx/app/FragmentManagerNonConfig",
-      "android/support/v7/media/MediaRouter$GlobalMediaRouter": "androidx/media/MediaRouter$GlobalMediaRouter",
-      "android/support/transition/Styleable$TransitionManager": "androidx/transition/Styleable$TransitionManager",
-      "android/support/v4/content/res/ConfigurationHelper": "androidx/content/res/ConfigurationHelper",
-      "android/support/v7/app/MediaRouteDiscoveryFragment": "androidx/app/MediaRouteDiscoveryFragment",
-      "android/support/v7/media/MediaRouteSelector": "androidx/media/MediaRouteSelector",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi21",
-      "android/support/v17/leanback/widget/ControlBar": "androidx/leanback/widget/ControlBar",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi24": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi24",
-      "android/support/app/recommendation/ContentRecommendation$ContentStatus": "androidx/app/recommendation/ContentRecommendation$ContentStatus",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi23": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi23",
-      "android/support/v4/media/MediaMetadataCompat": "androidx/media/MediaMetadataCompat",
-      "android/support/v4/util/CircularIntArray": "androidx/util/CircularIntArray",
-      "android/support/transition/Slide$CalculateSlide": "androidx/transition/Slide$CalculateSlide",
-      "android/support/transition/GhostViewUtils": "androidx/transition/GhostViewUtils",
-      "android/support/design/widget/NavigationView$OnNavigationItemSelectedListener": "androidx/design/widget/NavigationView$OnNavigationItemSelectedListener",
-      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat$CryptoObject": "androidx/hardware/fingerprint/FingerprintManagerCompat$CryptoObject",
-      "android/support/media/tv/TvContractCompat$Programs": "androidx/media/tv/TvContractCompat$Programs",
-      "android/support/v4/provider/FontsContractCompat": "androidx/provider/FontsContractCompat",
-      "android/support/v4/content/res/FontResourcesParserCompat$ProviderResourceEntry": "androidx/content/res/FontResourcesParserCompat$ProviderResourceEntry",
-      "android/support/v17/leanback/widget/BaseGridView": "androidx/leanback/widget/BaseGridView",
-      "android/support/design/R": "androidx/design/R",
-      "android/support/annotation/GuardedBy": "androidx/annotation/GuardedBy",
-      "android/support/v17/leanback/widget/ListRowPresenter$ViewHolder": "androidx/leanback/widget/ListRowPresenter$ViewHolder",
-      "android/support/constraint/solver/widgets/ConstraintWidgetContainer": "androidx/constraint/solver/widgets/ConstraintWidgetContainer",
-      "android/support/wear/widget/drawer/WearableDrawerView$DrawerState": "androidx/wear/widget/drawer/WearableDrawerView$DrawerState",
-      "android/support/v7/widget/LinearLayoutManager$SavedState": "androidx/widget/LinearLayoutManager$SavedState",
-      "android/support/v4/util/LongSparseArray": "androidx/util/LongSparseArray",
-      "android/support/media/tv/TvContractCompat$ProgramColumns$ReviewRatingStyle": "androidx/media/tv/TvContractCompat$ProgramColumns$ReviewRatingStyle",
-      "android/support/v7/media/MediaRouter$GlobalMediaRouter$RemoteControlClientRecord": "androidx/media/MediaRouter$GlobalMediaRouter$RemoteControlClientRecord",
-      "android/support/v7/widget/TintResources": "androidx/widget/TintResources",
-      "android/support/v7/util/ThreadUtil$MainThreadCallback": "androidx/util/ThreadUtil$MainThreadCallback",
-      "android/support/animation/DynamicAnimation$MassState": "androidx/animation/DynamicAnimation$MassState",
-      "android/support/v4/widget/PopupWindowCompat": "androidx/widget/PopupWindowCompat",
-      "android/support/design/widget/FloatingActionButton$Behavior": "androidx/design/widget/FloatingActionButton$Behavior",
-      "android/support/v7/preference/PreferenceFragmentCompat$DividerDecoration": "androidx/preference/PreferenceFragmentCompat$DividerDecoration",
-      "android/support/transition/Styleable$PatternPathMotion": "androidx/transition/Styleable$PatternPathMotion",
-      "android/support/v4/media/session/MediaSessionCompat$Callback$CallbackHandler": "androidx/media/session/MediaSessionCompat$Callback$CallbackHandler",
-      "android/support/v4/app/INotificationSideChannel": "androidx/app/INotificationSideChannel",
-      "android/support/media/tv/TvContractCompat$Channels$VideoFormat": "androidx/media/tv/TvContractCompat$Channels$VideoFormat",
-      "android/support/v17/preference/LeanbackSettingsFragment$RootViewOnKeyListener": "androidx/leanback/preference/LeanbackSettingsFragment$RootViewOnKeyListener",
-      "android/support/v7/widget/ActionMenuView$MenuBuilderCallback": "androidx/widget/ActionMenuView$MenuBuilderCallback",
-      "android/support/design/widget/TabLayout$Mode": "androidx/design/widget/TabLayout$Mode",
-      "android/support/transition/ChangeTransform$Transforms": "androidx/transition/ChangeTransform$Transforms",
-      "android/support/v4/media/MediaBrowserServiceCompatApi21$ResultWrapper": "androidx/media/MediaBrowserServiceCompatApi21$ResultWrapper",
-      "android/support/v17/leanback/transition/TranslationAnimationCreator$TransitionPositionListener": "androidx/leanback/transition/TranslationAnimationCreator$TransitionPositionListener",
-      "android/support/text/emoji/widget/EmojiEditText": "androidx/text/emoji/widget/EmojiEditText",
-      "android/support/wear/R$styleable": "androidx/wear/R$styleable",
-      "android/support/v17/leanback/app/BrowseSupportFragment$FragmentHost": "androidx/leanback/app/BrowseSupportFragment$FragmentHost",
-      "android/support/transition/Scene": "androidx/transition/Scene",
-      "android/support/text/emoji/widget/EmojiTransformationMethod": "androidx/text/emoji/widget/EmojiTransformationMethod",
-      "android/support/v4/view/ViewCompat$ResolvedLayoutDirectionMode": "androidx/view/legacy/ViewCompat$ResolvedLayoutDirectionMode",
-      "android/support/v7/appcompat/R": "androidx/appcompat/R",
-      "android/support/v4/media/session/MediaSessionCompatApi24$Callback": "androidx/media/session/MediaSessionCompatApi24$Callback",
-      "android/support/v7/widget/RecyclerView": "androidx/widget/RecyclerView",
-      "android/support/v4/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerCompat": "androidx/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerCompat",
-      "android/support/v17/leanback/widget/FragmentAnimationProvider": "androidx/leanback/widget/FragmentAnimationProvider",
-      "android/support/v7/widget/ActivityChooserModel": "androidx/widget/ActivityChooserModel",
-      "android/support/media/tv/TvContractCompat$PreviewProgramColumns$InteractionType": "androidx/media/tv/TvContractCompat$PreviewProgramColumns$InteractionType",
-      "android/support/transition/Transition$TransitionListener": "androidx/transition/Transition$TransitionListener",
-      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$ViewHolder": "androidx/leanback/widget/PlaybackControlsRowPresenter$ViewHolder",
-      "android/support/design/widget/CoordinatorLayout": "androidx/widget/CoordinatorLayout",
-      "android/support/content/Query": "androidx/content/Query",
-      "android/support/v17/leanback/app/BackgroundManager$EmptyDrawable": "androidx/leanback/app/BackgroundManager$EmptyDrawable",
-      "android/support/v17/leanback/app/PlaybackSupportFragment$OnFadeCompleteListener": "androidx/leanback/app/PlaybackSupportFragment$OnFadeCompleteListener",
-      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentAdapter": "androidx/leanback/app/BrowseSupportFragment$MainFragmentAdapter",
-      "android/support/v4/media/MediaBrowserCompat$ItemReceiver": "androidx/media/MediaBrowserCompat$ItemReceiver",
-      "android/support/transition/Styleable$VisibilityTransition": "androidx/transition/Styleable$VisibilityTransition",
-      "android/support/transition/TransitionValues": "androidx/transition/TransitionValues",
-      "android/support/v4/content/res/FontResourcesParserCompat$FamilyResourceEntry": "androidx/content/res/FontResourcesParserCompat$FamilyResourceEntry",
-      "android/support/v17/leanback/app/RowsSupportFragment$MainFragmentAdapter": "androidx/leanback/app/RowsSupportFragment$MainFragmentAdapter",
-      "android/support/v17/leanback/widget/Visibility": "androidx/leanback/widget/Visibility",
-      "android/support/design/widget/AppBarLayout$LayoutParams": "androidx/design/widget/AppBarLayout$LayoutParams",
-      "android/support/v4/media/MediaBrowserCompat$SubscriptionCallback$StubApi26": "androidx/media/MediaBrowserCompat$SubscriptionCallback$StubApi26",
-      "android/support/v4/widget/AutoScrollHelper$ClampedScroller": "androidx/widget/AutoScrollHelper$ClampedScroller",
-      "android/support/v7/preference/PreferenceFragmentCompat$OnPreferenceStartScreenCallback": "androidx/preference/PreferenceFragmentCompat$OnPreferenceStartScreenCallback",
-      "android/support/v7/graphics/Palette$Builder": "androidx/graphics/Palette$Builder",
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat",
-      "android/support/design/widget/StateListAnimator$Tuple": "androidx/design/widget/StateListAnimator$Tuple",
-      "android/support/v4/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListener": "androidx/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListener",
-      "android/support/text/emoji/EmojiCompat$SpanFactory": "androidx/text/emoji/EmojiCompat$SpanFactory",
-      "android/support/media/tv/TvContractCompat$Channels$Type": "androidx/media/tv/TvContractCompat$Channels$Type",
-      "android/support/v7/widget/GridLayout$LayoutParams": "androidx/widget/GridLayout$LayoutParams",
-      "android/support/v4/media/MediaBrowserCompat$SubscriptionCallback$StubApi21": "androidx/media/MediaBrowserCompat$SubscriptionCallback$StubApi21",
-      "android/support/v17/leanback/widget/WindowAlignment$Axis": "androidx/leanback/widget/WindowAlignment$Axis",
-      "android/support/v17/leanback/widget/ControlBarPresenter": "androidx/leanback/widget/ControlBarPresenter",
-      "android/support/constraint/ConstraintSet": "androidx/constraint/ConstraintSet",
-      "android/support/v17/leanback/transition/TransitionHelperKitkat": "androidx/leanback/transition/TransitionHelperKitkat",
-      "android/support/wear/widget/ScrollManager": "androidx/wear/widget/ScrollManager",
-      "android/support/content/ContentPager$QueryRunner$Callback": "androidx/content/ContentPager$QueryRunner$Callback",
-      "android/support/v4/graphics/TypefaceCompat$TypefaceCompatImpl": "androidx/graphics/TypefaceCompat$TypefaceCompatImpl",
-      "android/support/v7/widget/ContentFrameLayout": "androidx/widget/ContentFrameLayout",
-      "android/support/v4/app/ActionBarDrawerToggle$SetIndicatorInfo": "androidx/app/legacy/ActionBarDrawerToggle$SetIndicatorInfo",
-      "android/support/v4/util/TimeUtils": "androidx/util/TimeUtils",
-      "android/support/v7/widget/ActionBarBackgroundDrawableV21": "androidx/widget/ActionBarBackgroundDrawableV21",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$SkipNextAction": "androidx/leanback/widget/PlaybackControlsRow$SkipNextAction",
-      "android/support/design/internal/ParcelableSparseArray": "androidx/design/internal/ParcelableSparseArray",
-      "android/support/media/tv/Channel$Builder": "androidx/media/tv/Channel$Builder",
-      "android/support/v7/widget/AppCompatCompoundButtonHelper": "androidx/widget/AppCompatCompoundButtonHelper",
-      "android/support/v4/media/MediaBrowserCompatApi23$ItemCallback": "androidx/media/MediaBrowserCompatApi23$ItemCallback",
-      "android/support/v4/app/ActionBarDrawerToggle$Delegate": "androidx/app/legacy/ActionBarDrawerToggle$Delegate",
-      "android/support/graphics/drawable/AnimationUtilsCompat": "androidx/graphics/drawable/AnimationUtilsCompat",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ShuffleAction": "androidx/leanback/widget/PlaybackControlsRow$ShuffleAction",
-      "android/support/v4/app/JobIntentService$JobServiceEngineImpl$WrapperWorkItem": "androidx/app/JobIntentService$JobServiceEngineImpl$WrapperWorkItem",
-      "android/support/v7/media/SystemMediaRouteProvider$SyncCallback": "androidx/media/SystemMediaRouteProvider$SyncCallback",
-      "android/support/v7/util/AsyncListUtil$ViewCallback": "androidx/util/AsyncListUtil$ViewCallback",
-      "android/support/v4/view/ViewPager$OnAdapterChangeListener": "androidx/view/ViewPager$OnAdapterChangeListener",
-      "android/support/v7/media/RegisteredMediaRouteProviderWatcher": "androidx/media/RegisteredMediaRouteProviderWatcher",
-      "android/support/transition/Fade$FadeAnimatorListener": "androidx/transition/Fade$FadeAnimatorListener",
-      "android/support/v4/content/res/FontResourcesParserCompat$FetchStrategy": "androidx/content/res/FontResourcesParserCompat$FetchStrategy",
-      "android/support/v17/leanback/graphics/FitWidthBitmapDrawable": "androidx/leanback/graphics/FitWidthBitmapDrawable",
-      "android/support/v7/widget/CardViewDelegate": "androidx/widget/CardViewDelegate",
-      "android/support/v4/media/MediaBrowserCompat$ItemCallback": "androidx/media/MediaBrowserCompat$ItemCallback",
-      "android/support/design/widget/BottomSheetDialog": "androidx/design/widget/BottomSheetDialog",
-      "android/support/v17/leanback/system/Settings$Customizations": "androidx/leanback/system/Settings$Customizations",
-      "android/support/design/widget/FloatingActionButtonImpl$InternalVisibilityChangedListener": "androidx/design/widget/FloatingActionButtonImpl$InternalVisibilityChangedListener",
-      "android/support/v7/media/RemotePlaybackClient$SessionActionCallback": "androidx/media/RemotePlaybackClient$SessionActionCallback",
-      "android/support/wear/ambient/AmbientDelegate$AmbientCallback": "androidx/wear/ambient/AmbientDelegate$AmbientCallback",
-      "android/support/v4/widget/FocusStrategy$BoundsAdapter": "androidx/widget/FocusStrategy$BoundsAdapter",
-      "android/support/v17/leanback/widget/DividerPresenter": "androidx/leanback/widget/DividerPresenter",
-      "android/support/text/emoji/EmojiProcessor$GlyphChecker": "androidx/text/emoji/EmojiProcessor$GlyphChecker",
-      "android/support/v7/preference/PreferenceFragmentCompat": "androidx/preference/PreferenceFragmentCompat",
-      "android/support/v7/widget/TooltipPopup": "androidx/widget/TooltipPopup",
-      "android/support/v4/view/accessibility/AccessibilityNodeProviderCompat": "androidx/view/accessibility/AccessibilityNodeProviderCompat",
-      "android/support/v4/media/MediaBrowserCompat$SearchCallback": "androidx/media/MediaBrowserCompat$SearchCallback",
-      "android/support/v4/media/session/IMediaControllerCallback": "androidx/media/session/IMediaControllerCallback",
-      "android/support/compat/R$styleable": "androidx/compat/R$styleable",
-      "android/support/v7/view/menu/MenuBuilder$ItemInvoker": "androidx/view/menu/MenuBuilder$ItemInvoker",
-      "android/support/v17/leanback/widget/MultiActionsProvider$MultiAction": "androidx/leanback/widget/MultiActionsProvider$MultiAction",
-      "android/support/v7/gridlayout/R$dimen": "androidx/gridlayout/R$dimen",
-      "android/support/v4/app/FragmentManagerImpl$FragmentTag": "androidx/app/FragmentManagerImpl$FragmentTag",
-      "android/support/v4/media/MediaDescriptionCompat$Builder": "androidx/media/MediaDescriptionCompat$Builder",
-      "android/support/v17/leanback/widget/PlaybackControlsPresenter$BoundData": "androidx/leanback/widget/PlaybackControlsPresenter$BoundData",
-      "android/support/v7/app/MediaRouteChooserDialog$RouteComparator": "androidx/app/MediaRouteChooserDialog$RouteComparator",
-      "android/support/v7/app/ActionBar": "androidx/app/ActionBar",
-      "android/support/design/widget/HeaderBehavior$FlingRunnable": "androidx/design/widget/HeaderBehavior$FlingRunnable",
-      "android/support/v7/widget/GapWorker$Task": "androidx/widget/GapWorker$Task",
-      "android/support/v4/view/AsyncLayoutInflater$InflateThread": "androidx/view/AsyncLayoutInflater$InflateThread",
-      "android/support/v17/leanback/R$string": "androidx/leanback/R$string",
-      "android/support/v4/content/LocalBroadcastManager$BroadcastRecord": "androidx/content/LocalBroadcastManager$BroadcastRecord",
-      "android/support/wear/widget/drawer/AbsListViewFlingWatcher": "androidx/wear/widget/drawer/AbsListViewFlingWatcher",
-      "android/support/v17/leanback/widget/ActionPresenterSelector$ActionViewHolder": "androidx/leanback/widget/ActionPresenterSelector$ActionViewHolder",
-      "android/support/v17/leanback/widget/ImageCardView": "androidx/leanback/widget/ImageCardView",
-      "android/support/v4/app/AlarmManagerCompat": "androidx/app/AlarmManagerCompat",
-      "android/support/v7/app/MediaRouterThemeHelper$ControllerColorType": "androidx/app/MediaRouterThemeHelper$ControllerColorType",
-      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImplBase": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImplBase",
-      "android/support/v4/view/WindowCompat": "androidx/view/WindowCompat",
-      "android/support/v7/widget/ThemedSpinnerAdapter$Helper": "androidx/widget/ThemedSpinnerAdapter$Helper",
-      "android/support/v4/media/session/MediaControllerCompat$Callback$StubCompat": "androidx/media/session/MediaControllerCompat$Callback$StubCompat",
-      "android/support/v4/widget/NestedScrollView$AccessibilityDelegate": "androidx/widget/NestedScrollView$AccessibilityDelegate",
-      "android/support/annotation/MainThread": "androidx/annotation/MainThread",
-      "android/support/v17/leanback/app/RowsFragment$RowViewHolderExtra": "androidx/leanback/app/RowsFragment$RowViewHolderExtra",
-      "android/support/v17/leanback/widget/MultiActionsProvider": "androidx/leanback/widget/MultiActionsProvider",
-      "android/support/v7/mediarouter/R$id": "androidx/mediarouter/R$id",
-      "android/support/v4/view/ViewCompat$NestedScrollType": "androidx/view/legacy/ViewCompat$NestedScrollType",
-      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionAlgorithm": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionAlgorithm",
-      "android/support/v4/media/session/MediaControllerCompatApi21$CallbackProxy": "androidx/media/session/MediaControllerCompatApi21$CallbackProxy",
-      "android/support/customtabs/TrustedWebUtils": "androidx/browser/customtabs/TrustedWebUtils",
-      "android/support/v4/text/BidiFormatter$Builder": "androidx/text/BidiFormatter$Builder",
-      "android/support/design/widget/TabLayout$TabView": "androidx/design/widget/TabLayout$TabView",
-      "android/support/wear/internal/widget/drawer/SinglePageUi$OnSelectedClickHandler": "androidx/wear/internal/widget/drawer/SinglePageUi$OnSelectedClickHandler",
-      "android/support/v17/leanback/widget/BrowseFrameLayout": "androidx/leanback/widget/BrowseFrameLayout",
-      "android/support/v4/widget/ImageViewCompat$BaseViewCompatImpl": "androidx/widget/ImageViewCompat$BaseViewCompatImpl",
-      "android/support/customtabs/PostMessageService": "androidx/browser/customtabs/PostMessageService",
-      "android/support/annotation/FontRes": "androidx/annotation/FontRes",
-      "android/support/transition/ViewGroupUtilsApi14": "androidx/transition/ViewGroupUtilsApi14",
-      "android/support/v4/view/ViewParentCompat": "androidx/view/ViewParentCompat",
-      "android/support/v17/leanback/widget/SectionRow": "androidx/leanback/widget/SectionRow",
-      "android/support/v7/preference/DropDownPreference": "androidx/preference/DropDownPreference",
-      "android/support/v4/widget/DrawerLayout$SavedState": "androidx/widget/DrawerLayout$SavedState",
-      "android/support/transition/AnimatorUtilsApi14": "androidx/transition/AnimatorUtilsApi14",
-      "android/support/transition/AnimatorUtilsApi19": "androidx/transition/AnimatorUtilsApi19",
-      "android/support/constraint/solver/widgets/ConstraintAnchor$Strength": "androidx/constraint/solver/widgets/ConstraintAnchor$Strength",
-      "android/support/v7/widget/RecyclerView$SmoothScroller": "androidx/widget/RecyclerView$SmoothScroller",
-      "android/support/design/R$drawable": "androidx/design/R$drawable",
-      "android/support/v7/util/BatchingListUpdateCallback": "androidx/util/BatchingListUpdateCallback",
-      "android/support/v17/leanback/app/BrandedSupportFragment": "androidx/leanback/app/BrandedSupportFragment",
-      "android/support/transition/ViewGroupUtilsApi18": "androidx/transition/ViewGroupUtilsApi18",
-      "android/support/v17/leanback/app/BrowseFragment$FragmentHost": "androidx/leanback/app/BrowseFragment$FragmentHost",
-      "android/support/v17/leanback/widget/MediaNowPlayingView": "androidx/leanback/widget/MediaNowPlayingView",
-      "android/support/v4/app/ActivityCompat$PermissionCompatDelegate": "androidx/app/legacy/ActivityCompat$PermissionCompatDelegate",
-      "android/support/v7/app/ActionBar$TabListener": "androidx/app/ActionBar$TabListener",
-      "android/support/design/widget/CoordinatorLayout$HierarchyChangeListener": "androidx/design/widget/CoordinatorLayout$HierarchyChangeListener",
-      "android/support/v7/app/AppCompatDelegateImplV9": "androidx/app/AppCompatDelegateImplV9",
-      "android/support/v4/app/LoaderManager$LoaderCallbacks": "androidx/app/LoaderManager$LoaderCallbacks",
-      "android/support/v4/view/MenuItemCompat$MenuItemCompatBaseImpl": "androidx/view/MenuItemCompat$MenuItemCompatBaseImpl",
-      "android/support/design/widget/BaseTransientBottomBar$SnackbarBaseLayout": "androidx/design/widget/BaseTransientBottomBar$SnackbarBaseLayout",
-      "android/support/text/emoji/EmojiCompat$CompatInternal19": "androidx/text/emoji/EmojiCompat$CompatInternal19",
-      "android/support/wear/R$fraction": "androidx/wear/R$fraction",
-      "android/support/v7/widget/DividerItemDecoration": "androidx/widget/DividerItemDecoration",
-      "android/support/v4/view/MenuItemCompat$OnActionExpandListener": "androidx/view/MenuItemCompat$OnActionExpandListener",
-      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImpl": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImpl",
-      "android/support/v4/graphics/PathParser$ExtractFloatResult": "androidx/graphics/PathParser$ExtractFloatResult",
-      "android/support/graphics/drawable/ArgbEvaluator": "androidx/graphics/drawable/ArgbEvaluator",
-      "android/support/v17/leanback/widget/ShadowHelper": "androidx/leanback/widget/ShadowHelper",
-      "android/support/design/widget/FloatingActionButtonImpl$ElevateToTranslationZAnimation": "androidx/design/widget/FloatingActionButtonImpl$ElevateToTranslationZAnimation",
-      "android/support/v4/app/NotificationManagerCompat$SideChannelManager": "androidx/app/NotificationManagerCompat$SideChannelManager",
-      "android/support/v17/leanback/widget/PlaybackRowPresenter$ViewHolder": "androidx/leanback/widget/PlaybackRowPresenter$ViewHolder",
-      "android/support/v17/leanback/media/PlaybackBaseControlGlue": "androidx/leanback/media/PlaybackBaseControlGlue",
-      "android/support/v7/app/MediaRouteButton": "androidx/app/MediaRouteButton",
-      "android/support/v4/view/PagerTabStrip": "androidx/widget/PagerTabStrip",
-      "android/support/v7/widget/ActivityChooserView$InnerLayout": "androidx/widget/ActivityChooserView$InnerLayout",
-      "android/support/v17/leanback/widget/TitleHelper": "androidx/leanback/widget/TitleHelper",
-      "android/support/v7/media/RegisteredMediaRouteProvider": "androidx/media/RegisteredMediaRouteProvider",
-      "android/support/v4/print/PrintHelper$PrintHelperStub": "androidx/print/PrintHelper$PrintHelperStub",
-      "android/support/v7/media/MediaRouter": "androidx/media/MediaRouter",
-      "android/support/v4/widget/ViewDragHelper": "androidx/widget/ViewDragHelper",
-      "android/support/v4/media/MediaBrowserCompat$MediaItem": "androidx/media/MediaBrowserCompat$MediaItem",
-      "android/support/app/recommendation/ContentRecommendation$ContentMaturity": "androidx/app/recommendation/ContentRecommendation$ContentMaturity",
-      "android/support/v7/widget/SwitchCompat": "androidx/widget/SwitchCompat",
-      "android/support/v7/media/MediaSessionStatus": "androidx/media/MediaSessionStatus",
-      "android/support/v17/leanback/widget/picker/Picker$PickerScrollArrayAdapter": "androidx/leanback/widget/picker/Picker$PickerScrollArrayAdapter",
-      "android/support/v4/util/Pools": "androidx/util/Pools",
-      "android/support/v4/widget/SlidingPaneLayout$SavedState": "androidx/widget/SlidingPaneLayout$SavedState",
-      "android/support/v7/widget/ViewStubCompat$OnInflateListener": "androidx/widget/ViewStubCompat$OnInflateListener",
-      "android/support/design/widget/ViewOffsetHelper": "androidx/design/widget/ViewOffsetHelper",
-      "android/support/design/widget/FloatingActionButton$OnVisibilityChangedListener": "androidx/design/widget/FloatingActionButton$OnVisibilityChangedListener",
-      "android/support/v4/app/FragmentManagerImpl$PopBackStackState": "androidx/app/FragmentManagerImpl$PopBackStackState",
-      "android/support/v7/media/MediaRouterJellybeanMr1$ActiveScanWorkaround": "androidx/media/MediaRouterJellybeanMr1$ActiveScanWorkaround",
-      "android/support/v17/leanback/widget/TitleViewAdapter": "androidx/leanback/widget/TitleViewAdapter",
-      "android/support/design/widget/TabLayout": "androidx/design/widget/TabLayout",
-      "android/support/v4/view/MenuItemCompat$MenuVersionImpl": "androidx/view/MenuItemCompat$MenuVersionImpl",
-      "android/support/v7/app/MediaRouteButton$MediaRouterCallback": "androidx/app/MediaRouteButton$MediaRouterCallback",
-      "android/support/v4/media/MediaDescriptionCompatApi21$Builder": "androidx/media/MediaDescriptionCompatApi21$Builder",
-      "android/support/design/widget/TabLayout$TabGravity": "androidx/design/widget/TabLayout$TabGravity",
-      "android/support/v17/leanback/widget/AbstractDetailsDescriptionPresenter": "androidx/leanback/widget/AbstractDetailsDescriptionPresenter",
-      "android/support/v7/widget/RecyclerView$RecycledViewPool$ScrapData": "androidx/widget/RecyclerView$RecycledViewPool$ScrapData",
-      "android/support/v17/leanback/media/MediaControllerAdapter": "androidx/leanback/media/MediaControllerAdapter",
-      "android/support/wear/internal/widget/drawer/MultiPagePresenter$Ui": "androidx/wear/internal/widget/drawer/MultiPagePresenter$Ui",
-      "android/support/v7/app/ToolbarActionBar": "androidx/app/ToolbarActionBar",
-      "android/support/v7/widget/ViewBoundsCheck$Callback": "androidx/widget/ViewBoundsCheck$Callback",
-      "android/support/text/emoji/widget/EmojiExtractEditText": "androidx/text/emoji/widget/EmojiExtractEditText",
-      "android/support/v4/app/FrameMetricsAggregator": "androidx/app/FrameMetricsAggregator",
-      "android/support/constraint/R": "androidx/constraint/R",
-      "android/support/v7/mediarouter/R$string": "androidx/mediarouter/R$string",
-      "android/support/text/emoji/bundled/BundledEmojiCompatConfig$InitRunnable": "androidx/text/emoji/bundled/BundledEmojiCompatConfig$InitRunnable",
-      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperApi21Impl": "androidx/leanback/transition/TransitionHelper$TransitionHelperApi21Impl",
-      "android/support/v7/widget/LinearLayoutManager": "androidx/widget/LinearLayoutManager",
-      "android/support/graphics/drawable/VectorDrawableCompat$VGroup": "androidx/graphics/drawable/VectorDrawableCompat$VGroup",
-      "android/support/v17/leanback/app/BackgroundManager": "androidx/leanback/app/BackgroundManager",
-      "android/support/v17/leanback/app/VideoFragmentGlueHost": "androidx/leanback/app/VideoFragmentGlueHost",
-      "android/support/v4/net/ConnectivityManagerCompat": "androidx/net/ConnectivityManagerCompat",
-      "android/support/annotation/NonNull": "androidx/annotation/NonNull",
-      "android/support/transition/ImageViewUtilsApi21": "androidx/transition/ImageViewUtilsApi21",
-      "android/support/v7/widget/Toolbar$SavedState": "androidx/widget/Toolbar$SavedState",
-      "android/support/v7/util/ThreadUtil$BackgroundCallback": "androidx/util/ThreadUtil$BackgroundCallback",
-      "android/support/v17/leanback/app/BaseFragment": "androidx/leanback/app/BaseFragment",
-      "android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateApi16Impl": "androidx/view/AccessibilityDelegateCompat$AccessibilityDelegateApi16Impl",
-      "android/support/v7/media/MediaRouterJellybeanMr2$UserRouteInfo": "androidx/media/MediaRouterJellybeanMr2$UserRouteInfo",
-      "android/support/v7/widget/DefaultItemAnimator$ChangeInfo": "androidx/widget/DefaultItemAnimator$ChangeInfo",
-      "android/support/v4/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi14Impl": "androidx/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi14Impl",
-      "android/support/v7/cardview/R": "androidx/cardview/R",
-      "android/support/v4/app/NotificationCompat": "androidx/app/NotificationCompat",
-      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperKitkatImpl": "androidx/leanback/transition/TransitionHelper$TransitionHelperKitkatImpl",
-      "android/support/v4/widget/CircularProgressDrawable$Ring": "androidx/widget/CircularProgressDrawable$Ring",
-      "android/support/v17/leanback/app/BrowseSupportFragment$ListRowFragmentFactory": "androidx/leanback/app/BrowseSupportFragment$ListRowFragmentFactory",
-      "android/support/v7/widget/LinearLayoutManager$AnchorInfo": "androidx/widget/LinearLayoutManager$AnchorInfo",
-      "android/support/v4/media/MediaBrowserCompatApi26$SubscriptionCallbackProxy": "androidx/media/MediaBrowserCompatApi26$SubscriptionCallbackProxy",
-      "android/support/v4/view/ViewCompat$ViewCompatApi19Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi19Impl",
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat",
-      "android/support/v4/os/IResultReceiver$Stub$Proxy": "androidx/os/IResultReceiver$Stub$Proxy",
-      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$BoundData": "androidx/leanback/widget/PlaybackTransportRowPresenter$BoundData",
-      "android/support/transition/TransitionSet": "androidx/transition/TransitionSet",
-      "android/support/v7/graphics/drawable/DrawableWrapper": "androidx/graphics/drawable/DrawableWrapper",
-      "android/support/v7/media/MediaRouterJellybean$UserRouteInfo": "androidx/media/MediaRouterJellybean$UserRouteInfo",
-      "android/support/v7/app/MediaRouteActionProvider": "androidx/app/MediaRouteActionProvider",
-      "android/support/compat/R$layout": "androidx/compat/R$layout",
-      "android/support/v17/leanback/widget/ViewHolderTask": "androidx/leanback/widget/ViewHolderTask",
-      "android/support/v7/graphics/ColorCutQuantizer$Vbox": "androidx/graphics/ColorCutQuantizer$Vbox",
-      "android/support/text/emoji/EmojiProcessor$CodepointIndexFinder": "androidx/text/emoji/EmojiProcessor$CodepointIndexFinder",
-      "android/support/v4/content/CursorLoader": "androidx/content/CursorLoader",
-      "android/support/text/emoji/widget/EditTextAttributeHelper": "androidx/text/emoji/widget/EditTextAttributeHelper",
-      "android/support/wear/internal/widget/ResourcesUtil": "androidx/wear/internal/widget/ResourcesUtil",
-      "android/support/wear/R$array": "androidx/wear/R$array",
-      "android/support/v7/widget/RecyclerView$RecycledViewPool": "androidx/widget/RecyclerView$RecycledViewPool",
-      "android/support/transition/ImageViewUtilsApi14": "androidx/transition/ImageViewUtilsApi14",
-      "android/support/v7/gridlayout/R": "androidx/gridlayout/R",
-      "android/support/text/emoji/FontRequestEmojiCompatConfig": "androidx/text/emoji/FontRequestEmojiCompatConfig",
-      "android/support/text/emoji/EmojiMetadata": "androidx/text/emoji/EmojiMetadata",
-      "android/support/v4/widget/SlidingPaneLayout$DisableLayerRunnable": "androidx/widget/SlidingPaneLayout$DisableLayerRunnable",
-      "android/support/v4/util/Pools$SynchronizedPool": "androidx/util/Pools$SynchronizedPool",
-      "android/support/v17/leanback/graphics/BoundsRule$ValueRule": "androidx/leanback/graphics/BoundsRule$ValueRule",
-      "android/support/v7/widget/ActivityChooserView$ActivityChooserViewAdapter": "androidx/widget/ActivityChooserView$ActivityChooserViewAdapter",
-      "android/support/v7/mediarouter/R": "androidx/mediarouter/R",
-      "android/support/text/emoji/FontRequestEmojiCompatConfig$ExponentialBackoffRetryPolicy": "androidx/text/emoji/FontRequestEmojiCompatConfig$ExponentialBackoffRetryPolicy",
-      "android/support/v7/widget/AppCompatImageView": "androidx/widget/AppCompatImageView",
-      "android/support/v17/preference/R$layout": "androidx/leanback/preference/R$layout",
-      "android/support/v4/provider/FontsContractCompat$FontFamilyResult$FontResultStatus": "androidx/provider/FontsContractCompat$FontFamilyResult$FontResultStatus",
-      "android/support/graphics/drawable/VectorDrawableCompat$VPathRenderer": "androidx/graphics/drawable/VectorDrawableCompat$VPathRenderer",
-      "android/support/v4/app/JobIntentService$CompatWorkEnqueuer": "androidx/app/JobIntentService$CompatWorkEnqueuer",
-      "android/support/v17/leanback/app/BrowseSupportFragment$SetSelectionRunnable": "androidx/leanback/app/BrowseSupportFragment$SetSelectionRunnable",
-      "android/support/v4/media/MediaDescriptionCompatApi23$Builder": "androidx/media/MediaDescriptionCompatApi23$Builder",
-      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter": "androidx/leanback/widget/DetailsOverviewRowPresenter",
-      "android/support/text/emoji/FontRequestEmojiCompatConfig$RetryPolicy": "androidx/text/emoji/FontRequestEmojiCompatConfig$RetryPolicy",
-      "android/support/v7/widget/ScrollingTabContainerView$TabView": "androidx/widget/ScrollingTabContainerView$TabView",
-      "android/support/annotation/DrawableRes": "androidx/annotation/DrawableRes",
-      "android/support/v4/view/ViewPager$LayoutParams": "androidx/view/ViewPager$LayoutParams",
-      "android/support/v17/leanback/widget/MediaItemActionPresenter$ViewHolder": "androidx/leanback/widget/MediaItemActionPresenter$ViewHolder",
-      "android/support/v7/app/AlertDialog$Builder": "androidx/app/AlertDialog$Builder",
-      "android/support/v4/util/Preconditions": "androidx/util/Preconditions",
-      "android/support/v4/app/FragmentTabHost": "androidx/app/FragmentTabHost",
-      "android/support/v17/leanback/widget/BaseGridView$OnTouchInterceptListener": "androidx/leanback/widget/BaseGridView$OnTouchInterceptListener",
-      "android/support/text/emoji/EmojiCompat$ListenerDispatcher": "androidx/text/emoji/EmojiCompat$ListenerDispatcher",
-      "android/support/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuListener": "androidx/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuListener",
-      "android/support/v4/app/INotificationSideChannel$Stub$Proxy": "androidx/app/INotificationSideChannel$Stub$Proxy",
-      "android/support/media/tv/TvContractCompat$Programs$Genres$Genre": "androidx/media/tv/TvContractCompat$Programs$Genres$Genre",
-      "android/support/text/emoji/widget/EmojiTextWatcher$InitCallbackImpl": "androidx/text/emoji/widget/EmojiTextWatcher$InitCallbackImpl",
-      "android/support/v17/leanback/widget/ParallaxTarget$DirectPropertyTarget": "androidx/leanback/widget/ParallaxTarget$DirectPropertyTarget",
-      "android/support/v7/app/ToolbarActionBar$ToolbarCallbackWrapper": "androidx/app/ToolbarActionBar$ToolbarCallbackWrapper",
-      "android/support/v4/widget/CompoundButtonCompat": "androidx/widget/CompoundButtonCompat",
-      "android/support/v4/content/ContentResolverCompat": "androidx/content/ContentResolverCompat",
-      "android/support/v17/leanback/widget/NonOverlappingRelativeLayout": "androidx/leanback/widget/NonOverlappingRelativeLayout",
-      "android/support/text/emoji/EmojiCompat$MetadataRepoLoaderCallback": "androidx/text/emoji/EmojiCompat$MetadataRepoLoaderCallback",
-      "android/support/v4/app/FragmentStatePagerAdapter": "androidx/app/FragmentStatePagerAdapter",
-      "android/support/v17/leanback/app/PlaybackSupportFragment": "androidx/leanback/app/PlaybackSupportFragment",
-      "android/support/v7/app/OverlayListView": "androidx/app/OverlayListView",
-      "android/support/v7/mediarouter/R$styleable": "androidx/mediarouter/R$styleable",
-      "android/support/v7/widget/DrawableUtils": "androidx/widget/DrawableUtils",
-      "android/support/v4/content/ModernAsyncTask$AsyncTaskResult": "androidx/content/ModernAsyncTask$AsyncTaskResult",
-      "android/support/v4/app/SharedElementCallback": "androidx/app/SharedElementCallback",
-      "android/support/text/emoji/widget/EmojiKeyListener": "androidx/text/emoji/widget/EmojiKeyListener",
-      "android/support/v17/leanback/transition/FadeAndShortSlide$CalculateSlide": "androidx/leanback/transition/FadeAndShortSlide$CalculateSlide",
-      "android/support/v7/widget/ActionMenuPresenter$ActionButtonSubmenu": "androidx/widget/ActionMenuPresenter$ActionButtonSubmenu",
-      "android/support/v4/media/MediaMetadataCompat$Builder": "androidx/media/MediaMetadataCompat$Builder",
-      "android/support/design/widget/BottomSheetBehavior$SavedState": "androidx/design/widget/BottomSheetBehavior$SavedState",
-      "android/support/v4/media/session/MediaControllerCompatApi21$PlaybackInfo": "androidx/media/session/MediaControllerCompatApi21$PlaybackInfo",
-      "android/support/v7/widget/ActionMenuPresenter$PopupPresenterCallback": "androidx/widget/ActionMenuPresenter$PopupPresenterCallback",
-      "android/support/media/ExifInterface$ByteOrderedDataOutputStream": "androidx/media/ExifInterface$ByteOrderedDataOutputStream",
-      "android/support/v17/leanback/widget/Grid$Location": "androidx/leanback/widget/Grid$Location",
-      "android/support/v7/media/MediaRouterJellybeanMr1$CallbackProxy": "androidx/media/MediaRouterJellybeanMr1$CallbackProxy",
-      "android/support/v17/leanback/R$raw": "androidx/leanback/R$raw",
-      "android/support/media/tv/TvContractCompat$PreviewProgramColumns": "androidx/media/tv/TvContractCompat$PreviewProgramColumns",
-      "android/support/v17/leanback/widget/SeekBar$AccessibilitySeekListener": "androidx/leanback/widget/SeekBar$AccessibilitySeekListener",
-      "android/support/v4/print/PrintHelper$PrintHelperVersionImpl": "androidx/print/PrintHelper$PrintHelperVersionImpl",
-      "android/support/v17/leanback/app/ProgressBarManager": "androidx/leanback/app/ProgressBarManager",
-      "android/support/v7/app/MediaRouteChooserDialogFragment": "androidx/app/MediaRouteChooserDialogFragment",
-      "android/support/v4/content/FileProvider$SimplePathStrategy": "androidx/content/FileProvider$SimplePathStrategy",
-      "android/support/v17/leanback/app/BackgroundManager$BackgroundContinuityService": "androidx/leanback/app/BackgroundManager$BackgroundContinuityService",
-      "android/support/v4/media/session/IMediaSession$Stub": "androidx/media/session/IMediaSession$Stub",
-      "android/support/v4/widget/TintableImageSourceView": "androidx/widget/TintableImageSourceView",
-      "android/support/transition/ViewOverlayApi14$OverlayViewGroup": "androidx/transition/ViewOverlayApi14$OverlayViewGroup",
-      "android/support/design/widget/FloatingActionButtonImpl": "androidx/design/widget/FloatingActionButtonImpl",
-      "android/support/text/emoji/widget/EmojiEditableFactory": "androidx/text/emoji/widget/EmojiEditableFactory",
-      "android/support/transition/Visibility$Mode": "androidx/transition/Visibility$Mode",
-      "android/support/v17/leanback/widget/PagingIndicator$Dot": "androidx/leanback/widget/PagingIndicator$Dot",
-      "android/support/design/internal/NavigationSubMenu": "androidx/design/internal/NavigationSubMenu",
-      "android/support/v17/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder": "androidx/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder",
-      "android/support/v4/media/AudioAttributesCompat$AudioManagerHidden": "androidx/media/AudioAttributesCompat$AudioManagerHidden",
-      "android/support/v7/preference/CheckBoxPreference": "androidx/preference/CheckBoxPreference",
-      "android/support/design/widget/FloatingActionButtonLollipop$AlwaysStatefulGradientDrawable": "androidx/design/widget/FloatingActionButtonLollipop$AlwaysStatefulGradientDrawable",
-      "android/support/v4/media/RatingCompat$StarStyle": "androidx/media/RatingCompat$StarStyle",
-      "android/support/v7/preference/PreferenceGroup$PreferencePositionCallback": "androidx/preference/PreferenceGroup$PreferencePositionCallback",
-      "android/support/design/widget/BottomNavigationView": "androidx/design/widget/BottomNavigationView",
-      "android/support/v17/leanback/media/MediaPlayerAdapter": "androidx/leanback/media/MediaPlayerAdapter",
-      "android/support/v7/widget/SuggestionsAdapter$ChildViewCache": "androidx/widget/SuggestionsAdapter$ChildViewCache",
-      "android/support/v4/media/session/MediaSessionCompat$Callback$StubApi21": "androidx/media/session/MediaSessionCompat$Callback$StubApi21",
-      "android/support/v7/widget/ListPopupWindow$PopupScrollListener": "androidx/widget/ListPopupWindow$PopupScrollListener",
-      "android/support/v4/app/NotificationCompat$MessagingStyle": "androidx/app/NotificationCompat$MessagingStyle",
-      "android/support/wear/widget/SwipeDismissLayout$OnSwipeProgressChangedListener": "androidx/wear/widget/SwipeDismissLayout$OnSwipeProgressChangedListener",
-      "android/support/v7/media/RemotePlaybackClient$OnMessageReceivedListener": "androidx/media/RemotePlaybackClient$OnMessageReceivedListener",
-      "android/support/v7/util/MessageThreadUtil$SyncQueueItem": "androidx/util/MessageThreadUtil$SyncQueueItem",
-      "android/support/v4/view/MarginLayoutParamsCompat": "androidx/view/MarginLayoutParamsCompat",
-      "android/support/v4/media/session/MediaSessionCompat$Callback$StubApi24": "androidx/media/session/MediaSessionCompat$Callback$StubApi24",
-      "android/support/v17/leanback/widget/CheckableImageView": "androidx/leanback/widget/CheckableImageView",
-      "android/support/v4/media/session/MediaSessionCompat$Callback$StubApi23": "androidx/media/session/MediaSessionCompat$Callback$StubApi23",
-      "android/support/v7/widget/ThemeUtils": "androidx/widget/ThemeUtils",
-      "android/support/v7/preference/Preference$BaseSavedState": "androidx/preference/Preference$BaseSavedState",
-      "android/support/v4/widget/DrawerLayout$AccessibilityDelegate": "androidx/widget/DrawerLayout$AccessibilityDelegate",
-      "android/support/v4/app/ActivityOptionsCompat": "androidx/app/ActivityOptionsCompat",
-      "android/support/v4/media/session/PlaybackStateCompat$State": "androidx/media/session/PlaybackStateCompat$State",
-      "android/support/v7/widget/RecyclerView$ItemAnimator$ItemHolderInfo": "androidx/widget/RecyclerView$ItemAnimator$ItemHolderInfo",
-      "android/support/constraint/solver/widgets/ConstraintAnchor$Type": "androidx/constraint/solver/widgets/ConstraintAnchor$Type",
-      "android/support/v4/widget/TextViewCompat$TextViewCompatApi17Impl": "androidx/widget/TextViewCompat$TextViewCompatApi17Impl",
-      "android/support/v17/leanback/widget/ImeKeyMonitor": "androidx/leanback/widget/ImeKeyMonitor",
-      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapter": "androidx/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapter",
-      "android/support/v4/app/ActivityCompat": "androidx/app/legacy/ActivityCompat",
-      "android/support/v4/util/ObjectsCompat": "androidx/util/ObjectsCompat",
-      "android/support/v4/app/SupportActivity$ExtraData": "androidx/app/SupportActivity$ExtraData",
-      "android/support/v4/media/MediaBrowserProtocol": "androidx/media/MediaBrowserProtocol",
-      "android/support/design/widget/CollapsingTextHelper": "androidx/design/widget/CollapsingTextHelper",
-      "android/support/v14/preference/SwitchPreference$Listener": "androidx/preference/SwitchPreference$Listener",
-      "android/support/v7/preference/SwitchPreferenceCompat$Listener": "androidx/preference/SwitchPreferenceCompat$Listener",
-      "android/support/wear/internal/widget/drawer/SinglePageUi": "androidx/wear/internal/widget/drawer/SinglePageUi",
-      "android/support/v4/view/NestedScrollingChild2": "androidx/view/NestedScrollingChild2",
-      "android/support/customtabs/ICustomTabsService": "androidx/browser/customtabs/ICustomTabsService",
-      "android/support/text/emoji/widget/EmojiAppCompatTextView": "androidx/text/emoji/widget/EmojiAppCompatTextView",
-      "android/support/v7/media/MediaRouterJellybean$RouteGroup": "androidx/media/MediaRouterJellybean$RouteGroup",
-      "android/support/v4/widget/DrawerLayout": "androidx/widget/DrawerLayout",
-      "android/support/v4/os/CancellationSignal$OnCancelListener": "androidx/os/CancellationSignal$OnCancelListener",
-      "android/support/v4/view/ViewCompat$ViewCompatApi17Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi17Impl",
-      "android/support/v4/app/JobIntentService$CompatJobEngine": "androidx/app/JobIntentService$CompatJobEngine",
-      "android/support/v4/media/MediaBrowserCompat$CustomActionCallback": "androidx/media/MediaBrowserCompat$CustomActionCallback",
-      "android/support/v4/media/app/NotificationCompat$DecoratedMediaCustomViewStyle": "androidx/media/app/NotificationCompat$DecoratedMediaCustomViewStyle",
-      "android/support/v7/app/ActionBarDrawerToggle$Delegate": "androidx/app/ActionBarDrawerToggle$Delegate",
-      "android/support/v17/leanback/R$anim": "androidx/leanback/R$anim",
-      "android/support/v13/app/FragmentCompat$FragmentCompatBaseImpl": "androidx/app/FragmentCompat$FragmentCompatBaseImpl",
-      "android/support/v7/widget/SearchView$OnCloseListener": "androidx/widget/SearchView$OnCloseListener",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$OnPlaybackProgressCallback": "androidx/leanback/widget/PlaybackControlsRow$OnPlaybackProgressCallback",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$MoreActions": "androidx/leanback/widget/PlaybackControlsRow$MoreActions",
-      "android/support/v7/widget/ActivityChooserModel$ActivityResolveInfo": "androidx/widget/ActivityChooserModel$ActivityResolveInfo",
-      "android/support/annotation/AnimRes": "androidx/annotation/AnimRes",
-      "android/support/animation/Force": "androidx/animation/Force",
-      "android/support/v17/leanback/util/StateMachine$Event": "androidx/leanback/util/StateMachine$Event",
-      "android/support/v17/leanback/app/BrowseFragment$MainFragmentRowsAdapter": "androidx/leanback/app/BrowseFragment$MainFragmentRowsAdapter",
-      "android/support/v4/graphics/BitmapCompat": "androidx/graphics/BitmapCompat",
-      "android/support/v4/app/NotificationCompat$NotificationVisibility": "androidx/app/NotificationCompat$NotificationVisibility",
-      "android/support/v17/leanback/app/PlaybackFragment$SetSelectionRunnable": "androidx/leanback/app/PlaybackFragment$SetSelectionRunnable",
-      "android/support/v7/media/RegisteredMediaRouteProviderWatcher$Callback": "androidx/media/RegisteredMediaRouteProviderWatcher$Callback",
-      "android/support/v4/view/ViewCompat$FocusDirection": "androidx/view/legacy/ViewCompat$FocusDirection",
-      "android/support/design/widget/BottomSheetBehavior$SettleRunnable": "androidx/design/widget/BottomSheetBehavior$SettleRunnable",
-      "android/support/v17/leanback/widget/RoundedRectHelperApi21$RoundedRectOutlineProvider": "androidx/leanback/widget/RoundedRectHelperApi21$RoundedRectOutlineProvider",
-      "android/support/wear/widget/drawer/FlingWatcherFactory": "androidx/wear/widget/drawer/FlingWatcherFactory",
-      "android/support/v4/app/NotificationManagerCompat$Task": "androidx/app/NotificationManagerCompat$Task",
-      "android/support/animation/FlingAnimation$DragForce": "androidx/animation/FlingAnimation$DragForce",
-      "android/support/v7/widget/GridLayout$MutableInt": "androidx/widget/GridLayout$MutableInt",
-      "android/support/v7/util/DiffUtil": "androidx/util/DiffUtil",
-      "android/support/v4/app/FragmentManagerImpl$OpGenerator": "androidx/app/FragmentManagerImpl$OpGenerator",
-      "android/support/v4/view/ViewPager": "androidx/widget/ViewPager",
-      "android/support/v7/widget/TintTypedArray": "androidx/widget/TintTypedArray",
-      "android/support/text/emoji/widget/EmojiAppCompatEditText": "androidx/text/emoji/widget/EmojiAppCompatEditText",
-      "android/support/v4/view/ViewGroupCompat$ViewGroupCompatApi21Impl": "androidx/view/ViewGroupCompat$ViewGroupCompatApi21Impl",
-      "android/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord": "androidx/media/MediaBrowserServiceCompat$ConnectionRecord",
-      "android/support/v7/view/menu/ActionMenuItemView": "androidx/view/menu/ActionMenuItemView",
-      "android/support/v4/app/NotificationCompatExtras": "androidx/app/NotificationCompatExtras",
-      "android/support/v7/view/menu/ListMenuPresenter": "androidx/view/menu/ListMenuPresenter",
-      "android/support/v14/preference/R": "androidx/preference/R",
-      "android/support/annotation/RequiresPermission": "androidx/annotation/RequiresPermission",
-      "android/support/v4/app/JobIntentService$GenericWorkItem": "androidx/app/JobIntentService$GenericWorkItem",
-      "android/support/v7/widget/RecyclerView$SmoothScroller$Action": "androidx/widget/RecyclerView$SmoothScroller$Action",
-      "android/support/design/R$attr": "androidx/design/R$attr",
-      "android/support/v4/content/SharedPreferencesCompat$EditorCompat$Helper": "androidx/content/SharedPreferencesCompat$EditorCompat$Helper",
-      "android/support/constraint/solver/widgets/ConstraintWidget": "androidx/constraint/solver/widgets/ConstraintWidget",
-      "android/support/design/widget/NavigationView": "androidx/design/widget/NavigationView",
-      "android/support/v4/media/session/PlaybackStateCompatApi22": "androidx/media/session/PlaybackStateCompatApi22",
-      "android/support/v4/media/session/PlaybackStateCompatApi21": "androidx/media/session/PlaybackStateCompatApi21",
-      "android/support/media/instantvideo/preload/InstantVideoPreloadManager$InternalVideoPreloaderFactory": "androidx/media/instantvideo/preload/InstantVideoPreloadManager$InternalVideoPreloaderFactory",
-      "android/support/design/widget/BaseTransientBottomBar": "androidx/design/widget/BaseTransientBottomBar",
-      "android/support/wear/internal/widget/drawer/WearableNavigationDrawerPresenter": "androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter",
-      "android/support/v4/media/session/MediaControllerCompat$Callback$StubApi21": "androidx/media/session/MediaControllerCompat$Callback$StubApi21",
-      "android/support/wear/widget/drawer/ScrollViewFlingWatcher": "androidx/wear/widget/drawer/ScrollViewFlingWatcher",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$FastForwardAction": "androidx/leanback/widget/PlaybackControlsRow$FastForwardAction",
-      "android/support/v7/widget/ActionBarOverlayLayout": "androidx/widget/ActionBarOverlayLayout",
-      "android/support/v4/app/FragmentTabHost$TabInfo": "androidx/app/FragmentTabHost$TabInfo",
-      "android/support/v7/widget/GridLayout$Bounds": "androidx/widget/GridLayout$Bounds",
-      "android/support/v7/app/ActionBar$OnMenuVisibilityListener": "androidx/app/ActionBar$OnMenuVisibilityListener",
-      "android/support/customtabs/PostMessageServiceConnection": "androidx/browser/customtabs/PostMessageServiceConnection",
-      "android/support/design/widget/TextInputLayout$TextInputAccessibilityDelegate": "androidx/design/widget/TextInputLayout$TextInputAccessibilityDelegate",
-      "android/support/v7/preference/Preference$OnPreferenceClickListener": "androidx/preference/Preference$OnPreferenceClickListener",
-      "android/support/v7/media/MediaRouterJellybean$RouteCategory": "androidx/media/MediaRouterJellybean$RouteCategory",
-      "android/support/v4/text/TextDirectionHeuristicCompat": "androidx/text/TextDirectionHeuristicCompat",
-      "android/support/v4/view/PointerIconCompat": "androidx/view/PointerIconCompat",
-      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuAdapter": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuAdapter",
-      "android/support/v17/leanback/widget/BaseCardView$AnimationBase": "androidx/leanback/widget/BaseCardView$AnimationBase",
-      "android/support/v7/widget/ScrollingTabContainerView": "androidx/widget/ScrollingTabContainerView",
-      "android/support/v4/text/util/LinkifyCompat": "androidx/text/util/LinkifyCompat",
-      "android/support/annotation/RequiresPermission$Read": "androidx/annotation/RequiresPermission$Read",
-      "android/support/customtabs/CustomTabsService$Result": "androidx/browser/customtabs/CustomTabsService$Result",
-      "android/support/v7/app/MediaRouteControllerDialog": "androidx/app/MediaRouteControllerDialog",
-      "android/support/v17/leanback/app/BrowseFragment": "androidx/leanback/app/BrowseFragment",
-      "android/support/v17/leanback/widget/OnChildViewHolderSelectedListener": "androidx/leanback/widget/OnChildViewHolderSelectedListener",
-      "android/support/design/internal/NavigationMenuPresenter$SubheaderViewHolder": "androidx/design/internal/NavigationMenuPresenter$SubheaderViewHolder",
-      "android/support/v7/mediarouter/R$attr": "androidx/mediarouter/R$attr",
-      "android/support/v7/widget/ActivityChooserView$Callbacks": "androidx/widget/ActivityChooserView$Callbacks",
-      "android/support/v4/widget/TextViewCompat$TextViewCompatApi16Impl": "androidx/widget/TextViewCompat$TextViewCompatApi16Impl",
-      "android/support/v4/content/AsyncTaskLoader$LoadTask": "androidx/content/AsyncTaskLoader$LoadTask",
-      "android/support/v17/leanback/widget/GuidedActionAdapter$ActionOnFocusListener": "androidx/leanback/widget/GuidedActionAdapter$ActionOnFocusListener",
-      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl": "androidx/media/SystemMediaRouteProvider$LegacyImpl",
-      "android/support/transition/ViewUtils": "androidx/transition/ViewUtils",
-      "android/support/v17/leanback/app/RowsSupportFragment$RowViewHolderExtra": "androidx/leanback/app/RowsSupportFragment$RowViewHolderExtra",
-      "android/support/v17/leanback/widget/ActionPresenterSelector$TwoLineActionPresenter": "androidx/leanback/widget/ActionPresenterSelector$TwoLineActionPresenter",
-      "android/support/v7/recyclerview/R$dimen": "androidx/recyclerview/R$dimen",
-      "android/support/v7/app/TwilightCalculator": "androidx/app/TwilightCalculator",
-      "android/support/v17/leanback/widget/ResizingTextView": "androidx/leanback/widget/ResizingTextView",
-      "android/support/design/widget/ViewUtilsLollipop": "androidx/design/widget/ViewUtilsLollipop",
-      "android/support/media/tv/TvContractCompat$PreviewProgramColumns$Availability": "androidx/media/tv/TvContractCompat$PreviewProgramColumns$Availability",
-      "android/support/v7/media/RemotePlaybackClient$ActionCallback": "androidx/media/RemotePlaybackClient$ActionCallback",
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$Listener": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$Listener",
-      "android/support/v4/app/FragmentManagerImpl$AnimatorOnHWLayerIfNeededListener": "androidx/app/FragmentManagerImpl$AnimatorOnHWLayerIfNeededListener",
-      "android/support/v17/leanback/transition/TransitionHelper": "androidx/leanback/transition/TransitionHelper",
-      "android/support/v7/view/SupportActionModeWrapper$CallbackWrapper": "androidx/view/SupportActionModeWrapper$CallbackWrapper",
-      "android/support/v13/app/FragmentStatePagerAdapter": "androidx/app/legacy/FragmentStatePagerAdapter",
-      "android/support/v7/graphics/Palette$PaletteAsyncListener": "androidx/graphics/Palette$PaletteAsyncListener",
-      "android/support/v4/media/MediaBrowserServiceCompat": "androidx/media/MediaBrowserServiceCompat",
-      "android/support/v4/widget/NestedScrollView": "androidx/widget/NestedScrollView",
-      "android/support/v4/media/MediaBrowserCompat$ItemCallback$StubApi23": "androidx/media/MediaBrowserCompat$ItemCallback$StubApi23",
-      "android/support/v4/text/BidiFormatter$DirectionalityEstimator": "androidx/text/BidiFormatter$DirectionalityEstimator",
-      "android/support/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader": "androidx/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader",
-      "android/support/transition/ChangeClipBounds": "androidx/transition/ChangeClipBounds",
-      "android/support/v7/widget/PositionMap": "androidx/widget/PositionMap",
-      "android/support/v17/leanback/widget/ItemBridgeAdapter$ViewHolder": "androidx/leanback/widget/ItemBridgeAdapter$ViewHolder",
-      "android/support/v7/widget/TintContextWrapper": "androidx/widget/TintContextWrapper",
-      "android/support/v7/widget/MenuItemHoverListener": "androidx/widget/MenuItemHoverListener",
-      "android/support/v4/app/RemoteInputCompatBase": "androidx/app/RemoteInputCompatBase",
-      "android/support/v17/leanback/media/SurfaceHolderGlueHost": "androidx/leanback/media/SurfaceHolderGlueHost",
-      "android/support/v7/widget/LinearLayoutManager$LayoutChunkResult": "androidx/widget/LinearLayoutManager$LayoutChunkResult",
-      "android/support/v7/view/menu/MenuPresenter": "androidx/view/menu/MenuPresenter",
-      "android/support/v7/media/MediaRouterJellybean": "androidx/media/MediaRouterJellybean",
-      "android/support/annotation/ArrayRes": "androidx/annotation/ArrayRes",
-      "android/support/v4/media/session/MediaSessionCompat$ResultReceiverWrapper": "androidx/media/session/MediaSessionCompat$ResultReceiverWrapper",
-      "android/support/v17/leanback/widget/FocusHighlightHelper": "androidx/leanback/widget/FocusHighlightHelper",
-      "android/support/v4/media/session/MediaControllerCompatApi21$TransportControls": "androidx/media/session/MediaControllerCompatApi21$TransportControls",
-      "android/support/v4/media/MediaBrowserCompatApi21$SubscriptionCallbackProxy": "androidx/media/MediaBrowserCompatApi21$SubscriptionCallbackProxy",
-      "android/support/v7/mediarouter/R$dimen": "androidx/mediarouter/R$dimen",
-      "android/support/v4/app/NotificationManagerCompat$CancelTask": "androidx/app/NotificationManagerCompat$CancelTask",
-      "android/support/design/widget/BottomSheetBehavior$BottomSheetCallback": "androidx/design/widget/BottomSheetBehavior$BottomSheetCallback",
-      "android/support/v4/os/LocaleListCompat": "androidx/os/LocaleListCompat",
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection",
-      "android/support/design/internal/BottomNavigationPresenter": "androidx/design/internal/BottomNavigationPresenter",
-      "android/support/v7/view/SupportMenuInflater": "androidx/view/SupportMenuInflater",
-      "android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi16Impl": "androidx/app/ActivityOptionsCompat$ActivityOptionsCompatApi16Impl",
-      "android/support/transition/AutoTransition": "androidx/transition/AutoTransition",
-      "android/support/v7/widget/RoundRectDrawable": "androidx/widget/RoundRectDrawable",
-      "android/support/graphics/drawable/VectorDrawableCompat$VFullPath": "androidx/graphics/drawable/VectorDrawableCompat$VFullPath",
-      "android/support/v4/widget/ListViewAutoScrollHelper": "androidx/widget/ListViewAutoScrollHelper",
-      "android/support/v4/media/MediaBrowserCompatApi21$MediaItem": "androidx/media/MediaBrowserCompatApi21$MediaItem",
-      "android/support/transition/FloatArrayEvaluator": "androidx/transition/FloatArrayEvaluator",
-      "android/support/design/widget/CollapsingToolbarLayout$OffsetUpdateListener": "androidx/design/widget/CollapsingToolbarLayout$OffsetUpdateListener",
-      "android/support/v7/preference/PreferenceManager$OnPreferenceTreeClickListener": "androidx/preference/PreferenceManager$OnPreferenceTreeClickListener",
-      "android/support/v17/leanback/widget/Parallax": "androidx/leanback/widget/Parallax",
-      "android/support/v4/media/MediaBrowserCompat$ConnectionCallback$StubApi21": "androidx/media/MediaBrowserCompat$ConnectionCallback$StubApi21",
-      "android/support/v4/os/CancellationSignal": "androidx/os/CancellationSignal",
-      "android/support/v17/leanback/media/PlaybackGlue$PlayerCallback": "androidx/leanback/media/PlaybackGlue$PlayerCallback",
-      "android/support/v4/widget/CompoundButtonCompat$CompoundButtonCompatApi21Impl": "androidx/widget/CompoundButtonCompat$CompoundButtonCompatApi21Impl",
-      "android/support/design/internal/BottomNavigationItemView": "androidx/design/internal/BottomNavigationItemView",
-      "android/support/v4/view/ViewGroupCompat$ViewGroupCompatApi18Impl": "androidx/view/ViewGroupCompat$ViewGroupCompatApi18Impl",
-      "android/support/text/emoji/flatbuffer/Struct": "androidx/text/emoji/flatbuffer/Struct",
-      "android/support/v17/leanback/widget/VerticalGridPresenter$VerticalGridItemBridgeAdapter": "androidx/leanback/widget/VerticalGridPresenter$VerticalGridItemBridgeAdapter",
-      "android/support/v4/view/ViewCompat$ViewCompatApi21Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi21Impl",
-      "android/support/v17/leanback/widget/SearchEditText$OnKeyboardDismissListener": "androidx/leanback/widget/SearchEditText$OnKeyboardDismissListener",
-      "android/support/annotation/AttrRes": "androidx/annotation/AttrRes",
-      "android/support/v17/leanback/app/BrowseFragment$FragmentHostImpl": "androidx/leanback/app/BrowseFragment$FragmentHostImpl",
-      "android/support/v4/graphics/PathParser": "androidx/graphics/PathParser",
-      "android/support/v17/leanback/app/BackgroundManager$BitmapDrawable": "androidx/leanback/app/BackgroundManager$BitmapDrawable",
-      "android/support/v4/util/MapCollections$ArrayIterator": "androidx/util/MapCollections$ArrayIterator",
-      "android/support/v4/view/AsyncLayoutInflater": "androidx/view/AsyncLayoutInflater",
-      "android/support/v4/media/MediaBrowserServiceCompat$Result": "androidx/media/MediaBrowserServiceCompat$Result",
-      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImpl": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImpl",
-      "android/support/v17/leanback/app/RowsFragment$MainFragmentAdapter": "androidx/leanback/app/RowsFragment$MainFragmentAdapter",
-      "android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout": "androidx/internal/widget/OutlineOnlyWithChildrenFrameLayout",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21$ExtraSession": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi21$ExtraSession",
-      "android/support/v17/leanback/util/MathUtil": "androidx/leanback/util/MathUtil",
-      "android/support/v4/app/RemoteInputCompatBase$RemoteInput$Factory": "androidx/app/RemoteInputCompatBase$RemoteInput$Factory",
-      "android/support/animation/DynamicAnimation": "androidx/animation/DynamicAnimation",
-      "android/support/transition/Visibility": "androidx/transition/Visibility",
-      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatApi21Impl": "androidx/widget/PopupWindowCompat$PopupWindowCompatApi21Impl",
-      "android/support/v7/app/AppCompatViewInflater": "androidx/app/AppCompatViewInflater",
-      "android/support/v7/widget/ListPopupWindow$PopupTouchInterceptor": "androidx/widget/ListPopupWindow$PopupTouchInterceptor",
-      "android/support/v4/app/ServiceCompat$StopForegroundFlags": "androidx/app/ServiceCompat$StopForegroundFlags",
-      "android/support/graphics/drawable/VectorDrawableCompat$VClipPath": "androidx/graphics/drawable/VectorDrawableCompat$VClipPath",
-      "android/support/v7/app/MediaRouteControllerDialog$VolumeGroupAdapter": "androidx/app/MediaRouteControllerDialog$VolumeGroupAdapter",
-      "android/support/design/R$style": "androidx/design/R$style",
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi26": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi26",
-      "android/support/constraint/R$styleable": "androidx/constraint/R$styleable",
-      "android/support/v7/media/MediaRouterJellybeanMr1$RouteInfo": "androidx/media/MediaRouterJellybeanMr1$RouteInfo",
-      "android/support/v4/widget/CircleImageView$OvalShadow": "androidx/widget/CircleImageView$OvalShadow",
-      "android/support/v7/preference/ListPreferenceDialogFragmentCompat": "androidx/preference/ListPreferenceDialogFragmentCompat",
-      "android/support/v7/preference/PreferenceFragmentCompat$OnPreferenceStartFragmentCallback": "androidx/preference/PreferenceFragmentCompat$OnPreferenceStartFragmentCallback",
-      "android/support/v4/view/PagerTitleStrip$PageListener": "androidx/view/PagerTitleStrip$PageListener",
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21",
-      "android/support/v7/app/AppCompatDelegate$ApplyableNightMode": "androidx/app/AppCompatDelegate$ApplyableNightMode",
-      "android/support/customtabs/ICustomTabsCallback": "androidx/browser/customtabs/ICustomTabsCallback",
-      "android/support/v17/preference/LeanbackListPreferenceDialogFragment": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment",
-      "android/support/v17/leanback/widget/PresenterSwitcher": "androidx/leanback/widget/PresenterSwitcher",
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi23": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi23",
-      "android/support/v17/leanback/widget/ShadowOverlayHelper$Options": "androidx/leanback/widget/ShadowOverlayHelper$Options",
-      "android/support/v4/text/TextDirectionHeuristicsCompat$FirstStrong": "androidx/text/TextDirectionHeuristicsCompat$FirstStrong",
-      "android/support/v7/widget/AppCompatSeekBar": "androidx/widget/AppCompatSeekBar",
-      "android/support/v17/leanback/widget/Util": "androidx/leanback/widget/Util",
-      "android/support/v4/util/MapCollections": "androidx/util/MapCollections",
-      "android/support/v4/widget/NestedScrollView$SavedState": "androidx/widget/NestedScrollView$SavedState",
-      "android/support/v7/widget/SimpleItemAnimator": "androidx/widget/SimpleItemAnimator",
-      "android/support/v4/media/MediaMetadataCompatApi21$Builder": "androidx/media/MediaMetadataCompatApi21$Builder",
-      "android/support/design/widget/DrawableUtils": "androidx/design/widget/DrawableUtils",
-      "android/support/wear/internal/widget/drawer/SinglePagePresenter": "androidx/wear/internal/widget/drawer/SinglePagePresenter",
-      "android/support/v4/app/FragmentContainer": "androidx/app/FragmentContainer",
-      "android/support/v7/media/MediaRouteProviderDescriptor": "androidx/media/MediaRouteProviderDescriptor",
-      "android/support/v4/media/session/PlaybackStateCompat$Actions": "androidx/media/session/PlaybackStateCompat$Actions",
-      "android/support/v14/preference/ListPreferenceDialogFragment": "androidx/preference/ListPreferenceDialogFragment",
-      "android/support/v4/widget/SwipeRefreshLayout$OnChildScrollUpCallback": "androidx/widget/SwipeRefreshLayout$OnChildScrollUpCallback",
-      "android/support/v4/media/AudioAttributesCompatApi21": "androidx/media/AudioAttributesCompatApi21",
-      "android/support/v7/media/MediaRouter$Callback": "androidx/media/MediaRouter$Callback",
-      "android/support/v4/content/pm/ShortcutInfoCompat$Builder": "androidx/content/pm/ShortcutInfoCompat$Builder",
-      "android/support/v7/util/SortedList$BatchedCallback": "androidx/util/SortedList$BatchedCallback",
-      "android/support/v7/cardview/R$style": "androidx/cardview/R$style",
-      "android/support/v7/media/MediaRouter$GlobalMediaRouter$ProviderCallback": "androidx/media/MediaRouter$GlobalMediaRouter$ProviderCallback",
-      "android/support/v4/widget/SimpleCursorAdapter$ViewBinder": "androidx/widget/SimpleCursorAdapter$ViewBinder",
-      "android/support/v7/util/TileList$Tile": "androidx/util/TileList$Tile",
-      "android/support/v17/leanback/widget/ItemBridgeAdapter$AdapterListener": "androidx/leanback/widget/ItemBridgeAdapter$AdapterListener",
-      "android/support/v4/widget/SlidingPaneLayout$DragHelperCallback": "androidx/widget/SlidingPaneLayout$DragHelperCallback",
-      "android/support/v4/media/MediaBrowserCompat$SearchResultReceiver": "androidx/media/MediaBrowserCompat$SearchResultReceiver",
-      "android/support/v17/leanback/widget/PlaybackRowPresenter": "androidx/leanback/widget/PlaybackRowPresenter",
-      "android/support/v7/media/MediaRouteProvider$ProviderMetadata": "androidx/media/MediaRouteProvider$ProviderMetadata",
-      "android/support/text/emoji/flatbuffer/MetadataList": "androidx/text/emoji/flatbuffer/MetadataList",
-      "android/support/v4/provider/TreeDocumentFile": "androidx/provider/TreeDocumentFile",
-      "android/support/v7/media/MediaSessionStatus$Builder": "androidx/media/MediaSessionStatus$Builder",
-      "android/support/text/emoji/widget/EmojiTextWatcher": "androidx/text/emoji/widget/EmojiTextWatcher",
-      "android/support/v17/leanback/app/GuidedStepSupportFragment": "androidx/leanback/app/GuidedStepSupportFragment",
-      "android/support/v17/leanback/widget/BrowseFrameLayout$OnFocusSearchListener": "androidx/leanback/widget/BrowseFrameLayout$OnFocusSearchListener",
-      "android/support/animation/AnimationHandler": "androidx/animation/AnimationHandler",
-      "android/support/wear/widget/drawer/WearableActionDrawerView": "androidx/wear/widget/drawer/WearableActionDrawerView",
-      "android/support/v4/media/MediaBrowserCompat$CustomActionResultReceiver": "androidx/media/MediaBrowserCompat$CustomActionResultReceiver",
-      "android/support/v7/widget/AppCompatSeekBarHelper": "androidx/widget/AppCompatSeekBarHelper",
-      "android/support/v4/widget/SlidingPaneLayout$AccessibilityDelegate": "androidx/widget/SlidingPaneLayout$AccessibilityDelegate",
-      "android/support/v17/leanback/widget/TitleViewAdapter$Provider": "androidx/leanback/widget/TitleViewAdapter$Provider",
-      "android/support/v7/widget/GridLayoutManager$SpanSizeLookup": "androidx/widget/GridLayoutManager$SpanSizeLookup",
-      "android/support/v4/content/res/ResourcesCompat$FontCallback": "androidx/content/res/ResourcesCompat$FontCallback",
-      "android/support/v4/util/CircularArray": "androidx/util/CircularArray",
-      "android/support/v17/leanback/util/StateMachine$State": "androidx/leanback/util/StateMachine$State",
-      "android/support/text/emoji/widget/EmojiTextView": "androidx/text/emoji/widget/EmojiTextView",
-      "android/support/v4/widget/CursorAdapter$MyDataSetObserver": "androidx/widget/CursorAdapter$MyDataSetObserver",
-      "android/support/v4/os/LocaleListCompat$LocaleListCompatBaseImpl": "androidx/os/LocaleListCompat$LocaleListCompatBaseImpl",
-      "android/support/v4/app/TaskStackBuilder$SupportParentable": "androidx/app/TaskStackBuilder$SupportParentable",
-      "android/support/v17/leanback/media/PlaybackControlGlue": "androidx/leanback/media/PlaybackControlGlue",
-      "android/support/v17/leanback/widget/GuidedActionEditText": "androidx/leanback/widget/GuidedActionEditText",
-      "android/support/v4/util/Pools$SimplePool": "androidx/util/Pools$SimplePool",
-      "android/support/v17/leanback/widget/ControlButtonPresenterSelector$ControlButtonPresenter": "androidx/leanback/widget/ControlButtonPresenterSelector$ControlButtonPresenter",
-      "android/support/v17/leanback/widget/PlaybackControlsPresenter$ViewHolder": "androidx/leanback/widget/PlaybackControlsPresenter$ViewHolder",
-      "android/support/wear/widget/drawer/WearableDrawerLayout": "androidx/wear/widget/drawer/WearableDrawerLayout",
-      "android/support/v7/widget/ActionBarContainer": "androidx/widget/ActionBarContainer",
-      "android/support/v7/widget/ShareActionProvider$ShareActivityChooserModelPolicy": "androidx/widget/ShareActionProvider$ShareActivityChooserModelPolicy",
-      "android/support/transition/ObjectAnimatorUtilsApi21": "androidx/transition/ObjectAnimatorUtilsApi21",
-      "android/support/v17/leanback/widget/BaseOnItemViewSelectedListener": "androidx/leanback/widget/BaseOnItemViewSelectedListener",
-      "android/support/v7/widget/StaggeredGridLayoutManager$LayoutParams": "androidx/widget/StaggeredGridLayoutManager$LayoutParams",
-      "android/support/v7/mediarouter/R$interpolator": "androidx/mediarouter/R$interpolator",
-      "android/support/v4/media/VolumeProviderCompatApi21": "androidx/media/VolumeProviderCompatApi21",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$PictureInPictureAction": "androidx/leanback/widget/PlaybackControlsRow$PictureInPictureAction",
-      "android/support/v7/util/MessageThreadUtil": "androidx/util/MessageThreadUtil",
-      "android/support/v4/util/LogWriter": "androidx/util/LogWriter",
-      "android/support/v7/preference/PreferenceDialogFragmentCompat": "androidx/preference/PreferenceDialogFragmentCompat",
-      "android/support/transition/ViewOverlayApi14": "androidx/transition/ViewOverlayApi14",
-      "android/support/v4/graphics/TypefaceCompatUtil": "androidx/graphics/TypefaceCompatUtil",
-      "android/support/media/tv/BasePreviewProgram": "androidx/media/tv/BasePreviewProgram",
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$DetailsOverviewRowListener": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$DetailsOverviewRowListener",
-      "android/support/v7/widget/AlertDialogLayout": "androidx/widget/AlertDialogLayout",
-      "android/support/v7/widget/ActionBarOverlayLayout$LayoutParams": "androidx/widget/ActionBarOverlayLayout$LayoutParams",
-      "android/support/v4/view/NestedScrollingParentHelper": "androidx/view/NestedScrollingParentHelper",
-      "android/support/transition/ObjectAnimatorUtilsApi14": "androidx/transition/ObjectAnimatorUtilsApi14",
-      "android/support/text/emoji/EmojiCompat": "androidx/text/emoji/EmojiCompat",
-      "android/support/v4/media/MediaBrowserServiceCompatApi23$ServiceCompatProxy": "androidx/media/MediaBrowserServiceCompatApi23$ServiceCompatProxy",
-      "android/support/v17/leanback/widget/FocusHighlightHelper$FocusAnimator": "androidx/leanback/widget/FocusHighlightHelper$FocusAnimator",
-      "android/support/v17/leanback/app/PlaybackSupportFragment$SetSelectionRunnable": "androidx/leanback/app/PlaybackSupportFragment$SetSelectionRunnable",
-      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatApi23Impl": "androidx/widget/PopupWindowCompat$PopupWindowCompatApi23Impl",
-      "android/support/v7/preference/SwitchPreferenceCompat": "androidx/preference/SwitchPreferenceCompat",
-      "android/support/wear/widget/drawer/FlingWatcherFactory$FlingListener": "androidx/wear/widget/drawer/FlingWatcherFactory$FlingListener",
-      "android/support/v7/widget/ShareActionProvider": "androidx/widget/ShareActionProvider",
-      "android/support/v7/content/res/AppCompatResources": "androidx/content/res/AppCompatResources",
-      "android/support/transition/ViewOverlayApi18": "androidx/transition/ViewOverlayApi18",
-      "android/support/v7/widget/ListPopupWindow$ResizePopupRunnable": "androidx/widget/ListPopupWindow$ResizePopupRunnable",
-      "android/support/compat/R$integer": "androidx/compat/R$integer",
-      "android/support/v4/app/ActionBarDrawerToggle$SlideDrawable": "androidx/app/legacy/ActionBarDrawerToggle$SlideDrawable",
-      "android/support/transition/ChangeTransform$PathAnimatorMatrix": "androidx/transition/ChangeTransform$PathAnimatorMatrix",
-      "android/support/v17/leanback/graphics/ColorFilterDimmer": "androidx/leanback/graphics/ColorFilterDimmer",
-      "android/support/v7/media/MediaRouteDescriptor": "androidx/media/MediaRouteDescriptor",
-      "android/support/v14/preference/PreferenceFragment$ScrollToPreferenceObserver": "androidx/preference/PreferenceFragment$ScrollToPreferenceObserver",
-      "android/support/v4/media/MediaBrowserCompatApi21$SubscriptionCallback": "androidx/media/MediaBrowserCompatApi21$SubscriptionCallback",
-      "android/support/v7/view/menu/MenuHelper": "androidx/view/menu/MenuHelper",
-      "android/support/v17/leanback/widget/SpeechOrbView": "androidx/leanback/widget/SpeechOrbView",
-      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteController": "androidx/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteController",
-      "android/support/v7/widget/FitWindowsFrameLayout": "androidx/widget/FitWindowsFrameLayout",
-      "android/support/v7/preference/TwoStatePreference$SavedState": "androidx/preference/TwoStatePreference$SavedState",
-      "android/support/v17/leanback/widget/ShadowOverlayHelper$Builder": "androidx/leanback/widget/ShadowOverlayHelper$Builder",
-      "android/support/v17/leanback/widget/InvisibleRowPresenter": "androidx/leanback/widget/InvisibleRowPresenter",
-      "android/support/design/internal/NavigationMenuPresenter$SeparatorViewHolder": "androidx/design/internal/NavigationMenuPresenter$SeparatorViewHolder",
-      "android/support/design/widget/BaseTransientBottomBar$Duration": "androidx/design/widget/BaseTransientBottomBar$Duration",
-      "android/support/v7/widget/helper/ItemTouchUIUtilImpl": "androidx/widget/helper/ItemTouchUIUtilImpl",
-      "android/support/v17/leanback/widget/GuidedActionsRelativeLayout$InterceptKeyEventListener": "androidx/leanback/widget/GuidedActionsRelativeLayout$InterceptKeyEventListener",
-      "android/support/v4/os/IResultReceiver": "androidx/os/IResultReceiver",
-      "android/support/v17/leanback/widget/ShadowHelperApi21": "androidx/leanback/widget/ShadowHelperApi21",
-      "android/support/v17/leanback/widget/RowPresenter": "androidx/leanback/widget/RowPresenter",
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase",
-      "android/support/v4/app/BackStackRecord": "androidx/app/BackStackRecord",
-      "android/support/v4/view/WindowInsetsCompat": "androidx/view/WindowInsetsCompat",
-      "android/support/graphics/drawable/AnimatedVectorDrawableCompat": "androidx/graphics/drawable/AnimatedVectorDrawableCompat",
-      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter": "androidx/leanback/widget/PlaybackControlsRowPresenter",
-      "android/support/transition/VisibilityPropagation": "androidx/transition/VisibilityPropagation",
-      "android/support/v17/leanback/media/PlaybackTransportControlGlue": "androidx/leanback/media/PlaybackTransportControlGlue",
-      "android/support/wear/widget/BoxInsetLayout$LayoutParams$BoxedEdges": "androidx/wear/widget/BoxInsetLayout$LayoutParams$BoxedEdges",
-      "android/support/annotation/LayoutRes": "androidx/annotation/LayoutRes",
-      "android/support/v4/widget/CursorAdapter": "androidx/widget/CursorAdapter",
-      "android/support/wear/ambient/AmbientMode$AmbientCallback": "androidx/wear/ambient/AmbientMode$AmbientCallback",
-      "android/support/v4/media/MediaBrowserServiceCompatApi21$BrowserRoot": "androidx/media/MediaBrowserServiceCompatApi21$BrowserRoot",
-      "android/support/v7/view/menu/MenuItemWrapperJB": "androidx/view/menu/MenuItemWrapperJB",
-      "android/support/text/emoji/widget/EmojiAppCompatButton": "androidx/text/emoji/widget/EmojiAppCompatButton",
-      "android/support/v4/view/ActionProvider$SubUiVisibilityListener": "androidx/view/ActionProvider$SubUiVisibilityListener",
-      "android/support/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem$MenuItemChangedListener": "androidx/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem$MenuItemChangedListener",
-      "android/support/v4/media/MediaBrowserCompat$ServiceBinderWrapper": "androidx/media/MediaBrowserCompat$ServiceBinderWrapper",
-      "android/support/v13/app/ActivityCompat": "androidx/app/ActivityCompat",
-      "android/support/v4/widget/ImageViewCompat$LollipopViewCompatImpl": "androidx/widget/ImageViewCompat$LollipopViewCompatImpl",
-      "android/support/annotation/UiThread": "androidx/annotation/UiThread",
-      "android/support/v4/media/session/MediaControllerCompatApi24": "androidx/media/session/MediaControllerCompatApi24",
-      "android/support/v7/media/RemoteControlClientCompat$JellybeanImpl$VolumeCallbackWrapper": "androidx/media/RemoteControlClientCompat$JellybeanImpl$VolumeCallbackWrapper",
-      "android/support/v4/media/session/MediaControllerCompatApi23": "androidx/media/session/MediaControllerCompatApi23",
-      "android/support/v4/media/session/MediaControllerCompatApi21": "androidx/media/session/MediaControllerCompatApi21",
-      "android/support/v4/print/PrintHelper$ScaleMode": "androidx/print/PrintHelper$ScaleMode",
-      "android/support/v7/widget/SearchView$SavedState": "androidx/widget/SearchView$SavedState",
-      "android/support/v7/widget/AppCompatDrawableManager$AvdcInflateDelegate": "androidx/widget/AppCompatDrawableManager$AvdcInflateDelegate",
-      "android/support/v7/preference/TwoStatePreference": "androidx/preference/TwoStatePreference",
-      "android/support/text/emoji/EmojiCompat$LoadState": "androidx/text/emoji/EmojiCompat$LoadState",
-      "android/support/v17/leanback/widget/HorizontalGridView": "androidx/leanback/widget/HorizontalGridView",
-      "android/support/v7/view/menu/ListMenuItemView": "androidx/view/menu/ListMenuItemView",
-      "android/support/transition/Styleable$TransitionSet": "androidx/transition/Styleable$TransitionSet",
-      "android/support/v17/leanback/app/PlaybackFragment$OnFadeCompleteListener": "androidx/leanback/app/PlaybackFragment$OnFadeCompleteListener",
-      "android/support/v7/widget/ActivityChooserModel$PersistHistoryAsyncTask": "androidx/widget/ActivityChooserModel$PersistHistoryAsyncTask",
-      "android/support/v4/util/ArraySet": "androidx/util/ArraySet",
-      "android/support/v7/widget/FastScroller$AnimationState": "androidx/widget/FastScroller$AnimationState",
-      "android/support/v7/widget/RecyclerView$ChildDrawingOrderCallback": "androidx/widget/RecyclerView$ChildDrawingOrderCallback",
-      "android/support/text/emoji/flatbuffer/Constants": "androidx/text/emoji/flatbuffer/Constants",
-      "android/support/v4/widget/DrawerLayout$LayoutParams": "androidx/widget/DrawerLayout$LayoutParams",
-      "android/support/v4/app/TaskStackBuilder": "androidx/app/TaskStackBuilder",
-      "android/support/v7/widget/ListPopupWindow$PopupDataSetObserver": "androidx/widget/ListPopupWindow$PopupDataSetObserver",
-      "android/support/v4/media/session/MediaSessionCompatApi24$CallbackProxy": "androidx/media/session/MediaSessionCompatApi24$CallbackProxy",
-      "android/support/v17/leanback/app/RowsSupportFragment$MainFragmentRowsAdapter": "androidx/leanback/app/RowsSupportFragment$MainFragmentRowsAdapter",
-      "android/support/v17/leanback/widget/picker/DatePicker": "androidx/leanback/widget/picker/DatePicker",
-      "android/support/v17/leanback/widget/SearchBar$SearchBarPermissionListener": "androidx/leanback/widget/SearchBar$SearchBarPermissionListener",
-      "android/support/v7/media/MediaItemMetadata": "androidx/media/MediaItemMetadata",
-      "android/support/v17/leanback/widget/ListRowPresenter": "androidx/leanback/widget/ListRowPresenter",
-      "android/support/v17/leanback/media/PlaybackBannerControlGlue$ACTION_": "androidx/leanback/media/PlaybackBannerControlGlue$ACTION_",
-      "android/support/v4/app/RemoteInput": "androidx/app/RemoteInput",
-      "android/support/text/emoji/MetadataListReader$ByteBufferReader": "androidx/text/emoji/MetadataListReader$ByteBufferReader",
-      "android/support/v17/leanback/widget/SearchEditText": "androidx/leanback/widget/SearchEditText",
-      "android/support/v4/app/NotificationCompat$CarExtender$UnreadConversation$Builder": "androidx/app/NotificationCompat$CarExtender$UnreadConversation$Builder",
-      "android/support/v7/preference/SeekBarPreference": "androidx/preference/SeekBarPreference",
-      "android/support/v17/leanback/R$transition": "androidx/leanback/R$transition",
-      "android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory": "androidx/graphics/drawable/RoundedBitmapDrawableFactory",
-      "android/support/v7/widget/PositionMap$ContainerHelpers": "androidx/widget/PositionMap$ContainerHelpers",
-      "android/support/v4/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerWrapper": "androidx/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerWrapper",
-      "android/support/design/widget/ViewUtils": "androidx/design/widget/ViewUtils",
-      "android/support/v4/widget/CompoundButtonCompat$CompoundButtonCompatApi23Impl": "androidx/widget/CompoundButtonCompat$CompoundButtonCompatApi23Impl",
-      "android/support/v7/widget/StaggeredGridLayoutManager$SavedState": "androidx/widget/StaggeredGridLayoutManager$SavedState",
-      "android/support/transition/PathMotion": "androidx/transition/PathMotion",
-      "android/support/wear/widget/drawer/WearableDrawerView": "androidx/wear/widget/drawer/WearableDrawerView",
-      "android/support/v4/media/VolumeProviderCompat$ControlType": "androidx/media/VolumeProviderCompat$ControlType",
-      "android/support/v4/view/animation/PathInterpolatorApi14": "androidx/view/animation/PathInterpolatorApi14",
-      "android/support/animation/AnimationHandler$FrameCallbackProvider16": "androidx/animation/AnimationHandler$FrameCallbackProvider16",
-      "android/support/v4/view/animation/FastOutSlowInInterpolator": "androidx/view/animation/FastOutSlowInInterpolator",
-      "android/support/animation/AnimationHandler$FrameCallbackProvider14": "androidx/animation/AnimationHandler$FrameCallbackProvider14",
-      "android/support/customtabs/CustomTabsServiceConnection": "androidx/browser/customtabs/CustomTabsServiceConnection",
-      "android/support/v17/leanback/app/BackgroundFragment": "androidx/leanback/app/BackgroundFragment",
-      "android/support/v17/leanback/widget/FocusHighlightHelper$BrowseItemFocusHighlight": "androidx/leanback/widget/FocusHighlightHelper$BrowseItemFocusHighlight",
-      "android/support/v17/leanback/app/HeadersFragment$OnHeaderClickedListener": "androidx/leanback/app/HeadersFragment$OnHeaderClickedListener",
-      "android/support/v7/media/MediaRouter$RouteInfo": "androidx/media/MediaRouter$RouteInfo",
-      "android/support/v14/preference/PreferenceFragment": "androidx/preference/PreferenceFragment",
-      "android/support/v4/media/session/PlaybackStateCompat$MediaKeyAction": "androidx/media/session/PlaybackStateCompat$MediaKeyAction",
-      "android/support/v17/leanback/widget/TitleView": "androidx/leanback/widget/TitleView",
-      "android/support/graphics/drawable/VectorDrawableCompat$VPath": "androidx/graphics/drawable/VectorDrawableCompat$VPath",
-      "android/support/v17/leanback/widget/AbstractMediaItemPresenter$ViewHolder": "androidx/leanback/widget/AbstractMediaItemPresenter$ViewHolder",
-      "android/support/v17/leanback/widget/BrowseRowsFrameLayout": "androidx/leanback/widget/BrowseRowsFrameLayout",
-      "android/support/v7/content/res/AppCompatResources$ColorStateListCacheEntry": "androidx/content/res/AppCompatResources$ColorStateListCacheEntry",
-      "android/support/design/R$dimen": "androidx/design/R$dimen",
-      "android/support/v7/preference/PreferenceInflater": "androidx/preference/PreferenceInflater",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$PlayPauseAction": "androidx/leanback/widget/PlaybackControlsRow$PlayPauseAction",
-      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter": "androidx/leanback/widget/PlaybackTransportRowPresenter",
-      "android/support/wear/widget/CircledImageView": "androidx/wear/widget/CircledImageView",
-      "android/support/v7/media/MediaRouterJellybean$SelectRouteWorkaround": "androidx/media/MediaRouterJellybean$SelectRouteWorkaround",
-      "android/support/v17/leanback/widget/ListRowHoverCardView": "androidx/leanback/widget/ListRowHoverCardView",
-      "android/support/v7/media/MediaRouterJellybean$GetDefaultRouteWorkaround": "androidx/media/MediaRouterJellybean$GetDefaultRouteWorkaround",
-      "android/support/text/emoji/widget/SpannableBuilder$WatcherWrapper": "androidx/text/emoji/widget/SpannableBuilder$WatcherWrapper",
-      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$AdapterSingle": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$AdapterSingle",
-      "android/support/v17/leanback/app/OnboardingFragment": "androidx/leanback/app/OnboardingFragment",
-      "android/support/v7/view/menu/MenuPresenter$Callback": "androidx/view/menu/MenuPresenter$Callback",
-      "android/support/v4/graphics/drawable/DrawableWrapperApi14$DrawableWrapperStateBase": "androidx/graphics/drawable/DrawableWrapperApi14$DrawableWrapperStateBase",
-      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable",
-      "android/support/v17/leanback/widget/AbstractMediaListHeaderPresenter$ViewHolder": "androidx/leanback/widget/AbstractMediaListHeaderPresenter$ViewHolder",
-      "android/support/v7/view/menu/MenuItemWrapperICS$OnMenuItemClickListenerWrapper": "androidx/view/menu/MenuItemWrapperICS$OnMenuItemClickListenerWrapper",
-      "android/support/v7/widget/ContentFrameLayout$OnAttachListener": "androidx/widget/ContentFrameLayout$OnAttachListener",
-      "android/support/v17/leanback/widget/StaticShadowHelper": "androidx/leanback/widget/StaticShadowHelper",
-      "android/support/v7/widget/RecyclerView$OnScrollListener": "androidx/widget/RecyclerView$OnScrollListener",
-      "android/support/v17/leanback/graphics/FitWidthBitmapDrawable$BitmapState": "androidx/leanback/graphics/FitWidthBitmapDrawable$BitmapState",
-      "android/support/v17/leanback/widget/SeekBar": "androidx/leanback/widget/SeekBar",
-      "android/support/v4/widget/SlidingPaneLayout$SimplePanelSlideListener": "androidx/widget/SlidingPaneLayout$SimplePanelSlideListener",
-      "android/support/v17/leanback/widget/RowContainerView": "androidx/leanback/widget/RowContainerView",
-      "android/support/v7/widget/ForwardingListener$DisallowIntercept": "androidx/widget/ForwardingListener$DisallowIntercept",
-      "android/support/v7/app/AppCompatDelegateImplBase": "androidx/app/AppCompatDelegateImplBase",
-      "android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost": "androidx/leanback/app/PlaybackSupportFragmentGlueHost",
-      "android/support/transition/Styleable$Transition": "androidx/transition/Styleable$Transition",
-      "android/support/v7/widget/ActionMenuPresenter": "androidx/widget/ActionMenuPresenter",
-      "android/support/v7/app/ActionBar$DisplayOptions": "androidx/app/ActionBar$DisplayOptions",
-      "android/support/v4/app/ShareCompat$IntentBuilder": "androidx/app/ShareCompat$IntentBuilder",
-      "android/support/v4/media/MediaMetadataCompat$LongKey": "androidx/media/MediaMetadataCompat$LongKey",
-      "android/support/v4/media/AudioAttributesCompatApi21$Wrapper": "androidx/media/AudioAttributesCompatApi21$Wrapper",
-      "android/support/v17/leanback/widget/DetailsOverviewRow": "androidx/leanback/widget/DetailsOverviewRow",
-      "android/support/annotation/IdRes": "androidx/annotation/IdRes",
-      "android/support/v7/widget/ActivityChooserModel$HistoricalRecord": "androidx/widget/ActivityChooserModel$HistoricalRecord",
-      "android/support/v17/leanback/widget/SearchOrbView$Colors": "androidx/leanback/widget/SearchOrbView$Colors",
-      "android/support/v7/content/res/GrowingArrayUtils": "androidx/content/res/GrowingArrayUtils",
-      "android/support/text/emoji/MetadataRepo$Node": "androidx/text/emoji/MetadataRepo$Node",
-      "android/support/v17/leanback/app/BrowseFragment$MainFragmentItemViewSelectedListener": "androidx/leanback/app/BrowseFragment$MainFragmentItemViewSelectedListener",
-      "android/support/v17/leanback/app/SearchSupportFragment$ExternalQuery": "androidx/leanback/app/SearchSupportFragment$ExternalQuery",
-      "android/support/v17/leanback/widget/ShadowHelperJbmr2$ShadowImpl": "androidx/leanback/widget/ShadowHelperJbmr2$ShadowImpl",
-      "android/support/wear/widget/drawer/PageIndicatorView": "androidx/wear/widget/drawer/PageIndicatorView",
-      "android/support/v17/leanback/app/VerticalGridSupportFragment": "androidx/leanback/app/VerticalGridSupportFragment",
-      "android/support/v7/preference/PreferenceGroupAdapter$PreferenceLayout": "androidx/preference/PreferenceGroupAdapter$PreferenceLayout",
-      "android/support/v7/preference/internal/AbstractMultiSelectListPreference": "androidx/preference/internal/AbstractMultiSelectListPreference",
-      "android/support/v7/media/MediaRouteProviderDescriptor$Builder": "androidx/media/MediaRouteProviderDescriptor$Builder",
-      "android/support/v4/app/NotificationCompatSideChannelService": "androidx/app/NotificationCompatSideChannelService",
-      "android/support/v7/widget/GridLayoutManager": "androidx/widget/GridLayoutManager",
-      "android/support/v4/media/AudioAttributesCompat$AttributeUsage": "androidx/media/AudioAttributesCompat$AttributeUsage",
-      "android/support/v4/util/Pools$Pool": "androidx/util/Pools$Pool",
-      "android/support/transition/SidePropagation": "androidx/transition/SidePropagation",
-      "android/support/v17/leanback/widget/PlaybackSeekUi$Client": "androidx/leanback/widget/PlaybackSeekUi$Client",
-      "android/support/media/tv/TvContractCompat$Channels": "androidx/media/tv/TvContractCompat$Channels",
-      "android/support/v7/appcompat/R$style": "androidx/appcompat/R$style",
-      "android/support/v4/app/INotificationSideChannel$Stub": "androidx/app/INotificationSideChannel$Stub",
-      "android/support/compat/R$string": "androidx/compat/R$string",
-      "android/support/v4/os/EnvironmentCompat": "androidx/os/EnvironmentCompat",
-      "android/support/wear/ambient/SharedLibraryVersion": "androidx/wear/ambient/SharedLibraryVersion",
-      "android/support/v7/view/menu/MenuBuilder$Callback": "androidx/view/menu/MenuBuilder$Callback",
-      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapterProvider": "androidx/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapterProvider",
-      "android/support/v17/leanback/R": "androidx/leanback/R",
-      "android/support/transition/Slide": "androidx/transition/Slide",
-      "android/support/v4/os/ParcelableCompat$ParcelableCompatCreatorHoneycombMR2": "androidx/os/ParcelableCompat$ParcelableCompatCreatorHoneycombMR2",
-      "android/support/v17/leanback/widget/PlaybackSeekUi": "androidx/leanback/widget/PlaybackSeekUi",
-      "android/support/v4/view/ViewPropertyAnimatorUpdateListener": "androidx/view/ViewPropertyAnimatorUpdateListener",
-      "android/support/v4/widget/EdgeEffectCompat$EdgeEffectBaseImpl": "androidx/widget/EdgeEffectCompat$EdgeEffectBaseImpl",
-      "android/support/v7/widget/ForwardingListener$TriggerLongPress": "androidx/widget/ForwardingListener$TriggerLongPress",
-      "android/support/v4/app/ActivityCompat$SharedElementCallback23Impl": "androidx/app/legacy/ActivityCompat$SharedElementCallback23Impl",
-      "android/support/v4/media/MediaBrowserCompatApi21$ConnectionCallback": "androidx/media/MediaBrowserCompatApi21$ConnectionCallback",
-      "android/support/v4/content/Loader$ForceLoadContentObserver": "androidx/content/Loader$ForceLoadContentObserver",
-      "android/support/v7/widget/ScrollingTabContainerView$TabClickListener": "androidx/widget/ScrollingTabContainerView$TabClickListener",
-      "android/support/v4/widget/TextViewCompat$TextViewCompatApi27Impl": "androidx/widget/TextViewCompat$TextViewCompatApi27Impl",
-      "android/support/v17/leanback/widget/GridLayoutManager$OnLayoutCompleteListener": "androidx/leanback/widget/GridLayoutManager$OnLayoutCompleteListener",
-      "android/support/v4/provider/SelfDestructiveThread$ReplyCallback": "androidx/provider/SelfDestructiveThread$ReplyCallback",
-      "android/support/v4/media/VolumeProviderCompat$Callback": "androidx/media/VolumeProviderCompat$Callback",
-      "android/support/v4/app/NotificationCompat$CarExtender$UnreadConversation": "androidx/app/NotificationCompat$CarExtender$UnreadConversation",
-      "android/support/graphics/drawable/AnimatorInflaterCompat": "androidx/graphics/drawable/AnimatorInflaterCompat",
-      "android/support/compat/R$id": "androidx/compat/R$id",
-      "android/support/v17/leanback/app/DetailsFragment$WaitEnterTransitionTimeout": "androidx/leanback/app/DetailsFragment$WaitEnterTransitionTimeout",
-      "android/support/media/tv/TvContractCompat$Channels$ServiceType": "androidx/media/tv/TvContractCompat$Channels$ServiceType",
-      "android/support/v17/leanback/widget/Presenter$ViewHolder": "androidx/leanback/widget/Presenter$ViewHolder",
-      "android/support/text/emoji/EmojiCompat$Config": "androidx/text/emoji/EmojiCompat$Config",
-      "android/support/v17/leanback/app/BackgroundManager$ChangeBackgroundRunnable": "androidx/leanback/app/BackgroundManager$ChangeBackgroundRunnable",
-      "android/support/v17/leanback/util/StateMachine$Transition": "androidx/leanback/util/StateMachine$Transition",
-      "android/support/v17/leanback/widget/picker/TimePicker": "androidx/leanback/widget/picker/TimePicker",
-      "android/support/v7/media/RegisteredMediaRouteProvider$Controller": "androidx/media/RegisteredMediaRouteProvider$Controller",
-      "android/support/text/emoji/TypefaceEmojiSpan": "androidx/text/emoji/TypefaceEmojiSpan",
-      "android/support/wear/widget/SwipeDismissFrameLayout": "androidx/wear/widget/SwipeDismissFrameLayout",
-      "android/support/v4/media/MediaBrowserCompatUtils": "androidx/media/MediaBrowserCompatUtils",
-      "android/support/v17/leanback/app/HeadersSupportFragment": "androidx/leanback/app/HeadersSupportFragment",
-      "android/support/v7/widget/SearchView$OnQueryTextListener": "androidx/widget/SearchView$OnQueryTextListener",
-      "android/support/v17/leanback/widget/AbstractMediaListHeaderPresenter": "androidx/leanback/widget/AbstractMediaListHeaderPresenter",
-      "android/support/design/widget/BaseTransientBottomBar$OnLayoutChangeListener": "androidx/design/widget/BaseTransientBottomBar$OnLayoutChangeListener",
-      "android/support/v14/preference/R$styleable": "androidx/preference/R$styleable",
-      "android/support/v17/leanback/transition/SlideKitkat": "androidx/leanback/transition/SlideKitkat",
-      "android/support/animation/AnimationHandler$AnimationFrameCallbackProvider": "androidx/animation/AnimationHandler$AnimationFrameCallbackProvider",
-      "android/support/v7/view/menu/ActionMenuItem": "androidx/view/menu/ActionMenuItem",
-      "android/support/v4/view/animation/PathInterpolatorCompat": "androidx/view/animation/PathInterpolatorCompat",
-      "android/support/v7/util/AsyncListUtil$DataCallback": "androidx/util/AsyncListUtil$DataCallback",
-      "android/support/v17/leanback/widget/ListRowPresenter$ListRowPresenterItemBridgeAdapter": "androidx/leanback/widget/ListRowPresenter$ListRowPresenterItemBridgeAdapter",
-      "android/support/v7/mediarouter/R$style": "androidx/mediarouter/R$style",
-      "android/support/customtabs/IPostMessageService$Stub": "androidx/browser/customtabs/IPostMessageService$Stub",
-      "android/support/wear/widget/CircularProgressLayout$OnTimerFinishedListener": "androidx/wear/widget/CircularProgressLayout$OnTimerFinishedListener",
-      "android/support/v7/widget/ActivityChooserModel$OnChooseActivityListener": "androidx/widget/ActivityChooserModel$OnChooseActivityListener",
-      "android/support/v4/graphics/drawable/DrawableWrapperApi21": "androidx/graphics/drawable/DrawableWrapperApi21",
-      "android/support/design/widget/FloatingActionButton$Size": "androidx/design/widget/FloatingActionButton$Size",
-      "android/support/v4/provider/DocumentFile": "androidx/provider/DocumentFile",
-      "android/support/v7/app/AppCompatDelegateImplBase$AppCompatWindowCallbackBase": "androidx/app/AppCompatDelegateImplBase$AppCompatWindowCallbackBase",
-      "android/support/annotation/AnyThread": "androidx/annotation/AnyThread",
-      "android/support/v13/app/FragmentCompat$FragmentCompatApi24Impl": "androidx/app/FragmentCompat$FragmentCompatApi24Impl",
-      "android/support/wear/ambient/SharedLibraryVersion$VersionHolder": "androidx/wear/ambient/SharedLibraryVersion$VersionHolder",
-      "android/support/v7/app/WindowDecorActionBar$ActionModeImpl": "androidx/app/WindowDecorActionBar$ActionModeImpl",
-      "android/support/constraint/solver/widgets/Guideline": "androidx/constraint/solver/widgets/Guideline",
-      "android/support/v17/leanback/widget/NonOverlappingView": "androidx/leanback/widget/NonOverlappingView",
-      "android/support/v7/preference/ListPreference": "androidx/preference/ListPreference",
-      "android/support/v17/leanback/widget/ShadowOverlayContainer": "androidx/leanback/widget/ShadowOverlayContainer",
-      "android/support/design/internal/NavigationMenuItemView": "androidx/design/internal/NavigationMenuItemView",
-      "android/support/v17/leanback/widget/ArrayObjectAdapter": "androidx/leanback/widget/ArrayObjectAdapter",
-      "android/support/v17/leanback/widget/CursorObjectAdapter": "androidx/leanback/widget/CursorObjectAdapter",
-      "android/support/v17/leanback/R$style": "androidx/leanback/R$style",
-      "android/support/v4/media/MediaBrowserCompatApi21": "androidx/media/MediaBrowserCompatApi21",
-      "android/support/v4/media/MediaBrowserCompatApi23": "androidx/media/MediaBrowserCompatApi23",
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper": "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper",
-      "android/support/v7/widget/ShareActionProvider$ShareMenuItemOnMenuItemClickListener": "androidx/widget/ShareActionProvider$ShareMenuItemOnMenuItemClickListener",
-      "android/support/v4/media/MediaBrowserCompatApi26": "androidx/media/MediaBrowserCompatApi26",
-      "android/support/v4/print/PrintHelper$Orientation": "androidx/print/PrintHelper$Orientation",
-      "android/support/v4/view/ViewPager$PageTransformer": "androidx/view/ViewPager$PageTransformer",
-      "android/support/transition/ViewGroupOverlayImpl": "androidx/transition/ViewGroupOverlayImpl",
-      "android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi23Impl": "androidx/app/ActivityOptionsCompat$ActivityOptionsCompatApi23Impl",
-      "android/support/v4/view/ViewPropertyAnimatorListener": "androidx/view/ViewPropertyAnimatorListener",
-      "android/support/transition/Styleable$ChangeBounds": "androidx/transition/Styleable$ChangeBounds",
-      "android/support/annotation/Keep": "androidx/annotation/Keep",
-      "android/support/v4/app/NotificationCompat$DecoratedCustomViewStyle": "androidx/app/NotificationCompat$DecoratedCustomViewStyle",
-      "android/support/v4/app/ShareCompat$IntentReader": "androidx/app/ShareCompat$IntentReader",
-      "android/support/v17/leanback/widget/ActionPresenterSelector$ActionPresenter": "androidx/leanback/widget/ActionPresenterSelector$ActionPresenter",
-      "android/support/v7/util/MessageThreadUtil$MessageQueue": "androidx/util/MessageThreadUtil$MessageQueue",
-      "android/support/annotation/Px": "androidx/annotation/Px",
-      "android/support/v17/leanback/app/SearchFragment$SearchResultProvider": "androidx/leanback/app/SearchFragment$SearchResultProvider",
-      "android/support/v7/app/AppCompatDelegateImplV9$ListMenuDecorView": "androidx/app/AppCompatDelegateImplV9$ListMenuDecorView",
-      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperStubImpl$TransitionStub": "androidx/leanback/transition/TransitionHelper$TransitionHelperStubImpl$TransitionStub",
-      "android/support/v7/app/AppCompatDelegate": "androidx/app/AppCompatDelegate",
-      "android/support/v17/leanback/app/BrowseFragment$MainFragmentAdapter": "androidx/leanback/app/BrowseFragment$MainFragmentAdapter",
-      "android/support/v17/leanback/widget/ParallaxEffect$IntEffect": "androidx/leanback/widget/ParallaxEffect$IntEffect",
-      "android/support/v7/widget/GridLayout$Alignment": "androidx/widget/GridLayout$Alignment",
-      "android/support/v7/widget/helper/ItemTouchHelper$RecoverAnimation": "androidx/widget/helper/ItemTouchHelper$RecoverAnimation",
-      "android/support/v17/leanback/widget/picker/Picker": "androidx/leanback/widget/picker/Picker",
-      "android/support/v7/gridlayout/R$styleable": "androidx/gridlayout/R$styleable",
-      "android/support/v4/app/FragmentPagerAdapter": "androidx/app/FragmentPagerAdapter",
-      "android/support/v4/graphics/TypefaceCompatBaseImpl$StyleExtractor": "androidx/graphics/TypefaceCompatBaseImpl$StyleExtractor",
-      "android/support/v17/leanback/widget/SearchBar": "androidx/leanback/widget/SearchBar",
-      "android/support/wear/widget/drawer/WearableDrawerController": "androidx/wear/widget/drawer/WearableDrawerController",
-      "android/support/design/widget/FloatingActionButtonImpl$DisabledElevationAnimation": "androidx/design/widget/FloatingActionButtonImpl$DisabledElevationAnimation",
-      "android/support/annotation/FloatRange": "androidx/annotation/FloatRange",
-      "android/support/media/ExifInterface$ByteOrderedDataInputStream": "androidx/media/ExifInterface$ByteOrderedDataInputStream",
-      "android/support/v7/widget/TooltipCompat$Api26ViewCompatImpl": "androidx/widget/TooltipCompat$Api26ViewCompatImpl",
-      "android/support/v7/widget/RecyclerViewAccessibilityDelegate": "androidx/widget/RecyclerViewAccessibilityDelegate",
-      "android/support/v7/widget/AppCompatTextView": "androidx/widget/AppCompatTextView",
-      "android/support/transition/ChangeImageTransform": "androidx/transition/ChangeImageTransform",
-      "android/support/v4/app/SuperNotCalledException": "androidx/app/SuperNotCalledException",
-      "android/support/text/emoji/widget/EmojiTextViewHelper$HelperInternal19": "androidx/text/emoji/widget/EmojiTextViewHelper$HelperInternal19",
-      "android/support/v7/widget/GapWorker$LayoutPrefetchRegistryImpl": "androidx/widget/GapWorker$LayoutPrefetchRegistryImpl",
-      "android/support/v7/app/AppCompatDelegateImplV14$AppCompatWindowCallbackV14": "androidx/app/AppCompatDelegateImplV14$AppCompatWindowCallbackV14",
-      "android/support/v4/widget/TextViewCompat$TextViewCompatApi23Impl": "androidx/widget/TextViewCompat$TextViewCompatApi23Impl",
-      "android/support/v17/leanback/widget/ParallaxEffect$FloatEffect": "androidx/leanback/widget/ParallaxEffect$FloatEffect",
-      "android/support/v4/media/session/MediaSessionCompat": "androidx/media/session/MediaSessionCompat",
-      "android/support/v17/leanback/app/BrowseSupportFragment$FragmentHostImpl": "androidx/leanback/app/BrowseSupportFragment$FragmentHostImpl",
-      "android/support/design/widget/ShadowDrawableWrapper": "androidx/design/widget/ShadowDrawableWrapper",
-      "android/support/design/internal/NavigationMenuPresenter$HeaderViewHolder": "androidx/design/internal/NavigationMenuPresenter$HeaderViewHolder",
-      "android/support/v7/widget/PopupMenu": "androidx/widget/PopupMenu",
-      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$ViewHolder": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$ViewHolder",
-      "android/support/annotation/BoolRes": "androidx/annotation/BoolRes",
-      "android/support/v7/media/RemotePlaybackClient": "androidx/media/RemotePlaybackClient",
-      "android/support/v4/view/LayoutInflaterCompat$LayoutInflaterCompatApi21Impl": "androidx/view/LayoutInflaterCompat$LayoutInflaterCompatApi21Impl",
-      "android/support/v7/preference/AndroidResources": "androidx/preference/AndroidResources",
-      "android/support/v7/app/AlertController$AlertParams$OnPrepareListViewListener": "androidx/app/AlertController$AlertParams$OnPrepareListViewListener",
-      "android/support/wear/widget/drawer/WearableNavigationDrawerView": "androidx/wear/widget/drawer/WearableNavigationDrawerView",
-      "android/support/v4/media/session/PlaybackStateCompat$ErrorCode": "androidx/media/session/PlaybackStateCompat$ErrorCode",
-      "android/support/v7/widget/ActionMenuView$ActionMenuPresenterCallback": "androidx/widget/ActionMenuView$ActionMenuPresenterCallback",
-      "android/support/v7/app/AlertController": "androidx/app/AlertController",
-      "android/support/v7/widget/FitWindowsViewGroup$OnFitSystemWindowsListener": "androidx/widget/FitWindowsViewGroup$OnFitSystemWindowsListener",
-      "android/support/v4/app/NotificationBuilderWithBuilderAccessor": "androidx/app/NotificationBuilderWithBuilderAccessor",
-      "android/support/v4/view/AbsSavedState": "androidx/view/AbsSavedState",
-      "android/support/v7/media/MediaRouteProvider$ProviderHandler": "androidx/media/MediaRouteProvider$ProviderHandler",
-      "android/support/v7/widget/AbsActionBarView$VisibilityAnimListener": "androidx/widget/AbsActionBarView$VisibilityAnimListener",
-      "android/support/design/internal/TextScale": "androidx/design/internal/TextScale",
-      "android/support/v7/widget/RecyclerViewAccessibilityDelegate$ItemDelegate": "androidx/widget/RecyclerViewAccessibilityDelegate$ItemDelegate",
-      "android/support/v4/widget/SlidingPaneLayout": "androidx/widget/SlidingPaneLayout",
-      "android/support/v17/leanback/widget/ScaleFrameLayout": "androidx/leanback/widget/ScaleFrameLayout",
-      "android/support/v4/app/FragmentTransaction": "androidx/app/FragmentTransaction",
-      "android/support/graphics/drawable/AnimatorInflaterCompat$PathDataEvaluator": "androidx/graphics/drawable/AnimatorInflaterCompat$PathDataEvaluator",
-      "android/support/wear/widget/drawer/WearableActionDrawerView$ActionItemViewHolder": "androidx/wear/widget/drawer/WearableActionDrawerView$ActionItemViewHolder",
-      "android/support/wear/ambient/AmbientDelegate": "androidx/wear/ambient/AmbientDelegate",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ThumbsUpAction": "androidx/leanback/widget/PlaybackControlsRow$ThumbsUpAction",
-      "android/support/v7/widget/AppCompatSpinner": "androidx/widget/AppCompatSpinner",
-      "android/support/design/widget/NavigationView$SavedState": "androidx/design/widget/NavigationView$SavedState",
+      "android/support/annotation/RestrictTo$Scope": "androidx/annotation/RestrictTo$Scope",
       "android/support/v17/leanback/animation/LogDecelerateInterpolator": "androidx/leanback/animation/LogDecelerateInterpolator",
-      "android/support/v4/media/session/MediaControllerCompatApi21$Callback": "androidx/media/session/MediaControllerCompatApi21$Callback",
-      "android/support/v7/widget/helper/ItemTouchHelper": "androidx/widget/helper/ItemTouchHelper",
-      "android/support/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableCompatState": "androidx/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableCompatState",
-      "android/support/v4/graphics/drawable/DrawableWrapperApi14$DrawableWrapperState": "androidx/graphics/drawable/DrawableWrapperApi14$DrawableWrapperState",
-      "android/support/v4/util/DebugUtils": "androidx/util/DebugUtils",
-      "android/support/customtabs/CustomTabsCallback": "androidx/browser/customtabs/CustomTabsCallback",
-      "android/support/v13/app/FragmentCompat": "androidx/app/FragmentCompat",
-      "android/support/v7/widget/RecyclerView$ViewFlinger": "androidx/widget/RecyclerView$ViewFlinger",
-      "android/support/v17/leanback/app/BrowseFragment$SetSelectionRunnable": "androidx/leanback/app/BrowseFragment$SetSelectionRunnable",
-      "android/support/customtabs/CustomTabsIntent$Builder": "androidx/browser/customtabs/CustomTabsIntent$Builder",
-      "android/support/v4/util/MapCollections$ValuesCollection": "androidx/util/MapCollections$ValuesCollection",
-      "android/support/v17/leanback/widget/StaggeredGrid": "androidx/leanback/widget/StaggeredGrid",
-      "android/support/v13/app/FragmentTabHost$SavedState": "androidx/app/legacy/FragmentTabHost$SavedState",
-      "android/support/v4/media/MediaBrowserServiceCompatApi23": "androidx/media/MediaBrowserServiceCompatApi23",
-      "android/support/v4/media/session/MediaButtonReceiver": "androidx/media/session/MediaButtonReceiver",
-      "android/support/v17/leanback/graphics/CompositeDrawable$CompositeState": "androidx/leanback/graphics/CompositeDrawable$CompositeState",
-      "android/support/transition/WindowIdApi14": "androidx/transition/WindowIdApi14",
-      "android/support/v4/media/MediaBrowserServiceCompatApi26": "androidx/media/MediaBrowserServiceCompatApi26",
-      "android/support/v4/media/MediaBrowserServiceCompatApi21": "androidx/media/MediaBrowserServiceCompatApi21",
-      "android/support/transition/WindowIdApi18": "androidx/transition/WindowIdApi18",
-      "android/support/v7/graphics/ColorCutQuantizer": "androidx/graphics/palette/ColorCutQuantizer",
-      "android/support/v4/media/session/MediaSessionCompatApi23$Callback": "androidx/media/session/MediaSessionCompatApi23$Callback",
-      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ActionsItemBridgeAdapter": "androidx/leanback/widget/DetailsOverviewRowPresenter$ActionsItemBridgeAdapter",
-      "android/support/v7/app/MediaRouteButton$RemoteIndicatorLoader": "androidx/app/MediaRouteButton$RemoteIndicatorLoader",
-      "android/support/v7/preference/ListPreference$SavedState": "androidx/preference/ListPreference$SavedState",
-      "android/support/v7/media/RegisteredMediaRouteProvider$ReceiveHandler": "androidx/media/RegisteredMediaRouteProvider$ReceiveHandler",
-      "android/support/v17/leanback/widget/MediaRowFocusView": "androidx/leanback/widget/MediaRowFocusView",
-      "android/support/v14/preference/PreferenceFragment$OnPreferenceDisplayDialogCallback": "androidx/preference/PreferenceFragment$OnPreferenceDisplayDialogCallback",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$HighQualityAction": "androidx/leanback/widget/PlaybackControlsRow$HighQualityAction",
-      "android/support/v17/leanback/app/BaseRowSupportFragment": "androidx/leanback/app/BaseRowSupportFragment",
-      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentItemViewSelectedListener": "androidx/leanback/app/BrowseSupportFragment$MainFragmentItemViewSelectedListener",
-      "android/support/v17/leanback/widget/StreamingTextView": "androidx/leanback/widget/StreamingTextView",
-      "android/support/transition/GhostViewImpl$Creator": "androidx/transition/GhostViewImpl$Creator",
-      "android/support/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem": "androidx/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem",
-      "android/support/v4/media/MediaBrowserCompat$Subscription": "androidx/media/MediaBrowserCompat$Subscription",
-      "android/support/v4/view/PagerTitleStrip$SingleLineAllCapsTransform": "androidx/view/PagerTitleStrip$SingleLineAllCapsTransform",
-      "android/support/v4/media/session/MediaControllerCompatApi24$TransportControls": "androidx/media/session/MediaControllerCompatApi24$TransportControls",
-      "android/support/v7/app/ActionBarDrawerToggleHoneycomb": "androidx/app/ActionBarDrawerToggleHoneycomb",
-      "android/support/v4/graphics/TypefaceCompatBaseImpl": "androidx/graphics/TypefaceCompatBaseImpl",
-      "android/support/transition/TranslationAnimationCreator": "androidx/transition/TranslationAnimationCreator",
-      "android/support/v7/app/MediaRouteChooserDialog": "androidx/app/MediaRouteChooserDialog",
-      "android/support/v17/leanback/widget/Parallax$FloatPropertyMarkerValue": "androidx/leanback/widget/Parallax$FloatPropertyMarkerValue",
-      "android/support/v4/widget/FocusStrategy$SequentialComparator": "androidx/widget/FocusStrategy$SequentialComparator",
-      "android/support/v4/media/MediaMetadataCompat$TextKey": "androidx/media/MediaMetadataCompat$TextKey",
-      "android/support/v17/leanback/app/BrowseSupportFragment": "androidx/leanback/app/BrowseSupportFragment",
-      "android/support/v7/widget/ListViewCompat$GateKeeperDrawable": "androidx/widget/internal/ListViewCompat$GateKeeperDrawable",
-      "android/support/v4/media/session/MediaControllerCompatApi23$TransportControls": "androidx/media/session/MediaControllerCompatApi23$TransportControls",
-      "android/support/v13/view/inputmethod/InputConnectionCompat$InputContentInfoCompatApi25Impl": "androidx/view/inputmethod/InputConnectionCompat$InputContentInfoCompatApi25Impl",
-      "android/support/v7/preference/PreferenceManager$OnDisplayPreferenceDialogListener": "androidx/preference/PreferenceManager$OnDisplayPreferenceDialogListener",
-      "android/support/v7/media/MediaRouterJellybeanMr1$IsConnectingWorkaround": "androidx/media/MediaRouterJellybeanMr1$IsConnectingWorkaround",
-      "android/support/v4/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListenerWrapper": "androidx/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListenerWrapper",
-      "android/support/v7/widget/RecyclerView$ItemDecoration": "androidx/widget/RecyclerView$ItemDecoration",
-      "android/support/v4/widget/Space": "androidx/widget/Space",
-      "android/support/v17/leanback/app/BrowseSupportFragment$ExpandPreLayout": "androidx/leanback/app/BrowseSupportFragment$ExpandPreLayout",
-      "android/support/media/tv/TvContractCompat$ProgramColumns": "androidx/media/tv/TvContractCompat$ProgramColumns",
-      "android/support/v7/widget/DecorToolbar": "androidx/widget/DecorToolbar",
-      "android/support/design/widget/CheckableImageButton": "androidx/design/widget/CheckableImageButton",
-      "android/support/v4/widget/ImageViewCompat": "androidx/widget/ImageViewCompat",
-      "android/support/v7/preference/UnPressableLinearLayout": "androidx/preference/UnPressableLinearLayout",
-      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnPreSwipeListener": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnPreSwipeListener",
-      "android/support/v4/widget/CircularProgressDrawable": "androidx/widget/CircularProgressDrawable",
-      "android/support/design/R$string": "androidx/design/R$string",
-      "android/support/design/R$color": "androidx/design/R$color",
-      "android/support/v7/widget/TintInfo": "androidx/widget/TintInfo",
-      "android/support/v17/leanback/widget/HeaderItem": "androidx/leanback/widget/HeaderItem",
-      "android/support/v7/media/MediaRouter$RouteInfo$ConnectionState": "androidx/media/MediaRouter$RouteInfo$ConnectionState",
-      "android/support/v7/widget/DialogTitle": "androidx/widget/DialogTitle",
-      "android/support/v17/leanback/media/PlaybackTransportControlGlue$UpdatePlaybackStateHandler": "androidx/leanback/media/PlaybackTransportControlGlue$UpdatePlaybackStateHandler",
-      "android/support/v7/widget/RecyclerView$LayoutParams": "androidx/widget/RecyclerView$LayoutParams",
-      "android/support/v4/media/session/PlaybackStateCompatApi21$CustomAction": "androidx/media/session/PlaybackStateCompatApi21$CustomAction",
-      "android/support/customtabs/CustomTabsService": "androidx/browser/customtabs/CustomTabsService",
-      "android/support/v17/leanback/widget/GuidanceStylist$Guidance": "androidx/leanback/widget/GuidanceStylist$Guidance",
-      "android/support/v4/view/ViewCompat$ViewCompatApi23Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi23Impl",
-      "android/support/wear/widget/WearableLinearLayoutManager": "androidx/wear/widget/WearableLinearLayoutManager",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$MultiAction": "androidx/leanback/widget/PlaybackControlsRow$MultiAction",
-      "android/support/v17/leanback/R$integer": "androidx/leanback/R$integer",
-      "android/support/v4/content/ModernAsyncTask$WorkerRunnable": "androidx/content/ModernAsyncTask$WorkerRunnable",
-      "android/support/v4/app/FragmentTabHost$DummyTabFactory": "androidx/app/FragmentTabHost$DummyTabFactory",
-      "android/support/v7/widget/AppCompatSpinner$DropDownAdapter": "androidx/widget/AppCompatSpinner$DropDownAdapter",
-      "android/support/v7/app/ToolbarActionBar$MenuBuilderCallback": "androidx/app/ToolbarActionBar$MenuBuilderCallback",
-      "android/support/v4/content/Loader": "androidx/content/Loader",
-      "android/support/v7/widget/MenuPopupWindow": "androidx/widget/MenuPopupWindow",
-      "android/support/v4/graphics/BitmapCompat$BitmapCompatApi19Impl": "androidx/graphics/BitmapCompat$BitmapCompatApi19Impl",
-      "android/support/v4/app/FrameMetricsAggregator$MetricType": "androidx/app/FrameMetricsAggregator$MetricType",
-      "android/support/v17/leanback/widget/picker/PickerUtility$TimeConstant": "androidx/leanback/widget/picker/PickerUtility$TimeConstant",
-      "android/support/v4/view/NestedScrollingParent2": "androidx/view/NestedScrollingParent2",
-      "android/support/design/widget/Snackbar$SnackbarLayout": "androidx/design/widget/Snackbar$SnackbarLayout",
-      "android/support/v4/app/LoaderManager": "androidx/app/LoaderManager",
-      "android/support/v17/leanback/app/BaseSupportFragment": "androidx/leanback/app/BaseSupportFragment",
-      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuItem",
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat",
-      "android/support/text/emoji/MetadataRepo": "androidx/text/emoji/MetadataRepo",
-      "android/support/v17/leanback/widget/ItemAlignment": "androidx/leanback/widget/ItemAlignment",
-      "android/support/design/widget/TextInputEditText": "androidx/design/widget/TextInputEditText",
-      "android/support/v4/app/FragmentTransitionImpl": "androidx/app/FragmentTransitionImpl",
-      "android/support/animation/SpringAnimation": "androidx/animation/SpringAnimation",
-      "android/support/annotation/CheckResult": "androidx/annotation/CheckResult",
-      "android/support/v7/widget/AppCompatSpinner$DropdownPopup": "androidx/widget/AppCompatSpinner$DropdownPopup",
-      "android/support/v7/widget/ActivityChooserModel$ActivitySorter": "androidx/widget/ActivityChooserModel$ActivitySorter",
-      "android/support/wear/widget/drawer/WearableDrawerLayout$ClosePeekRunnable": "androidx/wear/widget/drawer/WearableDrawerLayout$ClosePeekRunnable",
-      "android/support/design/widget/TextInputLayout$SavedState": "androidx/design/widget/TextInputLayout$SavedState",
-      "android/support/v17/leanback/widget/picker/PickerUtility$DateConstant": "androidx/leanback/widget/picker/PickerUtility$DateConstant",
-      "android/support/v13/app/FragmentTabHost": "androidx/app/legacy/FragmentTabHost",
-      "android/support/v7/widget/ScrollingTabContainerView$TabAdapter": "androidx/widget/ScrollingTabContainerView$TabAdapter",
-      "android/support/v7/widget/ActionBarContextView": "androidx/widget/ActionBarContextView",
-      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuHeaderItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuHeaderItem",
-      "android/support/v17/leanback/graphics/CompositeDrawable": "androidx/leanback/graphics/CompositeDrawable",
-      "android/support/v7/preference/Preference$OnPreferenceChangeListener": "androidx/preference/Preference$OnPreferenceChangeListener",
-      "android/support/v4/media/MediaBrowserServiceCompat$BrowserRoot": "androidx/media/MediaBrowserServiceCompat$BrowserRoot",
-      "android/support/text/emoji/MetadataListReader$OpenTypeReader": "androidx/text/emoji/MetadataListReader$OpenTypeReader",
-      "android/support/v7/media/MediaRouterJellybean$VolumeCallbackProxy": "androidx/media/MediaRouterJellybean$VolumeCallbackProxy",
-      "android/support/v4/app/OneShotPreDrawListener": "androidx/app/OneShotPreDrawListener",
-      "android/support/design/widget/BottomNavigationView$OnNavigationItemSelectedListener": "androidx/design/widget/BottomNavigationView$OnNavigationItemSelectedListener",
-      "android/support/v7/widget/ActionMenuView": "androidx/widget/ActionMenuView",
-      "android/support/v4/view/NestedScrollingChildHelper": "androidx/view/NestedScrollingChildHelper",
-      "android/support/percent/PercentFrameLayout": "androidx/PercentFrameLayout",
-      "android/support/annotation/AnyRes": "androidx/annotation/AnyRes",
-      "android/support/wear/widget/CircledImageView$OvalShadowPainter": "androidx/wear/widget/CircledImageView$OvalShadowPainter",
-      "android/support/media/tv/TvContractCompat$Channels$Logo": "androidx/media/tv/TvContractCompat$Channels$Logo",
-      "android/support/v4/view/animation/LookupTableInterpolator": "androidx/view/animation/LookupTableInterpolator",
-      "android/support/v7/app/MediaRouteControllerDialog$MediaControllerCallback": "androidx/app/MediaRouteControllerDialog$MediaControllerCallback",
-      "android/support/v7/widget/FitWindowsViewGroup": "androidx/widget/FitWindowsViewGroup",
-      "android/support/v7/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback": "androidx/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback",
-      "android/support/wear/ambient/AmbientMode": "androidx/wear/ambient/AmbientMode",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$SkipPreviousAction": "androidx/leanback/widget/PlaybackControlsRow$SkipPreviousAction",
-      "android/support/v4/app/NotificationCompat$Builder": "androidx/app/NotificationCompat$Builder",
-      "android/support/design/R$layout": "androidx/design/R$layout",
-      "android/support/transition/FragmentTransitionSupport": "androidx/transition/FragmentTransitionSupport",
-      "android/support/v4/app/Fragment$AnimationInfo": "androidx/app/Fragment$AnimationInfo",
-      "android/support/transition/ChangeTransform": "androidx/transition/ChangeTransform",
-      "android/support/v4/view/ViewCompat$FocusRelativeDirection": "androidx/view/legacy/ViewCompat$FocusRelativeDirection",
-      "android/support/customtabs/CustomTabsSessionToken$MockCallback": "androidx/browser/customtabs/CustomTabsSessionToken$MockCallback",
-      "android/support/v4/app/TaskStackBuilder$TaskStackBuilderBaseImpl": "androidx/app/TaskStackBuilder$TaskStackBuilderBaseImpl",
-      "android/support/v4/media/AudioAttributesCompat$Builder": "androidx/media/AudioAttributesCompat$Builder",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ThumbsAction": "androidx/leanback/widget/PlaybackControlsRow$ThumbsAction",
-      "android/support/v7/media/MediaItemStatus$Builder": "androidx/media/MediaItemStatus$Builder",
-      "android/support/v17/leanback/app/OnboardingSupportFragment": "androidx/leanback/app/OnboardingSupportFragment",
-      "android/support/v7/widget/LinearLayoutCompat$OrientationMode": "androidx/widget/LinearLayoutCompat$OrientationMode",
-      "android/support/v7/widget/AppCompatImageButton": "androidx/widget/AppCompatImageButton",
-      "android/support/v7/app/AppCompatViewInflater$DeclaredOnClickListener": "androidx/app/AppCompatViewInflater$DeclaredOnClickListener",
-      "android/support/v7/view/SupportMenuInflater$InflatedOnMenuItemClickListener": "androidx/view/SupportMenuInflater$InflatedOnMenuItemClickListener",
-      "android/support/v4/widget/ContentLoadingProgressBar": "androidx/widget/ContentLoadingProgressBar",
-      "android/support/v4/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi17Impl": "androidx/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi17Impl",
-      "android/support/v17/leanback/app/BrowseFragment$ListRowFragmentFactory": "androidx/leanback/app/BrowseFragment$ListRowFragmentFactory",
-      "android/support/v7/app/MediaRouteChooserDialog$RouteAdapter": "androidx/app/MediaRouteChooserDialog$RouteAdapter",
-      "android/support/v7/view/ContextThemeWrapper": "androidx/view/ContextThemeWrapper",
-      "android/support/design/widget/CoordinatorLayout$OnPreDrawListener": "androidx/design/widget/CoordinatorLayout$OnPreDrawListener",
-      "android/support/v4/util/ContainerHelpers": "androidx/util/ContainerHelpers",
-      "android/support/design/widget/SnackbarManager$Callback": "androidx/design/widget/SnackbarManager$Callback",
-      "android/support/design/internal/ForegroundLinearLayout": "androidx/design/internal/ForegroundLinearLayout",
-      "android/support/v4/app/NotificationCompatJellybean": "androidx/app/NotificationCompatJellybean",
-      "android/support/design/widget/CoordinatorLayout$Behavior": "androidx/design/widget/CoordinatorLayout$Behavior",
-      "android/support/compat/R$dimen": "androidx/compat/R$dimen",
-      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentAdapterProvider": "androidx/leanback/app/BrowseSupportFragment$MainFragmentAdapterProvider",
-      "android/support/wear/widget/SwipeDismissLayout$OnDismissedListener": "androidx/wear/widget/SwipeDismissLayout$OnDismissedListener",
-      "android/support/v7/recyclerview/R": "androidx/recyclerview/R",
-      "android/support/v4/widget/SlidingPaneLayout$LayoutParams": "androidx/widget/SlidingPaneLayout$LayoutParams",
-      "android/support/v7/app/ToolbarActionBar$ActionMenuPresenterCallback": "androidx/app/ToolbarActionBar$ActionMenuPresenterCallback",
-      "android/support/v4/widget/DrawerLayout$DrawerListener": "androidx/widget/DrawerLayout$DrawerListener",
-      "android/support/v4/net/ConnectivityManagerCompat$RestrictBackgroundStatus": "androidx/net/ConnectivityManagerCompat$RestrictBackgroundStatus",
-      "android/support/v4/media/MediaMetadataCompat$RatingKey": "androidx/media/MediaMetadataCompat$RatingKey",
-      "android/support/v4/view/ActionProvider": "androidx/view/ActionProvider",
-      "android/support/v7/app/MediaRouteControllerDialogFragment": "androidx/app/MediaRouteControllerDialogFragment",
-      "android/support/v7/widget/TooltipCompatHandler": "androidx/widget/TooltipCompatHandler",
-      "android/support/design/widget/TabLayout$TabLayoutOnPageChangeListener": "androidx/design/widget/TabLayout$TabLayoutOnPageChangeListener",
-      "android/support/v7/widget/RecyclerView$ItemAnimatorRestoreListener": "androidx/widget/RecyclerView$ItemAnimatorRestoreListener",
-      "android/support/app/recommendation/ContentRecommendation$ContentType": "androidx/app/recommendation/ContentRecommendation$ContentType",
-      "android/support/v7/app/AlertController$AlertParams": "androidx/app/AlertController$AlertParams",
-      "android/support/v4/widget/DrawerLayout$SimpleDrawerListener": "androidx/widget/DrawerLayout$SimpleDrawerListener",
-      "android/support/v17/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight": "androidx/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight",
-      "android/support/v7/app/MediaRouteChooserDialog$MediaRouterCallback": "androidx/app/MediaRouteChooserDialog$MediaRouterCallback",
-      "android/support/v4/view/ViewCompat$ImportantForAccessibility": "androidx/view/legacy/ViewCompat$ImportantForAccessibility",
-      "android/support/v7/media/MediaRouterJellybean$RouteInfo": "androidx/media/MediaRouterJellybean$RouteInfo",
-      "android/support/v17/leanback/widget/SpeechRecognitionCallback": "androidx/leanback/widget/SpeechRecognitionCallback",
-      "android/support/v4/media/MediaBrowserCompatApi26$SubscriptionCallback": "androidx/media/MediaBrowserCompatApi26$SubscriptionCallback",
-      "android/support/media/tv/Program": "androidx/media/tv/Program",
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat",
-      "android/support/v4/app/FragmentTransitionCompat21": "androidx/app/FragmentTransitionCompat21",
-      "android/support/v7/media/MediaRouteSelector$Builder": "androidx/media/MediaRouteSelector$Builder",
-      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat": "androidx/hardware/fingerprint/FingerprintManagerCompat",
-      "android/support/v17/leanback/app/HeadersFragment": "androidx/leanback/app/HeadersFragment",
-      "android/support/v17/leanback/R$dimen": "androidx/leanback/R$dimen",
-      "android/support/v4/content/res/ResourcesCompat": "androidx/content/res/ResourcesCompat",
-      "android/support/v4/view/ViewPager$SavedState": "androidx/view/ViewPager$SavedState",
-      "android/support/v17/leanback/widget/StaticShadowHelper$ShadowHelperJbmr2Impl": "androidx/leanback/widget/StaticShadowHelper$ShadowHelperJbmr2Impl",
-      "android/support/v4/widget/SwipeRefreshLayout": "androidx/widget/SwipeRefreshLayout",
-      "android/support/v17/leanback/widget/StaticShadowHelper$ShadowHelperVersionImpl": "androidx/leanback/widget/StaticShadowHelper$ShadowHelperVersionImpl",
-      "android/support/v4/os/ResultReceiver": "androidx/os/ResultReceiver",
-      "android/support/v17/leanback/widget/BaseCardView$InfoOffsetAnimation": "androidx/leanback/widget/BaseCardView$InfoOffsetAnimation",
-      "android/support/design/widget/SwipeDismissBehavior$SettleRunnable": "androidx/design/widget/SwipeDismissBehavior$SettleRunnable",
-      "android/support/v13/view/inputmethod/InputConnectionCompat$InputContentInfoCompatBaseImpl": "androidx/view/inputmethod/InputConnectionCompat$InputContentInfoCompatBaseImpl",
-      "android/support/v17/leanback/widget/FacetProvider": "androidx/leanback/widget/FacetProvider",
-      "android/support/v7/widget/FitWindowsLinearLayout": "androidx/widget/FitWindowsLinearLayout",
-      "android/support/v4/widget/SwipeProgressBar": "androidx/widget/SwipeProgressBar",
-      "android/support/v7/widget/ActionMenuPresenter$OverflowPopup": "androidx/widget/ActionMenuPresenter$OverflowPopup",
-      "android/support/v7/widget/AppCompatImageHelper": "androidx/widget/AppCompatImageHelper",
-      "android/support/v4/text/TextDirectionHeuristicsCompat": "androidx/text/TextDirectionHeuristicsCompat",
-      "android/support/compat/R$color": "androidx/compat/R$color",
-      "android/support/transition/Transition$EpicenterCallback": "androidx/transition/Transition$EpicenterCallback",
-      "android/support/transition/PropertyValuesHolderUtilsApi14": "androidx/transition/PropertyValuesHolderUtilsApi14",
-      "android/support/v17/leanback/widget/ObjectAdapter$DataObservable": "androidx/leanback/widget/ObjectAdapter$DataObservable",
-      "android/support/multidex/ZipUtil": "androidx/multidex/ZipUtil",
-      "android/support/v7/view/menu/MenuDialogHelper": "androidx/view/menu/MenuDialogHelper",
-      "android/support/v17/preference/R$id": "androidx/leanback/preference/R$id",
-      "android/support/v4/app/BundleCompat": "androidx/app/BundleCompat",
-      "android/support/v4/media/session/IMediaSession$Stub$Proxy": "androidx/media/session/IMediaSession$Stub$Proxy",
-      "android/support/v7/widget/AppCompatTextHelper": "androidx/widget/AppCompatTextHelper",
-      "android/support/v7/view/ActionMode$Callback": "androidx/view/ActionMode$Callback",
-      "android/support/v17/leanback/app/RowsSupportFragment": "androidx/leanback/app/RowsSupportFragment",
-      "android/support/v17/leanback/app/GuidedStepFragment$DummyFragment": "androidx/leanback/app/GuidedStepFragment$DummyFragment",
-      "android/support/v7/widget/util/SortedListAdapterCallback": "androidx/widget/util/SortedListAdapterCallback",
-      "android/support/design/internal/BottomNavigationPresenter$SavedState": "androidx/design/internal/BottomNavigationPresenter$SavedState",
-      "android/support/v7/widget/LinearSmoothScroller": "androidx/widget/LinearSmoothScroller",
-      "android/support/v17/leanback/media/MediaPlayerGlue$VideoPlayerSurfaceHolderCallback": "androidx/leanback/media/MediaPlayerGlue$VideoPlayerSurfaceHolderCallback",
-      "android/support/v7/preference/Preference": "androidx/preference/Preference",
-      "android/support/v4/os/UserManagerCompat": "androidx/os/UserManagerCompat",
-      "android/support/v7/widget/GridLayoutManager$DefaultSpanSizeLookup": "androidx/widget/GridLayoutManager$DefaultSpanSizeLookup",
-      "android/support/v17/leanback/app/PlaybackFragment": "androidx/leanback/app/PlaybackFragment",
-      "android/support/transition/ViewOverlayImpl": "androidx/transition/ViewOverlayImpl",
-      "android/support/transition/ViewOverlayApi14$OverlayViewGroup$TouchInterceptor": "androidx/transition/ViewOverlayApi14$OverlayViewGroup$TouchInterceptor",
-      "android/support/v7/view/menu/MenuAdapter": "androidx/view/menu/MenuAdapter",
-      "android/support/v4/app/NotificationCompat$MessagingStyle$Message": "androidx/app/NotificationCompat$MessagingStyle$Message",
-      "android/support/v4/graphics/drawable/DrawableWrapperApi21$DrawableWrapperStateLollipop": "androidx/graphics/drawable/DrawableWrapperApi21$DrawableWrapperStateLollipop",
-      "android/support/v17/leanback/widget/ItemAlignmentFacet$ItemAlignmentDef": "androidx/leanback/widget/ItemAlignmentFacet$ItemAlignmentDef",
-      "android/support/v4/content/SharedPreferencesCompat": "androidx/content/SharedPreferencesCompat",
-      "android/support/v4/app/FragmentManager$BackStackEntry": "androidx/app/FragmentManager$BackStackEntry",
-      "android/support/transition/PropertyValuesHolderUtilsApi21": "androidx/transition/PropertyValuesHolderUtilsApi21",
-      "android/support/v17/leanback/R$color": "androidx/leanback/R$color",
-      "android/support/v7/view/menu/MenuView": "androidx/view/menu/MenuView",
-      "android/support/transition/Transition": "androidx/transition/Transition",
-      "android/support/v17/leanback/app/PlaybackFragmentGlueHost": "androidx/leanback/app/PlaybackFragmentGlueHost",
-      "android/support/v7/graphics/Target": "androidx/graphics/palette/Target",
-      "android/support/v7/view/StandaloneActionMode": "androidx/view/StandaloneActionMode",
-      "android/support/v13/view/DragAndDropPermissionsCompat$Api24DragAndDropPermissionsCompatImpl": "androidx/view/DragAndDropPermissionsCompat$Api24DragAndDropPermissionsCompatImpl",
-      "android/support/v7/widget/ViewInfoStore$ProcessCallback": "androidx/widget/ViewInfoStore$ProcessCallback",
-      "android/support/v4/media/session/MediaSessionCompatApi24": "androidx/media/session/MediaSessionCompatApi24",
-      "android/support/v4/widget/CursorFilter": "androidx/widget/CursorFilter",
-      "android/support/v4/media/session/MediaSessionCompatApi23": "androidx/media/session/MediaSessionCompatApi23",
-      "android/support/v4/media/session/MediaSessionCompatApi22": "androidx/media/session/MediaSessionCompatApi22",
-      "android/support/v7/app/ActionBarDrawerToggle$DelegateProvider": "androidx/app/ActionBarDrawerToggle$DelegateProvider",
-      "android/support/v4/media/session/MediaSessionCompatApi21": "androidx/media/session/MediaSessionCompatApi21",
-      "android/support/v7/widget/RecyclerView$OnItemTouchListener": "androidx/widget/RecyclerView$OnItemTouchListener",
-      "android/support/v4/media/MediaBrowserServiceCompat$ServiceHandler": "androidx/media/MediaBrowserServiceCompat$ServiceHandler",
-      "android/support/v4/view/PagerTitleStrip": "androidx/widget/PagerTitleStrip",
-      "android/support/v17/leanback/media/MediaPlayerAdapter$VideoPlayerSurfaceHolderCallback": "androidx/leanback/media/MediaPlayerAdapter$VideoPlayerSurfaceHolderCallback",
-      "android/support/v7/widget/ButtonBarLayout": "androidx/widget/ButtonBarLayout",
-      "android/support/annotation/PluralsRes": "androidx/annotation/PluralsRes",
-      "android/support/v7/appcompat/R$styleable": "androidx/appcompat/R$styleable",
-      "android/support/v7/widget/Toolbar": "androidx/widget/Toolbar",
-      "android/support/v17/leanback/app/DetailsFragmentBackgroundController": "androidx/leanback/app/DetailsFragmentBackgroundController",
-      "android/support/v7/view/menu/CascadingMenuPopup$CascadingMenuInfo": "androidx/view/menu/CascadingMenuPopup$CascadingMenuInfo",
-      "android/support/wear/widget/RoundedDrawable": "androidx/wear/widget/RoundedDrawable",
-      "android/support/v4/math/MathUtils": "androidx/math/MathUtils",
-      "android/support/design/widget/FloatingActionButton": "androidx/design/widget/FloatingActionButton",
-      "android/support/v7/mediarouter/R$drawable": "androidx/mediarouter/R$drawable",
-      "android/support/v4/view/MenuCompat": "androidx/view/MenuCompat",
-      "android/support/v17/leanback/widget/ListRowPresenter$SelectItemViewHolderTask": "androidx/leanback/widget/ListRowPresenter$SelectItemViewHolderTask",
-      "android/support/v7/appcompat/R$color": "androidx/appcompat/R$color",
-      "android/support/media/tv/BaseProgram$Builder": "androidx/media/tv/BaseProgram$Builder",
-      "android/support/v17/leanback/widget/ControlButtonPresenterSelector": "androidx/leanback/widget/ControlButtonPresenterSelector",
-      "android/support/v4/util/MapCollections$KeySet": "androidx/util/MapCollections$KeySet",
-      "android/support/annotation/XmlRes": "androidx/annotation/XmlRes",
-      "android/support/v7/widget/RecyclerView$LayoutManager$Properties": "androidx/widget/RecyclerView$LayoutManager$Properties",
-      "android/support/v4/media/MediaBrowserCompat$ConnectionCallback$ConnectionCallbackInternal": "androidx/media/MediaBrowserCompat$ConnectionCallback$ConnectionCallbackInternal",
-      "android/support/v4/app/RemoteInput$Builder": "androidx/app/RemoteInput$Builder",
-      "android/support/wear/widget/WearableRecyclerView": "androidx/wear/widget/WearableRecyclerView",
-      "android/support/v7/app/AppCompatDialog": "androidx/app/AppCompatDialog",
-      "android/support/v4/app/NotificationManagerCompat$SideChannelManager$ListenerRecord": "androidx/app/NotificationManagerCompat$SideChannelManager$ListenerRecord",
-      "android/support/v4/print/PrintHelper$OnPrintFinishCallback": "androidx/print/PrintHelper$OnPrintFinishCallback",
-      "android/support/v17/leanback/app/FragmentUtil": "androidx/leanback/app/FragmentUtil",
-      "android/support/v17/leanback/widget/RowPresenter$ContainerViewHolder": "androidx/leanback/widget/RowPresenter$ContainerViewHolder",
-      "android/support/v4/media/session/MediaControllerCompat$TransportControlsApi24": "androidx/media/session/MediaControllerCompat$TransportControlsApi24",
-      "android/support/v13/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatImpl": "androidx/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatImpl",
-      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$ViewHolder$OnItemClickListener": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$ViewHolder$OnItemClickListener",
+      "android/support/v17/leanback/app/BackgroundFragment": "androidx/leanback/app/BackgroundFragment",
+      "android/support/v17/leanback/app/BackgroundManager": "androidx/leanback/app/BackgroundManager",
+      "android/support/v17/leanback/app/BackgroundManager$1$1": "androidx/leanback/app/BackgroundManager$1$1",
+      "android/support/v17/leanback/app/BackgroundManager$1": "androidx/leanback/app/BackgroundManager$1",
       "android/support/v17/leanback/app/BackgroundManager$TranslucentLayerDrawable": "androidx/leanback/app/BackgroundManager$TranslucentLayerDrawable",
-      "android/support/v4/app/FragmentManagerState": "androidx/app/FragmentManagerState",
-      "android/support/v4/media/session/MediaControllerCompat$TransportControlsApi23": "androidx/media/session/MediaControllerCompat$TransportControlsApi23",
-      "android/support/v4/view/AsyncLayoutInflater$BasicInflater": "androidx/view/AsyncLayoutInflater$BasicInflater",
-      "android/support/v7/appcompat/R$dimen": "androidx/appcompat/R$dimen",
-      "android/support/v4/media/session/MediaControllerCompat$TransportControlsApi21": "androidx/media/session/MediaControllerCompat$TransportControlsApi21",
-      "android/support/wear/widget/CircularProgressLayout": "androidx/wear/widget/CircularProgressLayout",
-      "android/support/v7/media/SystemMediaRouteProvider$JellybeanMr1Impl": "androidx/media/SystemMediaRouteProvider$JellybeanMr1Impl",
-      "android/support/customtabs/ICustomTabsCallback$Stub": "androidx/browser/customtabs/ICustomTabsCallback$Stub",
-      "android/support/v17/leanback/widget/RowPresenter$ViewHolder": "androidx/leanback/widget/RowPresenter$ViewHolder",
-      "android/support/v7/widget/RecyclerView$LayoutManager$LayoutPrefetchRegistry": "androidx/widget/RecyclerView$LayoutManager$LayoutPrefetchRegistry",
-      "android/support/v4/media/MediaBrowserServiceCompatApi23$MediaBrowserServiceAdaptor": "androidx/media/MediaBrowserServiceCompatApi23$MediaBrowserServiceAdaptor",
-      "android/support/v17/leanback/app/ListRowDataAdapter": "androidx/leanback/app/ListRowDataAdapter",
-      "android/support/v4/graphics/drawable/DrawableWrapper": "androidx/graphics/drawable/internal/DrawableWrapper",
-      "android/support/v7/widget/SuggestionsAdapter": "androidx/widget/SuggestionsAdapter",
-      "android/support/v4/widget/TextViewCompat": "androidx/widget/TextViewCompat",
-      "android/support/animation/FlingAnimation": "androidx/animation/FlingAnimation",
-      "android/support/media/tv/PreviewProgram$Builder": "androidx/media/tv/PreviewProgram$Builder",
-      "android/support/v7/widget/RecyclerView$AdapterDataObservable": "androidx/widget/RecyclerView$AdapterDataObservable",
-      "android/support/v17/leanback/app/BaseRowSupportFragment$LateSelectionObserver": "androidx/leanback/app/BaseRowSupportFragment$LateSelectionObserver",
-      "android/support/design/internal/SnackbarContentLayout": "androidx/design/internal/SnackbarContentLayout",
-      "android/support/v17/leanback/widget/BaseGridView$OnMotionInterceptListener": "androidx/leanback/widget/BaseGridView$OnMotionInterceptListener",
-      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder": "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder",
-      "android/support/v7/widget/CardViewBaseImpl": "androidx/widget/CardViewBaseImpl",
-      "android/support/v4/provider/FontsContractCompat$FontFamilyResult": "androidx/provider/FontsContractCompat$FontFamilyResult",
-      "android/support/v4/os/ResultReceiver$MyRunnable": "androidx/os/ResultReceiver$MyRunnable",
-      "android/support/v7/media/MediaRouteProvider$RouteController": "androidx/media/MediaRouteProvider$RouteController",
-      "android/support/v14/preference/PreferenceFragment$DividerDecoration": "androidx/preference/PreferenceFragment$DividerDecoration",
-      "android/support/text/emoji/flatbuffer/MetadataItem": "androidx/text/emoji/flatbuffer/MetadataItem",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi18": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi18",
-      "android/support/v7/widget/ToolbarWidgetWrapper": "androidx/widget/ToolbarWidgetWrapper",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi19": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi19",
-      "android/support/v7/widget/helper/ItemTouchHelper$ItemTouchHelperGestureListener": "androidx/widget/helper/ItemTouchHelper$ItemTouchHelperGestureListener",
-      "android/support/v7/appcompat/R$layout": "androidx/appcompat/R$layout",
-      "android/support/text/emoji/widget/EmojiEditTextHelper$HelperInternal19": "androidx/text/emoji/widget/EmojiEditTextHelper$HelperInternal19",
+      "android/support/v17/leanback/R$id": "androidx/leanback/R$id",
+      "android/support/v17/leanback/R": "androidx/leanback/R",
+      "android/support/v17/leanback/app/BackgroundManager$2": "androidx/leanback/app/BackgroundManager$2",
+      "android/support/v17/leanback/app/BackgroundManager$BackgroundContinuityService": "androidx/leanback/app/BackgroundManager$BackgroundContinuityService",
+      "android/support/v4/content/ContextCompat": "androidx/content/ContextCompat",
       "android/support/v17/leanback/app/BackgroundManager$BitmapDrawable$ConstantState": "androidx/leanback/app/BackgroundManager$BitmapDrawable$ConstantState",
-      "android/support/design/widget/FloatingActionButtonImpl$ShadowAnimatorImpl": "androidx/design/widget/FloatingActionButtonImpl$ShadowAnimatorImpl",
-      "android/support/v7/widget/FastScroller$AnimatorListener": "androidx/widget/FastScroller$AnimatorListener",
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter",
-      "android/support/v4/app/NotificationCompat$WearableExtender": "androidx/app/NotificationCompat$WearableExtender",
-      "android/support/v17/leanback/widget/FocusHighlightHandler": "androidx/leanback/widget/FocusHighlightHandler",
-      "android/support/transition/Slide$GravityFlag": "androidx/transition/Slide$GravityFlag",
-      "android/support/v4/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener": "androidx/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener",
-      "android/support/v4/widget/ListViewCompat": "androidx/widget/ListViewCompat",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi21",
-      "android/support/graphics/drawable/Animatable2Compat$AnimationCallback": "androidx/graphics/drawable/Animatable2Compat$AnimationCallback",
-      "android/support/v17/leanback/widget/ControlButtonPresenterSelector$ActionViewHolder": "androidx/leanback/widget/ControlButtonPresenterSelector$ActionViewHolder",
-      "android/support/transition/GhostViewApi14$Creator": "androidx/transition/GhostViewApi14$Creator",
-      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatApi19Impl": "androidx/widget/PopupWindowCompat$PopupWindowCompatApi19Impl",
-      "android/support/v17/leanback/widget/GuidedActionsStylist": "androidx/leanback/widget/GuidedActionsStylist",
-      "android/support/v4/app/ActivityCompat$SharedElementCallback21Impl": "androidx/app/legacy/ActivityCompat$SharedElementCallback21Impl",
-      "android/support/v17/leanback/app/BrowseFragment$FragmentFactory": "androidx/leanback/app/BrowseFragment$FragmentFactory",
-      "android/support/v7/widget/DefaultItemAnimator$MoveInfo": "androidx/widget/DefaultItemAnimator$MoveInfo",
-      "android/support/media/instantvideo/preload/InstantVideoPreloadManager$VideoPreloader": "androidx/media/instantvideo/preload/InstantVideoPreloadManager$VideoPreloader",
-      "android/support/v4/media/MediaBrowserCompat": "androidx/media/MediaBrowserCompat",
-      "android/support/v7/media/MediaRouter$RouteGroup": "androidx/media/MediaRouter$RouteGroup",
-      "android/support/v4/view/ViewCompat$OverScroll": "androidx/view/legacy/ViewCompat$OverScroll",
-      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl$VolumeChangeReceiver": "androidx/media/SystemMediaRouteProvider$LegacyImpl$VolumeChangeReceiver",
-      "android/support/v17/preference/LeanbackPreferenceFragmentTransitionHelperApi21": "androidx/leanback/preference/LeanbackPreferenceFragmentTransitionHelperApi21",
-      "android/support/v17/leanback/widget/BaseGridView$OnUnhandledKeyListener": "androidx/leanback/widget/BaseGridView$OnUnhandledKeyListener",
-      "android/support/v7/view/menu/ActionMenuItemView$ActionMenuItemForwardingListener": "androidx/view/menu/ActionMenuItemView$ActionMenuItemForwardingListener",
-      "android/support/v17/leanback/transition/FadeAndShortSlide": "androidx/leanback/transition/FadeAndShortSlide",
-      "android/support/v7/app/NavItemSelectedListener": "androidx/app/NavItemSelectedListener",
-      "android/support/v4/content/pm/ShortcutManagerCompat": "androidx/content/pm/ShortcutManagerCompat",
-      "android/support/v4/app/FragmentActivity$HostCallbacks": "androidx/app/FragmentActivity$HostCallbacks",
-      "android/support/design/widget/CoordinatorLayout$LayoutParams": "androidx/design/widget/CoordinatorLayout$LayoutParams",
-      "android/support/v4/view/MenuItemCompat$MenuItemCompatApi26Impl": "androidx/view/MenuItemCompat$MenuItemCompatApi26Impl",
-      "android/support/transition/ViewGroupOverlayApi18": "androidx/transition/ViewGroupOverlayApi18",
-      "android/support/v17/preference/LeanbackSettingsFragment": "androidx/leanback/preference/LeanbackSettingsFragment",
-      "android/support/v17/leanback/widget/RowHeaderPresenter$ViewHolder": "androidx/leanback/widget/RowHeaderPresenter$ViewHolder",
-      "android/support/wear/ambient/AmbientMode$AmbientController": "androidx/wear/ambient/AmbientMode$AmbientController",
-      "android/support/v7/cardview/R$color": "androidx/cardview/R$color",
-      "android/support/annotation/MenuRes": "androidx/annotation/MenuRes",
-      "android/support/v7/media/MediaRouterJellybeanMr2": "androidx/media/MediaRouterJellybeanMr2",
-      "android/support/v7/widget/GridLayout$PackedMap": "androidx/widget/GridLayout$PackedMap",
-      "android/support/v7/media/MediaRouterJellybeanMr1": "androidx/media/MediaRouterJellybeanMr1",
-      "android/support/transition/ViewGroupOverlayApi14": "androidx/transition/ViewGroupOverlayApi14",
-      "android/support/v7/app/ActionBarDrawerToggleHoneycomb$SetIndicatorInfo": "androidx/app/ActionBarDrawerToggleHoneycomb$SetIndicatorInfo",
-      "android/support/wear/widget/drawer/FlingWatcherFactory$FlingWatcher": "androidx/wear/widget/drawer/FlingWatcherFactory$FlingWatcher",
-      "android/support/v17/leanback/widget/SparseArrayObjectAdapter": "androidx/leanback/widget/SparseArrayObjectAdapter",
-      "android/support/v4/media/session/MediaSessionCompatApi21$CallbackProxy": "androidx/media/session/MediaSessionCompatApi21$CallbackProxy",
-      "android/support/v4/app/NotificationCompat$CarExtender": "androidx/app/NotificationCompat$CarExtender",
-      "android/support/v17/leanback/widget/PlaybackControlsRowView$OnUnhandledKeyListener": "androidx/leanback/widget/PlaybackControlsRowView$OnUnhandledKeyListener",
-      "android/support/v7/view/menu/MenuPopupHelper": "androidx/view/menu/MenuPopupHelper",
-      "android/support/v17/leanback/app/VideoSupportFragment": "androidx/leanback/app/VideoSupportFragment",
-      "android/support/media/tv/Channel": "androidx/media/tv/Channel",
-      "android/support/v4/media/AudioAttributesCompat$AttributeContentType": "androidx/media/AudioAttributesCompat$AttributeContentType",
-      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper$TransitionTimeOutRunnable": "androidx/leanback/widget/DetailsOverviewSharedElementHelper$TransitionTimeOutRunnable",
-      "android/support/v17/leanback/app/BrowseSupportFragment$BrowseTransitionListener": "androidx/leanback/app/BrowseSupportFragment$BrowseTransitionListener",
-      "android/support/v4/view/ViewPager$ViewPositionComparator": "androidx/view/ViewPager$ViewPositionComparator",
-      "android/support/v4/app/NotificationCompat$Action": "androidx/app/NotificationCompat$Action",
-      "android/support/v7/preference/PreferenceManager$SimplePreferenceComparisonCallback": "androidx/preference/PreferenceManager$SimplePreferenceComparisonCallback",
-      "android/support/media/tv/TvContractCompat$BaseTvColumns": "androidx/media/tv/TvContractCompat$BaseTvColumns",
-      "android/support/v4/media/session/PlaybackStateCompat$ShuffleMode": "androidx/media/session/PlaybackStateCompat$ShuffleMode",
-      "android/support/v7/app/WindowDecorActionBar$TabImpl": "androidx/app/WindowDecorActionBar$TabImpl",
-      "android/support/graphics/drawable/VectorDrawableCompat$VectorDrawableDelegateState": "androidx/graphics/drawable/VectorDrawableCompat$VectorDrawableDelegateState",
-      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl": "androidx/media/SystemMediaRouteProvider$JellybeanImpl",
-      "android/support/v7/widget/VectorEnabledTintResources": "androidx/widget/VectorEnabledTintResources",
-      "android/support/v7/preference/EditTextPreferenceDialogFragmentCompat": "androidx/preference/EditTextPreferenceDialogFragmentCompat",
-      "android/support/v4/graphics/drawable/DrawableWrapperApi19$DrawableWrapperStateKitKat": "androidx/graphics/drawable/DrawableWrapperApi19$DrawableWrapperStateKitKat",
-      "android/support/v17/leanback/transition/TransitionHelperKitkat$CustomChangeBounds": "androidx/leanback/transition/TransitionHelperKitkat$CustomChangeBounds",
-      "android/support/v4/app/FragmentManagerImpl$StartEnterTransitionListener": "androidx/app/FragmentManagerImpl$StartEnterTransitionListener",
-      "android/support/v4/view/LayoutInflaterCompat$LayoutInflaterCompatBaseImpl": "androidx/view/LayoutInflaterCompat$LayoutInflaterCompatBaseImpl",
-      "android/support/v7/view/SupportMenuInflater$MenuState": "androidx/view/SupportMenuInflater$MenuState",
-      "android/support/v17/leanback/app/GuidedStepFragment": "androidx/leanback/app/GuidedStepFragment",
-      "android/support/v17/leanback/widget/PagingIndicator": "androidx/leanback/widget/PagingIndicator",
-      "android/support/v7/app/MediaRouteControllerDialog$MediaRouterCallback": "androidx/app/MediaRouteControllerDialog$MediaRouterCallback",
-      "android/support/design/widget/CoordinatorLayout$DefaultBehavior": "androidx/design/widget/CoordinatorLayout$DefaultBehavior",
-      "android/support/v4/os/LocaleListInterface": "androidx/os/LocaleListInterface",
-      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat$AuthenticationCallback": "androidx/hardware/fingerprint/FingerprintManagerCompat$AuthenticationCallback",
-      "android/support/v17/leanback/widget/Parallax$FloatProperty": "androidx/leanback/widget/Parallax$FloatProperty",
-      "android/support/v4/app/NotificationCompat$Style": "androidx/app/NotificationCompat$Style",
-      "android/support/v4/app/FrameMetricsAggregator$FrameMetricsApi24Impl": "androidx/app/FrameMetricsAggregator$FrameMetricsApi24Impl",
-      "android/support/v17/leanback/app/HeadersSupportFragment$OnHeaderClickedListener": "androidx/leanback/app/HeadersSupportFragment$OnHeaderClickedListener",
-      "android/support/v7/preference/PreferenceManager$OnNavigateToScreenListener": "androidx/preference/PreferenceManager$OnNavigateToScreenListener",
-      "android/support/v7/widget/AdapterHelper": "androidx/widget/AdapterHelper",
-      "android/support/v17/leanback/transition/SlideKitkat$CalculateSlideHorizontal": "androidx/leanback/transition/SlideKitkat$CalculateSlideHorizontal",
-      "android/support/v4/graphics/ColorUtils": "androidx/graphics/ColorUtils",
-      "android/support/v7/widget/ActionMenuPresenter$OverflowMenuButton": "androidx/widget/ActionMenuPresenter$OverflowMenuButton",
-      "android/support/v7/widget/ListPopupWindow": "androidx/widget/ListPopupWindow",
-      "android/support/v4/media/MediaBrowserServiceCompatApi21$MediaBrowserServiceAdaptor": "androidx/media/MediaBrowserServiceCompatApi21$MediaBrowserServiceAdaptor",
-      "android/support/v17/leanback/widget/Row": "androidx/leanback/widget/Row",
-      "android/support/v17/leanback/widget/ShadowOverlayHelper": "androidx/leanback/widget/ShadowOverlayHelper",
-      "android/support/wear/internal/widget/drawer/MultiPagePresenter": "androidx/wear/internal/widget/drawer/MultiPagePresenter",
-      "android/support/animation/SpringForce": "androidx/animation/SpringForce",
-      "android/support/customtabs/ICustomTabsService$Stub$Proxy": "androidx/browser/customtabs/ICustomTabsService$Stub$Proxy",
-      "android/support/annotation/StringDef": "androidx/annotation/StringDef",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImpl": "androidx/media/session/MediaControllerCompat$MediaControllerImpl",
-      "android/support/design/widget/CircularBorderDrawableLollipop": "androidx/design/widget/CircularBorderDrawableLollipop",
-      "android/support/v17/leanback/widget/ControlBarPresenter$BoundData": "androidx/leanback/widget/ControlBarPresenter$BoundData",
-      "android/support/v7/widget/RecyclerView$Orientation": "androidx/widget/RecyclerView$Orientation",
-      "android/support/v7/media/MediaRouteProviderService$ReceiveHandler": "androidx/media/MediaRouteProviderService$ReceiveHandler",
-      "android/support/v4/view/ViewPropertyAnimatorListenerAdapter": "androidx/view/ViewPropertyAnimatorListenerAdapter",
-      "android/support/v7/graphics/Palette$Swatch": "androidx/graphics/Palette$Swatch",
-      "android/support/v17/leanback/widget/GridLayoutManager": "androidx/leanback/widget/GridLayoutManager",
-      "android/support/v17/leanback/media/PlaybackGlue": "androidx/leanback/media/PlaybackGlue",
-      "android/support/v17/leanback/widget/ShadowHelper$ShadowHelperApi21Impl": "androidx/leanback/widget/ShadowHelper$ShadowHelperApi21Impl",
-      "android/support/v4/view/ViewCompat": "androidx/view/legacy/ViewCompat",
-      "android/support/v17/leanback/widget/BackgroundHelper": "androidx/leanback/widget/BackgroundHelper",
-      "android/support/design/widget/AppBarLayout$OnOffsetChangedListener": "androidx/design/widget/AppBarLayout$OnOffsetChangedListener",
-      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2",
-      "android/support/v7/appcompat/R$attr": "androidx/appcompat/R$attr",
-      "android/support/transition/TransitionValuesMaps": "androidx/transition/TransitionValuesMaps",
-      "android/support/v4/view/ViewConfigurationCompat": "androidx/view/ViewConfigurationCompat",
-      "android/support/v4/media/MediaBrowserServiceCompat$ServiceCallbacks": "androidx/media/MediaBrowserServiceCompat$ServiceCallbacks",
-      "android/support/v4/widget/AutoSizeableTextView": "androidx/widget/AutoSizeableTextView",
-      "android/support/v4/view/ViewCompat$LayerType": "androidx/view/legacy/ViewCompat$LayerType",
-      "android/support/v17/leanback/widget/DividerRow": "androidx/leanback/widget/DividerRow",
-      "android/support/v7/widget/ActionMenuPresenter$SavedState": "androidx/widget/ActionMenuPresenter$SavedState",
-      "android/support/design/internal/NavigationMenu": "androidx/design/internal/NavigationMenu",
-      "android/support/v7/preference/Preference$OnPreferenceChangeInternalListener": "androidx/preference/Preference$OnPreferenceChangeInternalListener",
-      "android/support/v4/app/JobIntentService": "androidx/app/JobIntentService",
-      "android/support/v4/app/Fragment": "androidx/app/Fragment",
-      "android/support/v17/leanback/app/BrowseSupportFragment$BackStackListener": "androidx/leanback/app/BrowseSupportFragment$BackStackListener",
-      "android/support/v7/widget/RecyclerView$OnChildAttachStateChangeListener": "androidx/widget/RecyclerView$OnChildAttachStateChangeListener",
-      "android/support/v17/leanback/widget/PlaybackSeekDataProvider": "androidx/leanback/widget/PlaybackSeekDataProvider",
-      "android/support/content/ContentPager": "androidx/content/ContentPager",
-      "android/support/v4/util/MapCollections$MapIterator": "androidx/util/MapCollections$MapIterator",
-      "android/support/app/recommendation/ContentRecommendation": "androidx/app/recommendation/ContentRecommendation",
-      "android/support/v7/app/ActionBar$OnNavigationListener": "androidx/app/ActionBar$OnNavigationListener",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase",
-      "android/support/transition/Styleable$ChangeTransform": "androidx/transition/Styleable$ChangeTransform",
-      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl$DefaultRouteController": "androidx/media/SystemMediaRouteProvider$LegacyImpl$DefaultRouteController",
-      "android/support/v4/net/DatagramSocketWrapper$DatagramSocketImplWrapper": "androidx/net/DatagramSocketWrapper$DatagramSocketImplWrapper",
-      "android/support/v17/leanback/R$layout": "androidx/leanback/R$layout",
-      "android/support/v4/app/FragmentHostCallback": "androidx/app/FragmentHostCallback",
-      "android/support/v7/widget/StaggeredGridLayoutManager$AnchorInfo": "androidx/widget/StaggeredGridLayoutManager$AnchorInfo",
-      "android/support/v7/widget/RecyclerView$State": "androidx/widget/RecyclerView$State",
-      "android/support/v7/media/MediaRouterJellybean$Callback": "androidx/media/MediaRouterJellybean$Callback",
-      "android/support/v14/preference/MultiSelectListPreferenceDialogFragment": "androidx/preference/MultiSelectListPreferenceDialogFragment",
-      "android/support/v4/media/MediaBrowserServiceCompatApi21$ServiceCompatProxy": "androidx/media/MediaBrowserServiceCompatApi21$ServiceCompatProxy",
-      "android/support/v4/text/util/LinkifyCompat$LinkSpec": "androidx/text/util/LinkifyCompat$LinkSpec",
-      "android/support/v4/app/NotificationManagerCompat$ServiceConnectedEvent": "androidx/app/NotificationManagerCompat$ServiceConnectedEvent",
-      "android/support/v4/graphics/drawable/IconCompat": "androidx/graphics/drawable/IconCompat",
-      "android/support/v17/leanback/graphics/ColorOverlayDimmer": "androidx/leanback/graphics/ColorOverlayDimmer",
-      "android/support/v17/leanback/R$styleable": "androidx/leanback/R$styleable",
-      "android/support/v4/view/AccessibilityDelegateCompat": "androidx/view/AccessibilityDelegateCompat",
-      "android/support/v7/cardview/R$dimen": "androidx/cardview/R$dimen",
-      "android/support/wear/widget/SwipeDismissFrameLayout$Callback": "androidx/wear/widget/SwipeDismissFrameLayout$Callback",
-      "android/support/transition/ArcMotion": "androidx/transition/ArcMotion",
-      "android/support/mediacompat/R$layout": "androidx/mediacompat/R$layout",
-      "android/support/v4/view/ViewPager$ItemInfo": "androidx/view/ViewPager$ItemInfo",
-      "android/support/v4/app/FragmentActivity": "androidx/app/FragmentActivity",
-      "android/support/animation/FloatPropertyCompat": "androidx/animation/FloatPropertyCompat",
-      "android/support/v17/leanback/widget/ObjectAdapter$DataObserver": "androidx/leanback/widget/ObjectAdapter$DataObserver",
-      "android/support/design/widget/AppBarLayout$LayoutParams$ScrollFlags": "androidx/design/widget/AppBarLayout$LayoutParams$ScrollFlags",
-      "android/support/v7/widget/AbsActionBarView": "androidx/widget/AbsActionBarView",
-      "android/support/v4/media/app/NotificationCompat": "androidx/media/app/NotificationCompat",
-      "android/support/v17/leanback/media/PlayerAdapter": "androidx/leanback/media/PlayerAdapter",
-      "android/support/v17/leanback/widget/GridLayoutManager$SavedState": "androidx/leanback/widget/GridLayoutManager$SavedState",
-      "android/support/transition/Fade": "androidx/transition/Fade",
-      "android/support/v17/leanback/R$animator": "androidx/leanback/R$animator",
-      "android/support/v4/view/ViewCompat$ScrollAxis": "androidx/view/legacy/ViewCompat$ScrollAxis",
-      "android/support/v17/leanback/widget/GuidedActionEditText$NoPaddingDrawable": "androidx/leanback/widget/GuidedActionEditText$NoPaddingDrawable",
-      "android/support/v7/widget/GridLayout$Axis": "androidx/widget/GridLayout$Axis",
-      "android/support/v4/app/FragmentManagerImpl$AnimationListenerWrapper": "androidx/app/FragmentManagerImpl$AnimationListenerWrapper",
-      "android/support/v4/view/ViewParentCompat$ViewParentCompatBaseImpl": "androidx/view/ViewParentCompat$ViewParentCompatBaseImpl",
-      "android/support/v7/util/DiffUtil$Snake": "androidx/util/DiffUtil$Snake",
-      "android/support/v7/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState": "androidx/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState",
-      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder": "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder",
-      "android/support/v4/media/RatingCompat$Style": "androidx/media/RatingCompat$Style",
-      "android/support/v7/widget/GridLayout$Spec": "androidx/widget/GridLayout$Spec",
-      "android/support/constraint/solver/widgets/ConstraintAnchor": "androidx/constraint/solver/widgets/ConstraintAnchor",
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$TransitionTimeOutRunnable": "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$TransitionTimeOutRunnable",
-      "android/support/v4/view/LayoutInflaterFactory": "androidx/view/LayoutInflaterFactory",
-      "android/support/v17/leanback/app/BrowseFragment$MainFragmentAdapterProvider": "androidx/leanback/app/BrowseFragment$MainFragmentAdapterProvider",
-      "android/support/v7/app/OverlayListView$OverlayObject$OnAnimationEndListener": "androidx/app/OverlayListView$OverlayObject$OnAnimationEndListener",
-      "android/support/v7/app/AlertController$RecycleListView": "androidx/app/AlertController$RecycleListView",
-      "android/support/v4/view/ViewCompat$ViewCompatApi18Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi18Impl",
-      "android/support/v4/text/TextUtilsCompat": "androidx/text/TextUtilsCompat",
-      "android/support/v17/leanback/widget/Action": "androidx/leanback/widget/Action",
-      "android/support/v7/widget/RecyclerView$ItemAnimator$AdapterChanges": "androidx/widget/RecyclerView$ItemAnimator$AdapterChanges",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerExtraData": "androidx/media/session/MediaControllerCompat$MediaControllerExtraData",
-      "android/support/v4/media/session/MediaControllerCompat$TransportControlsBase": "androidx/media/session/MediaControllerCompat$TransportControlsBase",
-      "android/support/v13/view/inputmethod/InputConnectionCompat$InputConnectionCompatImpl": "androidx/view/inputmethod/InputConnectionCompat$InputConnectionCompatImpl",
-      "android/support/v4/media/ParceledListSliceAdapterApi21": "androidx/media/ParceledListSliceAdapterApi21",
-      "android/support/v17/leanback/widget/ItemBridgeAdapter": "androidx/leanback/widget/ItemBridgeAdapter",
-      "android/support/v13/view/inputmethod/InputConnectionCompat": "androidx/view/inputmethod/InputConnectionCompat",
-      "android/support/v4/widget/ResourceCursorAdapter": "androidx/widget/ResourceCursorAdapter",
-      "android/support/v7/view/WindowCallbackWrapper": "androidx/view/WindowCallbackWrapper",
-      "android/support/v7/widget/AdapterHelper$UpdateOp": "androidx/widget/AdapterHelper$UpdateOp",
-      "android/support/v4/content/res/FontResourcesParserCompat$FontFileResourceEntry": "androidx/content/res/FontResourcesParserCompat$FontFileResourceEntry",
-      "android/support/v4/app/NavUtils": "androidx/app/NavUtils",
-      "android/support/v4/internal/view/SupportMenuItem": "androidx/internal/view/SupportMenuItem",
-      "android/support/v7/widget/FastScroller$DragState": "androidx/widget/FastScroller$DragState",
-      "android/support/annotation/Size": "androidx/annotation/Size",
-      "android/support/wear/widget/drawer/WearableNavigationDrawerView$OnItemSelectedListener": "androidx/wear/widget/drawer/WearableNavigationDrawerView$OnItemSelectedListener",
-      "android/support/transition/WindowIdImpl": "androidx/transition/WindowIdImpl",
-      "android/support/v7/media/RemoteControlClientCompat$LegacyImpl": "androidx/media/RemoteControlClientCompat$LegacyImpl",
-      "android/support/transition/Slide$CalculateSlideVertical": "androidx/transition/Slide$CalculateSlideVertical",
-      "android/support/v17/leanback/app/VideoFragment": "androidx/leanback/app/VideoFragment",
-      "android/support/v4/widget/NestedScrollView$OnScrollChangeListener": "androidx/widget/NestedScrollView$OnScrollChangeListener",
-      "android/support/v7/media/MediaRouter$CallbackFlags": "androidx/media/MediaRouter$CallbackFlags",
-      "android/support/customtabs/IPostMessageService": "androidx/browser/customtabs/IPostMessageService",
-      "android/support/v4/util/AtomicFile": "androidx/util/AtomicFile",
-      "android/support/v4/provider/DocumentsContractApi19": "androidx/provider/DocumentsContractApi19",
-      "android/support/v17/leanback/widget/picker/Picker$ViewHolder": "androidx/leanback/widget/picker/Picker$ViewHolder",
-      "android/support/v4/widget/AutoScrollHelper": "androidx/widget/AutoScrollHelper",
-      "android/support/v4/widget/DrawerLayout$LockMode": "androidx/widget/DrawerLayout$LockMode",
-      "android/support/v17/leanback/transition/SlideKitkat$CalculateSlideVertical": "androidx/leanback/transition/SlideKitkat$CalculateSlideVertical",
-      "android/support/v4/os/BuildCompat": "androidx/os/BuildCompat",
-      "android/support/wear/ambient/SharedLibraryVersion$PresenceHolder": "androidx/wear/ambient/SharedLibraryVersion$PresenceHolder",
-      "android/support/transition/ObjectAnimatorUtilsImpl": "androidx/transition/ObjectAnimatorUtilsImpl",
-      "android/support/v7/widget/SearchView$OnSuggestionListener": "androidx/widget/SearchView$OnSuggestionListener",
-      "android/support/design/internal/NavigationMenuPresenter": "androidx/design/internal/NavigationMenuPresenter",
-      "android/support/v17/leanback/widget/ShadowHelper$ShadowHelperVersionImpl": "androidx/leanback/widget/ShadowHelper$ShadowHelperVersionImpl",
-      "android/support/v7/media/RemotePlaybackClient$ItemActionCallback": "androidx/media/RemotePlaybackClient$ItemActionCallback",
-      "android/support/annotation/Dimension": "androidx/annotation/Dimension",
-      "android/support/v13/view/DragStartHelper$OnDragStartListener": "androidx/view/DragStartHelper$OnDragStartListener",
-      "android/support/text/emoji/R$id": "androidx/text/emoji/R$id",
-      "android/support/wear/widget/CurvingLayoutCallback": "androidx/wear/widget/CurvingLayoutCallback",
-      "android/support/v17/leanback/app/RowsFragment": "androidx/leanback/app/RowsFragment",
-      "android/support/v7/widget/TooltipCompat": "androidx/widget/TooltipCompat",
-      "android/support/v7/widget/SnapHelper": "androidx/widget/SnapHelper",
-      "android/support/v7/mediarouter/R$layout": "androidx/mediarouter/R$layout",
-      "android/support/transition/R$id": "androidx/transition/R$id",
-      "android/support/v4/graphics/BitmapCompat$BitmapCompatBaseImpl": "androidx/graphics/BitmapCompat$BitmapCompatBaseImpl",
-      "android/support/v4/media/VolumeProviderCompatApi21$Delegate": "androidx/media/VolumeProviderCompatApi21$Delegate",
-      "android/support/v17/leanback/widget/SearchBar$SearchBarListener": "androidx/leanback/widget/SearchBar$SearchBarListener",
-      "android/support/v17/leanback/app/SearchFragment": "androidx/leanback/app/SearchFragment",
-      "android/support/v4/view/LayoutInflaterCompat": "androidx/view/LayoutInflaterCompat",
-      "android/support/v7/widget/CardViewApi21Impl": "androidx/widget/CardViewApi21Impl",
-      "android/support/v17/leanback/widget/VideoSurfaceView": "androidx/leanback/widget/VideoSurfaceView",
-      "android/support/transition/GhostViewImpl": "androidx/transition/GhostViewImpl",
-      "android/support/transition/ChangeBounds": "androidx/transition/ChangeBounds",
-      "android/support/v17/leanback/app/HeadersFragment$OnHeaderViewSelectedListener": "androidx/leanback/app/HeadersFragment$OnHeaderViewSelectedListener",
-      "android/support/media/tv/PreviewProgram": "androidx/media/tv/PreviewProgram",
-      "android/support/annotation/RequiresApi": "androidx/annotation/RequiresApi",
-      "android/support/app/recommendation/RecommendationExtender": "androidx/app/recommendation/RecommendationExtender",
-      "android/support/v17/leanback/app/ErrorSupportFragment": "androidx/leanback/app/ErrorSupportFragment",
-      "android/support/v17/leanback/media/MediaPlayerGlue": "androidx/leanback/media/MediaPlayerGlue",
-      "android/support/v4/media/session/MediaSessionCompatApi21$QueueItem": "androidx/media/session/MediaSessionCompatApi21$QueueItem",
-      "android/support/v17/leanback/widget/AbstractMediaItemPresenter": "androidx/leanback/widget/AbstractMediaItemPresenter",
-      "android/support/annotation/StyleableRes": "androidx/annotation/StyleableRes",
-      "android/support/v4/media/session/PlaybackStateCompat$CustomAction": "androidx/media/session/PlaybackStateCompat$CustomAction",
-      "android/support/wear/widget/drawer/WearableDrawerLayout$TopDrawerDraggerCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$TopDrawerDraggerCallback",
-      "android/support/v17/leanback/app/PermissionHelper": "androidx/leanback/app/PermissionHelper",
-      "android/support/transition/R": "androidx/transition/R",
-      "android/support/v17/leanback/transition/SlideKitkat$SlideAnimatorListener": "androidx/leanback/transition/SlideKitkat$SlideAnimatorListener",
-      "android/support/v7/graphics/drawable/DrawerArrowDrawable": "androidx/graphics/drawable/DrawerArrowDrawable",
-      "android/support/v17/leanback/widget/ClassPresenterSelector": "androidx/leanback/widget/ClassPresenterSelector",
-      "android/support/v17/leanback/widget/ControlBarPresenter$OnControlSelectedListener": "androidx/leanback/widget/ControlBarPresenter$OnControlSelectedListener",
-      "android/support/v4/app/NotificationCompat$GroupAlertBehavior": "androidx/app/NotificationCompat$GroupAlertBehavior",
-      "android/support/text/emoji/widget/EmojiInputFilter$InitCallbackImpl": "androidx/text/emoji/widget/EmojiInputFilter$InitCallbackImpl",
-      "android/support/v7/appcompat/R$bool": "androidx/appcompat/R$bool",
-      "android/support/v4/widget/TextViewCompat$AutoSizeTextType": "androidx/widget/TextViewCompat$AutoSizeTextType",
-      "android/support/v4/app/NotificationCompat$BadgeIconType": "androidx/app/NotificationCompat$BadgeIconType",
-      "android/support/v4/app/NotificationCompat$BigTextStyle": "androidx/app/NotificationCompat$BigTextStyle",
-      "android/support/annotation/ColorInt": "androidx/annotation/ColorInt",
-      "android/support/text/emoji/EmojiSpan": "androidx/text/emoji/EmojiSpan",
-      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnDismissedListener": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnDismissedListener",
-      "android/support/percent/PercentRelativeLayout": "androidx/PercentRelativeLayout",
-      "android/support/text/emoji/widget/EmojiInputFilter": "androidx/text/emoji/widget/EmojiInputFilter",
-      "android/support/media/tv/TvContractCompat$PreviewPrograms": "androidx/media/tv/TvContractCompat$PreviewPrograms",
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder",
-      "android/support/v17/leanback/app/BrowseFragment$BackStackListener": "androidx/leanback/app/BrowseFragment$BackStackListener",
-      "android/support/text/emoji/EmojiProcessor$ProcessorSm": "androidx/text/emoji/EmojiProcessor$ProcessorSm",
-      "android/support/v4/view/ViewCompat$ViewCompatBaseImpl": "androidx/view/legacy/ViewCompat$ViewCompatBaseImpl",
-      "android/support/design/internal/BottomNavigationMenu": "androidx/design/internal/BottomNavigationMenu",
-      "android/support/v7/view/menu/BaseMenuWrapper": "androidx/view/menu/BaseMenuWrapper",
-      "android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory$DefaultRoundedBitmapDrawable": "androidx/graphics/drawable/RoundedBitmapDrawableFactory$DefaultRoundedBitmapDrawable",
-      "android/support/v17/leanback/widget/OnItemViewClickedListener": "androidx/leanback/widget/OnItemViewClickedListener",
-      "android/support/v4/app/ShareCompat": "androidx/app/ShareCompat",
-      "android/support/v4/app/DialogFragment": "androidx/app/DialogFragment",
-      "android/support/v4/os/ConfigurationCompat": "androidx/os/ConfigurationCompat",
+      "android/support/v17/leanback/app/BackgroundManager$BitmapDrawable": "androidx/leanback/app/BackgroundManager$BitmapDrawable",
+      "android/support/annotation/NonNull": "androidx/annotation/NonNull",
+      "android/support/v17/leanback/app/BackgroundManager$ChangeBackgroundRunnable": "androidx/leanback/app/BackgroundManager$ChangeBackgroundRunnable",
+      "android/support/v17/leanback/app/BackgroundManager$DrawableWrapper": "androidx/leanback/app/BackgroundManager$DrawableWrapper",
+      "android/support/v17/leanback/app/BackgroundManager$EmptyDrawable": "androidx/leanback/app/BackgroundManager$EmptyDrawable",
       "android/support/v4/graphics/drawable/DrawableCompat": "androidx/graphics/drawable/DrawableCompat",
-      "android/support/v17/leanback/widget/PlaybackTransportRowView": "androidx/leanback/widget/PlaybackTransportRowView",
-      "android/support/annotation/ColorRes": "androidx/annotation/ColorRes",
-      "android/support/v4/database/DatabaseUtilsCompat": "androidx/database/DatabaseUtilsCompat",
-      "android/support/v7/app/AppCompatDelegateImplBase$ActionBarDrawableToggleImpl": "androidx/app/AppCompatDelegateImplBase$ActionBarDrawableToggleImpl",
-      "android/support/v7/widget/ForwardingListener": "androidx/widget/ForwardingListener",
-      "android/support/annotation/NavigationRes": "androidx/annotation/NavigationRes",
-      "android/support/v4/widget/TextViewCompat$TextViewCompatApi18Impl": "androidx/widget/TextViewCompat$TextViewCompatApi18Impl",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$Command": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$Command",
-      "android/support/transition/Styleable$ArcMotion": "androidx/transition/Styleable$ArcMotion",
-      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperStubImpl": "androidx/leanback/transition/TransitionHelper$TransitionHelperStubImpl",
-      "android/support/text/emoji/widget/EmojiEditTextHelper$HelperInternal": "androidx/text/emoji/widget/EmojiEditTextHelper$HelperInternal",
-      "android/support/wear/widget/BezierSCurveInterpolator": "androidx/wear/widget/BezierSCurveInterpolator",
-      "android/support/v4/view/NestedScrollingParent": "androidx/view/NestedScrollingParent",
-      "android/support/v7/widget/ListPopupWindow$ListSelectorHider": "androidx/widget/ListPopupWindow$ListSelectorHider",
-      "android/support/transition/PathProperty": "androidx/transition/PathProperty",
-      "android/support/v4/provider/FontsContractCompat$FontInfo": "androidx/provider/FontsContractCompat$FontInfo",
-      "android/support/v17/leanback/widget/PlaybackControlsRow": "androidx/leanback/widget/PlaybackControlsRow",
-      "android/support/v17/leanback/widget/Presenter": "androidx/leanback/widget/Presenter",
-      "android/support/v17/leanback/app/VerticalGridFragment": "androidx/leanback/app/VerticalGridFragment",
-      "android/support/v4/app/LoaderManagerImpl$LoaderInfo": "androidx/app/LoaderManagerImpl$LoaderInfo",
-      "android/support/v7/widget/RoundRectDrawableWithShadow": "androidx/widget/RoundRectDrawableWithShadow",
-      "android/support/v7/app/AppCompatDelegateImplV9$PanelFeatureState": "androidx/app/AppCompatDelegateImplV9$PanelFeatureState",
-      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl$UserRouteRecord": "androidx/media/SystemMediaRouteProvider$JellybeanImpl$UserRouteRecord",
-      "android/support/v4/view/accessibility/AccessibilityManagerCompat": "androidx/view/accessibility/AccessibilityManagerCompat",
-      "android/support/v4/view/ScrollingView": "androidx/view/ScrollingView",
-      "android/support/customtabs/CustomTabsIntent": "androidx/browser/customtabs/CustomTabsIntent",
-      "android/support/v17/leanback/transition/TransitionListener": "androidx/leanback/transition/TransitionListener",
-      "android/support/annotation/DimenRes": "androidx/annotation/DimenRes",
-      "android/support/v17/leanback/widget/Parallax$IntProperty": "androidx/leanback/widget/Parallax$IntProperty",
-      "android/support/v4/app/FragmentManagerImpl$AnimationOrAnimator": "androidx/app/FragmentManagerImpl$AnimationOrAnimator",
-      "android/support/v4/widget/TextViewCompat$TextViewCompatBaseImpl": "androidx/widget/TextViewCompat$TextViewCompatBaseImpl",
-      "android/support/v17/leanback/app/BrowseFragment$ExpandPreLayout": "androidx/leanback/app/BrowseFragment$ExpandPreLayout",
-      "android/support/v13/view/DragAndDropPermissionsCompat$BaseDragAndDropPermissionsCompatImpl": "androidx/view/DragAndDropPermissionsCompat$BaseDragAndDropPermissionsCompatImpl",
-      "android/support/multidex/MultiDexExtractor": "androidx/multidex/MultiDexExtractor",
-      "android/support/v17/leanback/widget/GuidedDatePickerAction$Builder": "androidx/leanback/widget/GuidedDatePickerAction$Builder",
-      "android/support/v7/widget/AppCompatRatingBar": "androidx/widget/AppCompatRatingBar",
-      "android/support/wear/R$string": "androidx/wear/R$string",
-      "android/support/v7/app/AppCompatDelegateImplN": "androidx/app/AppCompatDelegateImplN",
-      "android/support/v17/leanback/widget/GridLayoutManager$PendingMoveSmoothScroller": "androidx/leanback/widget/GridLayoutManager$PendingMoveSmoothScroller",
-      "android/support/v17/leanback/widget/GuidedActionItemContainer": "androidx/leanback/widget/GuidedActionItemContainer",
-      "android/support/transition/ObjectAnimatorUtils": "androidx/transition/ObjectAnimatorUtils",
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat",
-      "android/support/design/widget/CoordinatorLayout$DispatchChangeEvent": "androidx/design/widget/CoordinatorLayout$DispatchChangeEvent",
-      "android/support/annotation/HalfFloat": "androidx/annotation/HalfFloat",
-      "android/support/v4/view/ViewCompat$ViewCompatApi16Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi16Impl",
-      "android/support/v7/text/AllCapsTransformationMethod": "androidx/text/AllCapsTransformationMethod",
-      "android/support/v4/app/FragmentController": "androidx/app/FragmentController",
-      "android/support/v17/leanback/app/SearchSupportFragment$SearchResultProvider": "androidx/leanback/app/SearchSupportFragment$SearchResultProvider",
-      "android/support/v17/leanback/widget/RoundedRectHelper$StubImpl": "androidx/leanback/widget/RoundedRectHelper$StubImpl",
-      "android/support/v4/graphics/drawable/RoundedBitmapDrawable": "androidx/graphics/drawable/RoundedBitmapDrawable",
-      "android/support/v4/widget/ScrollerCompat": "androidx/widget/ScrollerCompat",
-      "android/support/v17/leanback/widget/RoundedRectHelper$Api21Impl": "androidx/leanback/widget/RoundedRectHelper$Api21Impl",
-      "android/support/wear/internal/widget/drawer/SinglePagePresenter$Ui": "androidx/wear/internal/widget/drawer/SinglePagePresenter$Ui",
-      "android/support/v7/app/AppCompatDelegateImplV14$AutoNightModeManager": "androidx/app/AppCompatDelegateImplV14$AutoNightModeManager",
-      "android/support/v17/leanback/widget/ImeKeyMonitor$ImeKeyListener": "androidx/leanback/widget/ImeKeyMonitor$ImeKeyListener",
-      "android/support/v4/view/InputDeviceCompat": "androidx/view/InputDeviceCompat",
-      "android/support/wear/widget/CircularProgressLayoutController": "androidx/wear/widget/CircularProgressLayoutController",
-      "android/support/v17/leanback/widget/PlaybackTransportRowView$OnUnhandledKeyListener": "androidx/leanback/widget/PlaybackTransportRowView$OnUnhandledKeyListener",
-      "android/support/v4/view/ViewCompat$AccessibilityLiveRegion": "androidx/view/legacy/ViewCompat$AccessibilityLiveRegion",
-      "android/support/v13/app/FragmentCompat$FragmentCompatImpl": "androidx/app/FragmentCompat$FragmentCompatImpl",
-      "android/support/design/widget/Snackbar": "androidx/design/widget/Snackbar",
-      "android/support/v7/preference/PreferenceGroupAdapter": "androidx/preference/PreferenceGroupAdapter",
-      "android/support/v4/view/MenuItemCompat": "androidx/view/MenuItemCompat",
-      "android/support/v7/widget/ChildHelper$Bucket": "androidx/widget/ChildHelper$Bucket",
-      "android/support/v7/util/DiffUtil$DiffResult": "androidx/util/DiffUtil$DiffResult",
-      "android/support/v13/app/FragmentCompat$PermissionCompatDelegate": "androidx/app/FragmentCompat$PermissionCompatDelegate",
-      "android/support/v4/view/MotionEventCompat": "androidx/view/MotionEventCompat",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ClosedCaptioningAction": "androidx/leanback/widget/PlaybackControlsRow$ClosedCaptioningAction",
-      "android/support/v4/app/FragmentState": "androidx/app/FragmentState",
-      "android/support/v7/widget/CardView": "androidx/widget/CardView",
-      "android/support/v13/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatApi25Impl": "androidx/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatApi25Impl",
-      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatBaseImpl": "androidx/widget/PopupWindowCompat$PopupWindowCompatBaseImpl",
-      "android/support/media/tv/TvContractCompat$PreviewProgramColumns$Type": "androidx/media/tv/TvContractCompat$PreviewProgramColumns$Type",
-      "android/support/v4/media/session/MediaSessionCompat$OnActiveChangeListener": "androidx/media/session/MediaSessionCompat$OnActiveChangeListener",
-      "android/support/design/widget/BottomSheetBehavior": "androidx/design/widget/BottomSheetBehavior",
-      "android/support/customtabs/CustomTabsSession": "androidx/browser/customtabs/CustomTabsSession",
-      "android/support/v7/media/RemotePlaybackClient$StatusCallback": "androidx/media/RemotePlaybackClient$StatusCallback",
-      "android/support/v17/leanback/app/HeadersSupportFragment$OnHeaderViewSelectedListener": "androidx/leanback/app/HeadersSupportFragment$OnHeaderViewSelectedListener",
-      "android/support/v4/view/ViewPager$OnPageChangeListener": "androidx/view/ViewPager$OnPageChangeListener",
-      "android/support/v4/app/BackStackRecord$Op": "androidx/app/BackStackRecord$Op",
-      "android/support/media/ExifInterface$ExifAttribute": "androidx/media/ExifInterface$ExifAttribute",
-      "android/support/transition/ChangeBounds$ViewBounds": "androidx/transition/ChangeBounds$ViewBounds",
-      "android/support/v17/leanback/widget/NonOverlappingLinearLayoutWithForeground": "androidx/leanback/widget/NonOverlappingLinearLayoutWithForeground",
-      "android/support/v4/app/NotificationCompat$BigPictureStyle": "androidx/app/NotificationCompat$BigPictureStyle",
-      "android/support/design/widget/FloatingActionButton$ShadowDelegateImpl": "androidx/design/widget/FloatingActionButton$ShadowDelegateImpl",
-      "android/support/media/instantvideo/preload/InstantVideoPreloadManager$VideoPreloaderFactory": "androidx/media/instantvideo/preload/InstantVideoPreloadManager$VideoPreloaderFactory",
-      "android/support/v7/app/MediaRouteDialogHelper": "androidx/app/MediaRouteDialogHelper",
-      "android/support/media/ExifInterface$ExifTag": "androidx/media/ExifInterface$ExifTag",
-      "android/support/v17/leanback/widget/BaseCardView$InfoHeightAnimation": "androidx/leanback/widget/BaseCardView$InfoHeightAnimation",
-      "android/support/v13/view/inputmethod/EditorInfoCompat$EditorInfoCompatApi25Impl": "androidx/view/inputmethod/EditorInfoCompat$EditorInfoCompatApi25Impl",
-      "android/support/transition/TransitionSet$TransitionSetListener": "androidx/transition/TransitionSet$TransitionSetListener",
-      "android/support/v17/leanback/transition/SlideKitkat$CalculateSlide": "androidx/leanback/transition/SlideKitkat$CalculateSlide",
-      "android/support/v4/app/ActivityCompat$OnRequestPermissionsResultCallback": "androidx/app/legacy/ActivityCompat$OnRequestPermissionsResultCallback",
-      "android/support/v7/widget/AppCompatRadioButton": "androidx/widget/AppCompatRadioButton",
-      "android/support/v4/app/TaskStackBuilder$TaskStackBuilderApi16Impl": "androidx/app/TaskStackBuilder$TaskStackBuilderApi16Impl",
-      "android/support/v7/media/MediaRouter$RouteInfo$PlaybackVolume": "androidx/media/MediaRouter$RouteInfo$PlaybackVolume",
-      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$AdapterMulti": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$AdapterMulti",
-      "android/support/v4/print/PrintHelper$PrintHelperApi19": "androidx/print/PrintHelper$PrintHelperApi19",
-      "android/support/v7/media/MediaRouter$RouteInfo$DeviceType": "androidx/media/MediaRouter$RouteInfo$DeviceType",
-      "android/support/v4/media/MediaBrowserCompat$SubscriptionCallback": "androidx/media/MediaBrowserCompat$SubscriptionCallback",
-      "android/support/v4/media/MediaBrowserCompat$MediaItem$Flags": "androidx/media/MediaBrowserCompat$MediaItem$Flags",
-      "android/support/v17/leanback/R$attr": "androidx/leanback/R$attr",
-      "android/support/v7/media/MediaRouteDescriptor$Builder": "androidx/media/MediaRouteDescriptor$Builder",
-      "android/support/v7/media/MediaRouteProviderService": "androidx/media/MediaRouteProviderService",
-      "android/support/v4/app/ActivityCompat$RequestPermissionsRequestCodeValidator": "androidx/app/legacy/ActivityCompat$RequestPermissionsRequestCodeValidator",
-      "android/support/v17/leanback/widget/ControlBar$OnChildFocusedListener": "androidx/leanback/widget/ControlBar$OnChildFocusedListener",
-      "android/support/v7/media/MediaRouterApi24$RouteInfo": "androidx/media/MediaRouterApi24$RouteInfo",
-      "android/support/v4/app/JobIntentService$WorkEnqueuer": "androidx/app/JobIntentService$WorkEnqueuer",
-      "android/support/v7/preference/DialogPreference$TargetFragment": "androidx/preference/DialogPreference$TargetFragment",
-      "android/support/wear/widget/BoxInsetLayout$LayoutParams": "androidx/wear/widget/BoxInsetLayout$LayoutParams",
-      "android/support/v4/util/SimpleArrayMap": "androidx/util/SimpleArrayMap",
-      "android/support/v4/widget/EdgeEffectCompat": "androidx/widget/EdgeEffectCompat",
-      "android/support/v13/app/FragmentCompat$FragmentCompatApi15Impl": "androidx/app/FragmentCompat$FragmentCompatApi15Impl",
-      "android/support/v4/print/PrintHelper$PrintHelperApi23": "androidx/print/PrintHelper$PrintHelperApi23",
-      "android/support/percent/R$styleable": "androidx/R$styleable",
-      "android/support/v4/print/PrintHelper$PrintHelperApi24": "androidx/print/PrintHelper$PrintHelperApi24",
-      "android/support/v4/content/res/FontResourcesParserCompat": "androidx/content/res/FontResourcesParserCompat",
-      "android/support/design/widget/SnackbarManager$SnackbarRecord": "androidx/design/widget/SnackbarManager$SnackbarRecord",
-      "android/support/v7/util/DiffUtil$Range": "androidx/util/DiffUtil$Range",
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImpl": "androidx/media/MediaBrowserCompat$MediaBrowserImpl",
-      "android/support/v4/print/PrintHelper$PrintHelperApi20": "androidx/print/PrintHelper$PrintHelperApi20",
-      "android/support/v4/media/session/PlaybackStateCompat$RepeatMode": "androidx/media/session/PlaybackStateCompat$RepeatMode",
-      "android/support/v7/media/MediaRouteProviderProtocol": "androidx/media/MediaRouteProviderProtocol",
-      "android/support/transition/Transition$ArrayListManager": "androidx/transition/Transition$ArrayListManager",
-      "android/support/text/emoji/widget/EmojiButton": "androidx/text/emoji/widget/EmojiButton",
-      "android/support/v4/view/ActionProvider$VisibilityListener": "androidx/view/ActionProvider$VisibilityListener",
-      "android/support/v7/widget/AppCompatProgressBarHelper": "androidx/widget/AppCompatProgressBarHelper",
-      "android/support/v7/widget/LinearLayoutCompat": "androidx/widget/LinearLayoutCompat",
-      "android/support/v4/app/Fragment$OnStartEnterTransitionListener": "androidx/app/Fragment$OnStartEnterTransitionListener",
-      "android/support/v7/app/AppCompatDialogFragment": "androidx/app/AppCompatDialogFragment",
-      "android/support/graphics/drawable/Animatable2Compat": "androidx/graphics/drawable/Animatable2Compat",
-      "android/support/design/widget/TabLayout$PagerAdapterObserver": "androidx/design/widget/TabLayout$PagerAdapterObserver",
-      "android/support/v7/widget/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem": "androidx/widget/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem",
-      "android/support/v4/content/pm/ShortcutInfoCompat": "androidx/content/pm/ShortcutInfoCompat",
-      "android/support/v4/view/ScaleGestureDetectorCompat": "androidx/view/ScaleGestureDetectorCompat",
-      "android/support/v17/leanback/widget/ShadowHelperApi21$ShadowImpl": "androidx/leanback/widget/ShadowHelperApi21$ShadowImpl",
-      "android/support/v7/appcompat/R$id": "androidx/appcompat/R$id",
-      "android/support/v17/leanback/transition/Scale": "androidx/leanback/transition/Scale",
-      "android/support/v7/widget/ViewBoundsCheck": "androidx/widget/ViewBoundsCheck",
-      "android/support/design/widget/BottomSheetBehavior$State": "androidx/design/widget/BottomSheetBehavior$State",
-      "android/support/v7/app/ActionBarDrawerToggle$JellybeanMr2Delegate": "androidx/app/ActionBarDrawerToggle$JellybeanMr2Delegate",
-      "android/support/v7/internal/widget/PreferenceImageView": "androidx/internal/widget/PreferenceImageView",
-      "android/support/content/ContentPager$CursorCache": "androidx/content/ContentPager$CursorCache",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$MessageHandler": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$MessageHandler",
-      "android/support/v4/app/NotificationCompat$Action$Extender": "androidx/app/NotificationCompat$Action$Extender",
-      "android/support/v7/widget/Toolbar$OnMenuItemClickListener": "androidx/widget/Toolbar$OnMenuItemClickListener",
-      "android/support/multidex/MultiDex$V4": "androidx/multidex/MultiDex$V4",
-      "android/support/v4/app/ActionBarDrawerToggle": "androidx/app/legacy/ActionBarDrawerToggle",
-      "android/support/v7/media/RemoteControlClientCompat": "androidx/media/RemoteControlClientCompat",
-      "android/support/v4/media/app/NotificationCompat$MediaStyle": "androidx/media/app/NotificationCompat$MediaStyle",
-      "android/support/v17/leanback/transition/TransitionEpicenterCallback": "androidx/leanback/transition/TransitionEpicenterCallback",
-      "android/support/v4/content/LocalBroadcastManager$ReceiverRecord": "androidx/content/LocalBroadcastManager$ReceiverRecord",
-      "android/support/v7/view/menu/BaseMenuPresenter": "androidx/view/menu/BaseMenuPresenter",
-      "android/support/v4/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListener": "androidx/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListener",
-      "android/support/design/widget/TabLayout$AdapterChangeListener": "androidx/design/widget/TabLayout$AdapterChangeListener",
-      "android/support/v7/widget/RecyclerView$RecyclerListener": "androidx/widget/RecyclerView$RecyclerListener",
-      "android/support/media/tv/ChannelLogoUtils": "androidx/media/tv/ChannelLogoUtils",
-      "android/support/v4/media/session/PlaybackStateCompat$CustomAction$Builder": "androidx/media/session/PlaybackStateCompat$CustomAction$Builder",
-      "android/support/v17/leanback/widget/GuidedActionAdapter": "androidx/leanback/widget/GuidedActionAdapter",
-      "android/support/v17/leanback/widget/ItemBridgeAdapter$Wrapper": "androidx/leanback/widget/ItemBridgeAdapter$Wrapper",
-      "android/support/v17/leanback/widget/DetailsOverviewRow$Listener": "androidx/leanback/widget/DetailsOverviewRow$Listener",
-      "android/support/annotation/InterpolatorRes": "androidx/annotation/InterpolatorRes",
-      "android/support/v4/widget/CursorAdapter$ChangeObserver": "androidx/widget/CursorAdapter$ChangeObserver",
-      "android/support/v4/widget/SimpleCursorAdapter$CursorToStringConverter": "androidx/widget/SimpleCursorAdapter$CursorToStringConverter",
-      "android/support/v7/widget/helper/ItemTouchUIUtilImpl$BaseImpl": "androidx/widget/helper/ItemTouchUIUtilImpl$BaseImpl",
-      "android/support/v4/provider/RawDocumentFile": "androidx/provider/RawDocumentFile",
-      "android/support/text/emoji/widget/EmojiExtractTextLayout$ButtonOnclickListener": "androidx/text/emoji/widget/EmojiExtractTextLayout$ButtonOnclickListener",
-      "android/support/v7/view/menu/MenuItemWrapperJB$ActionProviderWrapperJB": "androidx/view/menu/MenuItemWrapperJB$ActionProviderWrapperJB",
-      "android/support/media/tv/TvContractCompat$RecordedPrograms": "androidx/media/tv/TvContractCompat$RecordedPrograms",
-      "android/support/v17/leanback/widget/picker/Picker$PickerValueListener": "androidx/leanback/widget/picker/Picker$PickerValueListener",
-      "android/support/v4/media/session/IMediaControllerCallback$Stub": "androidx/media/session/IMediaControllerCallback$Stub",
-      "android/support/v7/preference/PreferenceManager": "androidx/preference/PreferenceManager",
-      "android/support/transition/GhostViewApi21$Creator": "androidx/transition/GhostViewApi21$Creator",
-      "android/support/v7/widget/ActionMenuView$ActionMenuChildView": "androidx/widget/ActionMenuView$ActionMenuChildView",
-      "android/support/v17/leanback/app/GuidedStepSupportFragment$DummyFragment": "androidx/leanback/app/GuidedStepSupportFragment$DummyFragment",
-      "android/support/v4/app/BaseFragmentActivityApi14": "androidx/app/BaseFragmentActivityApi14",
-      "android/support/v14/preference/SwitchPreference": "androidx/preference/SwitchPreference",
-      "android/support/v4/app/BaseFragmentActivityApi16": "androidx/app/BaseFragmentActivityApi16",
-      "android/support/v7/preference/PreferenceFragmentCompat$ScrollToPreferenceObserver": "androidx/preference/PreferenceFragmentCompat$ScrollToPreferenceObserver",
-      "android/support/v4/graphics/PaintCompat": "androidx/graphics/PaintCompat",
-      "android/support/v4/media/AudioAttributesCompat": "androidx/media/AudioAttributesCompat",
-      "android/support/v4/media/session/MediaSessionCompat$QueueItem": "androidx/media/session/MediaSessionCompat$QueueItem",
-      "android/support/transition/Transition$AnimationInfo": "androidx/transition/Transition$AnimationInfo",
-      "android/support/v7/app/MediaRouteControllerDialog$VolumeChangeListener": "androidx/app/MediaRouteControllerDialog$VolumeChangeListener",
-      "android/support/v4/widget/DrawerLayout$ViewDragCallback": "androidx/widget/DrawerLayout$ViewDragCallback",
-      "android/support/design/widget/FloatingActionButtonImpl$ResetElevationAnimation": "androidx/design/widget/FloatingActionButtonImpl$ResetElevationAnimation",
-      "android/support/design/widget/TabLayout$OnTabSelectedListener": "androidx/design/widget/TabLayout$OnTabSelectedListener",
-      "android/support/annotation/VisibleForTesting": "androidx/annotation/VisibleForTesting",
-      "android/support/v4/app/NotificationCompatSideChannelService$NotificationSideChannelStub": "androidx/app/NotificationCompatSideChannelService$NotificationSideChannelStub",
-      "android/support/annotation/RawRes": "androidx/annotation/RawRes",
-      "android/support/design/R$anim": "androidx/design/R$anim",
-      "android/support/transition/Transition$MatchOrder": "androidx/transition/Transition$MatchOrder",
-      "android/support/v7/widget/RecyclerView$SimpleOnItemTouchListener": "androidx/widget/RecyclerView$SimpleOnItemTouchListener",
-      "android/support/transition/AnimatorUtilsImpl": "androidx/transition/AnimatorUtilsImpl",
-      "android/support/v4/view/OnApplyWindowInsetsListener": "androidx/view/OnApplyWindowInsetsListener",
-      "android/support/wear/widget/SwipeDismissLayout": "androidx/wear/widget/SwipeDismissLayout",
-      "android/support/mediacompat/R$color": "androidx/mediacompat/R$color",
-      "android/support/v7/preference/PreferenceManager$PreferenceComparisonCallback": "androidx/preference/PreferenceManager$PreferenceComparisonCallback",
-      "android/support/v7/widget/ActionMenuView$OnMenuItemClickListener": "androidx/widget/ActionMenuView$OnMenuItemClickListener",
-      "android/support/v7/widget/TooltipCompat$BaseViewCompatImpl": "androidx/widget/TooltipCompat$BaseViewCompatImpl",
-      "android/support/wear/widget/drawer/WearableNavigationDrawerView$NavigationStyle": "androidx/wear/widget/drawer/WearableNavigationDrawerView$NavigationStyle",
-      "android/support/transition/PatternPathMotion": "androidx/transition/PatternPathMotion",
-      "android/support/transition/Styleable$TransitionTarget": "androidx/transition/Styleable$TransitionTarget",
-      "android/support/mediacompat/R": "androidx/mediacompat/R",
-      "android/support/v7/media/MediaRouterJellybeanMr1$Callback": "androidx/media/MediaRouterJellybeanMr1$Callback",
-      "android/support/v17/leanback/widget/ControlBarPresenter$OnControlClickedListener": "androidx/leanback/widget/ControlBarPresenter$OnControlClickedListener",
-      "android/support/v4/view/LayoutInflaterCompat$Factory2Wrapper": "androidx/view/LayoutInflaterCompat$Factory2Wrapper",
-      "android/support/v7/widget/GridLayoutManager$LayoutParams": "androidx/widget/GridLayoutManager$LayoutParams",
-      "android/support/v7/widget/GridLayout": "androidx/widget/GridLayout",
-      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl",
-      "android/support/v7/widget/AppCompatCheckBox": "androidx/widget/AppCompatCheckBox",
-      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImpl": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImpl",
-      "android/support/v17/preference/BaseLeanbackPreferenceFragment": "androidx/leanback/preference/BaseLeanbackPreferenceFragment",
-      "android/support/v17/leanback/app/GuidedStepRootLayout": "androidx/leanback/app/GuidedStepRootLayout",
-      "android/support/v4/app/FragmentManager$FragmentLifecycleCallbacks": "androidx/app/FragmentManager$FragmentLifecycleCallbacks",
-      "android/support/v4/media/MediaMetadataCompatApi21": "androidx/media/MediaMetadataCompatApi21",
-      "android/support/v7/app/MediaRouterThemeHelper": "androidx/app/MediaRouterThemeHelper",
-      "android/support/v4/util/MapCollections$EntrySet": "androidx/util/MapCollections$EntrySet",
-      "android/support/v7/widget/ViewBoundsCheck$ViewBounds": "androidx/widget/ViewBoundsCheck$ViewBounds",
-      "android/support/design/widget/HeaderScrollingViewBehavior": "androidx/design/widget/HeaderScrollingViewBehavior",
-      "android/support/v7/app/ActionBarDrawerToggle$IcsDelegate": "androidx/app/ActionBarDrawerToggle$IcsDelegate",
-      "android/support/v4/media/session/ParcelableVolumeInfo": "androidx/media/session/ParcelableVolumeInfo",
-      "android/support/v17/leanback/widget/GuidedAction$Builder": "androidx/leanback/widget/GuidedAction$Builder",
-      "android/support/v7/view/menu/CascadingMenuPopup": "androidx/view/menu/CascadingMenuPopup",
-      "android/support/v7/view/menu/MenuPopup": "androidx/view/menu/MenuPopup",
-      "android/support/v7/app/AlertDialog": "androidx/app/AlertDialog",
-      "android/support/v7/widget/RecyclerView$SavedState": "androidx/widget/RecyclerView$SavedState",
-      "android/support/wear/widget/drawer/WearableActionDrawerView$TitleViewHolder": "androidx/wear/widget/drawer/WearableActionDrawerView$TitleViewHolder",
-      "android/support/v13/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatBaseImpl": "androidx/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatBaseImpl",
-      "android/support/v17/leanback/app/VideoSupportFragmentGlueHost": "androidx/leanback/app/VideoSupportFragmentGlueHost",
-      "android/support/text/emoji/EmojiProcessor": "androidx/text/emoji/EmojiProcessor",
-      "android/support/v17/leanback/widget/ActionPresenterSelector": "androidx/leanback/widget/ActionPresenterSelector",
-      "android/support/v13/view/inputmethod/EditorInfoCompat$EditorInfoCompatImpl": "androidx/view/inputmethod/EditorInfoCompat$EditorInfoCompatImpl",
-      "android/support/text/emoji/widget/EmojiExtractTextLayout": "androidx/text/emoji/widget/EmojiExtractTextLayout",
-      "android/support/v17/leanback/widget/GuidedAction": "androidx/leanback/widget/GuidedAction",
+      "android/support/v17/leanback/R$color": "androidx/leanback/R$color",
+      "android/support/v17/leanback/R$drawable": "androidx/leanback/R$drawable",
+      "android/support/v4/view/animation/FastOutLinearInInterpolator": "androidx/view/animation/FastOutLinearInInterpolator",
+      "android/support/v17/leanback/widget/BackgroundHelper": "androidx/leanback/widget/BackgroundHelper",
+      "android/support/annotation/ColorInt": "androidx/annotation/ColorInt",
+      "android/support/v17/leanback/app/BaseFragment$1": "androidx/leanback/app/BaseFragment$1",
+      "android/support/v17/leanback/util/StateMachine$State": "androidx/leanback/util/StateMachine$State",
+      "android/support/v17/leanback/app/BaseFragment": "androidx/leanback/app/BaseFragment",
+      "android/support/v17/leanback/util/StateMachine": "androidx/leanback/util/StateMachine",
+      "android/support/v17/leanback/app/ProgressBarManager": "androidx/leanback/app/ProgressBarManager",
+      "android/support/v17/leanback/app/BaseFragment$2": "androidx/leanback/app/BaseFragment$2",
+      "android/support/v17/leanback/app/BaseFragment$3": "androidx/leanback/app/BaseFragment$3",
+      "android/support/v17/leanback/app/BaseFragment$4": "androidx/leanback/app/BaseFragment$4",
+      "android/support/v17/leanback/app/BaseFragment$5": "androidx/leanback/app/BaseFragment$5",
       "android/support/v17/leanback/util/StateMachine$Condition": "androidx/leanback/util/StateMachine$Condition",
-      "android/support/text/emoji/flatbuffer/Table": "androidx/text/emoji/flatbuffer/Table",
-      "android/support/v4/os/OperationCanceledException": "androidx/os/OperationCanceledException",
-      "android/support/v7/media/RegisteredMediaRouteProvider$PrivateHandler": "androidx/media/RegisteredMediaRouteProvider$PrivateHandler",
-      "android/support/v7/widget/RecyclerView$Adapter": "androidx/widget/RecyclerView$Adapter",
-      "android/support/v7/util/ListUpdateCallback": "androidx/util/ListUpdateCallback",
-      "android/support/v4/media/MediaDescriptionCompatApi21": "androidx/media/MediaDescriptionCompatApi21",
-      "android/support/v4/view/ViewCompat$FocusRealDirection": "androidx/view/legacy/ViewCompat$FocusRealDirection",
-      "android/support/v4/media/session/MediaControllerCompat$Callback": "androidx/media/session/MediaControllerCompat$Callback",
-      "android/support/v4/media/MediaDescriptionCompatApi23": "androidx/media/MediaDescriptionCompatApi23",
-      "android/support/v4/view/accessibility/AccessibilityEventCompat": "androidx/view/accessibility/AccessibilityEventCompat",
-      "android/support/text/emoji/FontRequestEmojiCompatConfig$FontProviderHelper": "androidx/text/emoji/FontRequestEmojiCompatConfig$FontProviderHelper",
-      "android/support/v4/app/NotificationCompat$Action$Builder": "androidx/app/NotificationCompat$Action$Builder",
-      "android/support/v4/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi16": "androidx/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi16",
-      "android/support/annotation/AnimatorRes": "androidx/annotation/AnimatorRes",
-      "android/support/v17/leanback/widget/GuidanceStylist": "androidx/leanback/widget/GuidanceStylist",
-      "android/support/v17/leanback/widget/StaticShadowHelper$ShadowHelperStubImpl": "androidx/leanback/widget/StaticShadowHelper$ShadowHelperStubImpl",
-      "android/support/v4/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi19": "androidx/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi19",
-      "android/support/v7/util/ThreadUtil": "androidx/util/ThreadUtil",
-      "android/support/content/InMemoryCursor$ObserverRelay": "androidx/content/InMemoryCursor$ObserverRelay",
-      "android/support/wear/R$drawable": "androidx/wear/R$drawable",
-      "android/support/constraint/ConstraintLayout$LayoutParams": "androidx/constraint/ConstraintLayout$LayoutParams",
-      "android/support/v7/widget/StaggeredGridLayoutManager$LazySpanLookup": "androidx/widget/StaggeredGridLayoutManager$LazySpanLookup",
-      "android/support/v17/leanback/app/SearchFragment$ExternalQuery": "androidx/leanback/app/SearchFragment$ExternalQuery",
-      "android/support/media/tv/TvContractCompat$Programs$Genres": "androidx/media/tv/TvContractCompat$Programs$Genres",
-      "android/support/v13/view/inputmethod/InputConnectionCompat$OnCommitContentListener": "androidx/view/inputmethod/InputConnectionCompat$OnCommitContentListener",
-      "android/support/content/ContentPager$CursorDisposition": "androidx/content/ContentPager$CursorDisposition",
-      "android/support/v4/view/AsyncLayoutInflater$OnInflateFinishedListener": "androidx/view/AsyncLayoutInflater$OnInflateFinishedListener",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplBase": "androidx/media/session/MediaControllerCompat$MediaControllerImplBase",
-      "android/support/v4/util/PatternsCompat": "androidx/util/PatternsCompat",
-      "android/support/v4/media/MediaBrowserServiceCompat$ServiceCallbacksCompat": "androidx/media/MediaBrowserServiceCompat$ServiceCallbacksCompat",
-      "android/support/v7/widget/AppCompatCompoundButtonHelper$DirectSetButtonDrawableInterface": "androidx/widget/AppCompatCompoundButtonHelper$DirectSetButtonDrawableInterface",
-      "android/support/v17/leanback/media/PlaybackGlueHost": "androidx/leanback/media/PlaybackGlueHost",
-      "android/support/v4/content/ModernAsyncTask": "androidx/content/ModernAsyncTask",
-      "android/support/v4/view/ViewCompat$ViewCompatApi15Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi15Impl",
-      "android/support/v4/os/ResultReceiver$MyResultReceiver": "androidx/os/ResultReceiver$MyResultReceiver",
-      "android/support/v7/widget/helper/ItemTouchHelper$Callback": "androidx/widget/helper/ItemTouchHelper$Callback",
-      "android/support/v17/leanback/app/BrowseFragment$MainFragmentRowsAdapterProvider": "androidx/leanback/app/BrowseFragment$MainFragmentRowsAdapterProvider",
-      "android/support/annotation/Nullable": "androidx/annotation/Nullable",
-      "android/support/v4/os/IResultReceiver$Stub": "androidx/os/IResultReceiver$Stub",
-      "android/support/v7/widget/Toolbar$ExpandedActionViewMenuPresenter": "androidx/widget/Toolbar$ExpandedActionViewMenuPresenter",
-      "android/support/v17/leanback/widget/picker/PickerUtility": "androidx/leanback/widget/picker/PickerUtility",
-      "android/support/v4/view/ViewPager$MyAccessibilityDelegate": "androidx/view/ViewPager$MyAccessibilityDelegate",
-      "android/support/v4/app/FragmentTransaction$Transit": "androidx/app/FragmentTransaction$Transit",
-      "android/support/v7/widget/DefaultItemAnimator": "androidx/widget/DefaultItemAnimator",
-      "android/support/v4/view/PagerAdapter": "androidx/widget/PagerAdapter",
-      "android/support/v7/media/MediaRouteProviderService$PrivateHandler": "androidx/media/MediaRouteProviderService$PrivateHandler",
-      "android/support/v4/media/session/IMediaControllerCallback$Stub$Proxy": "androidx/media/session/IMediaControllerCallback$Stub$Proxy",
-      "android/support/v4/media/RatingCompat": "androidx/media/RatingCompat",
-      "android/support/v7/widget/GridLayout$Assoc": "androidx/widget/GridLayout$Assoc",
-      "android/support/v17/leanback/app/DetailsSupportFragment$SetSelectionRunnable": "androidx/leanback/app/DetailsSupportFragment$SetSelectionRunnable",
-      "android/support/v7/util/DiffUtil$Callback": "androidx/util/DiffUtil$Callback",
-      "android/support/v7/widget/ActivityChooserModel$ActivityChooserModelClient": "androidx/widget/ActivityChooserModel$ActivityChooserModelClient",
-      "android/support/v7/widget/PagerSnapHelper": "androidx/widget/PagerSnapHelper",
-      "android/support/v17/leanback/widget/GridLayoutManager$LayoutParams": "androidx/leanback/widget/GridLayoutManager$LayoutParams",
-      "android/support/percent/R": "androidx/R",
-      "android/support/transition/Styleable$Fade": "androidx/transition/Styleable$Fade",
-      "android/support/design/widget/FloatingActionButtonLollipop": "androidx/design/widget/FloatingActionButtonLollipop",
-      "android/support/v17/leanback/widget/ActionPresenterSelector$OneLineActionPresenter": "androidx/leanback/widget/ActionPresenterSelector$OneLineActionPresenter",
-      "android/support/transition/ViewUtilsApi22": "androidx/transition/ViewUtilsApi22",
-      "android/support/v7/widget/LinearLayoutCompat$LayoutParams": "androidx/widget/LinearLayoutCompat$LayoutParams",
-      "android/support/transition/ViewUtilsApi21": "androidx/transition/ViewUtilsApi21",
+      "android/support/v17/leanback/transition/TransitionHelper": "androidx/leanback/transition/TransitionHelper",
+      "android/support/v17/leanback/app/BaseFragment$6": "androidx/leanback/app/BaseFragment$6",
+      "android/support/v17/leanback/util/StateMachine$Event": "androidx/leanback/util/StateMachine$Event",
+      "android/support/v17/leanback/app/FragmentUtil": "androidx/leanback/app/FragmentUtil",
+      "android/support/v17/leanback/app/BaseFragment$7": "androidx/leanback/app/BaseFragment$7",
+      "android/support/v17/leanback/transition/TransitionListener": "androidx/leanback/transition/TransitionListener",
       "android/support/v17/leanback/app/BrandedFragment": "androidx/leanback/app/BrandedFragment",
-      "android/support/text/emoji/bundled/BundledEmojiCompatConfig$BundledMetadataLoader": "androidx/text/emoji/bundled/BundledEmojiCompatConfig$BundledMetadataLoader",
-      "android/support/v17/preference/R": "androidx/leanback/preference/R",
-      "android/support/v4/content/res/TypedArrayUtils": "androidx/content/res/TypedArrayUtils",
-      "android/support/v7/app/ActionBar$LayoutParams": "androidx/app/ActionBar$LayoutParams",
-      "android/support/transition/Visibility$DisappearListener": "androidx/transition/Visibility$DisappearListener",
-      "android/support/v7/view/menu/MenuView$ItemView": "androidx/view/menu/MenuView$ItemView",
-      "android/support/text/emoji/flatbuffer/FlatBufferBuilder": "androidx/text/emoji/flatbuffer/FlatBufferBuilder",
+      "android/support/annotation/Nullable": "androidx/annotation/Nullable",
+      "android/support/v17/leanback/app/BaseRowFragment$1": "androidx/leanback/app/BaseRowFragment$1",
+      "android/support/v17/leanback/widget/OnChildViewHolderSelectedListener": "androidx/leanback/widget/OnChildViewHolderSelectedListener",
+      "android/support/v17/leanback/app/BaseRowFragment": "androidx/leanback/app/BaseRowFragment",
+      "android/support/v7/widget/RecyclerView$ViewHolder": "androidx/widget/recyclerview/RecyclerView$ViewHolder",
+      "android/support/v7/widget/RecyclerView": "androidx/widget/recyclerview/RecyclerView",
       "android/support/v17/leanback/app/BaseRowFragment$LateSelectionObserver": "androidx/leanback/app/BaseRowFragment$LateSelectionObserver",
-      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnSwipeProgressChangedListener": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnSwipeProgressChangedListener",
-      "android/support/v4/content/PermissionChecker$PermissionResult": "androidx/content/PermissionChecker$PermissionResult",
-      "android/support/v7/media/MediaRouter$ControlRequestCallback": "androidx/media/MediaRouter$ControlRequestCallback",
-      "android/support/wear/widget/drawer/WearableNavigationDrawerView$WearableNavigationDrawerAdapter": "androidx/wear/widget/drawer/WearableNavigationDrawerView$WearableNavigationDrawerAdapter",
+      "android/support/v7/widget/RecyclerView$AdapterDataObserver": "androidx/widget/recyclerview/RecyclerView$AdapterDataObserver",
+      "android/support/v17/leanback/widget/ItemBridgeAdapter": "androidx/leanback/widget/ItemBridgeAdapter",
+      "android/support/v17/leanback/widget/VerticalGridView": "androidx/leanback/widget/VerticalGridView",
+      "android/support/v7/widget/RecyclerView$Adapter": "androidx/widget/recyclerview/RecyclerView$Adapter",
+      "android/support/v17/leanback/widget/ObjectAdapter": "androidx/leanback/widget/ObjectAdapter",
+      "android/support/v17/leanback/widget/PresenterSelector": "androidx/leanback/widget/PresenterSelector",
+      "android/support/v17/leanback/widget/Row": "androidx/leanback/widget/Row",
+      "android/support/v17/leanback/widget/ListRow": "androidx/leanback/widget/ListRow",
+      "android/support/v17/leanback/app/BaseRowSupportFragment$1": "androidx/leanback/app/BaseRowSupportFragment$1",
+      "android/support/v17/leanback/app/BaseRowSupportFragment": "androidx/leanback/app/BaseRowSupportFragment",
+      "android/support/v17/leanback/app/BaseRowSupportFragment$LateSelectionObserver": "androidx/leanback/app/BaseRowSupportFragment$LateSelectionObserver",
+      "android/support/v4/app/Fragment": "androidx/app/Fragment",
+      "android/support/v17/leanback/app/BaseSupportFragment$1": "androidx/leanback/app/BaseSupportFragment$1",
+      "android/support/v17/leanback/app/BaseSupportFragment": "androidx/leanback/app/BaseSupportFragment",
+      "android/support/v17/leanback/app/BaseSupportFragment$2": "androidx/leanback/app/BaseSupportFragment$2",
+      "android/support/v17/leanback/app/BaseSupportFragment$3": "androidx/leanback/app/BaseSupportFragment$3",
+      "android/support/v17/leanback/app/BaseSupportFragment$4": "androidx/leanback/app/BaseSupportFragment$4",
+      "android/support/v17/leanback/app/BaseSupportFragment$5": "androidx/leanback/app/BaseSupportFragment$5",
+      "android/support/v17/leanback/app/BaseSupportFragment$6": "androidx/leanback/app/BaseSupportFragment$6",
+      "android/support/v17/leanback/app/BaseSupportFragment$7": "androidx/leanback/app/BaseSupportFragment$7",
+      "android/support/v17/leanback/app/BrandedSupportFragment": "androidx/leanback/app/BrandedSupportFragment",
+      "android/support/v17/leanback/widget/SearchOrbView$Colors": "androidx/leanback/widget/SearchOrbView$Colors",
+      "android/support/v17/leanback/widget/SearchOrbView": "androidx/leanback/widget/SearchOrbView",
+      "android/support/v17/leanback/widget/TitleViewAdapter$Provider": "androidx/leanback/widget/TitleViewAdapter$Provider",
+      "android/support/v17/leanback/widget/TitleViewAdapter": "androidx/leanback/widget/TitleViewAdapter",
+      "android/support/v17/leanback/R$attr": "androidx/leanback/R$attr",
+      "android/support/v17/leanback/R$layout": "androidx/leanback/R$layout",
+      "android/support/v17/leanback/widget/TitleHelper": "androidx/leanback/widget/TitleHelper",
+      "android/support/v17/leanback/app/BrowseFragment$1": "androidx/leanback/app/BrowseFragment$1",
+      "android/support/v17/leanback/app/BrowseFragment": "androidx/leanback/app/BrowseFragment",
+      "android/support/v17/leanback/app/BrowseFragment$10": "androidx/leanback/app/BrowseFragment$10",
+      "android/support/v17/leanback/app/HeadersFragment$OnHeaderClickedListener": "androidx/leanback/app/HeadersFragment$OnHeaderClickedListener",
+      "android/support/v17/leanback/widget/RowHeaderPresenter$ViewHolder": "androidx/leanback/widget/RowHeaderPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/RowHeaderPresenter": "androidx/leanback/widget/RowHeaderPresenter",
+      "android/support/v17/leanback/app/HeadersFragment": "androidx/leanback/app/HeadersFragment",
+      "android/support/v17/leanback/app/BrowseFragment$11": "androidx/leanback/app/BrowseFragment$11",
+      "android/support/v17/leanback/app/HeadersFragment$OnHeaderViewSelectedListener": "androidx/leanback/app/HeadersFragment$OnHeaderViewSelectedListener",
+      "android/support/v17/leanback/app/BrowseFragment$12": "androidx/leanback/app/BrowseFragment$12",
+      "android/support/v7/widget/RecyclerView$OnScrollListener": "androidx/widget/recyclerview/RecyclerView$OnScrollListener",
+      "android/support/v17/leanback/app/BrowseFragment$2": "androidx/leanback/app/BrowseFragment$2",
+      "android/support/v17/leanback/widget/Presenter": "androidx/leanback/widget/Presenter",
+      "android/support/v17/leanback/app/BrowseFragment$3": "androidx/leanback/app/BrowseFragment$3",
+      "android/support/v17/leanback/app/BrowseFragment$BrowseTransitionListener": "androidx/leanback/app/BrowseFragment$BrowseTransitionListener",
+      "android/support/v17/leanback/app/BrowseFragment$BackStackListener": "androidx/leanback/app/BrowseFragment$BackStackListener",
+      "android/support/v17/leanback/app/BrowseFragment$4": "androidx/leanback/app/BrowseFragment$4",
+      "android/support/v17/leanback/widget/BrowseFrameLayout$OnFocusSearchListener": "androidx/leanback/widget/BrowseFrameLayout$OnFocusSearchListener",
+      "android/support/v17/leanback/widget/BrowseFrameLayout": "androidx/leanback/widget/BrowseFrameLayout",
+      "android/support/v4/view/ViewCompat": "androidx/view/ViewCompat",
+      "android/support/v17/leanback/app/BrowseFragment$5": "androidx/leanback/app/BrowseFragment$5",
+      "android/support/v17/leanback/widget/BrowseFrameLayout$OnChildFocusListener": "androidx/leanback/widget/BrowseFrameLayout$OnChildFocusListener",
+      "android/support/v17/leanback/app/BrowseFragment$6": "androidx/leanback/app/BrowseFragment$6",
+      "android/support/v17/leanback/app/BrowseFragment$7": "androidx/leanback/app/BrowseFragment$7",
+      "android/support/v17/leanback/app/BrowseFragment$8": "androidx/leanback/app/BrowseFragment$8",
+      "android/support/v17/leanback/app/BrowseFragment$9": "androidx/leanback/app/BrowseFragment$9",
+      "android/support/v17/leanback/app/BrowseFragment$MainFragmentAdapter": "androidx/leanback/app/BrowseFragment$MainFragmentAdapter",
+      "android/support/v17/leanback/app/BrowseFragment$ExpandPreLayout": "androidx/leanback/app/BrowseFragment$ExpandPreLayout",
+      "android/support/v17/leanback/app/BrowseFragment$FragmentFactory": "androidx/leanback/app/BrowseFragment$FragmentFactory",
+      "android/support/v17/leanback/app/BrowseFragment$FragmentHost": "androidx/leanback/app/BrowseFragment$FragmentHost",
+      "android/support/v17/leanback/app/BrowseFragment$FragmentHostImpl": "androidx/leanback/app/BrowseFragment$FragmentHostImpl",
+      "android/support/v17/leanback/app/BrowseFragment$ListRowFragmentFactory": "androidx/leanback/app/BrowseFragment$ListRowFragmentFactory",
+      "android/support/v17/leanback/app/RowsFragment": "androidx/leanback/app/RowsFragment",
+      "android/support/v17/leanback/app/BrowseFragment$MainFragmentAdapterProvider": "androidx/leanback/app/BrowseFragment$MainFragmentAdapterProvider",
+      "android/support/v17/leanback/app/BrowseFragment$MainFragmentAdapterRegistry": "androidx/leanback/app/BrowseFragment$MainFragmentAdapterRegistry",
+      "android/support/v17/leanback/widget/PageRow": "androidx/leanback/widget/PageRow",
+      "android/support/v17/leanback/app/BrowseFragment$MainFragmentItemViewSelectedListener": "androidx/leanback/app/BrowseFragment$MainFragmentItemViewSelectedListener",
+      "android/support/v17/leanback/widget/OnItemViewSelectedListener": "androidx/leanback/widget/OnItemViewSelectedListener",
+      "android/support/v17/leanback/app/BrowseFragment$MainFragmentRowsAdapter": "androidx/leanback/app/BrowseFragment$MainFragmentRowsAdapter",
+      "android/support/v17/leanback/widget/Presenter$ViewHolder": "androidx/leanback/widget/Presenter$ViewHolder",
+      "android/support/v17/leanback/widget/RowPresenter$ViewHolder": "androidx/leanback/widget/RowPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/RowPresenter": "androidx/leanback/widget/RowPresenter",
+      "android/support/v17/leanback/widget/Presenter$ViewHolderTask": "androidx/leanback/widget/Presenter$ViewHolderTask",
+      "android/support/v17/leanback/widget/OnItemViewClickedListener": "androidx/leanback/widget/OnItemViewClickedListener",
+      "android/support/v17/leanback/app/BrowseFragment$MainFragmentRowsAdapterProvider": "androidx/leanback/app/BrowseFragment$MainFragmentRowsAdapterProvider",
+      "android/support/v17/leanback/app/BrowseFragment$SetSelectionRunnable": "androidx/leanback/app/BrowseFragment$SetSelectionRunnable",
+      "android/support/v17/leanback/R$styleable": "androidx/leanback/R$styleable",
+      "android/support/v17/leanback/R$dimen": "androidx/leanback/R$dimen",
+      "android/support/v17/leanback/R$fraction": "androidx/leanback/R$fraction",
+      "android/support/v17/leanback/R$transition": "androidx/leanback/R$transition",
+      "android/support/v17/leanback/app/ListRowDataAdapter": "androidx/leanback/app/ListRowDataAdapter",
+      "android/support/v17/leanback/widget/ScaleFrameLayout": "androidx/leanback/widget/ScaleFrameLayout",
+      "android/support/v17/leanback/widget/InvisibleRowPresenter": "androidx/leanback/widget/InvisibleRowPresenter",
+      "android/support/v17/leanback/app/BrowseSupportFragment$1": "androidx/leanback/app/BrowseSupportFragment$1",
+      "android/support/v17/leanback/app/BrowseSupportFragment": "androidx/leanback/app/BrowseSupportFragment",
+      "android/support/v17/leanback/app/BrowseSupportFragment$10": "androidx/leanback/app/BrowseSupportFragment$10",
+      "android/support/v17/leanback/app/HeadersSupportFragment$OnHeaderClickedListener": "androidx/leanback/app/HeadersSupportFragment$OnHeaderClickedListener",
+      "android/support/v17/leanback/app/HeadersSupportFragment": "androidx/leanback/app/HeadersSupportFragment",
+      "android/support/v17/leanback/app/BrowseSupportFragment$11": "androidx/leanback/app/BrowseSupportFragment$11",
+      "android/support/v17/leanback/app/HeadersSupportFragment$OnHeaderViewSelectedListener": "androidx/leanback/app/HeadersSupportFragment$OnHeaderViewSelectedListener",
+      "android/support/v17/leanback/app/BrowseSupportFragment$12": "androidx/leanback/app/BrowseSupportFragment$12",
+      "android/support/v4/app/FragmentManager": "androidx/app/FragmentManager",
+      "android/support/v4/app/FragmentTransaction": "androidx/app/FragmentTransaction",
+      "android/support/v17/leanback/app/BrowseSupportFragment$2": "androidx/leanback/app/BrowseSupportFragment$2",
+      "android/support/v17/leanback/app/BrowseSupportFragment$3": "androidx/leanback/app/BrowseSupportFragment$3",
+      "android/support/v4/app/FragmentManager$BackStackEntry": "androidx/app/FragmentManager$BackStackEntry",
+      "android/support/v17/leanback/app/BrowseSupportFragment$BrowseTransitionListener": "androidx/leanback/app/BrowseSupportFragment$BrowseTransitionListener",
+      "android/support/v17/leanback/app/BrowseSupportFragment$BackStackListener": "androidx/leanback/app/BrowseSupportFragment$BackStackListener",
+      "android/support/v17/leanback/app/BrowseSupportFragment$4": "androidx/leanback/app/BrowseSupportFragment$4",
+      "android/support/v17/leanback/app/BrowseSupportFragment$5": "androidx/leanback/app/BrowseSupportFragment$5",
+      "android/support/v17/leanback/app/BrowseSupportFragment$6": "androidx/leanback/app/BrowseSupportFragment$6",
+      "android/support/v17/leanback/app/BrowseSupportFragment$7": "androidx/leanback/app/BrowseSupportFragment$7",
+      "android/support/v17/leanback/app/BrowseSupportFragment$8": "androidx/leanback/app/BrowseSupportFragment$8",
+      "android/support/v17/leanback/app/BrowseSupportFragment$9": "androidx/leanback/app/BrowseSupportFragment$9",
+      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentAdapter": "androidx/leanback/app/BrowseSupportFragment$MainFragmentAdapter",
+      "android/support/v4/app/FragmentManager$OnBackStackChangedListener": "androidx/app/FragmentManager$OnBackStackChangedListener",
+      "android/support/v17/leanback/app/BrowseSupportFragment$ExpandPreLayout": "androidx/leanback/app/BrowseSupportFragment$ExpandPreLayout",
+      "android/support/v17/leanback/app/BrowseSupportFragment$FragmentFactory": "androidx/leanback/app/BrowseSupportFragment$FragmentFactory",
+      "android/support/v17/leanback/app/BrowseSupportFragment$FragmentHost": "androidx/leanback/app/BrowseSupportFragment$FragmentHost",
+      "android/support/v17/leanback/app/BrowseSupportFragment$FragmentHostImpl": "androidx/leanback/app/BrowseSupportFragment$FragmentHostImpl",
+      "android/support/v17/leanback/app/BrowseSupportFragment$ListRowFragmentFactory": "androidx/leanback/app/BrowseSupportFragment$ListRowFragmentFactory",
+      "android/support/v17/leanback/app/RowsSupportFragment": "androidx/leanback/app/RowsSupportFragment",
+      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentAdapterProvider": "androidx/leanback/app/BrowseSupportFragment$MainFragmentAdapterProvider",
+      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentAdapterRegistry": "androidx/leanback/app/BrowseSupportFragment$MainFragmentAdapterRegistry",
+      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentItemViewSelectedListener": "androidx/leanback/app/BrowseSupportFragment$MainFragmentItemViewSelectedListener",
+      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapter": "androidx/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapter",
+      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapterProvider": "androidx/leanback/app/BrowseSupportFragment$MainFragmentRowsAdapterProvider",
+      "android/support/v17/leanback/app/BrowseSupportFragment$SetSelectionRunnable": "androidx/leanback/app/BrowseSupportFragment$SetSelectionRunnable",
+      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper$1": "androidx/leanback/app/DetailsBackgroundVideoHelper$1",
+      "android/support/v17/leanback/widget/ParallaxTarget": "androidx/leanback/widget/ParallaxTarget",
+      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper": "androidx/leanback/app/DetailsBackgroundVideoHelper",
+      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper$2": "androidx/leanback/app/DetailsBackgroundVideoHelper$2",
+      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper$3": "androidx/leanback/app/DetailsBackgroundVideoHelper$3",
+      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper$4": "androidx/leanback/app/DetailsBackgroundVideoHelper$4",
+      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper$PlaybackControlStateCallback": "androidx/leanback/app/DetailsBackgroundVideoHelper$PlaybackControlStateCallback",
+      "android/support/v17/leanback/media/PlaybackGlue$PlayerCallback": "androidx/leanback/media/PlaybackGlue$PlayerCallback",
+      "android/support/v17/leanback/media/PlaybackGlue": "androidx/leanback/media/PlaybackGlue",
+      "android/support/v17/leanback/widget/Parallax$IntProperty": "androidx/leanback/widget/Parallax$IntProperty",
+      "android/support/v17/leanback/widget/Parallax": "androidx/leanback/widget/Parallax",
+      "android/support/v17/leanback/widget/Parallax$PropertyMarkerValue": "androidx/leanback/widget/Parallax$PropertyMarkerValue",
+      "android/support/v17/leanback/widget/DetailsParallax": "androidx/leanback/widget/DetailsParallax",
+      "android/support/v17/leanback/widget/ParallaxEffect": "androidx/leanback/widget/ParallaxEffect",
+      "android/support/v17/leanback/app/DetailsFragment$1": "androidx/leanback/app/DetailsFragment$1",
+      "android/support/v17/leanback/app/DetailsFragment": "androidx/leanback/app/DetailsFragment",
+      "android/support/v17/leanback/app/DetailsFragment$10": "androidx/leanback/app/DetailsFragment$10",
+      "android/support/v17/leanback/app/DetailsFragment$11": "androidx/leanback/app/DetailsFragment$11",
+      "android/support/v17/leanback/widget/ItemBridgeAdapter$AdapterListener": "androidx/leanback/widget/ItemBridgeAdapter$AdapterListener",
+      "android/support/v17/leanback/widget/ItemBridgeAdapter$ViewHolder": "androidx/leanback/widget/ItemBridgeAdapter$ViewHolder",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter",
+      "android/support/v17/leanback/app/DetailsFragment$12": "androidx/leanback/app/DetailsFragment$12",
+      "android/support/v17/leanback/app/DetailsFragment$13": "androidx/leanback/app/DetailsFragment$13",
+      "android/support/v17/leanback/app/DetailsFragment$14": "androidx/leanback/app/DetailsFragment$14",
+      "android/support/v17/leanback/app/DetailsFragmentBackgroundController": "androidx/leanback/app/DetailsFragmentBackgroundController",
+      "android/support/v17/leanback/app/DetailsFragment$15": "androidx/leanback/app/DetailsFragment$15",
+      "android/support/v17/leanback/app/DetailsFragment$2": "androidx/leanback/app/DetailsFragment$2",
+      "android/support/v17/leanback/app/DetailsFragment$3": "androidx/leanback/app/DetailsFragment$3",
+      "android/support/v17/leanback/app/DetailsFragment$WaitEnterTransitionTimeout": "androidx/leanback/app/DetailsFragment$WaitEnterTransitionTimeout",
+      "android/support/v17/leanback/app/DetailsFragment$4": "androidx/leanback/app/DetailsFragment$4",
+      "android/support/v17/leanback/app/DetailsFragment$5": "androidx/leanback/app/DetailsFragment$5",
+      "android/support/v17/leanback/app/DetailsFragment$6": "androidx/leanback/app/DetailsFragment$6",
+      "android/support/v17/leanback/app/DetailsFragment$7": "androidx/leanback/app/DetailsFragment$7",
+      "android/support/v17/leanback/app/DetailsFragment$8": "androidx/leanback/app/DetailsFragment$8",
+      "android/support/v17/leanback/app/DetailsFragment$9": "androidx/leanback/app/DetailsFragment$9",
+      "android/support/v17/leanback/widget/BaseOnItemViewSelectedListener": "androidx/leanback/widget/BaseOnItemViewSelectedListener",
+      "android/support/v17/leanback/app/DetailsFragment$SetSelectionRunnable": "androidx/leanback/app/DetailsFragment$SetSelectionRunnable",
+      "android/support/v17/leanback/widget/ItemAlignmentFacet$ItemAlignmentDef": "androidx/leanback/widget/ItemAlignmentFacet$ItemAlignmentDef",
+      "android/support/v17/leanback/widget/ItemAlignmentFacet": "androidx/leanback/widget/ItemAlignmentFacet",
+      "android/support/v17/leanback/widget/BaseOnItemViewClickedListener": "androidx/leanback/widget/BaseOnItemViewClickedListener",
+      "android/support/annotation/CallSuper": "androidx/annotation/CallSuper",
+      "android/support/v17/leanback/widget/ParallaxTarget$PropertyValuesHolderTarget": "androidx/leanback/widget/ParallaxTarget$PropertyValuesHolderTarget",
+      "android/support/v17/leanback/widget/DetailsParallaxDrawable": "androidx/leanback/widget/DetailsParallaxDrawable",
+      "android/support/v17/leanback/graphics/FitWidthBitmapDrawable": "androidx/leanback/graphics/FitWidthBitmapDrawable",
+      "android/support/v17/leanback/media/PlaybackGlueHost": "androidx/leanback/media/PlaybackGlueHost",
+      "android/support/v17/leanback/app/VideoFragment": "androidx/leanback/app/VideoFragment",
+      "android/support/v17/leanback/app/VideoFragmentGlueHost": "androidx/leanback/app/VideoFragmentGlueHost",
+      "android/support/v17/leanback/app/DetailsSupportFragment$1": "androidx/leanback/app/DetailsSupportFragment$1",
+      "android/support/v17/leanback/app/DetailsSupportFragment": "androidx/leanback/app/DetailsSupportFragment",
+      "android/support/v17/leanback/app/DetailsSupportFragment$10": "androidx/leanback/app/DetailsSupportFragment$10",
+      "android/support/v17/leanback/app/DetailsSupportFragment$11": "androidx/leanback/app/DetailsSupportFragment$11",
+      "android/support/v17/leanback/app/DetailsSupportFragment$12": "androidx/leanback/app/DetailsSupportFragment$12",
+      "android/support/v17/leanback/app/DetailsSupportFragment$13": "androidx/leanback/app/DetailsSupportFragment$13",
+      "android/support/v17/leanback/app/DetailsSupportFragment$14": "androidx/leanback/app/DetailsSupportFragment$14",
+      "android/support/v17/leanback/app/DetailsSupportFragmentBackgroundController": "androidx/leanback/app/DetailsSupportFragmentBackgroundController",
+      "android/support/v17/leanback/app/DetailsSupportFragment$15": "androidx/leanback/app/DetailsSupportFragment$15",
+      "android/support/v17/leanback/app/DetailsSupportFragment$2": "androidx/leanback/app/DetailsSupportFragment$2",
+      "android/support/v17/leanback/app/DetailsSupportFragment$3": "androidx/leanback/app/DetailsSupportFragment$3",
+      "android/support/v17/leanback/app/DetailsSupportFragment$WaitEnterTransitionTimeout": "androidx/leanback/app/DetailsSupportFragment$WaitEnterTransitionTimeout",
+      "android/support/v4/app/FragmentActivity": "androidx/app/FragmentActivity",
+      "android/support/v17/leanback/app/DetailsSupportFragment$4": "androidx/leanback/app/DetailsSupportFragment$4",
+      "android/support/v17/leanback/app/DetailsSupportFragment$5": "androidx/leanback/app/DetailsSupportFragment$5",
+      "android/support/v17/leanback/app/DetailsSupportFragment$6": "androidx/leanback/app/DetailsSupportFragment$6",
+      "android/support/v17/leanback/app/DetailsSupportFragment$7": "androidx/leanback/app/DetailsSupportFragment$7",
+      "android/support/v17/leanback/app/DetailsSupportFragment$8": "androidx/leanback/app/DetailsSupportFragment$8",
+      "android/support/v17/leanback/app/DetailsSupportFragment$9": "androidx/leanback/app/DetailsSupportFragment$9",
+      "android/support/v17/leanback/app/DetailsSupportFragment$SetSelectionRunnable": "androidx/leanback/app/DetailsSupportFragment$SetSelectionRunnable",
+      "android/support/v17/leanback/app/VideoSupportFragment": "androidx/leanback/app/VideoSupportFragment",
+      "android/support/v17/leanback/app/VideoSupportFragmentGlueHost": "androidx/leanback/app/VideoSupportFragmentGlueHost",
+      "android/support/v17/leanback/app/ErrorFragment": "androidx/leanback/app/ErrorFragment",
+      "android/support/v17/leanback/app/ErrorSupportFragment": "androidx/leanback/app/ErrorSupportFragment",
+      "android/support/annotation/RequiresApi": "androidx/annotation/RequiresApi",
+      "android/support/v17/leanback/app/GuidedStepFragment$1": "androidx/leanback/app/GuidedStepFragment$1",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$EditListener": "androidx/leanback/widget/GuidedActionAdapter$EditListener",
+      "android/support/v17/leanback/app/GuidedStepFragment": "androidx/leanback/app/GuidedStepFragment",
+      "android/support/v17/leanback/widget/GuidedActionAdapter": "androidx/leanback/widget/GuidedActionAdapter",
+      "android/support/v17/leanback/widget/GuidedAction": "androidx/leanback/widget/GuidedAction",
+      "android/support/v17/leanback/app/GuidedStepFragment$2": "androidx/leanback/app/GuidedStepFragment$2",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$ClickListener": "androidx/leanback/widget/GuidedActionAdapter$ClickListener",
+      "android/support/v17/leanback/app/GuidedStepFragment$3": "androidx/leanback/app/GuidedStepFragment$3",
+      "android/support/v17/leanback/app/GuidedStepFragment$4": "androidx/leanback/app/GuidedStepFragment$4",
+      "android/support/v17/leanback/widget/GuidedActionsStylist": "androidx/leanback/widget/GuidedActionsStylist",
+      "android/support/v17/leanback/app/GuidedStepFragment$DummyFragment": "androidx/leanback/app/GuidedStepFragment$DummyFragment",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$FocusListener": "androidx/leanback/widget/GuidedActionAdapter$FocusListener",
+      "android/support/v17/leanback/widget/GuidanceStylist$Guidance": "androidx/leanback/widget/GuidanceStylist$Guidance",
+      "android/support/v17/leanback/widget/GuidanceStylist": "androidx/leanback/widget/GuidanceStylist",
+      "android/support/v17/leanback/widget/GuidedActionAdapterGroup": "androidx/leanback/widget/GuidedActionAdapterGroup",
+      "android/support/v17/leanback/widget/DiffCallback": "androidx/leanback/widget/DiffCallback",
+      "android/support/v17/leanback/app/GuidedStepRootLayout": "androidx/leanback/app/GuidedStepRootLayout",
+      "android/support/v17/leanback/widget/NonOverlappingLinearLayout": "androidx/leanback/widget/NonOverlappingLinearLayout",
+      "android/support/v4/app/ActivityCompat": "androidx/app/ActivityCompat",
+      "android/support/v17/leanback/widget/Util": "androidx/leanback/widget/Util",
+      "android/support/v17/leanback/app/GuidedStepSupportFragment$1": "androidx/leanback/app/GuidedStepSupportFragment$1",
+      "android/support/v17/leanback/app/GuidedStepSupportFragment": "androidx/leanback/app/GuidedStepSupportFragment",
+      "android/support/v17/leanback/app/GuidedStepSupportFragment$2": "androidx/leanback/app/GuidedStepSupportFragment$2",
+      "android/support/v17/leanback/app/GuidedStepSupportFragment$3": "androidx/leanback/app/GuidedStepSupportFragment$3",
+      "android/support/v17/leanback/app/GuidedStepSupportFragment$4": "androidx/leanback/app/GuidedStepSupportFragment$4",
+      "android/support/v17/leanback/app/GuidedStepSupportFragment$DummyFragment": "androidx/leanback/app/GuidedStepSupportFragment$DummyFragment",
+      "android/support/v17/leanback/app/HeadersFragment$1$1": "androidx/leanback/app/HeadersFragment$1$1",
+      "android/support/v17/leanback/app/HeadersFragment$1": "androidx/leanback/app/HeadersFragment$1",
+      "android/support/v17/leanback/widget/ItemBridgeAdapter$Wrapper": "androidx/leanback/widget/ItemBridgeAdapter$Wrapper",
+      "android/support/v17/leanback/app/HeadersFragment$2": "androidx/leanback/app/HeadersFragment$2",
+      "android/support/v17/leanback/app/HeadersFragment$3": "androidx/leanback/app/HeadersFragment$3",
+      "android/support/v17/leanback/app/HeadersFragment$NoOverlappingFrameLayout": "androidx/leanback/app/HeadersFragment$NoOverlappingFrameLayout",
+      "android/support/v17/leanback/widget/FocusHighlightHelper": "androidx/leanback/widget/FocusHighlightHelper",
+      "android/support/v17/leanback/widget/ClassPresenterSelector": "androidx/leanback/widget/ClassPresenterSelector",
+      "android/support/v17/leanback/widget/DividerRow": "androidx/leanback/widget/DividerRow",
+      "android/support/v17/leanback/widget/DividerPresenter": "androidx/leanback/widget/DividerPresenter",
+      "android/support/v17/leanback/widget/SectionRow": "androidx/leanback/widget/SectionRow",
+      "android/support/v17/leanback/app/HeadersSupportFragment$1$1": "androidx/leanback/app/HeadersSupportFragment$1$1",
+      "android/support/v17/leanback/app/HeadersSupportFragment$1": "androidx/leanback/app/HeadersSupportFragment$1",
+      "android/support/v17/leanback/app/HeadersSupportFragment$2": "androidx/leanback/app/HeadersSupportFragment$2",
+      "android/support/v17/leanback/app/HeadersSupportFragment$3": "androidx/leanback/app/HeadersSupportFragment$3",
+      "android/support/v17/leanback/app/HeadersSupportFragment$NoOverlappingFrameLayout": "androidx/leanback/app/HeadersSupportFragment$NoOverlappingFrameLayout",
+      "android/support/v17/leanback/app/ListRowDataAdapter$QueueBasedDataObserver": "androidx/leanback/app/ListRowDataAdapter$QueueBasedDataObserver",
+      "android/support/v17/leanback/widget/ObjectAdapter$DataObserver": "androidx/leanback/widget/ObjectAdapter$DataObserver",
+      "android/support/v17/leanback/app/ListRowDataAdapter$SimpleDataObserver": "androidx/leanback/app/ListRowDataAdapter$SimpleDataObserver",
+      "android/support/v17/leanback/app/OnboardingFragment$1": "androidx/leanback/app/OnboardingFragment$1",
+      "android/support/v17/leanback/app/OnboardingFragment": "androidx/leanback/app/OnboardingFragment",
+      "android/support/v17/leanback/app/OnboardingFragment$2": "androidx/leanback/app/OnboardingFragment$2",
+      "android/support/v17/leanback/app/OnboardingFragment$3": "androidx/leanback/app/OnboardingFragment$3",
+      "android/support/v17/leanback/app/OnboardingFragment$4": "androidx/leanback/app/OnboardingFragment$4",
+      "android/support/v17/leanback/app/OnboardingFragment$5": "androidx/leanback/app/OnboardingFragment$5",
+      "android/support/v17/leanback/app/OnboardingFragment$6": "androidx/leanback/app/OnboardingFragment$6",
+      "android/support/v17/leanback/app/OnboardingFragment$7": "androidx/leanback/app/OnboardingFragment$7",
+      "android/support/v17/leanback/widget/PagingIndicator": "androidx/leanback/widget/PagingIndicator",
+      "android/support/v17/leanback/app/OnboardingFragment$8": "androidx/leanback/app/OnboardingFragment$8",
+      "android/support/v17/leanback/R$animator": "androidx/leanback/R$animator",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$1": "androidx/leanback/app/OnboardingSupportFragment$1",
+      "android/support/v17/leanback/app/OnboardingSupportFragment": "androidx/leanback/app/OnboardingSupportFragment",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$2": "androidx/leanback/app/OnboardingSupportFragment$2",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$3": "androidx/leanback/app/OnboardingSupportFragment$3",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$4": "androidx/leanback/app/OnboardingSupportFragment$4",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$5": "androidx/leanback/app/OnboardingSupportFragment$5",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$6": "androidx/leanback/app/OnboardingSupportFragment$6",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$7": "androidx/leanback/app/OnboardingSupportFragment$7",
+      "android/support/v17/leanback/app/OnboardingSupportFragment$8": "androidx/leanback/app/OnboardingSupportFragment$8",
+      "android/support/v17/leanback/app/PermissionHelper": "androidx/leanback/app/PermissionHelper",
+      "android/support/v17/leanback/app/PlaybackFragment$1": "androidx/leanback/app/PlaybackFragment$1",
+      "android/support/v17/leanback/app/PlaybackFragment": "androidx/leanback/app/PlaybackFragment",
+      "android/support/v17/leanback/widget/PlaybackRowPresenter$ViewHolder": "androidx/leanback/widget/PlaybackRowPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/PlaybackRowPresenter": "androidx/leanback/widget/PlaybackRowPresenter",
+      "android/support/v17/leanback/app/PlaybackFragment$10": "androidx/leanback/app/PlaybackFragment$10",
+      "android/support/v17/leanback/widget/PlaybackSeekUi$Client": "androidx/leanback/widget/PlaybackSeekUi$Client",
+      "android/support/v17/leanback/widget/PlaybackSeekUi": "androidx/leanback/widget/PlaybackSeekUi",
+      "android/support/v17/leanback/app/PlaybackFragment$11": "androidx/leanback/app/PlaybackFragment$11",
+      "android/support/v17/leanback/widget/PlaybackSeekDataProvider": "androidx/leanback/widget/PlaybackSeekDataProvider",
+      "android/support/v17/leanback/app/PlaybackFragment$2": "androidx/leanback/app/PlaybackFragment$2",
+      "android/support/v17/leanback/app/PlaybackFragment$3": "androidx/leanback/app/PlaybackFragment$3",
+      "android/support/v17/leanback/app/PlaybackFragment$OnFadeCompleteListener": "androidx/leanback/app/PlaybackFragment$OnFadeCompleteListener",
+      "android/support/v17/leanback/app/PlaybackFragment$4": "androidx/leanback/app/PlaybackFragment$4",
+      "android/support/v17/leanback/app/PlaybackFragment$5": "androidx/leanback/app/PlaybackFragment$5",
+      "android/support/v17/leanback/widget/BaseGridView$OnTouchInterceptListener": "androidx/leanback/widget/BaseGridView$OnTouchInterceptListener",
+      "android/support/v17/leanback/widget/BaseGridView": "androidx/leanback/widget/BaseGridView",
+      "android/support/v17/leanback/app/PlaybackFragment$6": "androidx/leanback/app/PlaybackFragment$6",
+      "android/support/v17/leanback/widget/BaseGridView$OnKeyInterceptListener": "androidx/leanback/widget/BaseGridView$OnKeyInterceptListener",
+      "android/support/v17/leanback/app/PlaybackFragment$7": "androidx/leanback/app/PlaybackFragment$7",
+      "android/support/v17/leanback/app/PlaybackFragment$8": "androidx/leanback/app/PlaybackFragment$8",
+      "android/support/v17/leanback/app/PlaybackFragment$9": "androidx/leanback/app/PlaybackFragment$9",
+      "android/support/v17/leanback/app/PlaybackFragment$SetSelectionRunnable": "androidx/leanback/app/PlaybackFragment$SetSelectionRunnable",
+      "android/support/v17/leanback/media/PlaybackGlueHost$HostCallback": "androidx/leanback/media/PlaybackGlueHost$HostCallback",
+      "android/support/v17/leanback/R$string": "androidx/leanback/R$string",
+      "android/support/v17/leanback/R$integer": "androidx/leanback/R$integer",
+      "android/support/v17/leanback/widget/ArrayObjectAdapter": "androidx/leanback/widget/ArrayObjectAdapter",
+      "android/support/v17/leanback/widget/SparseArrayObjectAdapter": "androidx/leanback/widget/SparseArrayObjectAdapter",
+      "android/support/v17/leanback/app/PlaybackFragmentGlueHost$1": "androidx/leanback/app/PlaybackFragmentGlueHost$1",
+      "android/support/v17/leanback/app/PlaybackFragmentGlueHost": "androidx/leanback/app/PlaybackFragmentGlueHost",
+      "android/support/v17/leanback/widget/OnActionClickedListener": "androidx/leanback/widget/OnActionClickedListener",
+      "android/support/v17/leanback/widget/Action": "androidx/leanback/widget/Action",
+      "android/support/v17/leanback/app/PlaybackFragmentGlueHost$2": "androidx/leanback/app/PlaybackFragmentGlueHost$2",
+      "android/support/v17/leanback/media/PlaybackGlueHost$PlayerCallback": "androidx/leanback/media/PlaybackGlueHost$PlayerCallback",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$1": "androidx/leanback/app/PlaybackSupportFragment$1",
+      "android/support/v17/leanback/app/PlaybackSupportFragment": "androidx/leanback/app/PlaybackSupportFragment",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$10": "androidx/leanback/app/PlaybackSupportFragment$10",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$11": "androidx/leanback/app/PlaybackSupportFragment$11",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$2": "androidx/leanback/app/PlaybackSupportFragment$2",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$3": "androidx/leanback/app/PlaybackSupportFragment$3",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$OnFadeCompleteListener": "androidx/leanback/app/PlaybackSupportFragment$OnFadeCompleteListener",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$4": "androidx/leanback/app/PlaybackSupportFragment$4",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$5": "androidx/leanback/app/PlaybackSupportFragment$5",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$6": "androidx/leanback/app/PlaybackSupportFragment$6",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$7": "androidx/leanback/app/PlaybackSupportFragment$7",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$8": "androidx/leanback/app/PlaybackSupportFragment$8",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$9": "androidx/leanback/app/PlaybackSupportFragment$9",
+      "android/support/v17/leanback/app/PlaybackSupportFragment$SetSelectionRunnable": "androidx/leanback/app/PlaybackSupportFragment$SetSelectionRunnable",
+      "android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost$1": "androidx/leanback/app/PlaybackSupportFragmentGlueHost$1",
+      "android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost": "androidx/leanback/app/PlaybackSupportFragmentGlueHost",
+      "android/support/v17/leanback/app/PlaybackSupportFragmentGlueHost$2": "androidx/leanback/app/PlaybackSupportFragmentGlueHost$2",
+      "android/support/v17/leanback/app/ProgressBarManager$1": "androidx/leanback/app/ProgressBarManager$1",
+      "android/support/v17/leanback/app/RowsFragment$1": "androidx/leanback/app/RowsFragment$1",
+      "android/support/v17/leanback/app/RowsFragment$RowViewHolderExtra": "androidx/leanback/app/RowsFragment$RowViewHolderExtra",
+      "android/support/v17/leanback/app/RowsFragment$2$1": "androidx/leanback/app/RowsFragment$2$1",
+      "android/support/v17/leanback/app/RowsFragment$2": "androidx/leanback/app/RowsFragment$2",
+      "android/support/v17/leanback/widget/ViewHolderTask": "androidx/leanback/widget/ViewHolderTask",
+      "android/support/v17/leanback/app/RowsFragment$MainFragmentAdapter": "androidx/leanback/app/RowsFragment$MainFragmentAdapter",
+      "android/support/v17/leanback/app/RowsFragment$MainFragmentRowsAdapter": "androidx/leanback/app/RowsFragment$MainFragmentRowsAdapter",
+      "android/support/v7/widget/RecyclerView$RecycledViewPool": "androidx/widget/recyclerview/RecyclerView$RecycledViewPool",
+      "android/support/v17/leanback/widget/ListRowPresenter$ViewHolder": "androidx/leanback/widget/ListRowPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/ListRowPresenter": "androidx/leanback/widget/ListRowPresenter",
+      "android/support/v17/leanback/widget/HorizontalGridView": "androidx/leanback/widget/HorizontalGridView",
+      "android/support/v17/leanback/app/RowsSupportFragment$1": "androidx/leanback/app/RowsSupportFragment$1",
+      "android/support/v17/leanback/app/RowsSupportFragment$RowViewHolderExtra": "androidx/leanback/app/RowsSupportFragment$RowViewHolderExtra",
+      "android/support/v17/leanback/app/RowsSupportFragment$2$1": "androidx/leanback/app/RowsSupportFragment$2$1",
+      "android/support/v17/leanback/app/RowsSupportFragment$2": "androidx/leanback/app/RowsSupportFragment$2",
+      "android/support/v17/leanback/app/RowsSupportFragment$MainFragmentAdapter": "androidx/leanback/app/RowsSupportFragment$MainFragmentAdapter",
+      "android/support/v17/leanback/app/RowsSupportFragment$MainFragmentRowsAdapter": "androidx/leanback/app/RowsSupportFragment$MainFragmentRowsAdapter",
+      "android/support/v17/leanback/app/SearchFragment$1": "androidx/leanback/app/SearchFragment$1",
+      "android/support/v17/leanback/app/SearchFragment": "androidx/leanback/app/SearchFragment",
+      "android/support/v17/leanback/app/SearchFragment$2": "androidx/leanback/app/SearchFragment$2",
+      "android/support/v17/leanback/app/SearchFragment$3": "androidx/leanback/app/SearchFragment$3",
+      "android/support/v17/leanback/app/SearchFragment$SearchResultProvider": "androidx/leanback/app/SearchFragment$SearchResultProvider",
+      "android/support/v17/leanback/app/SearchFragment$4": "androidx/leanback/app/SearchFragment$4",
+      "android/support/v17/leanback/widget/SearchBar": "androidx/leanback/widget/SearchBar",
+      "android/support/v17/leanback/app/SearchFragment$5": "androidx/leanback/app/SearchFragment$5",
+      "android/support/v17/leanback/widget/SearchBar$SearchBarPermissionListener": "androidx/leanback/widget/SearchBar$SearchBarPermissionListener",
+      "android/support/v17/leanback/app/SearchFragment$6": "androidx/leanback/app/SearchFragment$6",
+      "android/support/v17/leanback/widget/SearchBar$SearchBarListener": "androidx/leanback/widget/SearchBar$SearchBarListener",
+      "android/support/v17/leanback/app/SearchFragment$7": "androidx/leanback/app/SearchFragment$7",
+      "android/support/v17/leanback/app/SearchFragment$ExternalQuery": "androidx/leanback/app/SearchFragment$ExternalQuery",
+      "android/support/v17/leanback/widget/SpeechRecognitionCallback": "androidx/leanback/widget/SpeechRecognitionCallback",
+      "android/support/v17/leanback/app/SearchSupportFragment$1": "androidx/leanback/app/SearchSupportFragment$1",
+      "android/support/v17/leanback/app/SearchSupportFragment": "androidx/leanback/app/SearchSupportFragment",
+      "android/support/v17/leanback/app/SearchSupportFragment$2": "androidx/leanback/app/SearchSupportFragment$2",
+      "android/support/v17/leanback/app/SearchSupportFragment$3": "androidx/leanback/app/SearchSupportFragment$3",
+      "android/support/v17/leanback/app/SearchSupportFragment$SearchResultProvider": "androidx/leanback/app/SearchSupportFragment$SearchResultProvider",
+      "android/support/v17/leanback/app/SearchSupportFragment$4": "androidx/leanback/app/SearchSupportFragment$4",
+      "android/support/v17/leanback/app/SearchSupportFragment$5": "androidx/leanback/app/SearchSupportFragment$5",
+      "android/support/v17/leanback/app/SearchSupportFragment$6": "androidx/leanback/app/SearchSupportFragment$6",
+      "android/support/v17/leanback/app/SearchSupportFragment$7": "androidx/leanback/app/SearchSupportFragment$7",
+      "android/support/v17/leanback/app/SearchSupportFragment$ExternalQuery": "androidx/leanback/app/SearchSupportFragment$ExternalQuery",
+      "android/support/v17/leanback/app/VerticalGridFragment$1": "androidx/leanback/app/VerticalGridFragment$1",
+      "android/support/v17/leanback/app/VerticalGridFragment": "androidx/leanback/app/VerticalGridFragment",
+      "android/support/v17/leanback/app/VerticalGridFragment$2": "androidx/leanback/app/VerticalGridFragment$2",
+      "android/support/v17/leanback/widget/VerticalGridPresenter$ViewHolder": "androidx/leanback/widget/VerticalGridPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/VerticalGridPresenter": "androidx/leanback/widget/VerticalGridPresenter",
+      "android/support/v17/leanback/app/VerticalGridFragment$3": "androidx/leanback/app/VerticalGridFragment$3",
+      "android/support/v17/leanback/widget/OnChildLaidOutListener": "androidx/leanback/widget/OnChildLaidOutListener",
+      "android/support/v17/leanback/app/VerticalGridFragment$4": "androidx/leanback/app/VerticalGridFragment$4",
+      "android/support/v17/leanback/app/VerticalGridSupportFragment$1": "androidx/leanback/app/VerticalGridSupportFragment$1",
+      "android/support/v17/leanback/app/VerticalGridSupportFragment": "androidx/leanback/app/VerticalGridSupportFragment",
+      "android/support/v17/leanback/app/VerticalGridSupportFragment$2": "androidx/leanback/app/VerticalGridSupportFragment$2",
+      "android/support/v17/leanback/app/VerticalGridSupportFragment$3": "androidx/leanback/app/VerticalGridSupportFragment$3",
+      "android/support/v17/leanback/app/VerticalGridSupportFragment$4": "androidx/leanback/app/VerticalGridSupportFragment$4",
+      "android/support/v17/leanback/app/VideoFragment$1": "androidx/leanback/app/VideoFragment$1",
+      "android/support/v17/leanback/media/SurfaceHolderGlueHost": "androidx/leanback/media/SurfaceHolderGlueHost",
+      "android/support/v17/leanback/app/VideoSupportFragment$1": "androidx/leanback/app/VideoSupportFragment$1",
+      "android/support/v17/leanback/database/CursorMapper": "androidx/leanback/database/CursorMapper",
+      "android/support/v17/leanback/graphics/BoundsRule$ValueRule": "androidx/leanback/graphics/BoundsRule$ValueRule",
+      "android/support/v17/leanback/graphics/BoundsRule": "androidx/leanback/graphics/BoundsRule",
+      "android/support/v17/leanback/graphics/ColorFilterCache": "androidx/leanback/graphics/ColorFilterCache",
+      "android/support/v17/leanback/graphics/ColorFilterDimmer": "androidx/leanback/graphics/ColorFilterDimmer",
+      "android/support/v17/leanback/graphics/ColorOverlayDimmer": "androidx/leanback/graphics/ColorOverlayDimmer",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$1": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$1",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable",
+      "android/support/v17/leanback/graphics/CompositeDrawable": "androidx/leanback/graphics/CompositeDrawable",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$2": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$2",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$3": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$3",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$4": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$4",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$5": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$5",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$6": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$6",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$7": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$7",
+      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable$8": "androidx/leanback/graphics/CompositeDrawable$ChildDrawable$8",
+      "android/support/v17/leanback/graphics/CompositeDrawable$CompositeState": "androidx/leanback/graphics/CompositeDrawable$CompositeState",
+      "android/support/v17/leanback/graphics/FitWidthBitmapDrawable$1": "androidx/leanback/graphics/FitWidthBitmapDrawable$1",
+      "android/support/v17/leanback/graphics/FitWidthBitmapDrawable$2": "androidx/leanback/graphics/FitWidthBitmapDrawable$2",
+      "android/support/v17/leanback/graphics/FitWidthBitmapDrawable$BitmapState": "androidx/leanback/graphics/FitWidthBitmapDrawable$BitmapState",
+      "android/support/v17/leanback/media/MediaControllerAdapter$1": "androidx/leanback/media/MediaControllerAdapter$1",
+      "android/support/v17/leanback/media/MediaControllerAdapter": "androidx/leanback/media/MediaControllerAdapter",
+      "android/support/v17/leanback/media/PlayerAdapter$Callback": "androidx/leanback/media/PlayerAdapter$Callback",
+      "android/support/v17/leanback/media/PlayerAdapter": "androidx/leanback/media/PlayerAdapter",
+      "android/support/v17/leanback/media/MediaControllerAdapter$2": "androidx/leanback/media/MediaControllerAdapter$2",
+      "android/support/v4/media/session/MediaControllerCompat$Callback": "androidx/media/session/MediaControllerCompat$Callback",
+      "android/support/v4/media/session/MediaControllerCompat": "androidx/media/session/MediaControllerCompat",
+      "android/support/v4/media/session/PlaybackStateCompat": "androidx/media/session/PlaybackStateCompat",
+      "android/support/v4/media/MediaMetadataCompat": "androidx/media/MediaMetadataCompat",
+      "android/support/v4/media/session/MediaControllerCompat$TransportControls": "androidx/media/session/MediaControllerCompat$TransportControls",
+      "android/support/v4/media/MediaDescriptionCompat": "androidx/media/MediaDescriptionCompat",
+      "android/support/v17/leanback/media/MediaControllerGlue$1": "androidx/leanback/media/MediaControllerGlue$1",
+      "android/support/v17/leanback/media/MediaControllerGlue": "androidx/leanback/media/MediaControllerGlue",
+      "android/support/v17/leanback/media/PlaybackControlGlue": "androidx/leanback/media/PlaybackControlGlue",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$1": "androidx/leanback/media/MediaPlayerAdapter$1",
+      "android/support/v17/leanback/media/MediaPlayerAdapter": "androidx/leanback/media/MediaPlayerAdapter",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$2": "androidx/leanback/media/MediaPlayerAdapter$2",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$3": "androidx/leanback/media/MediaPlayerAdapter$3",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$4": "androidx/leanback/media/MediaPlayerAdapter$4",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$5": "androidx/leanback/media/MediaPlayerAdapter$5",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$6": "androidx/leanback/media/MediaPlayerAdapter$6",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$7": "androidx/leanback/media/MediaPlayerAdapter$7",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$8": "androidx/leanback/media/MediaPlayerAdapter$8",
+      "android/support/v17/leanback/media/MediaPlayerAdapter$VideoPlayerSurfaceHolderCallback": "androidx/leanback/media/MediaPlayerAdapter$VideoPlayerSurfaceHolderCallback",
+      "android/support/v17/leanback/media/MediaPlayerGlue$1": "androidx/leanback/media/MediaPlayerGlue$1",
+      "android/support/v17/leanback/media/MediaPlayerGlue": "androidx/leanback/media/MediaPlayerGlue",
+      "android/support/v17/leanback/media/MediaPlayerGlue$2": "androidx/leanback/media/MediaPlayerGlue$2",
+      "android/support/v17/leanback/media/MediaPlayerGlue$3": "androidx/leanback/media/MediaPlayerGlue$3",
+      "android/support/v17/leanback/media/MediaPlayerGlue$4": "androidx/leanback/media/MediaPlayerGlue$4",
+      "android/support/v17/leanback/media/MediaPlayerGlue$5": "androidx/leanback/media/MediaPlayerGlue$5",
+      "android/support/v17/leanback/widget/PlaybackControlsRow": "androidx/leanback/widget/PlaybackControlsRow",
+      "android/support/v17/leanback/media/MediaPlayerGlue$VideoPlayerSurfaceHolderCallback": "androidx/leanback/media/MediaPlayerGlue$VideoPlayerSurfaceHolderCallback",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$ThumbsDownAction": "androidx/leanback/widget/PlaybackControlsRow$ThumbsDownAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$ThumbsUpAction": "androidx/leanback/widget/PlaybackControlsRow$ThumbsUpAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$RepeatAction": "androidx/leanback/widget/PlaybackControlsRow$RepeatAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$ThumbsAction": "androidx/leanback/widget/PlaybackControlsRow$ThumbsAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$RewindAction": "androidx/leanback/widget/PlaybackControlsRow$RewindAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$FastForwardAction": "androidx/leanback/widget/PlaybackControlsRow$FastForwardAction",
+      "android/support/v17/leanback/media/PlaybackBannerControlGlue$1": "androidx/leanback/media/PlaybackBannerControlGlue$1",
+      "android/support/v17/leanback/widget/AbstractDetailsDescriptionPresenter": "androidx/leanback/widget/AbstractDetailsDescriptionPresenter",
+      "android/support/v17/leanback/media/PlaybackBannerControlGlue": "androidx/leanback/media/PlaybackBannerControlGlue",
+      "android/support/v17/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder": "androidx/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder",
+      "android/support/v17/leanback/media/PlaybackBannerControlGlue$2": "androidx/leanback/media/PlaybackBannerControlGlue$2",
+      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter": "androidx/leanback/widget/PlaybackControlsRowPresenter",
+      "android/support/v17/leanback/media/PlaybackBannerControlGlue$ACTION_": "androidx/leanback/media/PlaybackBannerControlGlue$ACTION_",
+      "android/support/v17/leanback/media/PlaybackBannerControlGlue$SPEED": "androidx/leanback/media/PlaybackBannerControlGlue$SPEED",
+      "android/support/v17/leanback/media/PlaybackBaseControlGlue": "androidx/leanback/media/PlaybackBaseControlGlue",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$PlayPauseAction": "androidx/leanback/widget/PlaybackControlsRow$PlayPauseAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$SkipNextAction": "androidx/leanback/widget/PlaybackControlsRow$SkipNextAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$SkipPreviousAction": "androidx/leanback/widget/PlaybackControlsRow$SkipPreviousAction",
+      "android/support/v17/leanback/media/PlaybackBaseControlGlue$1": "androidx/leanback/media/PlaybackBaseControlGlue$1",
+      "android/support/v17/leanback/widget/ControlButtonPresenterSelector": "androidx/leanback/widget/ControlButtonPresenterSelector",
+      "android/support/v17/leanback/media/PlaybackControlGlue$1": "androidx/leanback/media/PlaybackControlGlue$1",
+      "android/support/v17/leanback/media/PlaybackControlGlue$2": "androidx/leanback/media/PlaybackControlGlue$2",
+      "android/support/v17/leanback/media/PlaybackControlGlue$UpdatePlaybackStateHandler": "androidx/leanback/media/PlaybackControlGlue$UpdatePlaybackStateHandler",
+      "android/support/v17/leanback/media/PlaybackGlue$1": "androidx/leanback/media/PlaybackGlue$1",
+      "android/support/v17/leanback/media/PlaybackGlue$2": "androidx/leanback/media/PlaybackGlue$2",
+      "android/support/v17/leanback/media/PlaybackTransportControlGlue$1": "androidx/leanback/media/PlaybackTransportControlGlue$1",
+      "android/support/v17/leanback/media/PlaybackTransportControlGlue": "androidx/leanback/media/PlaybackTransportControlGlue",
+      "android/support/v17/leanback/media/PlaybackTransportControlGlue$2": "androidx/leanback/media/PlaybackTransportControlGlue$2",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter": "androidx/leanback/widget/PlaybackTransportRowPresenter",
+      "android/support/v17/leanback/media/PlaybackTransportControlGlue$SeekUiClient": "androidx/leanback/media/PlaybackTransportControlGlue$SeekUiClient",
+      "android/support/v17/leanback/media/PlaybackTransportControlGlue$UpdatePlaybackStateHandler": "androidx/leanback/media/PlaybackTransportControlGlue$UpdatePlaybackStateHandler",
+      "android/support/v17/leanback/system/Settings$Customizations": "androidx/leanback/system/Settings$Customizations",
+      "android/support/v17/leanback/system/Settings": "androidx/leanback/system/Settings",
+      "android/support/v17/leanback/widget/ShadowOverlayContainer": "androidx/leanback/widget/ShadowOverlayContainer",
+      "android/support/v17/leanback/transition/FadeAndShortSlide$1": "androidx/leanback/transition/FadeAndShortSlide$1",
+      "android/support/v17/leanback/transition/FadeAndShortSlide$CalculateSlide": "androidx/leanback/transition/FadeAndShortSlide$CalculateSlide",
+      "android/support/v17/leanback/transition/FadeAndShortSlide": "androidx/leanback/transition/FadeAndShortSlide",
+      "android/support/v17/leanback/transition/FadeAndShortSlide$2": "androidx/leanback/transition/FadeAndShortSlide$2",
+      "android/support/v17/leanback/transition/FadeAndShortSlide$3": "androidx/leanback/transition/FadeAndShortSlide$3",
+      "android/support/v17/leanback/transition/FadeAndShortSlide$4": "androidx/leanback/transition/FadeAndShortSlide$4",
+      "android/support/v17/leanback/transition/FadeAndShortSlide$5": "androidx/leanback/transition/FadeAndShortSlide$5",
+      "android/support/v17/leanback/transition/FadeAndShortSlide$6": "androidx/leanback/transition/FadeAndShortSlide$6",
+      "android/support/v17/leanback/transition/TranslationAnimationCreator": "androidx/leanback/transition/TranslationAnimationCreator",
+      "android/support/v17/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperDefault": "androidx/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperDefault",
+      "android/support/v17/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperVersion": "androidx/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperVersion",
+      "android/support/v17/leanback/transition/LeanbackTransitionHelper": "androidx/leanback/transition/LeanbackTransitionHelper",
+      "android/support/v17/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperKitKatImpl": "androidx/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperKitKatImpl",
+      "android/support/v17/leanback/transition/LeanbackTransitionHelperKitKat": "androidx/leanback/transition/LeanbackTransitionHelperKitKat",
+      "android/support/v17/leanback/R$anim": "androidx/leanback/R$anim",
+      "android/support/v17/leanback/transition/SlideKitkat": "androidx/leanback/transition/SlideKitkat",
+      "android/support/v17/leanback/transition/ParallaxTransition$1": "androidx/leanback/transition/ParallaxTransition$1",
+      "android/support/v17/leanback/transition/ParallaxTransition": "androidx/leanback/transition/ParallaxTransition",
+      "android/support/v17/leanback/transition/Scale$1": "androidx/leanback/transition/Scale$1",
+      "android/support/v17/leanback/transition/Scale": "androidx/leanback/transition/Scale",
+      "android/support/v17/leanback/transition/SlideKitkat$1": "androidx/leanback/transition/SlideKitkat$1",
+      "android/support/v17/leanback/transition/SlideKitkat$CalculateSlideHorizontal": "androidx/leanback/transition/SlideKitkat$CalculateSlideHorizontal",
+      "android/support/v17/leanback/transition/SlideKitkat$2": "androidx/leanback/transition/SlideKitkat$2",
+      "android/support/v17/leanback/transition/SlideKitkat$CalculateSlideVertical": "androidx/leanback/transition/SlideKitkat$CalculateSlideVertical",
+      "android/support/v17/leanback/transition/SlideKitkat$3": "androidx/leanback/transition/SlideKitkat$3",
+      "android/support/v17/leanback/transition/SlideKitkat$4": "androidx/leanback/transition/SlideKitkat$4",
+      "android/support/v17/leanback/transition/SlideKitkat$5": "androidx/leanback/transition/SlideKitkat$5",
+      "android/support/v17/leanback/transition/SlideKitkat$6": "androidx/leanback/transition/SlideKitkat$6",
+      "android/support/v17/leanback/transition/SlideKitkat$CalculateSlide": "androidx/leanback/transition/SlideKitkat$CalculateSlide",
+      "android/support/v17/leanback/transition/SlideKitkat$SlideAnimatorListener": "androidx/leanback/transition/SlideKitkat$SlideAnimatorListener",
+      "android/support/v17/leanback/transition/SlideNoPropagation": "androidx/leanback/transition/SlideNoPropagation",
+      "android/support/v17/leanback/transition/TransitionEpicenterCallback": "androidx/leanback/transition/TransitionEpicenterCallback",
+      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperApi21Impl": "androidx/leanback/transition/TransitionHelper$TransitionHelperApi21Impl",
+      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperKitkatImpl": "androidx/leanback/transition/TransitionHelper$TransitionHelperKitkatImpl",
+      "android/support/v17/leanback/transition/TransitionHelperApi21": "androidx/leanback/transition/TransitionHelperApi21",
+      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperStubImpl": "androidx/leanback/transition/TransitionHelper$TransitionHelperStubImpl",
+      "android/support/v17/leanback/transition/TransitionHelperKitkat": "androidx/leanback/transition/TransitionHelperKitkat",
+      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperStubImpl$TransitionStub": "androidx/leanback/transition/TransitionHelper$TransitionHelperStubImpl$TransitionStub",
+      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperVersionImpl": "androidx/leanback/transition/TransitionHelper$TransitionHelperVersionImpl",
+      "android/support/v17/leanback/transition/TransitionHelperApi21$1": "androidx/leanback/transition/TransitionHelperApi21$1",
+      "android/support/v17/leanback/transition/TransitionHelperKitkat$1": "androidx/leanback/transition/TransitionHelperKitkat$1",
+      "android/support/v17/leanback/transition/TransitionHelperKitkat$CustomChangeBounds": "androidx/leanback/transition/TransitionHelperKitkat$CustomChangeBounds",
+      "android/support/v17/leanback/transition/TranslationAnimationCreator$TransitionPositionListener": "androidx/leanback/transition/TranslationAnimationCreator$TransitionPositionListener",
+      "android/support/v17/leanback/util/MathUtil": "androidx/leanback/util/MathUtil",
+      "android/support/v17/leanback/util/StateMachine$Transition": "androidx/leanback/util/StateMachine$Transition",
+      "android/support/v17/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder$1": "androidx/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder$2": "androidx/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder$2",
+      "android/support/v17/leanback/widget/AbstractMediaItemPresenter$1": "androidx/leanback/widget/AbstractMediaItemPresenter$1",
+      "android/support/v17/leanback/widget/AbstractMediaItemPresenter": "androidx/leanback/widget/AbstractMediaItemPresenter",
+      "android/support/v17/leanback/widget/AbstractMediaItemPresenter$ViewHolder$1": "androidx/leanback/widget/AbstractMediaItemPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/AbstractMediaItemPresenter$ViewHolder": "androidx/leanback/widget/AbstractMediaItemPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/AbstractMediaItemPresenter$ViewHolder$2": "androidx/leanback/widget/AbstractMediaItemPresenter$ViewHolder$2",
+      "android/support/v17/leanback/widget/AbstractMediaItemPresenter$ViewHolder$3": "androidx/leanback/widget/AbstractMediaItemPresenter$ViewHolder$3",
+      "android/support/v17/leanback/widget/AbstractMediaItemPresenter$ViewHolder$4": "androidx/leanback/widget/AbstractMediaItemPresenter$ViewHolder$4",
+      "android/support/v17/leanback/widget/MultiActionsProvider$MultiAction": "androidx/leanback/widget/MultiActionsProvider$MultiAction",
+      "android/support/v17/leanback/widget/MultiActionsProvider": "androidx/leanback/widget/MultiActionsProvider",
+      "android/support/v17/leanback/widget/MediaItemActionPresenter": "androidx/leanback/widget/MediaItemActionPresenter",
+      "android/support/v17/leanback/widget/AbstractMediaListHeaderPresenter$ViewHolder": "androidx/leanback/widget/AbstractMediaListHeaderPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/AbstractMediaListHeaderPresenter": "androidx/leanback/widget/AbstractMediaListHeaderPresenter",
+      "android/support/v17/leanback/widget/ActionPresenterSelector$ActionPresenter": "androidx/leanback/widget/ActionPresenterSelector$ActionPresenter",
+      "android/support/v17/leanback/widget/ActionPresenterSelector": "androidx/leanback/widget/ActionPresenterSelector",
+      "android/support/v17/leanback/widget/ActionPresenterSelector$ActionViewHolder": "androidx/leanback/widget/ActionPresenterSelector$ActionViewHolder",
+      "android/support/v17/leanback/widget/ActionPresenterSelector$OneLineActionPresenter": "androidx/leanback/widget/ActionPresenterSelector$OneLineActionPresenter",
+      "android/support/v17/leanback/widget/ActionPresenterSelector$TwoLineActionPresenter": "androidx/leanback/widget/ActionPresenterSelector$TwoLineActionPresenter",
+      "android/support/v17/leanback/widget/ArrayObjectAdapter$1": "androidx/leanback/widget/ArrayObjectAdapter$1",
+      "android/support/v7/util/DiffUtil$Callback": "androidx/widget/recyclerview/DiffUtil$Callback",
+      "android/support/v7/util/DiffUtil": "androidx/widget/recyclerview/DiffUtil",
+      "android/support/v17/leanback/widget/ArrayObjectAdapter$2": "androidx/leanback/widget/ArrayObjectAdapter$2",
+      "android/support/v7/util/ListUpdateCallback": "androidx/widget/recyclerview/ListUpdateCallback",
+      "android/support/v7/util/DiffUtil$DiffResult": "androidx/widget/recyclerview/DiffUtil$DiffResult",
+      "android/support/v17/leanback/widget/BaseCardView$1": "androidx/leanback/widget/BaseCardView$1",
+      "android/support/v17/leanback/widget/BaseCardView": "androidx/leanback/widget/BaseCardView",
+      "android/support/v17/leanback/widget/BaseCardView$2": "androidx/leanback/widget/BaseCardView$2",
+      "android/support/v17/leanback/widget/BaseCardView$3": "androidx/leanback/widget/BaseCardView$3",
+      "android/support/v17/leanback/widget/BaseCardView$4": "androidx/leanback/widget/BaseCardView$4",
+      "android/support/v17/leanback/widget/BaseCardView$AnimationBase": "androidx/leanback/widget/BaseCardView$AnimationBase",
+      "android/support/annotation/VisibleForTesting": "androidx/annotation/VisibleForTesting",
+      "android/support/v17/leanback/widget/BaseCardView$InfoAlphaAnimation": "androidx/leanback/widget/BaseCardView$InfoAlphaAnimation",
+      "android/support/v17/leanback/widget/BaseCardView$InfoHeightAnimation": "androidx/leanback/widget/BaseCardView$InfoHeightAnimation",
+      "android/support/v17/leanback/widget/BaseCardView$InfoOffsetAnimation": "androidx/leanback/widget/BaseCardView$InfoOffsetAnimation",
+      "android/support/v17/leanback/widget/BaseCardView$LayoutParams": "androidx/leanback/widget/BaseCardView$LayoutParams",
+      "android/support/v17/leanback/widget/BaseGridView$1": "androidx/leanback/widget/BaseGridView$1",
+      "android/support/v7/widget/RecyclerView$RecyclerListener": "androidx/widget/recyclerview/RecyclerView$RecyclerListener",
+      "android/support/v17/leanback/widget/GridLayoutManager": "androidx/leanback/widget/GridLayoutManager",
+      "android/support/v17/leanback/widget/BaseGridView$2": "androidx/leanback/widget/BaseGridView$2",
+      "android/support/v17/leanback/widget/BaseGridView$3": "androidx/leanback/widget/BaseGridView$3",
+      "android/support/v17/leanback/widget/BaseGridView$OnMotionInterceptListener": "androidx/leanback/widget/BaseGridView$OnMotionInterceptListener",
+      "android/support/v17/leanback/widget/BaseGridView$OnUnhandledKeyListener": "androidx/leanback/widget/BaseGridView$OnUnhandledKeyListener",
+      "android/support/v7/widget/RecyclerView$ItemAnimator": "androidx/widget/recyclerview/RecyclerView$ItemAnimator",
+      "android/support/v7/widget/RecyclerView$LayoutManager": "androidx/widget/recyclerview/RecyclerView$LayoutManager",
+      "android/support/v17/leanback/widget/WindowAlignment$Axis": "androidx/leanback/widget/WindowAlignment$Axis",
+      "android/support/v17/leanback/widget/WindowAlignment": "androidx/leanback/widget/WindowAlignment",
+      "android/support/v7/widget/SimpleItemAnimator": "androidx/widget/recyclerview/SimpleItemAnimator",
+      "android/support/v17/leanback/widget/OnChildSelectedListener": "androidx/leanback/widget/OnChildSelectedListener",
+      "android/support/v17/leanback/widget/ViewsStateBundle": "androidx/leanback/widget/ViewsStateBundle",
+      "android/support/v17/leanback/widget/BrowseRowsFrameLayout": "androidx/leanback/widget/BrowseRowsFrameLayout",
+      "android/support/v17/leanback/widget/CheckableImageView": "androidx/leanback/widget/CheckableImageView",
+      "android/support/v17/leanback/widget/ControlBar$OnChildFocusedListener": "androidx/leanback/widget/ControlBar$OnChildFocusedListener",
+      "android/support/v17/leanback/widget/ControlBar": "androidx/leanback/widget/ControlBar",
+      "android/support/v17/leanback/widget/ControlBarPresenter$BoundData": "androidx/leanback/widget/ControlBarPresenter$BoundData",
+      "android/support/v17/leanback/widget/ControlBarPresenter": "androidx/leanback/widget/ControlBarPresenter",
+      "android/support/v17/leanback/widget/ControlBarPresenter$OnControlClickedListener": "androidx/leanback/widget/ControlBarPresenter$OnControlClickedListener",
+      "android/support/v17/leanback/widget/ControlBarPresenter$OnControlSelectedListener": "androidx/leanback/widget/ControlBarPresenter$OnControlSelectedListener",
+      "android/support/v17/leanback/widget/ControlBarPresenter$ViewHolder$1": "androidx/leanback/widget/ControlBarPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/ControlBarPresenter$ViewHolder": "androidx/leanback/widget/ControlBarPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/ControlBarPresenter$ViewHolder$2": "androidx/leanback/widget/ControlBarPresenter$ViewHolder$2",
+      "android/support/v17/leanback/widget/ControlBarPresenter$ViewHolder$3": "androidx/leanback/widget/ControlBarPresenter$ViewHolder$3",
+      "android/support/v17/leanback/widget/ControlButtonPresenterSelector$ActionViewHolder": "androidx/leanback/widget/ControlButtonPresenterSelector$ActionViewHolder",
+      "android/support/v17/leanback/widget/ControlButtonPresenterSelector$ControlButtonPresenter": "androidx/leanback/widget/ControlButtonPresenterSelector$ControlButtonPresenter",
+      "android/support/v17/leanback/widget/CursorObjectAdapter": "androidx/leanback/widget/CursorObjectAdapter",
+      "android/support/v17/leanback/widget/DetailsOverviewLogoPresenter$ViewHolder": "androidx/leanback/widget/DetailsOverviewLogoPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/DetailsOverviewLogoPresenter": "androidx/leanback/widget/DetailsOverviewLogoPresenter",
+      "android/support/v17/leanback/widget/DetailsOverviewRow": "androidx/leanback/widget/DetailsOverviewRow",
+      "android/support/v17/leanback/widget/DetailsOverviewRow$Listener": "androidx/leanback/widget/DetailsOverviewRow$Listener",
+      "android/support/v17/leanback/widget/HeaderItem": "androidx/leanback/widget/HeaderItem",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$1": "androidx/leanback/widget/DetailsOverviewRowPresenter$1",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter": "androidx/leanback/widget/DetailsOverviewRowPresenter",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder": "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ActionsItemBridgeAdapter$1": "androidx/leanback/widget/DetailsOverviewRowPresenter$ActionsItemBridgeAdapter$1",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ActionsItemBridgeAdapter": "androidx/leanback/widget/DetailsOverviewRowPresenter$ActionsItemBridgeAdapter",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$1": "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$2": "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$2",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$3": "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$3",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$4": "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$4",
+      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$5": "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder$5",
+      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper": "androidx/leanback/widget/DetailsOverviewSharedElementHelper",
+      "android/support/v17/leanback/widget/RoundedRectHelper": "androidx/leanback/widget/RoundedRectHelper",
+      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper$1": "androidx/leanback/widget/DetailsOverviewSharedElementHelper$1",
+      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper$2$1": "androidx/leanback/widget/DetailsOverviewSharedElementHelper$2$1",
+      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper$2": "androidx/leanback/widget/DetailsOverviewSharedElementHelper$2",
+      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper$TransitionTimeOutRunnable": "androidx/leanback/widget/DetailsOverviewSharedElementHelper$TransitionTimeOutRunnable",
+      "android/support/v4/app/SharedElementCallback": "androidx/app/SharedElementCallback",
+      "android/support/v17/leanback/widget/RecyclerViewParallax": "androidx/leanback/widget/RecyclerViewParallax",
+      "android/support/v17/leanback/widget/RecyclerViewParallax$ChildPositionProperty": "androidx/leanback/widget/RecyclerViewParallax$ChildPositionProperty",
+      "android/support/v17/leanback/widget/FacetProvider": "androidx/leanback/widget/FacetProvider",
+      "android/support/v17/leanback/widget/FacetProviderAdapter": "androidx/leanback/widget/FacetProviderAdapter",
+      "android/support/v17/leanback/widget/FocusHighlight": "androidx/leanback/widget/FocusHighlight",
+      "android/support/v17/leanback/widget/FocusHighlightHandler": "androidx/leanback/widget/FocusHighlightHandler",
+      "android/support/v17/leanback/widget/FocusHighlightHelper$BrowseItemFocusHighlight": "androidx/leanback/widget/FocusHighlightHelper$BrowseItemFocusHighlight",
+      "android/support/v17/leanback/widget/FocusHighlightHelper$FocusAnimator": "androidx/leanback/widget/FocusHighlightHelper$FocusAnimator",
+      "android/support/v17/leanback/widget/ShadowOverlayHelper": "androidx/leanback/widget/ShadowOverlayHelper",
+      "android/support/v17/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight$HeaderFocusAnimator": "androidx/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight$HeaderFocusAnimator",
+      "android/support/v17/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight": "androidx/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight",
+      "android/support/v17/leanback/widget/ForegroundHelper": "androidx/leanback/widget/ForegroundHelper",
+      "android/support/v17/leanback/widget/FragmentAnimationProvider": "androidx/leanback/widget/FragmentAnimationProvider",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$1": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$1",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ActionsItemBridgeAdapter$1": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ActionsItemBridgeAdapter$1",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ActionsItemBridgeAdapter": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ActionsItemBridgeAdapter",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$Listener": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$Listener",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$1": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$2": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$2",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$3": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$3",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$4": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$4",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$DetailsOverviewRowListener": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder$DetailsOverviewRowListener",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$1$1": "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$1$1",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$1": "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$1",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper": "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$2": "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$2",
+      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$TransitionTimeOutRunnable": "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper$TransitionTimeOutRunnable",
+      "android/support/v17/leanback/widget/Grid$Location": "androidx/leanback/widget/Grid$Location",
+      "android/support/v17/leanback/widget/Grid": "androidx/leanback/widget/Grid",
+      "android/support/v17/leanback/widget/Grid$Provider": "androidx/leanback/widget/Grid$Provider",
+      "android/support/v7/widget/RecyclerView$LayoutManager$LayoutPrefetchRegistry": "androidx/widget/recyclerview/RecyclerView$LayoutManager$LayoutPrefetchRegistry",
+      "android/support/v4/util/CircularIntArray": "androidx/util/CircularIntArray",
+      "android/support/v17/leanback/widget/SingleRow": "androidx/leanback/widget/SingleRow",
+      "android/support/v17/leanback/widget/StaggeredGridDefault": "androidx/leanback/widget/StaggeredGridDefault",
+      "android/support/v17/leanback/widget/GridLayoutManager$1": "androidx/leanback/widget/GridLayoutManager$1",
+      "android/support/v17/leanback/widget/GridLayoutManager$2": "androidx/leanback/widget/GridLayoutManager$2",
+      "android/support/v17/leanback/widget/GridLayoutManager$LayoutParams": "androidx/leanback/widget/GridLayoutManager$LayoutParams",
+      "android/support/v7/widget/RecyclerView$State": "androidx/widget/recyclerview/RecyclerView$State",
+      "android/support/v17/leanback/widget/GridLayoutManager$PendingMoveSmoothScroller": "androidx/leanback/widget/GridLayoutManager$PendingMoveSmoothScroller",
+      "android/support/v7/widget/RecyclerView$Recycler": "androidx/widget/recyclerview/RecyclerView$Recycler",
+      "android/support/v17/leanback/widget/GridLayoutManager$3": "androidx/leanback/widget/GridLayoutManager$3",
+      "android/support/v17/leanback/widget/GridLayoutManager$4": "androidx/leanback/widget/GridLayoutManager$4",
+      "android/support/v17/leanback/widget/GridLayoutManager$GridLinearSmoothScroller": "androidx/leanback/widget/GridLayoutManager$GridLinearSmoothScroller",
+      "android/support/v7/widget/LinearSmoothScroller": "androidx/widget/recyclerview/LinearSmoothScroller",
+      "android/support/v7/widget/RecyclerView$SmoothScroller": "androidx/widget/recyclerview/RecyclerView$SmoothScroller",
+      "android/support/v7/widget/RecyclerView$SmoothScroller$Action": "androidx/widget/recyclerview/RecyclerView$SmoothScroller$Action",
+      "android/support/v7/widget/RecyclerView$LayoutParams": "androidx/widget/recyclerview/RecyclerView$LayoutParams",
+      "android/support/v17/leanback/widget/ItemAlignmentFacetHelper": "androidx/leanback/widget/ItemAlignmentFacetHelper",
+      "android/support/v17/leanback/widget/GridLayoutManager$OnLayoutCompleteListener": "androidx/leanback/widget/GridLayoutManager$OnLayoutCompleteListener",
+      "android/support/v17/leanback/widget/GridLayoutManager$SavedState$1": "androidx/leanback/widget/GridLayoutManager$SavedState$1",
+      "android/support/v17/leanback/widget/GridLayoutManager$SavedState": "androidx/leanback/widget/GridLayoutManager$SavedState",
+      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat",
+      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat",
+      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat",
+      "android/support/v17/leanback/widget/ItemAlignment$Axis": "androidx/leanback/widget/ItemAlignment$Axis",
+      "android/support/v17/leanback/widget/ItemAlignment": "androidx/leanback/widget/ItemAlignment",
+      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat",
+      "android/support/v7/widget/OrientationHelper": "androidx/widget/recyclerview/OrientationHelper",
+      "android/support/v17/leanback/widget/GuidanceStylingRelativeLayout": "androidx/leanback/widget/GuidanceStylingRelativeLayout",
+      "android/support/v17/leanback/widget/GuidedAction$Builder": "androidx/leanback/widget/GuidedAction$Builder",
+      "android/support/v17/leanback/widget/GuidedAction$BuilderBase": "androidx/leanback/widget/GuidedAction$BuilderBase",
+      "android/support/annotation/StringRes": "androidx/annotation/StringRes",
+      "android/support/annotation/DrawableRes": "androidx/annotation/DrawableRes",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$1": "androidx/leanback/widget/GuidedActionAdapter$1",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$ViewHolder": "androidx/leanback/widget/GuidedActionsStylist$ViewHolder",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$2": "androidx/leanback/widget/GuidedActionAdapter$2",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$ActionEditListener": "androidx/leanback/widget/GuidedActionAdapter$ActionEditListener",
+      "android/support/v17/leanback/widget/ImeKeyMonitor$ImeKeyListener": "androidx/leanback/widget/ImeKeyMonitor$ImeKeyListener",
+      "android/support/v17/leanback/widget/ImeKeyMonitor": "androidx/leanback/widget/ImeKeyMonitor",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$ActionOnFocusListener": "androidx/leanback/widget/GuidedActionAdapter$ActionOnFocusListener",
+      "android/support/v17/leanback/widget/GuidedActionAdapter$ActionOnKeyListener": "androidx/leanback/widget/GuidedActionAdapter$ActionOnKeyListener",
+      "android/support/v17/leanback/widget/GuidedActionDiffCallback": "androidx/leanback/widget/GuidedActionDiffCallback",
+      "android/support/v17/leanback/widget/GuidedActionEditText$NoPaddingDrawable": "androidx/leanback/widget/GuidedActionEditText$NoPaddingDrawable",
+      "android/support/v17/leanback/widget/GuidedActionEditText": "androidx/leanback/widget/GuidedActionEditText",
+      "android/support/v17/leanback/widget/GuidedActionItemContainer": "androidx/leanback/widget/GuidedActionItemContainer",
+      "android/support/v17/leanback/widget/NonOverlappingLinearLayoutWithForeground": "androidx/leanback/widget/NonOverlappingLinearLayoutWithForeground",
+      "android/support/v17/leanback/widget/GuidedActionsRelativeLayout$InterceptKeyEventListener": "androidx/leanback/widget/GuidedActionsRelativeLayout$InterceptKeyEventListener",
+      "android/support/v17/leanback/widget/GuidedActionsRelativeLayout": "androidx/leanback/widget/GuidedActionsRelativeLayout",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$1": "androidx/leanback/widget/GuidedActionsStylist$1",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$2": "androidx/leanback/widget/GuidedActionsStylist$2",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$3": "androidx/leanback/widget/GuidedActionsStylist$3",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$4": "androidx/leanback/widget/GuidedActionsStylist$4",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$5": "androidx/leanback/widget/GuidedActionsStylist$5",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$6": "androidx/leanback/widget/GuidedActionsStylist$6",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$7": "androidx/leanback/widget/GuidedActionsStylist$7",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$ViewHolder$1": "androidx/leanback/widget/GuidedActionsStylist$ViewHolder$1",
+      "android/support/v17/leanback/widget/GuidedActionsStylist$ViewHolder$2": "androidx/leanback/widget/GuidedActionsStylist$ViewHolder$2",
+      "android/support/v17/leanback/widget/GuidedDatePickerAction": "androidx/leanback/widget/GuidedDatePickerAction",
+      "android/support/v17/leanback/widget/picker/DatePicker": "androidx/leanback/widget/picker/DatePicker",
+      "android/support/v17/leanback/widget/GuidedDatePickerAction$Builder": "androidx/leanback/widget/GuidedDatePickerAction$Builder",
+      "android/support/v17/leanback/widget/GuidedDatePickerAction$BuilderBase": "androidx/leanback/widget/GuidedDatePickerAction$BuilderBase",
+      "android/support/v17/leanback/widget/HorizontalHoverCardSwitcher": "androidx/leanback/widget/HorizontalHoverCardSwitcher",
+      "android/support/v17/leanback/widget/PresenterSwitcher": "androidx/leanback/widget/PresenterSwitcher",
+      "android/support/v17/leanback/widget/ImageCardView": "androidx/leanback/widget/ImageCardView",
+      "android/support/v17/leanback/R$style": "androidx/leanback/R$style",
+      "android/support/v17/leanback/widget/ItemBridgeAdapter$1": "androidx/leanback/widget/ItemBridgeAdapter$1",
+      "android/support/v17/leanback/widget/ItemBridgeAdapter$OnFocusChangeListener": "androidx/leanback/widget/ItemBridgeAdapter$OnFocusChangeListener",
+      "android/support/v17/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper": "androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper",
+      "android/support/v17/leanback/widget/ListRowHoverCardView": "androidx/leanback/widget/ListRowHoverCardView",
+      "android/support/v17/leanback/widget/ListRowPresenter$1": "androidx/leanback/widget/ListRowPresenter$1",
+      "android/support/v17/leanback/widget/ListRowPresenter$2": "androidx/leanback/widget/ListRowPresenter$2",
+      "android/support/v17/leanback/widget/ListRowPresenter$ListRowPresenterItemBridgeAdapter$1": "androidx/leanback/widget/ListRowPresenter$ListRowPresenterItemBridgeAdapter$1",
+      "android/support/v17/leanback/widget/ListRowPresenter$ListRowPresenterItemBridgeAdapter": "androidx/leanback/widget/ListRowPresenter$ListRowPresenterItemBridgeAdapter",
+      "android/support/v17/leanback/widget/ListRowPresenter$SelectItemViewHolderTask$1": "androidx/leanback/widget/ListRowPresenter$SelectItemViewHolderTask$1",
+      "android/support/v17/leanback/widget/ListRowPresenter$SelectItemViewHolderTask": "androidx/leanback/widget/ListRowPresenter$SelectItemViewHolderTask",
+      "android/support/v17/leanback/widget/ShadowOverlayHelper$Options": "androidx/leanback/widget/ShadowOverlayHelper$Options",
+      "android/support/v17/leanback/widget/ShadowOverlayHelper$Builder": "androidx/leanback/widget/ShadowOverlayHelper$Builder",
+      "android/support/v17/leanback/widget/ListRowView": "androidx/leanback/widget/ListRowView",
+      "android/support/v17/leanback/widget/MediaItemActionPresenter$ViewHolder": "androidx/leanback/widget/MediaItemActionPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/MediaNowPlayingView": "androidx/leanback/widget/MediaNowPlayingView",
+      "android/support/v17/leanback/widget/MediaRowFocusView": "androidx/leanback/widget/MediaRowFocusView",
+      "android/support/v17/leanback/widget/NonOverlappingFrameLayout": "androidx/leanback/widget/NonOverlappingFrameLayout",
+      "android/support/v17/leanback/widget/NonOverlappingRelativeLayout": "androidx/leanback/widget/NonOverlappingRelativeLayout",
+      "android/support/v17/leanback/widget/NonOverlappingView": "androidx/leanback/widget/NonOverlappingView",
+      "android/support/v17/leanback/widget/ObjectAdapter$DataObservable": "androidx/leanback/widget/ObjectAdapter$DataObservable",
+      "android/support/v17/leanback/widget/SinglePresenterSelector": "androidx/leanback/widget/SinglePresenterSelector",
+      "android/support/v17/leanback/widget/PagingIndicator$1": "androidx/leanback/widget/PagingIndicator$1",
+      "android/support/v17/leanback/widget/PagingIndicator$Dot": "androidx/leanback/widget/PagingIndicator$Dot",
+      "android/support/v17/leanback/widget/PagingIndicator$2": "androidx/leanback/widget/PagingIndicator$2",
+      "android/support/v17/leanback/widget/PagingIndicator$3": "androidx/leanback/widget/PagingIndicator$3",
+      "android/support/v17/leanback/widget/Parallax$FloatProperty": "androidx/leanback/widget/Parallax$FloatProperty",
+      "android/support/v17/leanback/widget/Parallax$FloatPropertyMarkerValue": "androidx/leanback/widget/Parallax$FloatPropertyMarkerValue",
+      "android/support/v17/leanback/widget/Parallax$IntPropertyMarkerValue": "androidx/leanback/widget/Parallax$IntPropertyMarkerValue",
+      "android/support/v17/leanback/widget/ParallaxEffect$IntEffect": "androidx/leanback/widget/ParallaxEffect$IntEffect",
+      "android/support/v17/leanback/widget/ParallaxEffect$FloatEffect": "androidx/leanback/widget/ParallaxEffect$FloatEffect",
+      "android/support/v17/leanback/widget/ParallaxTarget$DirectPropertyTarget": "androidx/leanback/widget/ParallaxTarget$DirectPropertyTarget",
+      "android/support/v17/leanback/widget/PersistentFocusWrapper$SavedState$1": "androidx/leanback/widget/PersistentFocusWrapper$SavedState$1",
+      "android/support/v17/leanback/widget/PersistentFocusWrapper$SavedState": "androidx/leanback/widget/PersistentFocusWrapper$SavedState",
+      "android/support/v17/leanback/widget/PersistentFocusWrapper": "androidx/leanback/widget/PersistentFocusWrapper",
+      "android/support/v17/leanback/widget/PlaybackControlsPresenter$BoundData": "androidx/leanback/widget/PlaybackControlsPresenter$BoundData",
+      "android/support/v17/leanback/widget/PlaybackControlsPresenter": "androidx/leanback/widget/PlaybackControlsPresenter",
+      "android/support/v17/leanback/widget/PlaybackControlsPresenter$ViewHolder$1": "androidx/leanback/widget/PlaybackControlsPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/PlaybackControlsPresenter$ViewHolder": "androidx/leanback/widget/PlaybackControlsPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/PlaybackControlsPresenter$ViewHolder$2": "androidx/leanback/widget/PlaybackControlsPresenter$ViewHolder$2",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$MoreActions": "androidx/leanback/widget/PlaybackControlsRow$MoreActions",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$ClosedCaptioningAction": "androidx/leanback/widget/PlaybackControlsRow$ClosedCaptioningAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$MultiAction": "androidx/leanback/widget/PlaybackControlsRow$MultiAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$HighQualityAction": "androidx/leanback/widget/PlaybackControlsRow$HighQualityAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$OnPlaybackProgressCallback": "androidx/leanback/widget/PlaybackControlsRow$OnPlaybackProgressCallback",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$PictureInPictureAction": "androidx/leanback/widget/PlaybackControlsRow$PictureInPictureAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRow$ShuffleAction": "androidx/leanback/widget/PlaybackControlsRow$ShuffleAction",
+      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$1": "androidx/leanback/widget/PlaybackControlsRowPresenter$1",
+      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$ViewHolder": "androidx/leanback/widget/PlaybackControlsRowPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$BoundData": "androidx/leanback/widget/PlaybackControlsRowPresenter$BoundData",
+      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$2": "androidx/leanback/widget/PlaybackControlsRowPresenter$2",
+      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$3": "androidx/leanback/widget/PlaybackControlsRowPresenter$3",
+      "android/support/v17/leanback/widget/PlaybackControlsRowView$OnUnhandledKeyListener": "androidx/leanback/widget/PlaybackControlsRowView$OnUnhandledKeyListener",
+      "android/support/v17/leanback/widget/PlaybackControlsRowView": "androidx/leanback/widget/PlaybackControlsRowView",
+      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$ViewHolder$1": "androidx/leanback/widget/PlaybackControlsRowPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/ShadowHelper": "androidx/leanback/widget/ShadowHelper",
+      "android/support/v17/leanback/widget/PlaybackSeekDataProvider$ResultCallback": "androidx/leanback/widget/PlaybackSeekDataProvider$ResultCallback",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$1": "androidx/leanback/widget/PlaybackTransportRowPresenter$1",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder": "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$BoundData": "androidx/leanback/widget/PlaybackTransportRowPresenter$BoundData",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$2": "androidx/leanback/widget/PlaybackTransportRowPresenter$2",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$3": "androidx/leanback/widget/PlaybackTransportRowPresenter$3",
+      "android/support/v17/leanback/widget/PlaybackTransportRowView$OnUnhandledKeyListener": "androidx/leanback/widget/PlaybackTransportRowView$OnUnhandledKeyListener",
+      "android/support/v17/leanback/widget/PlaybackTransportRowView": "androidx/leanback/widget/PlaybackTransportRowView",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$1": "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$1",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$2": "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$2",
+      "android/support/v17/leanback/widget/ThumbsBar": "androidx/leanback/widget/ThumbsBar",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$3": "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$3",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$4": "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$4",
+      "android/support/v17/leanback/widget/SeekBar": "androidx/leanback/widget/SeekBar",
+      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$5": "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder$5",
+      "android/support/v17/leanback/widget/SeekBar$AccessibilitySeekListener": "androidx/leanback/widget/SeekBar$AccessibilitySeekListener",
+      "android/support/v17/leanback/widget/RecyclerViewParallax$1": "androidx/leanback/widget/RecyclerViewParallax$1",
+      "android/support/v17/leanback/widget/RecyclerViewParallax$2": "androidx/leanback/widget/RecyclerViewParallax$2",
+      "android/support/v7/widget/RecyclerView$LayoutManager$Properties": "androidx/widget/recyclerview/RecyclerView$LayoutManager$Properties",
+      "android/support/v17/leanback/widget/ResizingTextView": "androidx/leanback/widget/ResizingTextView",
+      "android/support/v17/leanback/widget/RoundedRectHelper$Api21Impl": "androidx/leanback/widget/RoundedRectHelper$Api21Impl",
+      "android/support/v17/leanback/widget/RoundedRectHelper$Impl": "androidx/leanback/widget/RoundedRectHelper$Impl",
+      "android/support/v17/leanback/widget/RoundedRectHelperApi21": "androidx/leanback/widget/RoundedRectHelperApi21",
+      "android/support/v17/leanback/widget/RoundedRectHelper$StubImpl": "androidx/leanback/widget/RoundedRectHelper$StubImpl",
+      "android/support/v17/leanback/widget/RoundedRectHelperApi21$RoundedRectOutlineProvider": "androidx/leanback/widget/RoundedRectHelperApi21$RoundedRectOutlineProvider",
+      "android/support/v17/leanback/widget/RowContainerView": "androidx/leanback/widget/RowContainerView",
+      "android/support/v17/leanback/widget/RowHeaderView": "androidx/leanback/widget/RowHeaderView",
+      "android/support/v17/leanback/widget/RowPresenter$ContainerViewHolder": "androidx/leanback/widget/RowPresenter$ContainerViewHolder",
+      "android/support/v17/leanback/widget/SearchBar$1": "androidx/leanback/widget/SearchBar$1",
+      "android/support/v17/leanback/widget/SearchBar$10": "androidx/leanback/widget/SearchBar$10",
+      "android/support/v17/leanback/widget/SearchBar$2": "androidx/leanback/widget/SearchBar$2",
+      "android/support/v17/leanback/widget/SearchEditText": "androidx/leanback/widget/SearchEditText",
+      "android/support/v17/leanback/widget/SearchBar$3": "androidx/leanback/widget/SearchBar$3",
+      "android/support/v17/leanback/widget/SearchBar$4": "androidx/leanback/widget/SearchBar$4",
+      "android/support/v17/leanback/widget/SearchEditText$OnKeyboardDismissListener": "androidx/leanback/widget/SearchEditText$OnKeyboardDismissListener",
+      "android/support/v17/leanback/widget/SearchBar$5$1": "androidx/leanback/widget/SearchBar$5$1",
+      "android/support/v17/leanback/widget/SearchBar$5": "androidx/leanback/widget/SearchBar$5",
+      "android/support/v17/leanback/widget/SearchBar$5$2": "androidx/leanback/widget/SearchBar$5$2",
+      "android/support/v17/leanback/widget/SearchBar$5$3": "androidx/leanback/widget/SearchBar$5$3",
+      "android/support/v17/leanback/widget/SpeechOrbView": "androidx/leanback/widget/SpeechOrbView",
+      "android/support/v17/leanback/widget/SearchBar$6": "androidx/leanback/widget/SearchBar$6",
+      "android/support/v17/leanback/widget/SearchBar$7": "androidx/leanback/widget/SearchBar$7",
+      "android/support/v17/leanback/widget/SearchBar$8": "androidx/leanback/widget/SearchBar$8",
+      "android/support/v17/leanback/widget/SearchBar$9": "androidx/leanback/widget/SearchBar$9",
+      "android/support/v17/leanback/R$raw": "androidx/leanback/R$raw",
+      "android/support/v17/leanback/widget/StreamingTextView": "androidx/leanback/widget/StreamingTextView",
+      "android/support/v17/leanback/widget/SearchOrbView$1": "androidx/leanback/widget/SearchOrbView$1",
+      "android/support/v17/leanback/widget/SearchOrbView$2": "androidx/leanback/widget/SearchOrbView$2",
+      "android/support/v17/leanback/widget/ShadowHelper$ShadowHelperApi21Impl": "androidx/leanback/widget/ShadowHelper$ShadowHelperApi21Impl",
+      "android/support/v17/leanback/widget/ShadowHelper$ShadowHelperVersionImpl": "androidx/leanback/widget/ShadowHelper$ShadowHelperVersionImpl",
+      "android/support/v17/leanback/widget/ShadowHelperApi21": "androidx/leanback/widget/ShadowHelperApi21",
+      "android/support/v17/leanback/widget/ShadowHelper$ShadowHelperStubImpl": "androidx/leanback/widget/ShadowHelper$ShadowHelperStubImpl",
+      "android/support/v17/leanback/widget/ShadowHelperApi21$1": "androidx/leanback/widget/ShadowHelperApi21$1",
+      "android/support/v17/leanback/widget/ShadowHelperApi21$ShadowImpl": "androidx/leanback/widget/ShadowHelperApi21$ShadowImpl",
+      "android/support/v17/leanback/widget/ShadowHelperJbmr2$ShadowImpl": "androidx/leanback/widget/ShadowHelperJbmr2$ShadowImpl",
+      "android/support/v17/leanback/widget/ShadowHelperJbmr2": "androidx/leanback/widget/ShadowHelperJbmr2",
+      "android/support/v17/leanback/widget/StaticShadowHelper": "androidx/leanback/widget/StaticShadowHelper",
+      "android/support/v17/leanback/widget/StaggeredGrid$Location": "androidx/leanback/widget/StaggeredGrid$Location",
+      "android/support/v17/leanback/widget/StaggeredGrid": "androidx/leanback/widget/StaggeredGrid",
+      "android/support/v4/util/CircularArray": "androidx/util/CircularArray",
+      "android/support/v17/leanback/widget/StaticShadowHelper$ShadowHelperJbmr2Impl": "androidx/leanback/widget/StaticShadowHelper$ShadowHelperJbmr2Impl",
+      "android/support/v17/leanback/widget/StaticShadowHelper$ShadowHelperVersionImpl": "androidx/leanback/widget/StaticShadowHelper$ShadowHelperVersionImpl",
+      "android/support/v17/leanback/widget/StaticShadowHelper$ShadowHelperStubImpl": "androidx/leanback/widget/StaticShadowHelper$ShadowHelperStubImpl",
+      "android/support/v17/leanback/widget/StreamingTextView$1": "androidx/leanback/widget/StreamingTextView$1",
+      "android/support/v17/leanback/widget/StreamingTextView$DottySpan": "androidx/leanback/widget/StreamingTextView$DottySpan",
+      "android/support/v17/leanback/widget/TitleHelper$1": "androidx/leanback/widget/TitleHelper$1",
+      "android/support/v17/leanback/widget/TitleHelper$2": "androidx/leanback/widget/TitleHelper$2",
+      "android/support/v17/leanback/widget/TitleHelper$3": "androidx/leanback/widget/TitleHelper$3",
+      "android/support/v17/leanback/widget/TitleView$1": "androidx/leanback/widget/TitleView$1",
+      "android/support/v17/leanback/widget/TitleView": "androidx/leanback/widget/TitleView",
+      "android/support/v17/leanback/widget/VerticalGridPresenter$1": "androidx/leanback/widget/VerticalGridPresenter$1",
+      "android/support/v17/leanback/widget/VerticalGridPresenter$VerticalGridItemBridgeAdapter$1": "androidx/leanback/widget/VerticalGridPresenter$VerticalGridItemBridgeAdapter$1",
+      "android/support/v17/leanback/widget/VerticalGridPresenter$VerticalGridItemBridgeAdapter": "androidx/leanback/widget/VerticalGridPresenter$VerticalGridItemBridgeAdapter",
+      "android/support/v17/leanback/widget/VideoSurfaceView": "androidx/leanback/widget/VideoSurfaceView",
+      "android/support/v4/util/LruCache": "androidx/util/LruCache",
+      "android/support/v17/leanback/widget/Visibility": "androidx/leanback/widget/Visibility",
+      "android/support/v17/leanback/widget/picker/DatePicker$1": "androidx/leanback/widget/picker/DatePicker$1",
+      "android/support/v17/leanback/widget/picker/Picker": "androidx/leanback/widget/picker/Picker",
+      "android/support/v17/leanback/widget/picker/PickerUtility$DateConstant": "androidx/leanback/widget/picker/PickerUtility$DateConstant",
+      "android/support/v17/leanback/widget/picker/PickerUtility": "androidx/leanback/widget/picker/PickerUtility",
+      "android/support/v17/leanback/widget/picker/PickerColumn": "androidx/leanback/widget/picker/PickerColumn",
+      "android/support/v17/leanback/widget/picker/Picker$1": "androidx/leanback/widget/picker/Picker$1",
+      "android/support/v17/leanback/widget/picker/Picker$PickerScrollArrayAdapter": "androidx/leanback/widget/picker/Picker$PickerScrollArrayAdapter",
+      "android/support/v17/leanback/widget/picker/Picker$ViewHolder": "androidx/leanback/widget/picker/Picker$ViewHolder",
+      "android/support/v17/leanback/widget/picker/Picker$PickerValueListener": "androidx/leanback/widget/picker/Picker$PickerValueListener",
+      "android/support/v17/leanback/widget/picker/PickerUtility$1": "androidx/leanback/widget/picker/PickerUtility$1",
+      "android/support/v17/leanback/widget/picker/PickerUtility$TimeConstant": "androidx/leanback/widget/picker/PickerUtility$TimeConstant",
+      "android/support/v17/leanback/widget/picker/TimePicker": "androidx/leanback/widget/picker/TimePicker",
+      "android/support/annotation/IntRange": "androidx/annotation/IntRange",
+      "android/support/graphics/drawable/Animatable2Compat$AnimationCallback$1": "androidx/graphics/drawable/Animatable2Compat$AnimationCallback$1",
+      "android/support/graphics/drawable/Animatable2Compat$AnimationCallback": "androidx/graphics/drawable/Animatable2Compat$AnimationCallback",
+      "android/support/graphics/drawable/Animatable2Compat": "androidx/graphics/drawable/Animatable2Compat",
+      "android/support/graphics/drawable/AnimatedVectorDrawableCompat$1": "androidx/graphics/drawable/AnimatedVectorDrawableCompat$1",
+      "android/support/graphics/drawable/AnimatedVectorDrawableCompat": "androidx/graphics/drawable/AnimatedVectorDrawableCompat",
+      "android/support/graphics/drawable/AnimatedVectorDrawableCompat$2": "androidx/graphics/drawable/AnimatedVectorDrawableCompat$2",
+      "android/support/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableCompatState": "androidx/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableCompatState",
+      "android/support/graphics/drawable/VectorDrawableCompat": "androidx/graphics/drawable/VectorDrawableCompat",
+      "android/support/v4/util/ArrayMap": "androidx/util/ArrayMap",
+      "android/support/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableDelegateState": "androidx/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableDelegateState",
+      "android/support/graphics/drawable/VectorDrawableCommon": "androidx/graphics/drawable/VectorDrawableCommon",
+      "android/support/v4/content/res/ResourcesCompat": "androidx/content/res/ResourcesCompat",
+      "android/support/graphics/drawable/AndroidResources": "androidx/graphics/drawable/AndroidResources",
+      "android/support/v4/content/res/TypedArrayUtils": "androidx/content/res/TypedArrayUtils",
+      "android/support/graphics/drawable/AnimatorInflaterCompat": "androidx/graphics/drawable/AnimatorInflaterCompat",
+      "android/support/graphics/drawable/AnimationUtilsCompat": "androidx/graphics/drawable/AnimationUtilsCompat",
+      "android/support/v4/view/animation/FastOutSlowInInterpolator": "androidx/view/animation/FastOutSlowInInterpolator",
+      "android/support/v4/view/animation/LinearOutSlowInInterpolator": "androidx/view/animation/LinearOutSlowInInterpolator",
+      "android/support/graphics/drawable/PathInterpolatorCompat": "androidx/graphics/drawable/PathInterpolatorCompat",
+      "android/support/graphics/drawable/AnimatorInflaterCompat$1": "androidx/graphics/drawable/AnimatorInflaterCompat$1",
+      "android/support/graphics/drawable/AnimatorInflaterCompat$PathDataEvaluator": "androidx/graphics/drawable/AnimatorInflaterCompat$PathDataEvaluator",
+      "android/support/v4/graphics/PathParser$PathDataNode": "androidx/graphics/PathParser$PathDataNode",
+      "android/support/v4/graphics/PathParser": "androidx/graphics/PathParser",
+      "android/support/annotation/AnimatorRes": "androidx/annotation/AnimatorRes",
+      "android/support/graphics/drawable/ArgbEvaluator": "androidx/graphics/drawable/ArgbEvaluator",
+      "android/support/v14/preference/EditTextPreferenceDialogFragment": "androidx/preference/EditTextPreferenceDialogFragment",
+      "android/support/v14/preference/PreferenceDialogFragment": "androidx/preference/PreferenceDialogFragment",
+      "android/support/v7/preference/EditTextPreference": "androidx/preference/EditTextPreference",
+      "android/support/v7/preference/DialogPreference": "androidx/preference/DialogPreference",
+      "android/support/v14/preference/ListPreferenceDialogFragment$1": "androidx/preference/ListPreferenceDialogFragment$1",
+      "android/support/v14/preference/ListPreferenceDialogFragment": "androidx/preference/ListPreferenceDialogFragment",
+      "android/support/v7/preference/ListPreference": "androidx/preference/ListPreference",
+      "android/support/v14/preference/MultiSelectListPreference$SavedState$1": "androidx/preference/MultiSelectListPreference$SavedState$1",
+      "android/support/v14/preference/MultiSelectListPreference$SavedState": "androidx/preference/MultiSelectListPreference$SavedState",
+      "android/support/v14/preference/MultiSelectListPreference": "androidx/preference/MultiSelectListPreference",
+      "android/support/v7/preference/Preference$BaseSavedState": "androidx/preference/Preference$BaseSavedState",
+      "android/support/v7/preference/Preference": "androidx/preference/Preference",
+      "android/support/v7/preference/internal/AbstractMultiSelectListPreference": "androidx/preference/internal/AbstractMultiSelectListPreference",
+      "android/support/v7/preference/R$styleable": "androidx/preference/R$styleable",
+      "android/support/v7/preference/R": "androidx/preference/R",
+      "android/support/v7/preference/R$attr": "androidx/preference/R$attr",
+      "android/support/annotation/ArrayRes": "androidx/annotation/ArrayRes",
+      "android/support/v14/preference/MultiSelectListPreferenceDialogFragment$1": "androidx/preference/MultiSelectListPreferenceDialogFragment$1",
+      "android/support/v14/preference/MultiSelectListPreferenceDialogFragment": "androidx/preference/MultiSelectListPreferenceDialogFragment",
+      "android/support/v7/preference/DialogPreference$TargetFragment": "androidx/preference/DialogPreference$TargetFragment",
+      "android/support/annotation/LayoutRes": "androidx/annotation/LayoutRes",
+      "android/support/v14/preference/PreferenceFragment$1": "androidx/preference/PreferenceFragment$1",
+      "android/support/v14/preference/PreferenceFragment": "androidx/preference/PreferenceFragment",
+      "android/support/v14/preference/PreferenceFragment$2": "androidx/preference/PreferenceFragment$2",
+      "android/support/v14/preference/PreferenceFragment$3": "androidx/preference/PreferenceFragment$3",
+      "android/support/v7/preference/PreferenceGroup$PreferencePositionCallback": "androidx/preference/PreferenceGroup$PreferencePositionCallback",
+      "android/support/v7/preference/PreferenceGroup": "androidx/preference/PreferenceGroup",
+      "android/support/v14/preference/PreferenceFragment$ScrollToPreferenceObserver": "androidx/preference/PreferenceFragment$ScrollToPreferenceObserver",
+      "android/support/v14/preference/PreferenceFragment$DividerDecoration": "androidx/preference/PreferenceFragment$DividerDecoration",
+      "android/support/v7/widget/RecyclerView$ItemDecoration": "androidx/widget/recyclerview/RecyclerView$ItemDecoration",
+      "android/support/v7/preference/PreferenceViewHolder": "androidx/preference/PreferenceViewHolder",
+      "android/support/v14/preference/PreferenceFragment$OnPreferenceDisplayDialogCallback": "androidx/preference/PreferenceFragment$OnPreferenceDisplayDialogCallback",
+      "android/support/v14/preference/PreferenceFragment$OnPreferenceStartFragmentCallback": "androidx/preference/PreferenceFragment$OnPreferenceStartFragmentCallback",
+      "android/support/v14/preference/PreferenceFragment$OnPreferenceStartScreenCallback": "androidx/preference/PreferenceFragment$OnPreferenceStartScreenCallback",
+      "android/support/v7/preference/PreferenceScreen": "androidx/preference/PreferenceScreen",
+      "android/support/v7/preference/PreferenceManager$OnPreferenceTreeClickListener": "androidx/preference/PreferenceManager$OnPreferenceTreeClickListener",
+      "android/support/v7/preference/PreferenceManager$OnDisplayPreferenceDialogListener": "androidx/preference/PreferenceManager$OnDisplayPreferenceDialogListener",
+      "android/support/v7/preference/PreferenceManager$OnNavigateToScreenListener": "androidx/preference/PreferenceManager$OnNavigateToScreenListener",
+      "android/support/v7/preference/PreferenceManager": "androidx/preference/PreferenceManager",
+      "android/support/v7/preference/R$layout": "androidx/preference/R$layout",
+      "android/support/annotation/XmlRes": "androidx/annotation/XmlRes",
+      "android/support/v7/preference/PreferenceRecyclerViewAccessibilityDelegate": "androidx/preference/PreferenceRecyclerViewAccessibilityDelegate",
+      "android/support/v7/widget/RecyclerViewAccessibilityDelegate": "androidx/widget/recyclerview/RecyclerViewAccessibilityDelegate",
+      "android/support/v7/widget/LinearLayoutManager": "androidx/widget/recyclerview/LinearLayoutManager",
+      "android/support/v7/preference/PreferenceGroupAdapter": "androidx/preference/PreferenceGroupAdapter",
+      "android/support/v14/preference/SwitchPreference$1": "androidx/preference/SwitchPreference$1",
+      "android/support/v14/preference/SwitchPreference": "androidx/preference/SwitchPreference",
+      "android/support/v14/preference/SwitchPreference$Listener": "androidx/preference/SwitchPreference$Listener",
+      "android/support/v7/preference/TwoStatePreference": "androidx/preference/TwoStatePreference",
+      "android/support/v7/internal/widget/PreferenceImageView": "androidx/preference/internal/PreferenceImageView",
+      "android/support/v7/preference/AndroidResources": "androidx/preference/AndroidResources",
+      "android/support/v7/preference/CheckBoxPreference$1": "androidx/preference/CheckBoxPreference$1",
+      "android/support/v7/preference/CheckBoxPreference": "androidx/preference/CheckBoxPreference",
+      "android/support/v7/preference/CheckBoxPreference$Listener": "androidx/preference/CheckBoxPreference$Listener",
+      "android/support/v7/preference/CollapsiblePreferenceGroupController$1": "androidx/preference/CollapsiblePreferenceGroupController$1",
+      "android/support/v7/preference/Preference$OnPreferenceClickListener": "androidx/preference/Preference$OnPreferenceClickListener",
+      "android/support/v7/preference/CollapsiblePreferenceGroupController": "androidx/preference/CollapsiblePreferenceGroupController",
+      "android/support/v7/preference/CollapsiblePreferenceGroupController$ExpandButton": "androidx/preference/CollapsiblePreferenceGroupController$ExpandButton",
+      "android/support/v7/preference/R$drawable": "androidx/preference/R$drawable",
+      "android/support/v7/preference/R$string": "androidx/preference/R$string",
+      "android/support/v7/preference/CollapsiblePreferenceGroupController$SavedState$1": "androidx/preference/CollapsiblePreferenceGroupController$SavedState$1",
+      "android/support/v7/preference/CollapsiblePreferenceGroupController$SavedState": "androidx/preference/CollapsiblePreferenceGroupController$SavedState",
+      "android/support/v7/preference/PreferenceGroup$PreferenceInstanceStateCallback": "androidx/preference/PreferenceGroup$PreferenceInstanceStateCallback",
+      "android/support/v7/preference/DropDownPreference$1": "androidx/preference/DropDownPreference$1",
+      "android/support/v7/preference/DropDownPreference": "androidx/preference/DropDownPreference",
+      "android/support/v7/preference/R$id": "androidx/preference/R$id",
+      "android/support/v7/preference/EditTextPreference$SavedState$1": "androidx/preference/EditTextPreference$SavedState$1",
+      "android/support/v7/preference/EditTextPreference$SavedState": "androidx/preference/EditTextPreference$SavedState",
+      "android/support/v7/preference/EditTextPreferenceDialogFragmentCompat": "androidx/preference/EditTextPreferenceDialogFragmentCompat",
+      "android/support/v7/preference/PreferenceDialogFragmentCompat": "androidx/preference/PreferenceDialogFragmentCompat",
+      "android/support/v7/preference/ListPreference$SavedState$1": "androidx/preference/ListPreference$SavedState$1",
+      "android/support/v7/preference/ListPreference$SavedState": "androidx/preference/ListPreference$SavedState",
+      "android/support/v7/preference/ListPreferenceDialogFragmentCompat$1": "androidx/preference/ListPreferenceDialogFragmentCompat$1",
+      "android/support/v7/preference/ListPreferenceDialogFragmentCompat": "androidx/preference/ListPreferenceDialogFragmentCompat",
+      "android/support/v7/app/AlertDialog$Builder": "androidx/app/AlertDialog$Builder",
+      "android/support/v7/app/AlertDialog": "androidx/app/AlertDialog",
+      "android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat$1": "androidx/preference/MultiSelectListPreferenceDialogFragmentCompat$1",
+      "android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat": "androidx/preference/MultiSelectListPreferenceDialogFragmentCompat",
+      "android/support/v7/preference/Preference$1": "androidx/preference/Preference$1",
+      "android/support/v7/preference/Preference$BaseSavedState$1": "androidx/preference/Preference$BaseSavedState$1",
+      "android/support/v7/preference/Preference$OnPreferenceChangeInternalListener": "androidx/preference/Preference$OnPreferenceChangeInternalListener",
+      "android/support/v7/preference/Preference$OnPreferenceChangeListener": "androidx/preference/Preference$OnPreferenceChangeListener",
+      "android/support/v7/preference/PreferenceDataStore": "androidx/preference/PreferenceDataStore",
+      "android/support/v7/preference/PreferenceCategory": "androidx/preference/PreferenceCategory",
+      "android/support/v4/app/DialogFragment": "androidx/app/DialogFragment",
+      "android/support/v7/preference/PreferenceFragmentCompat$1": "androidx/preference/PreferenceFragmentCompat$1",
+      "android/support/v7/preference/PreferenceFragmentCompat": "androidx/preference/PreferenceFragmentCompat",
+      "android/support/v7/preference/PreferenceFragmentCompat$2": "androidx/preference/PreferenceFragmentCompat$2",
+      "android/support/v7/preference/PreferenceFragmentCompat$3": "androidx/preference/PreferenceFragmentCompat$3",
+      "android/support/v7/preference/PreferenceFragmentCompat$ScrollToPreferenceObserver": "androidx/preference/PreferenceFragmentCompat$ScrollToPreferenceObserver",
+      "android/support/v7/preference/PreferenceFragmentCompat$DividerDecoration": "androidx/preference/PreferenceFragmentCompat$DividerDecoration",
+      "android/support/v7/preference/PreferenceFragmentCompat$OnPreferenceDisplayDialogCallback": "androidx/preference/PreferenceFragmentCompat$OnPreferenceDisplayDialogCallback",
+      "android/support/v7/preference/PreferenceFragmentCompat$OnPreferenceStartFragmentCallback": "androidx/preference/PreferenceFragmentCompat$OnPreferenceStartFragmentCallback",
+      "android/support/v7/preference/PreferenceFragmentCompat$OnPreferenceStartScreenCallback": "androidx/preference/PreferenceFragmentCompat$OnPreferenceStartScreenCallback",
+      "android/support/v7/preference/PreferenceGroup$1": "androidx/preference/PreferenceGroup$1",
+      "android/support/v4/util/SimpleArrayMap": "androidx/util/SimpleArrayMap",
+      "android/support/v7/preference/PreferenceGroupAdapter$1": "androidx/preference/PreferenceGroupAdapter$1",
+      "android/support/v7/preference/PreferenceGroupAdapter$2": "androidx/preference/PreferenceGroupAdapter$2",
+      "android/support/v7/preference/PreferenceManager$PreferenceComparisonCallback": "androidx/preference/PreferenceManager$PreferenceComparisonCallback",
+      "android/support/v7/preference/PreferenceGroupAdapter$PreferenceLayout": "androidx/preference/PreferenceGroupAdapter$PreferenceLayout",
+      "android/support/v7/preference/PreferenceInflater": "androidx/preference/PreferenceInflater",
+      "android/support/v7/preference/PreferenceManager$SimplePreferenceComparisonCallback": "androidx/preference/PreferenceManager$SimplePreferenceComparisonCallback",
+      "android/support/v7/preference/PreferenceRecyclerViewAccessibilityDelegate$1": "androidx/preference/PreferenceRecyclerViewAccessibilityDelegate$1",
+      "android/support/v4/view/AccessibilityDelegateCompat": "androidx/view/AccessibilityDelegateCompat",
+      "android/support/annotation/IdRes": "androidx/annotation/IdRes",
+      "android/support/v7/preference/SeekBarPreference$1": "androidx/preference/SeekBarPreference$1",
+      "android/support/v7/preference/SeekBarPreference": "androidx/preference/SeekBarPreference",
+      "android/support/v7/preference/SeekBarPreference$2": "androidx/preference/SeekBarPreference$2",
+      "android/support/v7/preference/SeekBarPreference$SavedState$1": "androidx/preference/SeekBarPreference$SavedState$1",
+      "android/support/v7/preference/SeekBarPreference$SavedState": "androidx/preference/SeekBarPreference$SavedState",
+      "android/support/v7/preference/SwitchPreferenceCompat$1": "androidx/preference/SwitchPreferenceCompat$1",
+      "android/support/v7/preference/SwitchPreferenceCompat": "androidx/preference/SwitchPreferenceCompat",
+      "android/support/v7/preference/SwitchPreferenceCompat$Listener": "androidx/preference/SwitchPreferenceCompat$Listener",
+      "android/support/v7/widget/SwitchCompat": "androidx/widget/SwitchCompat",
+      "android/support/v7/preference/TwoStatePreference$SavedState$1": "androidx/preference/TwoStatePreference$SavedState$1",
+      "android/support/v7/preference/TwoStatePreference$SavedState": "androidx/preference/TwoStatePreference$SavedState",
+      "android/support/v7/preference/UnPressableLinearLayout": "androidx/preference/UnPressableLinearLayout",
+      "android/arch/persistence/room/migration/bundle/ForeignKeyBundle": "androidx/persistence/room/migration/bundle/ForeignKeyBundle",
+      "android/arch/persistence/room/migration/bundle/SchemaEquality": "androidx/persistence/room/migration/bundle/SchemaEquality",
+      "android/arch/persistence/room/migration/bundle/SchemaBundle": "androidx/persistence/room/migration/bundle/SchemaBundle",
+      "android/arch/persistence/room/migration/bundle/DatabaseBundle": "androidx/persistence/room/migration/bundle/DatabaseBundle",
+      "android/arch/persistence/room/migration/bundle/SchemaEqualityUtil": "androidx/persistence/room/migration/bundle/SchemaEqualityUtil",
+      "android/arch/persistence/room/migration/bundle/PrimaryKeyBundle": "androidx/persistence/room/migration/bundle/PrimaryKeyBundle",
+      "android/arch/persistence/room/migration/bundle/EntityBundle": "androidx/persistence/room/migration/bundle/EntityBundle",
+      "android/arch/persistence/room/migration/bundle/FieldBundle": "androidx/persistence/room/migration/bundle/FieldBundle",
+      "android/arch/persistence/room/migration/bundle/IndexBundle": "androidx/persistence/room/migration/bundle/IndexBundle",
+      "android/arch/persistence/room/migration/bundle/BundleUtil": "androidx/persistence/room/migration/bundle/BundleUtil",
+      "android/support/design/widget/CoordinatorLayout$1": "androidx/widget/CoordinatorLayout$1",
+      "android/support/v4/view/OnApplyWindowInsetsListener": "androidx/view/OnApplyWindowInsetsListener",
+      "android/support/design/widget/CoordinatorLayout": "androidx/widget/CoordinatorLayout",
+      "android/support/v4/view/WindowInsetsCompat": "androidx/view/WindowInsetsCompat",
+      "android/support/design/widget/CoordinatorLayout$Behavior": "androidx/widget/CoordinatorLayout$Behavior",
+      "android/support/design/widget/CoordinatorLayout$LayoutParams": "androidx/widget/CoordinatorLayout$LayoutParams",
+      "android/support/annotation/FloatRange": "androidx/annotation/FloatRange",
+      "android/support/design/widget/CoordinatorLayout$DefaultBehavior": "androidx/widget/CoordinatorLayout$DefaultBehavior",
+      "android/support/design/widget/CoordinatorLayout$DispatchChangeEvent": "androidx/widget/CoordinatorLayout$DispatchChangeEvent",
+      "android/support/design/widget/CoordinatorLayout$HierarchyChangeListener": "androidx/widget/CoordinatorLayout$HierarchyChangeListener",
+      "android/support/coreui/R$styleable": "androidx/coreui/R$styleable",
+      "android/support/coreui/R": "androidx/coreui/R",
+      "android/support/v4/view/GravityCompat": "androidx/view/GravityCompat",
+      "android/support/design/widget/CoordinatorLayout$OnPreDrawListener": "androidx/widget/CoordinatorLayout$OnPreDrawListener",
+      "android/support/design/widget/CoordinatorLayout$SavedState$1": "androidx/widget/CoordinatorLayout$SavedState$1",
+      "android/support/design/widget/CoordinatorLayout$SavedState": "androidx/widget/CoordinatorLayout$SavedState",
+      "android/support/v4/view/AbsSavedState": "androidx/view/AbsSavedState",
+      "android/support/design/widget/CoordinatorLayout$ViewElevationComparator": "androidx/widget/CoordinatorLayout$ViewElevationComparator",
+      "android/support/v4/view/NestedScrollingParent2": "androidx/view/NestedScrollingParent2",
+      "android/support/v4/util/Pools$Pool": "androidx/util/Pools$Pool",
+      "android/support/v4/util/Pools": "androidx/util/Pools",
+      "android/support/v4/util/Pools$SynchronizedPool": "androidx/util/Pools$SynchronizedPool",
+      "android/support/coreui/R$attr": "androidx/coreui/R$attr",
+      "android/support/coreui/R$style": "androidx/coreui/R$style",
+      "android/support/v4/widget/DirectedAcyclicGraph": "androidx/widget/DirectedAcyclicGraph",
+      "android/support/v4/view/NestedScrollingParentHelper": "androidx/view/NestedScrollingParentHelper",
+      "android/support/v4/util/ObjectsCompat": "androidx/util/ObjectsCompat",
+      "android/support/v4/widget/ViewGroupUtils": "androidx/widget/ViewGroupUtils",
+      "android/support/v4/math/MathUtils": "androidx/math/MathUtils",
+      "android/support/v4/app/ActionBarDrawerToggle$Delegate": "androidx/legacy/app/ActionBarDrawerToggle$Delegate",
+      "android/support/v4/app/ActionBarDrawerToggle": "androidx/legacy/app/ActionBarDrawerToggle",
+      "android/support/v4/app/ActionBarDrawerToggle$DelegateProvider": "androidx/legacy/app/ActionBarDrawerToggle$DelegateProvider",
+      "android/support/v4/app/ActionBarDrawerToggle$SetIndicatorInfo": "androidx/legacy/app/ActionBarDrawerToggle$SetIndicatorInfo",
+      "android/support/v4/app/ActionBarDrawerToggle$SlideDrawable": "androidx/legacy/app/ActionBarDrawerToggle$SlideDrawable",
+      "android/support/v4/widget/DrawerLayout$DrawerListener": "androidx/widget/DrawerLayout$DrawerListener",
+      "android/support/v4/widget/DrawerLayout": "androidx/widget/DrawerLayout",
+      "android/support/v4/view/AbsSavedState$1": "androidx/view/AbsSavedState$1",
+      "android/support/v4/view/AbsSavedState$2": "androidx/view/AbsSavedState$2",
+      "android/support/v4/view/AsyncLayoutInflater$1": "androidx/view/AsyncLayoutInflater$1",
+      "android/support/v4/view/AsyncLayoutInflater": "androidx/view/AsyncLayoutInflater",
+      "android/support/v4/view/AsyncLayoutInflater$InflateRequest": "androidx/view/AsyncLayoutInflater$InflateRequest",
+      "android/support/v4/view/AsyncLayoutInflater$OnInflateFinishedListener": "androidx/view/AsyncLayoutInflater$OnInflateFinishedListener",
+      "android/support/v4/view/AsyncLayoutInflater$InflateThread": "androidx/view/AsyncLayoutInflater$InflateThread",
+      "android/support/v4/view/AsyncLayoutInflater$BasicInflater": "androidx/view/AsyncLayoutInflater$BasicInflater",
+      "android/support/annotation/UiThread": "androidx/annotation/UiThread",
+      "android/support/v4/view/NestedScrollingChildHelper": "androidx/view/NestedScrollingChildHelper",
+      "android/support/v4/view/ViewParentCompat": "androidx/view/ViewParentCompat",
+      "android/support/v4/view/PagerAdapter": "androidx/widget/PagerAdapter",
+      "android/support/v4/view/PagerTabStrip$1": "androidx/widget/PagerTabStrip$1",
+      "android/support/v4/view/PagerTabStrip": "androidx/widget/PagerTabStrip",
+      "android/support/v4/view/ViewPager": "androidx/widget/ViewPager",
+      "android/support/v4/view/PagerTabStrip$2": "androidx/widget/PagerTabStrip$2",
+      "android/support/v4/view/PagerTitleStrip": "androidx/widget/PagerTitleStrip",
+      "android/support/annotation/ColorRes": "androidx/annotation/ColorRes",
+      "android/support/v4/view/PagerTitleStrip$PageListener": "androidx/widget/PagerTitleStrip$PageListener",
+      "android/support/v4/view/ViewPager$OnPageChangeListener": "androidx/widget/ViewPager$OnPageChangeListener",
+      "android/support/v4/view/ViewPager$OnAdapterChangeListener": "androidx/widget/ViewPager$OnAdapterChangeListener",
+      "android/support/v4/view/PagerTitleStrip$SingleLineAllCapsTransform": "androidx/widget/PagerTitleStrip$SingleLineAllCapsTransform",
+      "android/support/v4/view/ViewPager$DecorView": "androidx/widget/ViewPager$DecorView",
+      "android/support/v4/widget/TextViewCompat": "androidx/widget/TextViewCompat",
+      "android/support/v4/view/ViewPager$1": "androidx/widget/ViewPager$1",
+      "android/support/v4/view/ViewPager$ItemInfo": "androidx/widget/ViewPager$ItemInfo",
+      "android/support/v4/view/ViewPager$2": "androidx/widget/ViewPager$2",
+      "android/support/v4/view/ViewPager$3": "androidx/widget/ViewPager$3",
+      "android/support/v4/view/ViewPager$4": "androidx/widget/ViewPager$4",
+      "android/support/v4/view/ViewPager$LayoutParams": "androidx/widget/ViewPager$LayoutParams",
+      "android/support/v4/view/ViewPager$MyAccessibilityDelegate": "androidx/widget/ViewPager$MyAccessibilityDelegate",
+      "android/support/v4/view/ViewPager$PageTransformer": "androidx/widget/ViewPager$PageTransformer",
+      "android/support/v4/view/ViewPager$PagerObserver": "androidx/widget/ViewPager$PagerObserver",
+      "android/support/v4/view/ViewPager$SavedState$1": "androidx/widget/ViewPager$SavedState$1",
+      "android/support/v4/view/ViewPager$SavedState": "androidx/widget/ViewPager$SavedState",
+      "android/support/v4/view/ViewPager$SimpleOnPageChangeListener": "androidx/widget/ViewPager$SimpleOnPageChangeListener",
+      "android/support/v4/view/ViewPager$ViewPositionComparator": "androidx/widget/ViewPager$ViewPositionComparator",
+      "android/support/v4/view/animation/LookupTableInterpolator": "androidx/view/animation/LookupTableInterpolator",
+      "android/support/v4/widget/AutoScrollHelper$ClampedScroller": "androidx/widget/AutoScrollHelper$ClampedScroller",
+      "android/support/v4/widget/AutoScrollHelper": "androidx/widget/AutoScrollHelper",
+      "android/support/v4/widget/AutoScrollHelper$ScrollAnimationRunnable": "androidx/widget/AutoScrollHelper$ScrollAnimationRunnable",
+      "android/support/v4/widget/CircleImageView$OvalShadow": "androidx/widget/CircleImageView$OvalShadow",
+      "android/support/v4/widget/CircleImageView": "androidx/widget/CircleImageView",
+      "android/support/v4/widget/CircularProgressDrawable$1": "androidx/widget/CircularProgressDrawable$1",
+      "android/support/v4/widget/CircularProgressDrawable": "androidx/widget/CircularProgressDrawable",
+      "android/support/v4/widget/CircularProgressDrawable$Ring": "androidx/widget/CircularProgressDrawable$Ring",
+      "android/support/v4/widget/CircularProgressDrawable$2": "androidx/widget/CircularProgressDrawable$2",
+      "android/support/v4/widget/CircularProgressDrawable$ProgressDrawableSize": "androidx/widget/CircularProgressDrawable$ProgressDrawableSize",
+      "android/support/v4/util/Preconditions": "androidx/util/Preconditions",
+      "android/support/v4/widget/ContentLoadingProgressBar$1": "androidx/widget/ContentLoadingProgressBar$1",
+      "android/support/v4/widget/ContentLoadingProgressBar": "androidx/widget/ContentLoadingProgressBar",
+      "android/support/v4/widget/ContentLoadingProgressBar$2": "androidx/widget/ContentLoadingProgressBar$2",
+      "android/support/v4/widget/CursorAdapter$ChangeObserver": "androidx/widget/CursorAdapter$ChangeObserver",
+      "android/support/v4/widget/CursorAdapter": "androidx/widget/CursorAdapter",
+      "android/support/v4/widget/CursorAdapter$MyDataSetObserver": "androidx/widget/CursorAdapter$MyDataSetObserver",
+      "android/support/v4/widget/CursorFilter$CursorFilterClient": "androidx/widget/CursorFilter$CursorFilterClient",
+      "android/support/v4/widget/CursorFilter": "androidx/widget/CursorFilter",
+      "android/support/v4/util/Pools$SimplePool": "androidx/util/Pools$SimplePool",
+      "android/support/v4/widget/DrawerLayout$1": "androidx/widget/DrawerLayout$1",
+      "android/support/v4/widget/DrawerLayout$AccessibilityDelegate": "androidx/widget/DrawerLayout$AccessibilityDelegate",
+      "android/support/v4/widget/DrawerLayout$ChildAccessibilityDelegate": "androidx/widget/DrawerLayout$ChildAccessibilityDelegate",
+      "android/support/v4/widget/DrawerLayout$EdgeGravity": "androidx/widget/DrawerLayout$EdgeGravity",
+      "android/support/v4/widget/DrawerLayout$LayoutParams": "androidx/widget/DrawerLayout$LayoutParams",
+      "android/support/v4/widget/DrawerLayout$LockMode": "androidx/widget/DrawerLayout$LockMode",
+      "android/support/v4/widget/DrawerLayout$SavedState$1": "androidx/widget/DrawerLayout$SavedState$1",
+      "android/support/v4/widget/DrawerLayout$SavedState": "androidx/widget/DrawerLayout$SavedState",
+      "android/support/v4/widget/DrawerLayout$SimpleDrawerListener": "androidx/widget/DrawerLayout$SimpleDrawerListener",
+      "android/support/v4/widget/DrawerLayout$State": "androidx/widget/DrawerLayout$State",
+      "android/support/v4/widget/DrawerLayout$ViewDragCallback$1": "androidx/widget/DrawerLayout$ViewDragCallback$1",
+      "android/support/v4/widget/DrawerLayout$ViewDragCallback": "androidx/widget/DrawerLayout$ViewDragCallback",
+      "android/support/v4/widget/ViewDragHelper$Callback": "androidx/widget/ViewDragHelper$Callback",
+      "android/support/v4/widget/ViewDragHelper": "androidx/widget/ViewDragHelper",
+      "android/support/v4/widget/ExploreByTouchHelper$1": "androidx/widget/ExploreByTouchHelper$1",
+      "android/support/v4/widget/FocusStrategy$BoundsAdapter": "androidx/widget/FocusStrategy$BoundsAdapter",
+      "android/support/v4/widget/ExploreByTouchHelper": "androidx/widget/ExploreByTouchHelper",
+      "android/support/v4/widget/FocusStrategy": "androidx/widget/FocusStrategy",
+      "android/support/v4/widget/ExploreByTouchHelper$2": "androidx/widget/ExploreByTouchHelper$2",
+      "android/support/v4/widget/FocusStrategy$CollectionAdapter": "androidx/widget/FocusStrategy$CollectionAdapter",
+      "android/support/v4/util/SparseArrayCompat": "androidx/util/SparseArrayCompat",
+      "android/support/v4/widget/ExploreByTouchHelper$MyNodeProvider": "androidx/widget/ExploreByTouchHelper$MyNodeProvider",
+      "android/support/v4/view/accessibility/AccessibilityNodeProviderCompat": "androidx/view/accessibility/AccessibilityNodeProviderCompat",
+      "android/support/v4/view/accessibility/AccessibilityEventCompat": "androidx/view/accessibility/AccessibilityEventCompat",
+      "android/support/v4/view/accessibility/AccessibilityRecordCompat": "androidx/view/accessibility/AccessibilityRecordCompat",
+      "android/support/v4/widget/FocusStrategy$SequentialComparator": "androidx/widget/FocusStrategy$SequentialComparator",
+      "android/support/v4/widget/ListViewAutoScrollHelper": "androidx/widget/ListViewAutoScrollHelper",
+      "android/support/v4/widget/ListViewCompat": "androidx/widget/ListViewCompat",
+      "android/support/v4/widget/NestedScrollView$AccessibilityDelegate": "androidx/widget/NestedScrollView$AccessibilityDelegate",
+      "android/support/v4/widget/NestedScrollView": "androidx/widget/NestedScrollView",
+      "android/support/v4/widget/NestedScrollView$OnScrollChangeListener": "androidx/widget/NestedScrollView$OnScrollChangeListener",
+      "android/support/v4/widget/NestedScrollView$SavedState$1": "androidx/widget/NestedScrollView$SavedState$1",
+      "android/support/v4/widget/NestedScrollView$SavedState": "androidx/widget/NestedScrollView$SavedState",
+      "android/support/v4/view/NestedScrollingParent": "androidx/view/NestedScrollingParent",
+      "android/support/v4/view/NestedScrollingChild2": "androidx/view/NestedScrollingChild2",
+      "android/support/v4/view/ScrollingView": "androidx/view/ScrollingView",
+      "android/support/v4/widget/EdgeEffectCompat": "androidx/widget/EdgeEffectCompat",
+      "android/support/v4/widget/ResourceCursorAdapter": "androidx/widget/ResourceCursorAdapter",
+      "android/support/v4/widget/SimpleCursorAdapter$CursorToStringConverter": "androidx/widget/SimpleCursorAdapter$CursorToStringConverter",
+      "android/support/v4/widget/SimpleCursorAdapter": "androidx/widget/SimpleCursorAdapter",
+      "android/support/v4/widget/SimpleCursorAdapter$ViewBinder": "androidx/widget/SimpleCursorAdapter$ViewBinder",
+      "android/support/v4/widget/SlidingPaneLayout$AccessibilityDelegate": "androidx/widget/SlidingPaneLayout$AccessibilityDelegate",
+      "android/support/v4/widget/SlidingPaneLayout": "androidx/widget/SlidingPaneLayout",
+      "android/support/v4/widget/SlidingPaneLayout$DisableLayerRunnable": "androidx/widget/SlidingPaneLayout$DisableLayerRunnable",
+      "android/support/v4/widget/SlidingPaneLayout$DragHelperCallback": "androidx/widget/SlidingPaneLayout$DragHelperCallback",
+      "android/support/v4/widget/SlidingPaneLayout$LayoutParams": "androidx/widget/SlidingPaneLayout$LayoutParams",
+      "android/support/v4/widget/SlidingPaneLayout$PanelSlideListener": "androidx/widget/SlidingPaneLayout$PanelSlideListener",
+      "android/support/v4/widget/SlidingPaneLayout$SavedState$1": "androidx/widget/SlidingPaneLayout$SavedState$1",
+      "android/support/v4/widget/SlidingPaneLayout$SavedState": "androidx/widget/SlidingPaneLayout$SavedState",
+      "android/support/v4/widget/SlidingPaneLayout$SimplePanelSlideListener": "androidx/widget/SlidingPaneLayout$SimplePanelSlideListener",
+      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImpl": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImpl",
+      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImplBase": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImplBase",
+      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImplJB": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImplJB",
+      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImplJBMR1": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImplJBMR1",
+      "android/support/v4/widget/Space": "androidx/widget/Space",
+      "android/support/v4/widget/SwipeProgressBar": "androidx/widget/SwipeProgressBar",
+      "android/support/v4/widget/SwipeRefreshLayout$1": "androidx/widget/SwipeRefreshLayout$1",
+      "android/support/v4/widget/SwipeRefreshLayout": "androidx/widget/SwipeRefreshLayout",
+      "android/support/v4/widget/SwipeRefreshLayout$OnRefreshListener": "androidx/widget/SwipeRefreshLayout$OnRefreshListener",
+      "android/support/v4/widget/SwipeRefreshLayout$2": "androidx/widget/SwipeRefreshLayout$2",
+      "android/support/v4/widget/SwipeRefreshLayout$3": "androidx/widget/SwipeRefreshLayout$3",
+      "android/support/v4/widget/SwipeRefreshLayout$4": "androidx/widget/SwipeRefreshLayout$4",
+      "android/support/v4/widget/SwipeRefreshLayout$5": "androidx/widget/SwipeRefreshLayout$5",
+      "android/support/v4/widget/SwipeRefreshLayout$6": "androidx/widget/SwipeRefreshLayout$6",
+      "android/support/v4/widget/SwipeRefreshLayout$7": "androidx/widget/SwipeRefreshLayout$7",
+      "android/support/v4/widget/SwipeRefreshLayout$8": "androidx/widget/SwipeRefreshLayout$8",
+      "android/support/v4/widget/SwipeRefreshLayout$OnChildScrollUpCallback": "androidx/widget/SwipeRefreshLayout$OnChildScrollUpCallback",
+      "android/support/v4/view/NestedScrollingChild": "androidx/view/NestedScrollingChild",
+      "android/support/v4/widget/ViewDragHelper$1": "androidx/widget/ViewDragHelper$1",
+      "android/support/v4/widget/ViewDragHelper$2": "androidx/widget/ViewDragHelper$2",
+      "android/support/annotation/StyleableRes": "androidx/annotation/StyleableRes",
+      "android/support/v4/graphics/drawable/TintAwareDrawable": "androidx/graphics/drawable/TintAwareDrawable",
+      "android/support/graphics/drawable/VectorDrawableCompat$VClipPath": "androidx/graphics/drawable/VectorDrawableCompat$VClipPath",
+      "android/support/graphics/drawable/VectorDrawableCompat$VPath": "androidx/graphics/drawable/VectorDrawableCompat$VPath",
+      "android/support/graphics/drawable/VectorDrawableCompat$VFullPath": "androidx/graphics/drawable/VectorDrawableCompat$VFullPath",
+      "android/support/graphics/drawable/VectorDrawableCompat$VGroup": "androidx/graphics/drawable/VectorDrawableCompat$VGroup",
+      "android/support/graphics/drawable/VectorDrawableCompat$VPathRenderer": "androidx/graphics/drawable/VectorDrawableCompat$VPathRenderer",
+      "android/support/graphics/drawable/VectorDrawableCompat$VectorDrawableCompatState": "androidx/graphics/drawable/VectorDrawableCompat$VectorDrawableCompatState",
+      "android/support/graphics/drawable/VectorDrawableCompat$VectorDrawableDelegateState": "androidx/graphics/drawable/VectorDrawableCompat$VectorDrawableDelegateState",
+      "android/support/v7/app/ActionBar$DisplayOptions": "androidx/app/ActionBar$DisplayOptions",
+      "android/support/v7/app/ActionBar": "androidx/app/ActionBar",
+      "android/support/v7/app/ActionBar$LayoutParams": "androidx/app/ActionBar$LayoutParams",
+      "android/support/v7/appcompat/R$styleable": "androidx/appcompat/R$styleable",
+      "android/support/v7/appcompat/R": "androidx/appcompat/R",
+      "android/support/v7/app/ActionBar$NavigationMode": "androidx/app/ActionBar$NavigationMode",
+      "android/support/v7/app/ActionBar$OnMenuVisibilityListener": "androidx/app/ActionBar$OnMenuVisibilityListener",
+      "android/support/v7/app/ActionBar$OnNavigationListener": "androidx/app/ActionBar$OnNavigationListener",
+      "android/support/v7/app/ActionBar$Tab": "androidx/app/ActionBar$Tab",
+      "android/support/v7/app/ActionBar$TabListener": "androidx/app/ActionBar$TabListener",
+      "android/support/v7/view/ActionMode$Callback": "androidx/view/ActionMode$Callback",
+      "android/support/v7/view/ActionMode": "androidx/view/ActionMode",
+      "android/support/v7/app/ActionBarDrawerToggle$1": "androidx/app/ActionBarDrawerToggle$1",
+      "android/support/v7/app/ActionBarDrawerToggle": "androidx/app/ActionBarDrawerToggle",
+      "android/support/v7/widget/Toolbar": "androidx/widget/Toolbar",
+      "android/support/v7/graphics/drawable/DrawerArrowDrawable": "androidx/graphics/drawable/DrawerArrowDrawable",
+      "android/support/v7/app/ActionBarDrawerToggle$Delegate": "androidx/app/ActionBarDrawerToggle$Delegate",
+      "android/support/v7/app/ActionBarDrawerToggle$DelegateProvider": "androidx/app/ActionBarDrawerToggle$DelegateProvider",
+      "android/support/v7/app/ActionBarDrawerToggle$IcsDelegate": "androidx/app/ActionBarDrawerToggle$IcsDelegate",
+      "android/support/v7/app/ActionBarDrawerToggleHoneycomb$SetIndicatorInfo": "androidx/app/ActionBarDrawerToggleHoneycomb$SetIndicatorInfo",
+      "android/support/v7/app/ActionBarDrawerToggleHoneycomb": "androidx/app/ActionBarDrawerToggleHoneycomb",
+      "android/support/v7/app/ActionBarDrawerToggle$JellybeanMr2Delegate": "androidx/app/ActionBarDrawerToggle$JellybeanMr2Delegate",
+      "android/support/v7/app/ActionBarDrawerToggle$ToolbarCompatDelegate": "androidx/app/ActionBarDrawerToggle$ToolbarCompatDelegate",
+      "android/support/v7/app/AlertController$1": "androidx/app/AlertController$1",
+      "android/support/v7/app/AlertController": "androidx/app/AlertController",
+      "android/support/v7/app/AlertController$ButtonHandler": "androidx/app/AlertController$ButtonHandler",
+      "android/support/v7/app/AppCompatDialog": "androidx/app/AppCompatDialog",
+      "android/support/v7/app/AlertController$2": "androidx/app/AlertController$2",
+      "android/support/v7/app/AlertController$3": "androidx/app/AlertController$3",
+      "android/support/v7/app/AlertController$4": "androidx/app/AlertController$4",
+      "android/support/v7/app/AlertController$5": "androidx/app/AlertController$5",
+      "android/support/v7/app/AlertController$AlertParams$1": "androidx/app/AlertController$AlertParams$1",
+      "android/support/v7/app/AlertController$AlertParams": "androidx/app/AlertController$AlertParams",
+      "android/support/v7/app/AlertController$RecycleListView": "androidx/app/AlertController$RecycleListView",
+      "android/support/v7/app/AlertController$AlertParams$2": "androidx/app/AlertController$AlertParams$2",
+      "android/support/v7/app/AlertController$AlertParams$3": "androidx/app/AlertController$AlertParams$3",
+      "android/support/v7/app/AlertController$AlertParams$4": "androidx/app/AlertController$AlertParams$4",
+      "android/support/v7/app/AlertController$AlertParams$OnPrepareListViewListener": "androidx/app/AlertController$AlertParams$OnPrepareListViewListener",
+      "android/support/v7/app/AlertController$CheckedItemAdapter": "androidx/app/AlertController$CheckedItemAdapter",
+      "android/support/v7/widget/LinearLayoutCompat$LayoutParams": "androidx/widget/LinearLayoutCompat$LayoutParams",
+      "android/support/v7/widget/LinearLayoutCompat": "androidx/widget/LinearLayoutCompat",
+      "android/support/v7/appcompat/R$attr": "androidx/appcompat/R$attr",
+      "android/support/v7/appcompat/R$id": "androidx/appcompat/R$id",
+      "android/support/annotation/StyleRes": "androidx/annotation/StyleRes",
+      "android/support/annotation/AttrRes": "androidx/annotation/AttrRes",
+      "android/support/v7/app/AppCompatActivity": "androidx/app/AppCompatActivity",
+      "android/support/v7/app/AppCompatCallback": "androidx/app/AppCompatCallback",
+      "android/support/v4/app/TaskStackBuilder$SupportParentable": "androidx/app/TaskStackBuilder$SupportParentable",
+      "android/support/v4/app/TaskStackBuilder": "androidx/app/TaskStackBuilder",
+      "android/support/v7/app/AppCompatDelegate": "androidx/app/AppCompatDelegate",
+      "android/support/v4/app/NavUtils": "androidx/app/NavUtils",
+      "android/support/v7/widget/VectorEnabledTintResources": "androidx/widget/VectorEnabledTintResources",
+      "android/support/v7/app/AppCompatDelegate$ApplyableNightMode": "androidx/app/AppCompatDelegate$ApplyableNightMode",
+      "android/support/v7/app/AppCompatDelegate$NightMode": "androidx/app/AppCompatDelegate$NightMode",
+      "android/support/v7/app/AppCompatDelegateImplN": "androidx/app/AppCompatDelegateImplN",
+      "android/support/v7/app/AppCompatDelegateImplV23": "androidx/app/AppCompatDelegateImplV23",
+      "android/support/v7/app/AppCompatDelegateImplV14": "androidx/app/AppCompatDelegateImplV14",
+      "android/support/v7/app/AppCompatDelegateImplV11": "androidx/app/AppCompatDelegateImplV11",
+      "android/support/v7/app/AppCompatDelegateImplV9": "androidx/app/AppCompatDelegateImplV9",
+      "android/support/v7/app/AppCompatDelegateImplBase$1": "androidx/app/AppCompatDelegateImplBase$1",
+      "android/support/v7/app/AppCompatDelegateImplBase": "androidx/app/AppCompatDelegateImplBase",
+      "android/support/v7/app/AppCompatDelegateImplBase$ActionBarDrawableToggleImpl": "androidx/app/AppCompatDelegateImplBase$ActionBarDrawableToggleImpl",
+      "android/support/v7/widget/TintTypedArray": "androidx/widget/TintTypedArray",
+      "android/support/v7/app/AppCompatDelegateImplBase$AppCompatWindowCallbackBase": "androidx/app/AppCompatDelegateImplBase$AppCompatWindowCallbackBase",
+      "android/support/v7/view/WindowCallbackWrapper": "androidx/view/WindowCallbackWrapper",
+      "android/support/v7/view/menu/MenuBuilder": "androidx/view/menu/MenuBuilder",
+      "android/support/v7/view/SupportMenuInflater": "androidx/view/SupportMenuInflater",
+      "android/support/v7/app/AppCompatDelegateImplN$AppCompatWindowCallbackN": "androidx/app/AppCompatDelegateImplN$AppCompatWindowCallbackN",
+      "android/support/v7/app/AppCompatDelegateImplV23$AppCompatWindowCallbackV23": "androidx/app/AppCompatDelegateImplV23$AppCompatWindowCallbackV23",
+      "android/support/v7/app/AppCompatDelegateImplV9$PanelFeatureState": "androidx/app/AppCompatDelegateImplV9$PanelFeatureState",
+      "android/support/v7/app/AppCompatDelegateImplV14$AppCompatWindowCallbackV14": "androidx/app/AppCompatDelegateImplV14$AppCompatWindowCallbackV14",
+      "android/support/v7/view/SupportActionModeWrapper$CallbackWrapper": "androidx/view/SupportActionModeWrapper$CallbackWrapper",
+      "android/support/v7/view/SupportActionModeWrapper": "androidx/view/SupportActionModeWrapper",
+      "android/support/v7/app/AppCompatDelegateImplV14$AutoNightModeManager$1": "androidx/app/AppCompatDelegateImplV14$AutoNightModeManager$1",
+      "android/support/v7/app/AppCompatDelegateImplV14$AutoNightModeManager": "androidx/app/AppCompatDelegateImplV14$AutoNightModeManager",
+      "android/support/v7/app/TwilightManager": "androidx/app/TwilightManager",
+      "android/support/v7/app/ResourcesFlusher": "androidx/app/ResourcesFlusher",
+      "android/support/v7/app/AppCompatDelegateImplV9$1": "androidx/app/AppCompatDelegateImplV9$1",
+      "android/support/v7/app/AppCompatDelegateImplV9$2": "androidx/app/AppCompatDelegateImplV9$2",
+      "android/support/v7/app/AppCompatDelegateImplV9$3": "androidx/app/AppCompatDelegateImplV9$3",
+      "android/support/v7/widget/FitWindowsViewGroup$OnFitSystemWindowsListener": "androidx/widget/FitWindowsViewGroup$OnFitSystemWindowsListener",
+      "android/support/v7/widget/FitWindowsViewGroup": "androidx/widget/FitWindowsViewGroup",
+      "android/support/v7/app/AppCompatDelegateImplV9$4": "androidx/app/AppCompatDelegateImplV9$4",
+      "android/support/v7/widget/ContentFrameLayout$OnAttachListener": "androidx/widget/ContentFrameLayout$OnAttachListener",
+      "android/support/v7/widget/ContentFrameLayout": "androidx/widget/ContentFrameLayout",
+      "android/support/v7/app/AppCompatDelegateImplV9$5$1": "androidx/app/AppCompatDelegateImplV9$5$1",
+      "android/support/v4/view/ViewPropertyAnimatorListenerAdapter": "androidx/view/ViewPropertyAnimatorListenerAdapter",
+      "android/support/v7/app/AppCompatDelegateImplV9$5": "androidx/app/AppCompatDelegateImplV9$5",
+      "android/support/v7/widget/ActionBarContextView": "androidx/widget/ActionBarContextView",
+      "android/support/v4/view/ViewPropertyAnimatorCompat": "androidx/view/ViewPropertyAnimatorCompat",
+      "android/support/v4/view/ViewPropertyAnimatorListener": "androidx/view/ViewPropertyAnimatorListener",
+      "android/support/v7/app/AppCompatDelegateImplV9$6": "androidx/app/AppCompatDelegateImplV9$6",
+      "android/support/v7/app/AppCompatDelegateImplV9$ActionMenuPresenterCallback": "androidx/app/AppCompatDelegateImplV9$ActionMenuPresenterCallback",
+      "android/support/v7/view/menu/MenuPresenter$Callback": "androidx/view/menu/MenuPresenter$Callback",
+      "android/support/v7/view/menu/MenuPresenter": "androidx/view/menu/MenuPresenter",
+      "android/support/v7/app/AppCompatDelegateImplV9$ActionModeCallbackWrapperV9$1": "androidx/app/AppCompatDelegateImplV9$ActionModeCallbackWrapperV9$1",
+      "android/support/v7/app/AppCompatDelegateImplV9$ActionModeCallbackWrapperV9": "androidx/app/AppCompatDelegateImplV9$ActionModeCallbackWrapperV9",
+      "android/support/v7/app/AppCompatDelegateImplV9$ListMenuDecorView": "androidx/app/AppCompatDelegateImplV9$ListMenuDecorView",
+      "android/support/v7/content/res/AppCompatResources": "androidx/content/res/AppCompatResources",
+      "android/support/v7/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState$1": "androidx/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState$1",
+      "android/support/v7/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState": "androidx/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState",
+      "android/support/v7/appcompat/R$style": "androidx/appcompat/R$style",
+      "android/support/v7/appcompat/R$layout": "androidx/appcompat/R$layout",
+      "android/support/v7/view/menu/ListMenuPresenter": "androidx/view/menu/ListMenuPresenter",
+      "android/support/v7/view/ContextThemeWrapper": "androidx/view/ContextThemeWrapper",
+      "android/support/v7/view/menu/MenuView": "androidx/view/menu/MenuView",
+      "android/support/v7/app/AppCompatDelegateImplV9$PanelMenuPresenterCallback": "androidx/app/AppCompatDelegateImplV9$PanelMenuPresenterCallback",
+      "android/support/v7/view/menu/MenuBuilder$Callback": "androidx/view/menu/MenuBuilder$Callback",
+      "android/support/v7/appcompat/R$color": "androidx/appcompat/R$color",
+      "android/support/v7/widget/DecorContentParent": "androidx/widget/DecorContentParent",
+      "android/support/v7/app/AppCompatViewInflater": "androidx/app/AppCompatViewInflater",
+      "android/support/v7/app/WindowDecorActionBar": "androidx/app/WindowDecorActionBar",
+      "android/support/v7/app/ToolbarActionBar": "androidx/app/ToolbarActionBar",
+      "android/support/v7/widget/AppCompatDrawableManager": "androidx/widget/AppCompatDrawableManager",
+      "android/support/v7/widget/ViewUtils": "androidx/widget/ViewUtils",
+      "android/support/v4/widget/PopupWindowCompat": "androidx/widget/PopupWindowCompat",
+      "android/support/v7/widget/ViewStubCompat": "androidx/widget/ViewStubCompat",
+      "android/support/v7/view/StandaloneActionMode": "androidx/view/StandaloneActionMode",
+      "android/support/v4/view/LayoutInflaterCompat": "androidx/view/LayoutInflaterCompat",
+      "android/support/v7/app/AppCompatDialogFragment": "androidx/app/AppCompatDialogFragment",
+      "android/support/v7/app/AppCompatViewInflater$DeclaredOnClickListener": "androidx/app/AppCompatViewInflater$DeclaredOnClickListener",
+      "android/support/v7/widget/TintContextWrapper": "androidx/widget/TintContextWrapper",
+      "android/support/v7/widget/AppCompatTextView": "androidx/widget/AppCompatTextView",
+      "android/support/v7/widget/AppCompatImageView": "androidx/widget/AppCompatImageView",
+      "android/support/v7/widget/AppCompatButton": "androidx/widget/AppCompatButton",
+      "android/support/v7/widget/AppCompatEditText": "androidx/widget/AppCompatEditText",
+      "android/support/v7/widget/AppCompatSpinner": "androidx/widget/AppCompatSpinner",
+      "android/support/v7/widget/AppCompatImageButton": "androidx/widget/AppCompatImageButton",
+      "android/support/v7/widget/AppCompatCheckBox": "androidx/widget/AppCompatCheckBox",
+      "android/support/v7/widget/AppCompatRadioButton": "androidx/widget/AppCompatRadioButton",
+      "android/support/v7/widget/AppCompatCheckedTextView": "androidx/widget/AppCompatCheckedTextView",
+      "android/support/v7/widget/AppCompatAutoCompleteTextView": "androidx/widget/AppCompatAutoCompleteTextView",
+      "android/support/v7/widget/AppCompatMultiAutoCompleteTextView": "androidx/widget/AppCompatMultiAutoCompleteTextView",
+      "android/support/v7/widget/AppCompatRatingBar": "androidx/widget/AppCompatRatingBar",
+      "android/support/v7/widget/AppCompatSeekBar": "androidx/widget/AppCompatSeekBar",
+      "android/support/v7/app/NavItemSelectedListener": "androidx/app/NavItemSelectedListener",
+      "android/support/v7/app/ToolbarActionBar$1": "androidx/app/ToolbarActionBar$1",
+      "android/support/v7/app/ToolbarActionBar$2": "androidx/app/ToolbarActionBar$2",
+      "android/support/v7/widget/Toolbar$OnMenuItemClickListener": "androidx/widget/Toolbar$OnMenuItemClickListener",
+      "android/support/v7/app/ToolbarActionBar$ActionMenuPresenterCallback": "androidx/app/ToolbarActionBar$ActionMenuPresenterCallback",
+      "android/support/v7/widget/DecorToolbar": "androidx/widget/DecorToolbar",
+      "android/support/v7/app/ToolbarActionBar$MenuBuilderCallback": "androidx/app/ToolbarActionBar$MenuBuilderCallback",
+      "android/support/v7/app/ToolbarActionBar$ToolbarCallbackWrapper": "androidx/app/ToolbarActionBar$ToolbarCallbackWrapper",
+      "android/support/v7/widget/ToolbarWidgetWrapper": "androidx/widget/ToolbarWidgetWrapper",
+      "android/support/v7/app/TwilightCalculator": "androidx/app/TwilightCalculator",
+      "android/support/v7/app/TwilightManager$TwilightState": "androidx/app/TwilightManager$TwilightState",
+      "android/support/v4/content/PermissionChecker": "androidx/content/PermissionChecker",
+      "android/support/annotation/RequiresPermission": "androidx/annotation/RequiresPermission",
+      "android/support/v7/app/WindowDecorActionBar$1": "androidx/app/WindowDecorActionBar$1",
+      "android/support/v7/widget/ActionBarContainer": "androidx/widget/ActionBarContainer",
+      "android/support/v7/view/ViewPropertyAnimatorCompatSet": "androidx/view/ViewPropertyAnimatorCompatSet",
+      "android/support/v7/widget/ActionBarOverlayLayout": "androidx/widget/ActionBarOverlayLayout",
+      "android/support/v7/app/WindowDecorActionBar$2": "androidx/app/WindowDecorActionBar$2",
+      "android/support/v7/app/WindowDecorActionBar$3": "androidx/app/WindowDecorActionBar$3",
+      "android/support/v4/view/ViewPropertyAnimatorUpdateListener": "androidx/view/ViewPropertyAnimatorUpdateListener",
+      "android/support/v7/app/WindowDecorActionBar$ActionModeImpl": "androidx/app/WindowDecorActionBar$ActionModeImpl",
+      "android/support/v7/view/menu/SubMenuBuilder": "androidx/view/menu/SubMenuBuilder",
+      "android/support/v7/view/menu/MenuPopupHelper": "androidx/view/menu/MenuPopupHelper",
+      "android/support/v7/app/WindowDecorActionBar$TabImpl": "androidx/app/WindowDecorActionBar$TabImpl",
+      "android/support/v7/widget/ScrollingTabContainerView": "androidx/widget/ScrollingTabContainerView",
+      "android/support/v7/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback": "androidx/widget/ActionBarOverlayLayout$ActionBarVisibilityCallback",
+      "android/support/v7/view/ActionBarPolicy": "androidx/view/ActionBarPolicy",
+      "android/support/v7/content/res/AppCompatColorStateListInflater": "androidx/content/res/AppCompatColorStateListInflater",
+      "android/support/v7/content/res/GrowingArrayUtils": "androidx/content/res/GrowingArrayUtils",
+      "android/support/v4/graphics/ColorUtils": "androidx/graphics/ColorUtils",
+      "android/support/v7/content/res/AppCompatResources$ColorStateListCacheEntry": "androidx/content/res/AppCompatResources$ColorStateListCacheEntry",
+      "android/support/v7/graphics/drawable/DrawableWrapper": "androidx/graphics/drawable/DrawableWrapper",
+      "android/support/v7/graphics/drawable/DrawerArrowDrawable$ArrowDirection": "androidx/graphics/drawable/DrawerArrowDrawable$ArrowDirection",
+      "android/support/v7/text/AllCapsTransformationMethod": "androidx/text/AllCapsTransformationMethod",
+      "android/support/v7/appcompat/R$bool": "androidx/appcompat/R$bool",
+      "android/support/v7/appcompat/R$dimen": "androidx/appcompat/R$dimen",
+      "android/support/v7/view/CollapsibleActionView": "androidx/view/CollapsibleActionView",
+      "android/support/v4/internal/view/SupportMenuItem": "androidx/internal/view/SupportMenuItem",
+      "android/support/v7/view/menu/MenuWrapperFactory": "androidx/view/menu/MenuWrapperFactory",
+      "android/support/v4/internal/view/SupportMenu": "androidx/internal/view/SupportMenu",
+      "android/support/v7/view/SupportMenuInflater$InflatedOnMenuItemClickListener": "androidx/view/SupportMenuInflater$InflatedOnMenuItemClickListener",
+      "android/support/v7/view/SupportMenuInflater$MenuState": "androidx/view/SupportMenuInflater$MenuState",
+      "android/support/v4/view/ActionProvider": "androidx/view/ActionProvider",
+      "android/support/v7/widget/DrawableUtils": "androidx/widget/DrawableUtils",
+      "android/support/v7/view/menu/MenuItemImpl": "androidx/view/menu/MenuItemImpl",
+      "android/support/v7/view/menu/MenuItemWrapperICS": "androidx/view/menu/MenuItemWrapperICS",
+      "android/support/v4/view/MenuItemCompat": "androidx/view/MenuItemCompat",
+      "android/support/v7/view/ViewPropertyAnimatorCompatSet$1": "androidx/view/ViewPropertyAnimatorCompatSet$1",
+      "android/support/v7/view/menu/ActionMenuItem": "androidx/view/menu/ActionMenuItem",
+      "android/support/v7/view/menu/ActionMenuItemView$ActionMenuItemForwardingListener": "androidx/view/menu/ActionMenuItemView$ActionMenuItemForwardingListener",
+      "android/support/v7/widget/ForwardingListener": "androidx/widget/ForwardingListener",
+      "android/support/v7/view/menu/ActionMenuItemView": "androidx/view/menu/ActionMenuItemView",
+      "android/support/v7/view/menu/ActionMenuItemView$PopupCallback": "androidx/view/menu/ActionMenuItemView$PopupCallback",
+      "android/support/v7/view/menu/MenuBuilder$ItemInvoker": "androidx/view/menu/MenuBuilder$ItemInvoker",
+      "android/support/v7/view/menu/ShowableListMenu": "androidx/view/menu/ShowableListMenu",
+      "android/support/v7/view/menu/MenuView$ItemView": "androidx/view/menu/MenuView$ItemView",
+      "android/support/v7/widget/ActionMenuView$ActionMenuChildView": "androidx/widget/ActionMenuView$ActionMenuChildView",
+      "android/support/v7/widget/ActionMenuView": "androidx/widget/ActionMenuView",
+      "android/support/v7/widget/TooltipCompat": "androidx/widget/TooltipCompat",
+      "android/support/v7/view/menu/BaseMenuPresenter": "androidx/view/menu/BaseMenuPresenter",
+      "android/support/v7/view/menu/BaseMenuWrapper": "androidx/view/menu/BaseMenuWrapper",
+      "android/support/v7/view/menu/BaseWrapper": "androidx/view/menu/BaseWrapper",
+      "android/support/v4/internal/view/SupportSubMenu": "androidx/internal/view/SupportSubMenu",
+      "android/support/v7/view/menu/CascadingMenuPopup$1": "androidx/view/menu/CascadingMenuPopup$1",
+      "android/support/v7/view/menu/CascadingMenuPopup": "androidx/view/menu/CascadingMenuPopup",
+      "android/support/v7/view/menu/CascadingMenuPopup$CascadingMenuInfo": "androidx/view/menu/CascadingMenuPopup$CascadingMenuInfo",
+      "android/support/v7/widget/MenuPopupWindow": "androidx/widget/MenuPopupWindow",
+      "android/support/v7/view/menu/CascadingMenuPopup$2": "androidx/view/menu/CascadingMenuPopup$2",
+      "android/support/v7/view/menu/CascadingMenuPopup$3$1": "androidx/view/menu/CascadingMenuPopup$3$1",
+      "android/support/v7/view/menu/CascadingMenuPopup$3": "androidx/view/menu/CascadingMenuPopup$3",
+      "android/support/v7/widget/MenuItemHoverListener": "androidx/widget/MenuItemHoverListener",
+      "android/support/v7/view/menu/CascadingMenuPopup$HorizPosition": "androidx/view/menu/CascadingMenuPopup$HorizPosition",
+      "android/support/v7/view/menu/MenuPopup": "androidx/view/menu/MenuPopup",
+      "android/support/v7/view/menu/MenuAdapter": "androidx/view/menu/MenuAdapter",
+      "android/support/v7/view/menu/ExpandedMenuView": "androidx/view/menu/ExpandedMenuView",
+      "android/support/v7/view/menu/ListMenuItemView": "androidx/view/menu/ListMenuItemView",
+      "android/support/v7/view/menu/ListMenuPresenter$MenuAdapter": "androidx/view/menu/ListMenuPresenter$MenuAdapter",
+      "android/support/v7/view/menu/MenuDialogHelper": "androidx/view/menu/MenuDialogHelper",
+      "android/support/v7/view/menu/MenuHelper": "androidx/view/menu/MenuHelper",
+      "android/support/v7/view/menu/MenuItemImpl$1": "androidx/view/menu/MenuItemImpl$1",
+      "android/support/v4/view/ActionProvider$VisibilityListener": "androidx/view/ActionProvider$VisibilityListener",
+      "android/support/v7/view/menu/MenuItemWrapperICS$ActionProviderWrapper": "androidx/view/menu/MenuItemWrapperICS$ActionProviderWrapper",
+      "android/support/v7/view/menu/MenuItemWrapperICS$CollapsibleActionViewWrapper": "androidx/view/menu/MenuItemWrapperICS$CollapsibleActionViewWrapper",
+      "android/support/v7/view/menu/MenuItemWrapperICS$OnActionExpandListenerWrapper": "androidx/view/menu/MenuItemWrapperICS$OnActionExpandListenerWrapper",
+      "android/support/v7/view/menu/MenuItemWrapperICS$OnMenuItemClickListenerWrapper": "androidx/view/menu/MenuItemWrapperICS$OnMenuItemClickListenerWrapper",
+      "android/support/v7/view/menu/MenuItemWrapperJB$ActionProviderWrapperJB": "androidx/view/menu/MenuItemWrapperJB$ActionProviderWrapperJB",
+      "android/support/v7/view/menu/MenuItemWrapperJB": "androidx/view/menu/MenuItemWrapperJB",
+      "android/support/v7/view/menu/MenuPopupHelper$1": "androidx/view/menu/MenuPopupHelper$1",
+      "android/support/v7/view/menu/StandardMenuPopup": "androidx/view/menu/StandardMenuPopup",
+      "android/support/v7/view/menu/MenuWrapperICS": "androidx/view/menu/MenuWrapperICS",
+      "android/support/v7/view/menu/SubMenuWrapperICS": "androidx/view/menu/SubMenuWrapperICS",
+      "android/support/v7/view/menu/StandardMenuPopup$1": "androidx/view/menu/StandardMenuPopup$1",
+      "android/support/v7/view/menu/StandardMenuPopup$2": "androidx/view/menu/StandardMenuPopup$2",
+      "android/support/v7/widget/AbsActionBarView$1": "androidx/widget/AbsActionBarView$1",
+      "android/support/v7/widget/AbsActionBarView": "androidx/widget/AbsActionBarView",
+      "android/support/v7/widget/AbsActionBarView$VisibilityAnimListener": "androidx/widget/AbsActionBarView$VisibilityAnimListener",
+      "android/support/v7/widget/ActionMenuPresenter": "androidx/widget/ActionMenuPresenter",
+      "android/support/v7/widget/ActionBarBackgroundDrawable": "androidx/widget/ActionBarBackgroundDrawable",
+      "android/support/v7/widget/ActionBarBackgroundDrawableV21": "androidx/widget/ActionBarBackgroundDrawableV21",
+      "android/support/v7/widget/ActionBarContextView$1": "androidx/widget/ActionBarContextView$1",
+      "android/support/v7/widget/ActionBarOverlayLayout$1": "androidx/widget/ActionBarOverlayLayout$1",
+      "android/support/v7/widget/ActionBarOverlayLayout$2": "androidx/widget/ActionBarOverlayLayout$2",
+      "android/support/v7/widget/ActionBarOverlayLayout$3": "androidx/widget/ActionBarOverlayLayout$3",
+      "android/support/v7/widget/ActionBarOverlayLayout$LayoutParams": "androidx/widget/ActionBarOverlayLayout$LayoutParams",
+      "android/support/v7/widget/ActionMenuPresenter$ActionButtonSubmenu": "androidx/widget/ActionMenuPresenter$ActionButtonSubmenu",
+      "android/support/v7/widget/ActionMenuPresenter$OverflowMenuButton": "androidx/widget/ActionMenuPresenter$OverflowMenuButton",
+      "android/support/v7/widget/ActionMenuPresenter$PopupPresenterCallback": "androidx/widget/ActionMenuPresenter$PopupPresenterCallback",
+      "android/support/v7/widget/ActionMenuPresenter$ActionMenuPopupCallback": "androidx/widget/ActionMenuPresenter$ActionMenuPopupCallback",
+      "android/support/v7/widget/ActionMenuPresenter$OpenOverflowRunnable": "androidx/widget/ActionMenuPresenter$OpenOverflowRunnable",
+      "android/support/v7/widget/ActionMenuPresenter$OverflowPopup": "androidx/widget/ActionMenuPresenter$OverflowPopup",
+      "android/support/v7/widget/ActionMenuPresenter$OverflowMenuButton$1": "androidx/widget/ActionMenuPresenter$OverflowMenuButton$1",
+      "android/support/v7/widget/ActionMenuPresenter$SavedState$1": "androidx/widget/ActionMenuPresenter$SavedState$1",
+      "android/support/v7/widget/ActionMenuPresenter$SavedState": "androidx/widget/ActionMenuPresenter$SavedState",
+      "android/support/v4/view/ActionProvider$SubUiVisibilityListener": "androidx/view/ActionProvider$SubUiVisibilityListener",
+      "android/support/v7/widget/ActionMenuView$LayoutParams": "androidx/widget/ActionMenuView$LayoutParams",
+      "android/support/v7/widget/ActionMenuView$ActionMenuPresenterCallback": "androidx/widget/ActionMenuView$ActionMenuPresenterCallback",
+      "android/support/v7/widget/ActionMenuView$MenuBuilderCallback": "androidx/widget/ActionMenuView$MenuBuilderCallback",
+      "android/support/v7/widget/ActionMenuView$OnMenuItemClickListener": "androidx/widget/ActionMenuView$OnMenuItemClickListener",
+      "android/support/v7/widget/ActivityChooserModel$ActivityChooserModelClient": "androidx/widget/ActivityChooserModel$ActivityChooserModelClient",
+      "android/support/v7/widget/ActivityChooserModel": "androidx/widget/ActivityChooserModel",
+      "android/support/v7/widget/ActivityChooserModel$ActivityResolveInfo": "androidx/widget/ActivityChooserModel$ActivityResolveInfo",
+      "android/support/v7/widget/ActivityChooserModel$ActivitySorter": "androidx/widget/ActivityChooserModel$ActivitySorter",
+      "android/support/v7/widget/ActivityChooserModel$HistoricalRecord": "androidx/widget/ActivityChooserModel$HistoricalRecord",
+      "android/support/v7/widget/ActivityChooserModel$DefaultSorter": "androidx/widget/ActivityChooserModel$DefaultSorter",
+      "android/support/v7/widget/ActivityChooserModel$OnChooseActivityListener": "androidx/widget/ActivityChooserModel$OnChooseActivityListener",
+      "android/support/v7/widget/ActivityChooserModel$PersistHistoryAsyncTask": "androidx/widget/ActivityChooserModel$PersistHistoryAsyncTask",
+      "android/support/v7/widget/ActivityChooserView$1": "androidx/widget/ActivityChooserView$1",
+      "android/support/v7/widget/ActivityChooserView": "androidx/widget/ActivityChooserView",
+      "android/support/v7/widget/ActivityChooserView$ActivityChooserViewAdapter": "androidx/widget/ActivityChooserView$ActivityChooserViewAdapter",
+      "android/support/v7/widget/ActivityChooserView$2": "androidx/widget/ActivityChooserView$2",
+      "android/support/v7/widget/ListPopupWindow": "androidx/widget/ListPopupWindow",
+      "android/support/v7/widget/ActivityChooserView$3": "androidx/widget/ActivityChooserView$3",
+      "android/support/v7/widget/ActivityChooserView$4": "androidx/widget/ActivityChooserView$4",
+      "android/support/v7/widget/ActivityChooserView$5": "androidx/widget/ActivityChooserView$5",
+      "android/support/v7/appcompat/R$string": "androidx/appcompat/R$string",
+      "android/support/v7/widget/ActivityChooserView$Callbacks": "androidx/widget/ActivityChooserView$Callbacks",
+      "android/support/v7/widget/ActivityChooserView$InnerLayout": "androidx/widget/ActivityChooserView$InnerLayout",
+      "android/support/v7/widget/AlertDialogLayout": "androidx/widget/AlertDialogLayout",
+      "android/support/v4/view/TintableBackgroundView": "androidx/view/TintableBackgroundView",
+      "android/support/v7/widget/AppCompatBackgroundHelper": "androidx/widget/AppCompatBackgroundHelper",
+      "android/support/v7/widget/AppCompatTextHelper": "androidx/widget/AppCompatTextHelper",
+      "android/support/v7/widget/AppCompatHintHelper": "androidx/widget/AppCompatHintHelper",
+      "android/support/v7/widget/TintInfo": "androidx/widget/TintInfo",
+      "android/support/v4/widget/AutoSizeableTextView": "androidx/widget/AutoSizeableTextView",
+      "android/support/v4/widget/TintableCompoundButton": "androidx/widget/TintableCompoundButton",
+      "android/support/v7/widget/AppCompatCompoundButtonHelper": "androidx/widget/AppCompatCompoundButtonHelper",
+      "android/support/v7/widget/AppCompatCompoundButtonHelper$DirectSetButtonDrawableInterface": "androidx/widget/AppCompatCompoundButtonHelper$DirectSetButtonDrawableInterface",
+      "android/support/v4/widget/CompoundButtonCompat": "androidx/widget/CompoundButtonCompat",
+      "android/support/v7/widget/AppCompatDrawableManager$AvdcInflateDelegate": "androidx/widget/AppCompatDrawableManager$AvdcInflateDelegate",
+      "android/support/v7/widget/AppCompatDrawableManager$InflateDelegate": "androidx/widget/AppCompatDrawableManager$InflateDelegate",
+      "android/support/v7/widget/AppCompatDrawableManager$ColorFilterLruCache": "androidx/widget/AppCompatDrawableManager$ColorFilterLruCache",
+      "android/support/v7/widget/AppCompatDrawableManager$VdcInflateDelegate": "androidx/widget/AppCompatDrawableManager$VdcInflateDelegate",
+      "android/support/v7/appcompat/R$drawable": "androidx/appcompat/R$drawable",
+      "android/support/v4/util/LongSparseArray": "androidx/util/LongSparseArray",
+      "android/support/v7/widget/ThemeUtils": "androidx/widget/ThemeUtils",
+      "android/support/v7/widget/WithHint": "androidx/widget/WithHint",
+      "android/support/v4/widget/TintableImageSourceView": "androidx/widget/TintableImageSourceView",
+      "android/support/v7/widget/AppCompatImageHelper": "androidx/widget/AppCompatImageHelper",
+      "android/support/v4/widget/ImageViewCompat": "androidx/widget/ImageViewCompat",
+      "android/support/v7/widget/AppCompatPopupWindow": "androidx/widget/AppCompatPopupWindow",
+      "android/support/v7/widget/AppCompatProgressBarHelper": "androidx/widget/AppCompatProgressBarHelper",
+      "android/support/v4/graphics/drawable/WrappedDrawable": "androidx/graphics/drawable/WrappedDrawable",
+      "android/support/v7/widget/AppCompatSeekBarHelper": "androidx/widget/AppCompatSeekBarHelper",
+      "android/support/v7/widget/AppCompatSpinner$1": "androidx/widget/AppCompatSpinner$1",
+      "android/support/v7/widget/AppCompatSpinner$DropdownPopup": "androidx/widget/AppCompatSpinner$DropdownPopup",
+      "android/support/v7/widget/AppCompatSpinner$DropDownAdapter": "androidx/widget/AppCompatSpinner$DropDownAdapter",
+      "android/support/v7/widget/ThemedSpinnerAdapter": "androidx/widget/ThemedSpinnerAdapter",
+      "android/support/v7/widget/AppCompatSpinner$DropdownPopup$1": "androidx/widget/AppCompatSpinner$DropdownPopup$1",
+      "android/support/v7/widget/AppCompatSpinner$DropdownPopup$2": "androidx/widget/AppCompatSpinner$DropdownPopup$2",
+      "android/support/v7/widget/AppCompatSpinner$DropdownPopup$3": "androidx/widget/AppCompatSpinner$DropdownPopup$3",
+      "android/support/v7/widget/AppCompatTextHelper$1": "androidx/widget/AppCompatTextHelper$1",
+      "android/support/v4/content/res/ResourcesCompat$FontCallback": "androidx/content/res/ResourcesCompat$FontCallback",
+      "android/support/v7/widget/AppCompatTextViewAutoSizeHelper": "androidx/widget/AppCompatTextViewAutoSizeHelper",
+      "android/support/v7/widget/AppCompatTextHelperV17": "androidx/widget/AppCompatTextHelperV17",
+      "android/support/v7/widget/ButtonBarLayout": "androidx/widget/ButtonBarLayout",
+      "android/support/v7/widget/DialogTitle": "androidx/widget/DialogTitle",
+      "android/support/v7/widget/DropDownListView$GateKeeperDrawable": "androidx/widget/DropDownListView$GateKeeperDrawable",
+      "android/support/v7/widget/DropDownListView": "androidx/widget/DropDownListView",
+      "android/support/v7/widget/FitWindowsFrameLayout": "androidx/widget/FitWindowsFrameLayout",
+      "android/support/v7/widget/FitWindowsLinearLayout": "androidx/widget/FitWindowsLinearLayout",
+      "android/support/v7/widget/ForwardingListener$DisallowIntercept": "androidx/widget/ForwardingListener$DisallowIntercept",
+      "android/support/v7/widget/ForwardingListener$TriggerLongPress": "androidx/widget/ForwardingListener$TriggerLongPress",
+      "android/support/v7/widget/LinearLayoutCompat$DividerMode": "androidx/widget/LinearLayoutCompat$DividerMode",
+      "android/support/v7/widget/LinearLayoutCompat$OrientationMode": "androidx/widget/LinearLayoutCompat$OrientationMode",
+      "android/support/v7/widget/ListPopupWindow$1": "androidx/widget/ListPopupWindow$1",
+      "android/support/v7/widget/ListPopupWindow$2": "androidx/widget/ListPopupWindow$2",
+      "android/support/v7/widget/ListPopupWindow$3": "androidx/widget/ListPopupWindow$3",
+      "android/support/v7/widget/ListPopupWindow$ListSelectorHider": "androidx/widget/ListPopupWindow$ListSelectorHider",
+      "android/support/v7/widget/ListPopupWindow$PopupDataSetObserver": "androidx/widget/ListPopupWindow$PopupDataSetObserver",
+      "android/support/v7/widget/ListPopupWindow$PopupScrollListener": "androidx/widget/ListPopupWindow$PopupScrollListener",
+      "android/support/v7/widget/ListPopupWindow$ResizePopupRunnable": "androidx/widget/ListPopupWindow$ResizePopupRunnable",
+      "android/support/v7/widget/ListPopupWindow$PopupTouchInterceptor": "androidx/widget/ListPopupWindow$PopupTouchInterceptor",
+      "android/support/v7/widget/MenuPopupWindow$MenuDropDownListView": "androidx/widget/MenuPopupWindow$MenuDropDownListView",
+      "android/support/v7/widget/PopupMenu$1": "androidx/widget/PopupMenu$1",
+      "android/support/v7/widget/PopupMenu": "androidx/widget/PopupMenu",
+      "android/support/v7/widget/PopupMenu$OnMenuItemClickListener": "androidx/widget/PopupMenu$OnMenuItemClickListener",
+      "android/support/v7/widget/PopupMenu$2": "androidx/widget/PopupMenu$2",
+      "android/support/v7/widget/PopupMenu$OnDismissListener": "androidx/widget/PopupMenu$OnDismissListener",
+      "android/support/v7/widget/PopupMenu$3": "androidx/widget/PopupMenu$3",
+      "android/support/annotation/MenuRes": "androidx/annotation/MenuRes",
+      "android/support/v7/widget/ResourcesWrapper": "androidx/widget/ResourcesWrapper",
+      "android/support/v7/widget/RtlSpacingHelper": "androidx/widget/RtlSpacingHelper",
+      "android/support/v7/widget/ScrollingTabContainerView$1": "androidx/widget/ScrollingTabContainerView$1",
+      "android/support/v7/widget/ScrollingTabContainerView$TabAdapter": "androidx/widget/ScrollingTabContainerView$TabAdapter",
+      "android/support/v7/widget/ScrollingTabContainerView$TabView": "androidx/widget/ScrollingTabContainerView$TabView",
+      "android/support/v7/widget/ScrollingTabContainerView$TabClickListener": "androidx/widget/ScrollingTabContainerView$TabClickListener",
+      "android/support/v7/widget/ScrollingTabContainerView$VisibilityAnimListener": "androidx/widget/ScrollingTabContainerView$VisibilityAnimListener",
+      "android/support/v7/widget/SearchView$1": "androidx/widget/SearchView$1",
+      "android/support/v7/widget/SearchView": "androidx/widget/SearchView",
+      "android/support/v7/widget/SearchView$10": "androidx/widget/SearchView$10",
+      "android/support/v7/widget/SearchView$2": "androidx/widget/SearchView$2",
+      "android/support/v7/widget/SuggestionsAdapter": "androidx/widget/SuggestionsAdapter",
+      "android/support/v7/widget/SearchView$3": "androidx/widget/SearchView$3",
+      "android/support/v7/widget/SearchView$4": "androidx/widget/SearchView$4",
+      "android/support/v7/widget/SearchView$5": "androidx/widget/SearchView$5",
+      "android/support/v7/widget/SearchView$SearchAutoComplete": "androidx/widget/SearchView$SearchAutoComplete",
+      "android/support/v7/widget/SearchView$6": "androidx/widget/SearchView$6",
+      "android/support/v7/widget/SearchView$7": "androidx/widget/SearchView$7",
+      "android/support/v7/widget/SearchView$8": "androidx/widget/SearchView$8",
+      "android/support/v7/widget/SearchView$9": "androidx/widget/SearchView$9",
+      "android/support/v7/widget/SearchView$AutoCompleteTextViewReflector": "androidx/widget/SearchView$AutoCompleteTextViewReflector",
+      "android/support/v7/widget/SearchView$OnCloseListener": "androidx/widget/SearchView$OnCloseListener",
+      "android/support/v7/widget/SearchView$OnQueryTextListener": "androidx/widget/SearchView$OnQueryTextListener",
+      "android/support/v7/widget/SearchView$OnSuggestionListener": "androidx/widget/SearchView$OnSuggestionListener",
+      "android/support/v7/widget/SearchView$SavedState$1": "androidx/widget/SearchView$SavedState$1",
+      "android/support/v7/widget/SearchView$SavedState": "androidx/widget/SearchView$SavedState",
+      "android/support/v7/widget/SearchView$SearchAutoComplete$1": "androidx/widget/SearchView$SearchAutoComplete$1",
+      "android/support/v7/widget/SearchView$UpdatableTouchDelegate": "androidx/widget/SearchView$UpdatableTouchDelegate",
+      "android/support/v7/widget/ShareActionProvider$OnShareTargetSelectedListener": "androidx/widget/ShareActionProvider$OnShareTargetSelectedListener",
+      "android/support/v7/widget/ShareActionProvider": "androidx/widget/ShareActionProvider",
+      "android/support/v7/widget/ShareActionProvider$ShareActivityChooserModelPolicy": "androidx/widget/ShareActionProvider$ShareActivityChooserModelPolicy",
+      "android/support/v7/widget/ShareActionProvider$ShareMenuItemOnMenuItemClickListener": "androidx/widget/ShareActionProvider$ShareMenuItemOnMenuItemClickListener",
+      "android/support/v7/widget/SuggestionsAdapter$ChildViewCache": "androidx/widget/SuggestionsAdapter$ChildViewCache",
+      "android/support/v7/widget/SwitchCompat$1": "androidx/widget/SwitchCompat$1",
+      "android/support/v7/widget/ThemedSpinnerAdapter$Helper": "androidx/widget/ThemedSpinnerAdapter$Helper",
+      "android/support/v7/widget/TintResources": "androidx/widget/TintResources",
+      "android/support/v7/widget/Toolbar$1": "androidx/widget/Toolbar$1",
+      "android/support/v7/widget/Toolbar$2": "androidx/widget/Toolbar$2",
+      "android/support/v7/widget/Toolbar$3": "androidx/widget/Toolbar$3",
+      "android/support/v7/widget/Toolbar$ExpandedActionViewMenuPresenter": "androidx/widget/Toolbar$ExpandedActionViewMenuPresenter",
+      "android/support/v7/widget/Toolbar$LayoutParams": "androidx/widget/Toolbar$LayoutParams",
+      "android/support/v7/widget/Toolbar$SavedState$1": "androidx/widget/Toolbar$SavedState$1",
+      "android/support/v7/widget/Toolbar$SavedState": "androidx/widget/Toolbar$SavedState",
+      "android/support/v4/view/MarginLayoutParamsCompat": "androidx/view/MarginLayoutParamsCompat",
+      "android/support/v7/widget/ToolbarWidgetWrapper$1": "androidx/widget/ToolbarWidgetWrapper$1",
+      "android/support/v7/widget/ToolbarWidgetWrapper$2": "androidx/widget/ToolbarWidgetWrapper$2",
+      "android/support/v7/widget/TooltipCompatHandler": "androidx/widget/TooltipCompatHandler",
+      "android/support/v7/widget/TooltipCompatHandler$1": "androidx/widget/TooltipCompatHandler$1",
+      "android/support/v7/widget/TooltipCompatHandler$2": "androidx/widget/TooltipCompatHandler$2",
+      "android/support/v7/widget/TooltipPopup": "androidx/widget/TooltipPopup",
+      "android/support/v7/widget/ViewStubCompat$OnInflateListener": "androidx/widget/ViewStubCompat$OnInflateListener",
+      "android/support/content/ContentPager$1": "androidx/util/contentpaging/ContentPager$1",
+      "android/support/content/ContentPager$QueryRunner$Callback": "androidx/util/contentpaging/ContentPager$QueryRunner$Callback",
+      "android/support/content/ContentPager": "androidx/util/contentpaging/ContentPager",
+      "android/support/content/ContentPager$QueryRunner": "androidx/util/contentpaging/ContentPager$QueryRunner",
+      "android/support/content/Query": "androidx/util/contentpaging/Query",
+      "android/support/annotation/WorkerThread": "androidx/annotation/WorkerThread",
+      "android/support/annotation/MainThread": "androidx/annotation/MainThread",
+      "android/support/content/ContentPager$ContentCallback": "androidx/util/contentpaging/ContentPager$ContentCallback",
+      "android/support/content/ContentPager$CursorCache": "androidx/util/contentpaging/ContentPager$CursorCache",
+      "android/support/annotation/GuardedBy": "androidx/annotation/GuardedBy",
+      "android/support/content/ContentPager$CursorDisposition": "androidx/util/contentpaging/ContentPager$CursorDisposition",
+      "android/support/content/ContentPager$CursorView": "androidx/util/contentpaging/ContentPager$CursorView",
+      "android/support/content/ContentPager$Stats": "androidx/util/contentpaging/ContentPager$Stats",
+      "android/support/annotation/RequiresPermission$Read": "androidx/annotation/RequiresPermission$Read",
+      "android/support/content/InMemoryCursor": "androidx/util/contentpaging/InMemoryCursor",
+      "android/support/content/InMemoryCursor$ObserverRelay": "androidx/util/contentpaging/InMemoryCursor$ObserverRelay",
+      "android/support/content/LoaderQueryRunner$1$1": "androidx/util/contentpaging/LoaderQueryRunner$1$1",
+      "android/support/content/LoaderQueryRunner$1": "androidx/util/contentpaging/LoaderQueryRunner$1",
+      "android/support/content/LoaderQueryRunner": "androidx/util/contentpaging/LoaderQueryRunner",
+      "android/arch/lifecycle/LifecycleRegistry$1": "androidx/lifecycle/LifecycleRegistry$1",
+      "android/arch/lifecycle/LifecycleRegistry": "androidx/lifecycle/LifecycleRegistry",
+      "android/arch/lifecycle/Lifecycle$State": "androidx/lifecycle/Lifecycle$State",
+      "android/arch/lifecycle/Lifecycle": "androidx/lifecycle/Lifecycle",
+      "android/arch/lifecycle/Lifecycle$Event": "androidx/lifecycle/Lifecycle$Event",
+      "android/arch/lifecycle/LifecycleRegistry$ObserverWithState": "androidx/lifecycle/LifecycleRegistry$ObserverWithState",
+      "android/arch/lifecycle/GenericLifecycleObserver": "androidx/lifecycle/GenericLifecycleObserver",
+      "android/arch/lifecycle/LifecycleObserver": "androidx/lifecycle/LifecycleObserver",
+      "android/arch/lifecycle/Lifecycling": "androidx/lifecycle/Lifecycling",
+      "android/arch/lifecycle/LifecycleOwner": "androidx/lifecycle/LifecycleOwner",
+      "android/arch/core/internal/SafeIterableMap$IteratorWithAdditions": "androidx/core/internal/SafeIterableMap$IteratorWithAdditions",
+      "android/arch/core/internal/SafeIterableMap": "androidx/core/internal/SafeIterableMap",
+      "android/arch/core/internal/FastSafeIterableMap": "androidx/core/internal/FastSafeIterableMap",
+      "android/arch/lifecycle/LifecycleRegistryOwner": "androidx/lifecycle/LifecycleRegistryOwner",
+      "android/arch/lifecycle/ReportFragment$ActivityInitializationListener": "androidx/lifecycle/ReportFragment$ActivityInitializationListener",
+      "android/arch/lifecycle/ReportFragment": "androidx/lifecycle/ReportFragment",
+      "android/arch/lifecycle/EmptyActivityLifecycleCallbacks": "androidx/lifecycle/EmptyActivityLifecycleCallbacks",
+      "android/arch/lifecycle/HolderFragment$HolderFragmentManager$1": "androidx/lifecycle/HolderFragment$HolderFragmentManager$1",
+      "android/arch/lifecycle/HolderFragment$HolderFragmentManager": "androidx/lifecycle/HolderFragment$HolderFragmentManager",
+      "android/arch/lifecycle/HolderFragment": "androidx/lifecycle/HolderFragment",
+      "android/arch/lifecycle/HolderFragment$HolderFragmentManager$2": "androidx/lifecycle/HolderFragment$HolderFragmentManager$2",
+      "android/support/v4/app/FragmentManager$FragmentLifecycleCallbacks": "androidx/app/FragmentManager$FragmentLifecycleCallbacks",
+      "android/arch/lifecycle/ViewModelStoreOwner": "androidx/lifecycle/ViewModelStoreOwner",
+      "android/arch/lifecycle/ViewModelStore": "androidx/lifecycle/ViewModelStore",
+      "android/arch/lifecycle/LifecycleDispatcher$DestructionReportFragment": "androidx/lifecycle/LifecycleDispatcher$DestructionReportFragment",
+      "android/arch/lifecycle/LifecycleDispatcher": "androidx/lifecycle/LifecycleDispatcher",
+      "android/arch/lifecycle/LifecycleDispatcher$DispatcherActivityCallback": "androidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback",
+      "android/arch/lifecycle/LifecycleDispatcher$FragmentCallback": "androidx/lifecycle/LifecycleDispatcher$FragmentCallback",
+      "android/arch/lifecycle/LifecycleService": "androidx/lifecycle/LifecycleService",
+      "android/arch/lifecycle/ServiceLifecycleDispatcher": "androidx/lifecycle/ServiceLifecycleDispatcher",
+      "android/arch/lifecycle/ProcessLifecycleOwner$1": "androidx/lifecycle/ProcessLifecycleOwner$1",
+      "android/arch/lifecycle/ProcessLifecycleOwner": "androidx/lifecycle/ProcessLifecycleOwner",
+      "android/arch/lifecycle/ProcessLifecycleOwner$2": "androidx/lifecycle/ProcessLifecycleOwner$2",
+      "android/arch/lifecycle/ProcessLifecycleOwner$3": "androidx/lifecycle/ProcessLifecycleOwner$3",
+      "android/arch/lifecycle/ProcessLifecycleOwnerInitializer": "androidx/lifecycle/ProcessLifecycleOwnerInitializer",
+      "android/arch/lifecycle/ServiceLifecycleDispatcher$DispatchRunnable": "androidx/lifecycle/ServiceLifecycleDispatcher$DispatchRunnable",
+      "android/arch/lifecycle/ViewModelProviders$DefaultFactory": "androidx/lifecycle/ViewModelProviders$DefaultFactory",
+      "android/arch/lifecycle/ViewModelProvider$AndroidViewModelFactory": "androidx/lifecycle/ViewModelProvider$AndroidViewModelFactory",
+      "android/arch/lifecycle/ViewModelProviders": "androidx/lifecycle/ViewModelProviders",
+      "android/arch/lifecycle/ViewModelProvider": "androidx/lifecycle/ViewModelProvider",
+      "android/arch/lifecycle/ViewModelProvider$Factory": "androidx/lifecycle/ViewModelProvider$Factory",
+      "android/arch/lifecycle/ViewModelStores": "androidx/lifecycle/ViewModelStores",
+      "android/support/v4/media/AudioAttributesCompat$1": "androidx/media/AudioAttributesCompat$1",
+      "android/support/v4/media/AudioAttributesCompat": "androidx/media/AudioAttributesCompat",
+      "android/support/v4/media/AudioAttributesCompat$AttributeContentType": "androidx/media/AudioAttributesCompat$AttributeContentType",
+      "android/support/v4/media/AudioAttributesCompat$AttributeUsage": "androidx/media/AudioAttributesCompat$AttributeUsage",
+      "android/support/v4/media/AudioAttributesCompat$AudioManagerHidden": "androidx/media/AudioAttributesCompat$AudioManagerHidden",
+      "android/support/v4/media/AudioAttributesCompat$Builder": "androidx/media/AudioAttributesCompat$Builder",
+      "android/support/v4/media/AudioAttributesCompatApi21$Wrapper": "androidx/media/AudioAttributesCompatApi21$Wrapper",
+      "android/support/v4/media/AudioAttributesCompatApi21": "androidx/media/AudioAttributesCompatApi21",
+      "android/support/v4/media/MediaBrowserCompat$CallbackHandler": "androidx/media/MediaBrowserCompat$CallbackHandler",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserServiceCallbackImpl": "androidx/media/MediaBrowserCompat$MediaBrowserServiceCallbackImpl",
+      "android/support/v4/media/MediaBrowserCompat": "androidx/media/MediaBrowserCompat",
+      "android/support/v4/media/session/MediaSessionCompat$Token": "androidx/media/session/MediaSessionCompat$Token",
+      "android/support/v4/media/session/MediaSessionCompat": "androidx/media/session/MediaSessionCompat",
+      "android/support/v4/media/MediaBrowserCompat$ConnectionCallback$ConnectionCallbackInternal": "androidx/media/MediaBrowserCompat$ConnectionCallback$ConnectionCallbackInternal",
+      "android/support/v4/media/MediaBrowserCompat$ConnectionCallback": "androidx/media/MediaBrowserCompat$ConnectionCallback",
+      "android/support/v4/media/MediaBrowserCompat$ConnectionCallback$StubApi21": "androidx/media/MediaBrowserCompat$ConnectionCallback$StubApi21",
+      "android/support/v4/media/MediaBrowserCompatApi21$ConnectionCallback": "androidx/media/MediaBrowserCompatApi21$ConnectionCallback",
+      "android/support/v4/media/MediaBrowserCompatApi21": "androidx/media/MediaBrowserCompatApi21",
+      "android/support/v4/media/MediaBrowserCompat$CustomActionCallback": "androidx/media/MediaBrowserCompat$CustomActionCallback",
+      "android/support/v4/media/MediaBrowserCompat$CustomActionResultReceiver": "androidx/media/MediaBrowserCompat$CustomActionResultReceiver",
+      "android/support/v4/os/ResultReceiver": "androidx/os/ResultReceiver",
+      "android/support/v4/media/MediaBrowserCompat$ItemCallback$StubApi23": "androidx/media/MediaBrowserCompat$ItemCallback$StubApi23",
+      "android/support/v4/media/MediaBrowserCompatApi23$ItemCallback": "androidx/media/MediaBrowserCompatApi23$ItemCallback",
+      "android/support/v4/media/MediaBrowserCompat$ItemCallback": "androidx/media/MediaBrowserCompat$ItemCallback",
+      "android/support/v4/media/MediaBrowserCompat$MediaItem": "androidx/media/MediaBrowserCompat$MediaItem",
+      "android/support/v4/media/MediaBrowserCompatApi23": "androidx/media/MediaBrowserCompatApi23",
+      "android/support/v4/media/MediaBrowserCompat$ItemReceiver": "androidx/media/MediaBrowserCompat$ItemReceiver",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImpl": "androidx/media/MediaBrowserCompat$MediaBrowserImpl",
+      "android/support/v4/media/MediaBrowserCompat$SubscriptionCallback": "androidx/media/MediaBrowserCompat$SubscriptionCallback",
+      "android/support/v4/media/MediaBrowserCompat$SearchCallback": "androidx/media/MediaBrowserCompat$SearchCallback",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$1": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21$1",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$2": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21$2",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$3": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21$3",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$4": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21$4",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$5": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21$5",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$6": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21$6",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$7": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi21$7",
+      "android/support/v4/media/MediaBrowserCompat$Subscription": "androidx/media/MediaBrowserCompat$Subscription",
+      "android/support/v4/media/MediaBrowserCompat$ServiceBinderWrapper": "androidx/media/MediaBrowserCompat$ServiceBinderWrapper",
+      "android/support/v4/media/MediaBrowserCompat$SearchResultReceiver": "androidx/media/MediaBrowserCompat$SearchResultReceiver",
+      "android/support/v4/media/session/IMediaSession$Stub": "androidx/media/session/IMediaSession$Stub",
+      "android/support/v4/media/session/IMediaSession": "androidx/media/session/IMediaSession",
+      "android/support/v4/app/BundleCompat": "androidx/app/BundleCompat",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi23": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi23",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi26": "androidx/media/MediaBrowserCompat$MediaBrowserImplApi26",
+      "android/support/v4/media/MediaBrowserCompatApi26": "androidx/media/MediaBrowserCompatApi26",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$1": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$1",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$2": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$2",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$3": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$3",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$4": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$4",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$5": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$5",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$6": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$6",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection$1": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection$1",
+      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection$2": "androidx/media/MediaBrowserCompat$MediaBrowserImplBase$MediaServiceConnection$2",
+      "android/support/v4/media/MediaBrowserCompat$MediaItem$1": "androidx/media/MediaBrowserCompat$MediaItem$1",
+      "android/support/v4/media/MediaBrowserCompat$MediaItem$Flags": "androidx/media/MediaBrowserCompat$MediaItem$Flags",
+      "android/support/v4/media/MediaBrowserCompatApi21$MediaItem": "androidx/media/MediaBrowserCompatApi21$MediaItem",
+      "android/support/v4/media/MediaBrowserCompatUtils": "androidx/media/MediaBrowserCompatUtils",
+      "android/support/v4/media/MediaBrowserCompat$SubscriptionCallback$StubApi21": "androidx/media/MediaBrowserCompat$SubscriptionCallback$StubApi21",
+      "android/support/v4/media/MediaBrowserCompatApi21$SubscriptionCallback": "androidx/media/MediaBrowserCompatApi21$SubscriptionCallback",
+      "android/support/v4/media/MediaBrowserCompat$SubscriptionCallback$StubApi26": "androidx/media/MediaBrowserCompat$SubscriptionCallback$StubApi26",
+      "android/support/v4/media/MediaBrowserCompatApi26$SubscriptionCallback": "androidx/media/MediaBrowserCompatApi26$SubscriptionCallback",
+      "android/support/v4/media/MediaBrowserCompatApi21$ConnectionCallbackProxy": "androidx/media/MediaBrowserCompatApi21$ConnectionCallbackProxy",
+      "android/support/v4/media/MediaBrowserCompatApi21$SubscriptionCallbackProxy": "androidx/media/MediaBrowserCompatApi21$SubscriptionCallbackProxy",
+      "android/support/v4/media/MediaBrowserCompatApi23$ItemCallbackProxy": "androidx/media/MediaBrowserCompatApi23$ItemCallbackProxy",
+      "android/support/v4/media/MediaBrowserCompatApi26$SubscriptionCallbackProxy": "androidx/media/MediaBrowserCompatApi26$SubscriptionCallbackProxy",
+      "android/support/v4/media/MediaBrowserProtocol": "androidx/media/MediaBrowserProtocol",
+      "android/support/v4/media/MediaBrowserServiceCompat$1": "androidx/media/MediaBrowserServiceCompat$1",
+      "android/support/v4/media/MediaBrowserServiceCompat$Result": "androidx/media/MediaBrowserServiceCompat$Result",
+      "android/support/v4/media/MediaBrowserServiceCompat": "androidx/media/MediaBrowserServiceCompat",
+      "android/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord": "androidx/media/MediaBrowserServiceCompat$ConnectionRecord",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceCallbacks": "androidx/media/MediaBrowserServiceCompat$ServiceCallbacks",
+      "android/support/v4/media/MediaBrowserServiceCompat$2": "androidx/media/MediaBrowserServiceCompat$2",
+      "android/support/v4/media/MediaBrowserServiceCompat$3": "androidx/media/MediaBrowserServiceCompat$3",
+      "android/support/v4/media/MediaBrowserServiceCompat$4": "androidx/media/MediaBrowserServiceCompat$4",
+      "android/support/v4/media/MediaBrowserServiceCompat$BrowserRoot": "androidx/media/MediaBrowserServiceCompat$BrowserRoot",
+      "android/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord$1": "androidx/media/MediaBrowserServiceCompat$ConnectionRecord$1",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceHandler": "androidx/media/MediaBrowserServiceCompat$ServiceHandler",
+      "android/support/v4/util/Pair": "androidx/util/Pair",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImpl": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImpl",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$1": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$1",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21",
+      "android/support/v4/media/MediaBrowserServiceCompatApi21": "androidx/media/MediaBrowserServiceCompatApi21",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$2": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$2",
+      "android/support/v4/media/MediaBrowserServiceCompatApi21$ResultWrapper": "androidx/media/MediaBrowserServiceCompatApi21$ResultWrapper",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$3": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21$3",
+      "android/support/v4/media/MediaBrowserServiceCompatApi21$ServiceCompatProxy": "androidx/media/MediaBrowserServiceCompatApi21$ServiceCompatProxy",
+      "android/support/v4/media/MediaBrowserServiceCompatApi21$BrowserRoot": "androidx/media/MediaBrowserServiceCompatApi21$BrowserRoot",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi23$1": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi23$1",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi23": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi23",
+      "android/support/v4/media/MediaBrowserServiceCompatApi23$ServiceCompatProxy": "androidx/media/MediaBrowserServiceCompatApi23$ServiceCompatProxy",
+      "android/support/v4/media/MediaBrowserServiceCompatApi23": "androidx/media/MediaBrowserServiceCompatApi23",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi26$1": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi26$1",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi26": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi26",
+      "android/support/v4/media/MediaBrowserServiceCompatApi26$ResultWrapper": "androidx/media/MediaBrowserServiceCompatApi26$ResultWrapper",
+      "android/support/v4/media/MediaBrowserServiceCompatApi26": "androidx/media/MediaBrowserServiceCompatApi26",
+      "android/support/v4/media/MediaBrowserServiceCompatApi26$ServiceCompatProxy": "androidx/media/MediaBrowserServiceCompatApi26$ServiceCompatProxy",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase$1": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase$1",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase",
+      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase$2": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase$2",
+      "android/support/v4/media/MediaBrowserServiceCompat$ResultFlags": "androidx/media/MediaBrowserServiceCompat$ResultFlags",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$1": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$1",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$2": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$2",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$3": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$3",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$4": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$4",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$5": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$5",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$6": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$6",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$7": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$7",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$8": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$8",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceBinderImpl$9": "androidx/media/MediaBrowserServiceCompat$ServiceBinderImpl$9",
+      "android/support/v4/media/MediaBrowserServiceCompat$ServiceCallbacksCompat": "androidx/media/MediaBrowserServiceCompat$ServiceCallbacksCompat",
+      "android/support/v4/media/MediaBrowserServiceCompatApi21$MediaBrowserServiceAdaptor": "androidx/media/MediaBrowserServiceCompatApi21$MediaBrowserServiceAdaptor",
+      "android/support/v4/media/MediaBrowserServiceCompatApi23$MediaBrowserServiceAdaptor": "androidx/media/MediaBrowserServiceCompatApi23$MediaBrowserServiceAdaptor",
+      "android/support/v4/media/MediaBrowserServiceCompatApi26$MediaBrowserServiceAdaptor": "androidx/media/MediaBrowserServiceCompatApi26$MediaBrowserServiceAdaptor",
+      "android/support/v4/media/MediaDescriptionCompat$1": "androidx/media/MediaDescriptionCompat$1",
+      "android/support/v4/media/MediaDescriptionCompatApi21": "androidx/media/MediaDescriptionCompatApi21",
+      "android/support/v4/media/MediaDescriptionCompat$Builder": "androidx/media/MediaDescriptionCompat$Builder",
+      "android/support/v4/media/MediaDescriptionCompatApi21$Builder": "androidx/media/MediaDescriptionCompatApi21$Builder",
+      "android/support/v4/media/MediaDescriptionCompatApi23$Builder": "androidx/media/MediaDescriptionCompatApi23$Builder",
+      "android/support/v4/media/MediaDescriptionCompatApi23": "androidx/media/MediaDescriptionCompatApi23",
+      "android/support/v4/media/MediaMetadataCompat$1": "androidx/media/MediaMetadataCompat$1",
+      "android/support/v4/media/MediaMetadataCompat$BitmapKey": "androidx/media/MediaMetadataCompat$BitmapKey",
+      "android/support/v4/media/MediaMetadataCompat$Builder": "androidx/media/MediaMetadataCompat$Builder",
+      "android/support/v4/media/RatingCompat": "androidx/media/RatingCompat",
+      "android/support/v4/media/MediaMetadataCompat$LongKey": "androidx/media/MediaMetadataCompat$LongKey",
+      "android/support/v4/media/MediaMetadataCompat$RatingKey": "androidx/media/MediaMetadataCompat$RatingKey",
+      "android/support/v4/media/MediaMetadataCompat$TextKey": "androidx/media/MediaMetadataCompat$TextKey",
+      "android/support/v4/media/MediaMetadataCompatApi21": "androidx/media/MediaMetadataCompatApi21",
+      "android/support/v4/media/MediaMetadataCompatApi21$Builder": "androidx/media/MediaMetadataCompatApi21$Builder",
+      "android/support/v4/media/ParceledListSliceAdapterApi21": "androidx/media/ParceledListSliceAdapterApi21",
+      "android/support/v4/media/RatingCompat$1": "androidx/media/RatingCompat$1",
+      "android/support/v4/media/RatingCompat$StarStyle": "androidx/media/RatingCompat$StarStyle",
+      "android/support/v4/media/RatingCompat$Style": "androidx/media/RatingCompat$Style",
+      "android/support/v4/media/VolumeProviderCompat$1": "androidx/media/VolumeProviderCompat$1",
+      "android/support/v4/media/VolumeProviderCompatApi21$Delegate": "androidx/media/VolumeProviderCompatApi21$Delegate",
+      "android/support/v4/media/VolumeProviderCompat": "androidx/media/VolumeProviderCompat",
+      "android/support/v4/media/VolumeProviderCompatApi21": "androidx/media/VolumeProviderCompatApi21",
+      "android/support/v4/media/VolumeProviderCompat$Callback": "androidx/media/VolumeProviderCompat$Callback",
+      "android/support/v4/media/VolumeProviderCompat$ControlType": "androidx/media/VolumeProviderCompat$ControlType",
+      "android/support/v4/media/VolumeProviderCompatApi21$1": "androidx/media/VolumeProviderCompatApi21$1",
+      "android/support/v4/media/app/NotificationCompat$DecoratedMediaCustomViewStyle": "androidx/media/app/NotificationCompat$DecoratedMediaCustomViewStyle",
+      "android/support/v4/media/app/NotificationCompat$MediaStyle": "androidx/media/app/NotificationCompat$MediaStyle",
+      "android/support/v4/media/app/NotificationCompat": "androidx/media/app/NotificationCompat",
+      "android/support/v4/app/NotificationCompat$Builder": "androidx/app/NotificationCompat$Builder",
+      "android/support/v4/app/NotificationCompat": "androidx/app/NotificationCompat",
+      "android/support/mediacompat/R$layout": "androidx/mediacompat/R$layout",
+      "android/support/mediacompat/R": "androidx/mediacompat/R",
+      "android/support/mediacompat/R$color": "androidx/mediacompat/R$color",
+      "android/support/mediacompat/R$id": "androidx/mediacompat/R$id",
+      "android/support/v4/app/NotificationBuilderWithBuilderAccessor": "androidx/app/NotificationBuilderWithBuilderAccessor",
+      "android/support/v4/app/NotificationCompat$Style": "androidx/app/NotificationCompat$Style",
+      "android/support/v4/app/NotificationCompat$Action": "androidx/app/NotificationCompat$Action",
+      "android/support/mediacompat/R$integer": "androidx/mediacompat/R$integer",
+      "android/support/v4/media/session/IMediaControllerCallback$Stub$Proxy": "androidx/media/session/IMediaControllerCallback$Stub$Proxy",
+      "android/support/v4/media/session/IMediaControllerCallback": "androidx/media/session/IMediaControllerCallback",
+      "android/support/v4/media/session/IMediaControllerCallback$Stub": "androidx/media/session/IMediaControllerCallback$Stub",
+      "android/support/v4/media/session/MediaSessionCompat$QueueItem": "androidx/media/session/MediaSessionCompat$QueueItem",
+      "android/support/v4/media/session/ParcelableVolumeInfo": "androidx/media/session/ParcelableVolumeInfo",
+      "android/support/v4/media/session/IMediaSession$Stub$Proxy": "androidx/media/session/IMediaSession$Stub$Proxy",
+      "android/support/v4/media/session/MediaSessionCompat$ResultReceiverWrapper": "androidx/media/session/MediaSessionCompat$ResultReceiverWrapper",
+      "android/support/v4/media/session/MediaButtonReceiver$MediaButtonConnectionCallback": "androidx/media/session/MediaButtonReceiver$MediaButtonConnectionCallback",
+      "android/support/v4/media/session/MediaButtonReceiver": "androidx/media/session/MediaButtonReceiver",
+      "android/support/v4/media/session/MediaControllerCompat$Callback$MessageHandler": "androidx/media/session/MediaControllerCompat$Callback$MessageHandler",
+      "android/support/v4/media/session/MediaControllerCompat$PlaybackInfo": "androidx/media/session/MediaControllerCompat$PlaybackInfo",
+      "android/support/v4/media/session/MediaControllerCompat$Callback$StubApi21": "androidx/media/session/MediaControllerCompat$Callback$StubApi21",
+      "android/support/v4/media/session/MediaControllerCompatApi21$Callback": "androidx/media/session/MediaControllerCompatApi21$Callback",
+      "android/support/v4/media/session/MediaControllerCompatApi21": "androidx/media/session/MediaControllerCompatApi21",
+      "android/support/v4/media/session/MediaControllerCompat$Callback$StubCompat": "androidx/media/session/MediaControllerCompat$Callback$StubCompat",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerExtraData": "androidx/media/session/MediaControllerCompat$MediaControllerExtraData",
+      "android/support/v4/app/SupportActivity$ExtraData": "androidx/app/SupportActivity$ExtraData",
+      "android/support/v4/app/SupportActivity": "androidx/app/SupportActivity",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImpl": "androidx/media/session/MediaControllerCompat$MediaControllerImpl",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraBinderRequestResultReceiver": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraBinderRequestResultReceiver",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi21",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraCallback": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraCallback",
+      "android/support/v4/media/session/MediaControllerCompat$TransportControlsApi21": "androidx/media/session/MediaControllerCompat$TransportControlsApi21",
+      "android/support/v4/media/session/MediaControllerCompatApi21$PlaybackInfo": "androidx/media/session/MediaControllerCompatApi21$PlaybackInfo",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi23": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi23",
+      "android/support/v4/media/session/MediaControllerCompat$TransportControlsApi23": "androidx/media/session/MediaControllerCompat$TransportControlsApi23",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi24": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi24",
+      "android/support/v4/media/session/MediaControllerCompat$TransportControlsApi24": "androidx/media/session/MediaControllerCompat$TransportControlsApi24",
+      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplBase": "androidx/media/session/MediaControllerCompat$MediaControllerImplBase",
+      "android/support/v4/media/session/MediaControllerCompat$TransportControlsBase": "androidx/media/session/MediaControllerCompat$TransportControlsBase",
+      "android/support/v4/media/session/PlaybackStateCompat$CustomAction": "androidx/media/session/PlaybackStateCompat$CustomAction",
+      "android/support/v4/media/session/MediaControllerCompatApi21$TransportControls": "androidx/media/session/MediaControllerCompatApi21$TransportControls",
+      "android/support/v4/media/session/MediaControllerCompatApi23$TransportControls": "androidx/media/session/MediaControllerCompatApi23$TransportControls",
+      "android/support/v4/media/session/MediaControllerCompatApi23": "androidx/media/session/MediaControllerCompatApi23",
+      "android/support/v4/media/session/MediaControllerCompatApi24$TransportControls": "androidx/media/session/MediaControllerCompatApi24$TransportControls",
+      "android/support/v4/media/session/MediaControllerCompatApi24": "androidx/media/session/MediaControllerCompatApi24",
+      "android/support/v4/media/session/MediaControllerCompatApi21$CallbackProxy": "androidx/media/session/MediaControllerCompatApi21$CallbackProxy",
+      "android/support/v4/media/session/MediaSessionCompat$1": "androidx/media/session/MediaSessionCompat$1",
+      "android/support/v4/media/session/MediaSessionCompat$Callback": "androidx/media/session/MediaSessionCompat$Callback",
+      "android/support/v4/media/session/MediaSessionCompat$2": "androidx/media/session/MediaSessionCompat$2",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImpl": "androidx/media/session/MediaSessionCompat$MediaSessionImpl",
+      "android/support/v4/media/session/MediaSessionCompat$Callback$CallbackHandler": "androidx/media/session/MediaSessionCompat$Callback$CallbackHandler",
+      "android/support/v4/media/session/MediaSessionCompat$Callback$StubApi21": "androidx/media/session/MediaSessionCompat$Callback$StubApi21",
+      "android/support/v4/media/session/MediaSessionCompatApi21$Callback": "androidx/media/session/MediaSessionCompatApi21$Callback",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi21",
+      "android/support/v4/media/session/MediaSessionCompatApi21": "androidx/media/session/MediaSessionCompatApi21",
+      "android/support/v4/media/session/MediaSessionCompat$Callback$StubApi23": "androidx/media/session/MediaSessionCompat$Callback$StubApi23",
+      "android/support/v4/media/session/MediaSessionCompatApi23$Callback": "androidx/media/session/MediaSessionCompatApi23$Callback",
+      "android/support/v4/media/session/MediaSessionCompatApi23": "androidx/media/session/MediaSessionCompatApi23",
+      "android/support/v4/media/session/MediaSessionCompat$Callback$StubApi24": "androidx/media/session/MediaSessionCompat$Callback$StubApi24",
+      "android/support/v4/media/session/MediaSessionCompatApi24$Callback": "androidx/media/session/MediaSessionCompatApi24$Callback",
+      "android/support/v4/media/session/MediaSessionCompatApi24": "androidx/media/session/MediaSessionCompatApi24",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi18$1": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi18$1",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi18": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi18",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$MessageHandler": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$MessageHandler",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi19$1": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi19$1",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi19": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi19",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi21$ExtraSession": "androidx/media/session/MediaSessionCompat$MediaSessionImplApi21$ExtraSession",
+      "android/support/v4/media/session/MediaSessionCompatApi22": "androidx/media/session/MediaSessionCompatApi22",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$1": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$1",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$Command": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$Command",
+      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$MediaSessionStub": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$MediaSessionStub",
+      "android/support/v4/media/session/MediaSessionCompat$OnActiveChangeListener": "androidx/media/session/MediaSessionCompat$OnActiveChangeListener",
+      "android/support/v4/media/session/MediaSessionCompat$QueueItem$1": "androidx/media/session/MediaSessionCompat$QueueItem$1",
+      "android/support/v4/media/session/MediaSessionCompatApi21$QueueItem": "androidx/media/session/MediaSessionCompatApi21$QueueItem",
+      "android/support/v4/media/session/MediaSessionCompat$ResultReceiverWrapper$1": "androidx/media/session/MediaSessionCompat$ResultReceiverWrapper$1",
+      "android/support/v4/media/session/MediaSessionCompat$SessionFlags": "androidx/media/session/MediaSessionCompat$SessionFlags",
+      "android/support/v4/media/session/MediaSessionCompat$Token$1": "androidx/media/session/MediaSessionCompat$Token$1",
+      "android/support/v4/media/session/PlaybackStateCompat$Builder": "androidx/media/session/PlaybackStateCompat$Builder",
+      "android/support/v4/media/session/MediaSessionCompatApi21$CallbackProxy": "androidx/media/session/MediaSessionCompatApi21$CallbackProxy",
+      "android/support/v4/media/session/MediaSessionCompatApi23$CallbackProxy": "androidx/media/session/MediaSessionCompatApi23$CallbackProxy",
+      "android/support/v4/media/session/MediaSessionCompatApi24$CallbackProxy": "androidx/media/session/MediaSessionCompatApi24$CallbackProxy",
+      "android/support/v4/media/session/ParcelableVolumeInfo$1": "androidx/media/session/ParcelableVolumeInfo$1",
+      "android/support/v4/media/session/PlaybackStateCompat$1": "androidx/media/session/PlaybackStateCompat$1",
+      "android/support/v4/media/session/PlaybackStateCompat$Actions": "androidx/media/session/PlaybackStateCompat$Actions",
+      "android/support/v4/media/session/PlaybackStateCompat$CustomAction$1": "androidx/media/session/PlaybackStateCompat$CustomAction$1",
+      "android/support/v4/media/session/PlaybackStateCompat$CustomAction$Builder": "androidx/media/session/PlaybackStateCompat$CustomAction$Builder",
+      "android/support/v4/media/session/PlaybackStateCompatApi21$CustomAction": "androidx/media/session/PlaybackStateCompatApi21$CustomAction",
+      "android/support/v4/media/session/PlaybackStateCompatApi21": "androidx/media/session/PlaybackStateCompatApi21",
+      "android/support/v4/media/session/PlaybackStateCompat$ErrorCode": "androidx/media/session/PlaybackStateCompat$ErrorCode",
+      "android/support/v4/media/session/PlaybackStateCompat$MediaKeyAction": "androidx/media/session/PlaybackStateCompat$MediaKeyAction",
+      "android/support/v4/media/session/PlaybackStateCompat$RepeatMode": "androidx/media/session/PlaybackStateCompat$RepeatMode",
+      "android/support/v4/media/session/PlaybackStateCompat$ShuffleMode": "androidx/media/session/PlaybackStateCompat$ShuffleMode",
+      "android/support/v4/media/session/PlaybackStateCompat$State": "androidx/media/session/PlaybackStateCompat$State",
+      "android/support/v4/media/session/PlaybackStateCompatApi22": "androidx/media/session/PlaybackStateCompatApi22",
+      "android/arch/lifecycle/ObserversCollector": "androidx/lifecycle/ObserversCollector",
+      "android/arch/lifecycle/Validator": "androidx/lifecycle/Validator",
+      "android/arch/lifecycle/model/LifecycleObserverInfo": "androidx/lifecycle/model/LifecycleObserverInfo",
+      "android/arch/lifecycle/Elements_extKt": "androidx/lifecycle/Elements_extKt",
+      "android/arch/lifecycle/model/AdapterClassKt": "androidx/lifecycle/model/AdapterClassKt",
+      "android/arch/lifecycle/OnLifecycleEvent": "androidx/lifecycle/OnLifecycleEvent",
+      "android/arch/lifecycle/model/EventMethod": "androidx/lifecycle/model/EventMethod",
+      "android/arch/lifecycle/WriterKt": "androidx/lifecycle/WriterKt",
+      "android/arch/lifecycle/WriterKt$generateParamString$1": "androidx/lifecycle/WriterKt$generateParamString$1",
+      "android/arch/lifecycle/model/AdapterClass": "androidx/lifecycle/model/AdapterClass",
+      "android/arch/lifecycle/model/EventMethodCall": "androidx/lifecycle/model/EventMethodCall",
+      "android/arch/lifecycle/GeneratedAdapter": "androidx/lifecycle/GeneratedAdapter",
+      "android/arch/lifecycle/LifecycleProcessor": "androidx/lifecycle/LifecycleProcessor",
+      "android/arch/lifecycle/MethodCallsLogger": "androidx/lifecycle/MethodCallsLogger",
+      "android/arch/lifecycle/TransformationKt": "androidx/lifecycle/TransformationKt",
+      "android/arch/lifecycle/TransformationKt$flattenObservers$1": "androidx/lifecycle/TransformationKt$flattenObservers$1",
+      "android/arch/lifecycle/model/InputModel": "androidx/lifecycle/model/InputModel",
+      "android/arch/lifecycle/ErrorMessages": "androidx/lifecycle/ErrorMessages",
+      "android/arch/lifecycle/Input_collectorKt": "androidx/lifecycle/Input_collectorKt",
+      "android/arch/persistence/db/framework/FrameworkSQLiteDatabase$1": "androidx/persistence/db/framework/FrameworkSQLiteDatabase$1",
+      "android/arch/persistence/db/framework/FrameworkSQLiteDatabase": "androidx/persistence/db/framework/FrameworkSQLiteDatabase",
+      "android/arch/persistence/db/SupportSQLiteQuery": "androidx/persistence/db/SupportSQLiteQuery",
+      "android/arch/persistence/db/framework/FrameworkSQLiteProgram": "androidx/persistence/db/framework/FrameworkSQLiteProgram",
+      "android/arch/persistence/db/SupportSQLiteProgram": "androidx/persistence/db/SupportSQLiteProgram",
+      "android/arch/persistence/db/framework/FrameworkSQLiteDatabase$2": "androidx/persistence/db/framework/FrameworkSQLiteDatabase$2",
+      "android/arch/persistence/db/SupportSQLiteDatabase": "androidx/persistence/db/SupportSQLiteDatabase",
+      "android/arch/persistence/db/SupportSQLiteStatement": "androidx/persistence/db/SupportSQLiteStatement",
+      "android/arch/persistence/db/framework/FrameworkSQLiteStatement": "androidx/persistence/db/framework/FrameworkSQLiteStatement",
+      "android/arch/persistence/db/SimpleSQLiteQuery": "androidx/persistence/db/SimpleSQLiteQuery",
+      "android/arch/persistence/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$1": "androidx/persistence/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$1",
+      "android/arch/persistence/db/framework/FrameworkSQLiteOpenHelper$OpenHelper": "androidx/persistence/db/framework/FrameworkSQLiteOpenHelper$OpenHelper",
+      "android/arch/persistence/db/SupportSQLiteOpenHelper$Callback": "androidx/persistence/db/SupportSQLiteOpenHelper$Callback",
+      "android/arch/persistence/db/SupportSQLiteOpenHelper": "androidx/persistence/db/SupportSQLiteOpenHelper",
+      "android/arch/persistence/db/framework/FrameworkSQLiteOpenHelper": "androidx/persistence/db/framework/FrameworkSQLiteOpenHelper",
+      "android/arch/persistence/db/framework/FrameworkSQLiteOpenHelperFactory": "androidx/persistence/db/framework/FrameworkSQLiteOpenHelperFactory",
+      "android/arch/persistence/db/SupportSQLiteOpenHelper$Factory": "androidx/persistence/db/SupportSQLiteOpenHelper$Factory",
+      "android/arch/persistence/db/SupportSQLiteOpenHelper$Configuration": "androidx/persistence/db/SupportSQLiteOpenHelper$Configuration",
+      "android/arch/lifecycle/DefaultLifecycleObserver": "androidx/lifecycle/DefaultLifecycleObserver",
+      "android/arch/lifecycle/FullLifecycleObserver": "androidx/lifecycle/FullLifecycleObserver",
+      "android/support/v4/app/BackStackRecord$Op": "androidx/app/BackStackRecord$Op",
+      "android/support/v4/app/BackStackRecord": "androidx/app/BackStackRecord",
+      "android/support/v4/app/FragmentManagerImpl$OpGenerator": "androidx/app/FragmentManagerImpl$OpGenerator",
+      "android/support/v4/app/Fragment$OnStartEnterTransitionListener": "androidx/app/Fragment$OnStartEnterTransitionListener",
+      "android/support/v4/app/FragmentManagerImpl": "androidx/app/FragmentManagerImpl",
+      "android/support/v4/app/FragmentHostCallback": "androidx/app/FragmentHostCallback",
+      "android/support/v4/app/FragmentTransition": "androidx/app/FragmentTransition",
+      "android/support/v4/util/LogWriter": "androidx/util/LogWriter",
+      "android/support/v4/app/BackStackState$1": "androidx/app/BackStackState$1",
+      "android/support/v4/app/BackStackState": "androidx/app/BackStackState",
+      "android/support/v4/app/BaseFragmentActivityApi14": "androidx/app/BaseFragmentActivityApi14",
+      "android/support/v4/app/BaseFragmentActivityApi16": "androidx/app/BaseFragmentActivityApi16",
+      "android/support/v4/app/DialogFragment$DialogStyle": "androidx/app/DialogFragment$DialogStyle",
+      "android/support/v4/app/Fragment$1": "androidx/app/Fragment$1",
+      "android/support/v4/app/Fragment$2": "androidx/app/Fragment$2",
+      "android/support/v4/app/FragmentContainer": "androidx/app/FragmentContainer",
+      "android/support/v4/app/Fragment$AnimationInfo": "androidx/app/Fragment$AnimationInfo",
+      "android/support/v4/app/Fragment$InstantiationException": "androidx/app/Fragment$InstantiationException",
+      "android/support/v4/app/Fragment$SavedState$1": "androidx/app/Fragment$SavedState$1",
+      "android/support/v4/app/Fragment$SavedState": "androidx/app/Fragment$SavedState",
+      "android/support/v4/app/FragmentManagerNonConfig": "androidx/app/FragmentManagerNonConfig",
+      "android/support/v4/app/LoaderManagerImpl": "androidx/app/LoaderManagerImpl",
+      "android/support/v4/app/SuperNotCalledException": "androidx/app/SuperNotCalledException",
+      "android/support/v4/util/DebugUtils": "androidx/util/DebugUtils",
+      "android/support/v4/app/LoaderManager": "androidx/app/LoaderManager",
+      "android/support/v4/app/FragmentActivity$1": "androidx/app/FragmentActivity$1",
+      "android/support/v4/app/FragmentController": "androidx/app/FragmentController",
+      "android/support/v4/app/FragmentActivity$HostCallbacks": "androidx/app/FragmentActivity$HostCallbacks",
+      "android/support/v4/app/FragmentActivity$NonConfigurationInstances": "androidx/app/FragmentActivity$NonConfigurationInstances",
+      "android/support/v4/app/ActivityCompat$OnRequestPermissionsResultCallback": "androidx/app/ActivityCompat$OnRequestPermissionsResultCallback",
+      "android/support/v4/app/ActivityCompat$RequestPermissionsRequestCodeValidator": "androidx/app/ActivityCompat$RequestPermissionsRequestCodeValidator",
+      "android/support/v4/app/ActivityCompat$PermissionCompatDelegate": "androidx/app/ActivityCompat$PermissionCompatDelegate",
+      "android/support/v4/app/FragmentManagerImpl$1": "androidx/app/FragmentManagerImpl$1",
+      "android/support/v4/app/FragmentManagerImpl$2$1": "androidx/app/FragmentManagerImpl$2$1",
+      "android/support/v4/app/FragmentManagerImpl$2": "androidx/app/FragmentManagerImpl$2",
+      "android/support/v4/app/FragmentManagerImpl$AnimationListenerWrapper": "androidx/app/FragmentManagerImpl$AnimationListenerWrapper",
+      "android/support/v4/app/FragmentManagerImpl$AnimationOrAnimator": "androidx/app/FragmentManagerImpl$AnimationOrAnimator",
+      "android/support/v4/app/FragmentManagerImpl$3": "androidx/app/FragmentManagerImpl$3",
+      "android/support/v4/app/FragmentManagerImpl$4": "androidx/app/FragmentManagerImpl$4",
+      "android/support/v4/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener$1": "androidx/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener$1",
+      "android/support/v4/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener": "androidx/app/FragmentManagerImpl$AnimateOnHWLayerIfNeededListener",
+      "android/support/v4/app/FragmentManagerImpl$AnimatorOnHWLayerIfNeededListener": "androidx/app/FragmentManagerImpl$AnimatorOnHWLayerIfNeededListener",
+      "android/support/v4/app/FragmentManagerImpl$FragmentTag": "androidx/app/FragmentManagerImpl$FragmentTag",
+      "android/support/v4/app/FragmentManagerImpl$PopBackStackState": "androidx/app/FragmentManagerImpl$PopBackStackState",
+      "android/support/v4/app/FragmentManagerImpl$StartEnterTransitionListener": "androidx/app/FragmentManagerImpl$StartEnterTransitionListener",
+      "android/support/v4/util/ArraySet": "androidx/util/ArraySet",
+      "android/support/v4/app/FragmentState": "androidx/app/FragmentState",
+      "android/support/v4/app/FragmentManagerState": "androidx/app/FragmentManagerState",
+      "android/support/v4/app/FragmentManagerState$1": "androidx/app/FragmentManagerState$1",
+      "android/support/v4/app/FragmentPagerAdapter": "androidx/app/FragmentPagerAdapter",
+      "android/support/v4/app/FragmentState$1": "androidx/app/FragmentState$1",
+      "android/support/v4/app/FragmentStatePagerAdapter": "androidx/app/FragmentStatePagerAdapter",
+      "android/support/v4/app/FragmentTabHost$DummyTabFactory": "androidx/app/FragmentTabHost$DummyTabFactory",
+      "android/support/v4/app/FragmentTabHost": "androidx/app/FragmentTabHost",
+      "android/support/v4/app/FragmentTabHost$SavedState$1": "androidx/app/FragmentTabHost$SavedState$1",
+      "android/support/v4/app/FragmentTabHost$SavedState": "androidx/app/FragmentTabHost$SavedState",
+      "android/support/v4/app/FragmentTabHost$TabInfo": "androidx/app/FragmentTabHost$TabInfo",
+      "android/support/v4/app/FragmentTransaction$Transit": "androidx/app/FragmentTransaction$Transit",
+      "android/support/annotation/AnimRes": "androidx/annotation/AnimRes",
+      "android/support/v4/app/FragmentTransition$1": "androidx/app/FragmentTransition$1",
+      "android/support/v4/app/FragmentTransitionImpl": "androidx/app/FragmentTransitionImpl",
+      "android/support/v4/app/FragmentTransition$2": "androidx/app/FragmentTransition$2",
+      "android/support/v4/app/FragmentTransition$3": "androidx/app/FragmentTransition$3",
+      "android/support/v4/app/FragmentTransition$FragmentContainerTransition": "androidx/app/FragmentTransition$FragmentContainerTransition",
+      "android/support/v4/app/FragmentTransition$4": "androidx/app/FragmentTransition$4",
+      "android/support/v4/app/OneShotPreDrawListener": "androidx/app/OneShotPreDrawListener",
+      "android/support/v4/app/FragmentTransitionCompat21": "androidx/app/FragmentTransitionCompat21",
+      "android/support/v4/app/FragmentTransitionCompat21$1": "androidx/app/FragmentTransitionCompat21$1",
+      "android/support/v4/app/FragmentTransitionCompat21$2": "androidx/app/FragmentTransitionCompat21$2",
+      "android/support/v4/app/FragmentTransitionCompat21$3": "androidx/app/FragmentTransitionCompat21$3",
+      "android/support/v4/app/FragmentTransitionCompat21$4": "androidx/app/FragmentTransitionCompat21$4",
+      "android/support/v4/app/FragmentTransitionImpl$1": "androidx/app/FragmentTransitionImpl$1",
+      "android/support/v4/app/FragmentTransitionImpl$2": "androidx/app/FragmentTransitionImpl$2",
+      "android/support/v4/app/FragmentTransitionImpl$3": "androidx/app/FragmentTransitionImpl$3",
+      "android/support/v4/view/ViewGroupCompat": "androidx/view/ViewGroupCompat",
+      "android/support/v4/app/ListFragment$1": "androidx/app/ListFragment$1",
+      "android/support/v4/app/ListFragment": "androidx/app/ListFragment",
+      "android/support/v4/app/ListFragment$2": "androidx/app/ListFragment$2",
+      "android/support/v4/app/LoaderManager$LoaderCallbacks": "androidx/app/LoaderManager$LoaderCallbacks",
+      "android/support/v4/content/Loader": "androidx/content/Loader",
+      "android/support/v4/app/LoaderManagerImpl$LoaderInfo": "androidx/app/LoaderManagerImpl$LoaderInfo",
+      "android/support/v4/content/Loader$OnLoadCompleteListener": "androidx/content/Loader$OnLoadCompleteListener",
+      "android/support/v4/content/Loader$OnLoadCanceledListener": "androidx/content/Loader$OnLoadCanceledListener",
+      "android/arch/paging/LivePagedListBuilder$1$1": "androidx/paging/LivePagedListBuilder$1$1",
+      "android/arch/paging/DataSource$InvalidatedCallback": "androidx/paging/DataSource$InvalidatedCallback",
+      "android/arch/paging/LivePagedListBuilder$1": "androidx/paging/LivePagedListBuilder$1",
+      "android/arch/paging/DataSource": "androidx/paging/DataSource",
+      "android/arch/lifecycle/ComputableLiveData": "androidx/lifecycle/ComputableLiveData",
+      "android/arch/paging/PagedList": "androidx/paging/PagedList",
+      "android/arch/paging/LivePagedListBuilder": "androidx/paging/LivePagedListBuilder",
+      "android/arch/paging/PagedList$Config": "androidx/paging/PagedList$Config",
+      "android/arch/paging/PagedList$BoundaryCallback": "androidx/paging/PagedList$BoundaryCallback",
+      "android/arch/paging/DataSource$Factory": "androidx/paging/DataSource$Factory",
+      "android/arch/lifecycle/LiveData": "androidx/lifecycle/LiveData",
+      "android/arch/paging/PagedList$Builder": "androidx/paging/PagedList$Builder",
+      "android/arch/paging/PagedList$Config$Builder": "androidx/paging/PagedList$Config$Builder",
+      "android/arch/core/executor/ArchTaskExecutor": "androidx/core/executor/ArchTaskExecutor",
+      "android/support/annotation/AnyThread": "androidx/annotation/AnyThread",
+      "android/arch/paging/LivePagedListProvider": "androidx/paging/LivePagedListProvider",
+      "android/arch/paging/PagedListAdapter$1": "androidx/paging/PagedListAdapter$1",
+      "android/arch/paging/PagedListAdapterHelper$PagedListListener": "androidx/paging/PagedListAdapterHelper$PagedListListener",
+      "android/arch/paging/PagedListAdapter": "androidx/paging/PagedListAdapter",
+      "android/arch/paging/PagedListAdapterHelper": "androidx/paging/PagedListAdapterHelper",
+      "android/support/v7/recyclerview/extensions/ListAdapterHelper$AdapterCallback": "androidx/widget/recyclerview/ListAdapterHelper$AdapterCallback",
+      "android/support/v7/recyclerview/extensions/ListAdapterHelper": "androidx/widget/recyclerview/ListAdapterHelper",
+      "android/support/v7/recyclerview/extensions/DiffCallback": "androidx/widget/recyclerview/DiffCallback",
+      "android/support/v7/recyclerview/extensions/ListAdapterConfig": "androidx/widget/recyclerview/ListAdapterConfig",
+      "android/arch/paging/PagedListAdapterHelper$1": "androidx/paging/PagedListAdapterHelper$1",
+      "android/arch/paging/PagedList$Callback": "androidx/paging/PagedList$Callback",
+      "android/arch/paging/PagedListAdapterHelper$2$1": "androidx/paging/PagedListAdapterHelper$2$1",
+      "android/arch/paging/PagedListAdapterHelper$2": "androidx/paging/PagedListAdapterHelper$2",
+      "android/arch/paging/PagedStorage": "androidx/paging/PagedStorage",
+      "android/arch/paging/PagedStorageDiffHelper": "androidx/paging/PagedStorageDiffHelper",
+      "android/support/v7/recyclerview/extensions/ListAdapterConfig$Builder": "androidx/widget/recyclerview/ListAdapterConfig$Builder",
+      "android/arch/paging/PagedStorageDiffHelper$1": "androidx/paging/PagedStorageDiffHelper$1",
+      "android/arch/paging/PagedStorageDiffHelper$OffsettingListUpdateCallback": "androidx/paging/PagedStorageDiffHelper$OffsettingListUpdateCallback",
+      "android/support/v7/recyclerview/extensions/ListAdapter": "androidx/widget/recyclerview/ListAdapter",
+      "android/support/v7/recyclerview/extensions/ListAdapterConfig$1": "androidx/widget/recyclerview/ListAdapterConfig$1",
+      "android/support/v7/recyclerview/extensions/ListAdapterHelper$1$1": "androidx/widget/recyclerview/ListAdapterHelper$1$1",
+      "android/support/v7/recyclerview/extensions/ListAdapterHelper$1": "androidx/widget/recyclerview/ListAdapterHelper$1",
+      "android/support/v7/recyclerview/extensions/ListAdapterHelper$1$2": "androidx/widget/recyclerview/ListAdapterHelper$1$2",
+      "android/arch/paging/TiledPagedList$2": "androidx/paging/TiledPagedList$2",
+      "android/arch/paging/TiledPagedList": "androidx/paging/TiledPagedList",
+      "android/arch/paging/PageResult$Receiver": "androidx/paging/PageResult$Receiver",
+      "android/arch/paging/PageResult": "androidx/paging/PageResult",
+      "android/arch/paging/PositionalDataSource": "androidx/paging/PositionalDataSource",
+      "android/arch/paging/PagedList$1": "androidx/paging/PagedList$1",
+      "android/arch/paging/PositionalDataSource$ContiguousWithoutPlaceholdersWrapper": "androidx/paging/PositionalDataSource$ContiguousWithoutPlaceholdersWrapper",
+      "android/arch/paging/PositionalDataSource$LoadRangeCallback": "androidx/paging/PositionalDataSource$LoadRangeCallback",
+      "android/arch/paging/PositionalDataSource$LoadInitialCallback": "androidx/paging/PositionalDataSource$LoadInitialCallback",
+      "android/arch/paging/PositionalDataSource$LoadRangeParams": "androidx/paging/PositionalDataSource$LoadRangeParams",
+      "android/arch/paging/PositionalDataSource$LoadInitialParams": "androidx/paging/PositionalDataSource$LoadInitialParams",
+      "android/arch/paging/ContiguousDataSource": "androidx/paging/ContiguousDataSource",
+      "android/arch/paging/PageKeyedDataSource$LoadInitialParams": "androidx/paging/PageKeyedDataSource$LoadInitialParams",
+      "android/arch/paging/PageKeyedDataSource": "androidx/paging/PageKeyedDataSource",
+      "android/arch/paging/ItemKeyedDataSource$LoadParams": "androidx/paging/ItemKeyedDataSource$LoadParams",
+      "android/arch/paging/ItemKeyedDataSource": "androidx/paging/ItemKeyedDataSource",
+      "android/arch/paging/PagedStorage$Callback": "androidx/paging/PagedStorage$Callback",
+      "android/arch/paging/DataSource$BaseLoadCallback": "androidx/paging/DataSource$BaseLoadCallback",
+      "android/arch/paging/DataSource$BaseLoadCallback$1": "androidx/paging/DataSource$BaseLoadCallback$1",
+      "android/arch/paging/TiledPagedList$1": "androidx/paging/TiledPagedList$1",
+      "android/arch/paging/ListDataSource": "androidx/paging/ListDataSource",
+      "android/arch/paging/PagedList$2": "androidx/paging/PagedList$2",
+      "android/arch/paging/ContiguousPagedList$3": "androidx/paging/ContiguousPagedList$3",
+      "android/arch/paging/ContiguousPagedList": "androidx/paging/ContiguousPagedList",
+      "android/arch/paging/ItemKeyedDataSource$LoadInitialParams": "androidx/paging/ItemKeyedDataSource$LoadInitialParams",
+      "android/arch/paging/PageKeyedDataSource$LoadCallback": "androidx/paging/PageKeyedDataSource$LoadCallback",
+      "android/arch/paging/PageKeyedDataSource$LoadParams": "androidx/paging/PageKeyedDataSource$LoadParams",
+      "android/arch/paging/PageResult$ResultType": "androidx/paging/PageResult$ResultType",
+      "android/arch/paging/PageKeyedDataSource$LoadInitialCallback": "androidx/paging/PageKeyedDataSource$LoadInitialCallback",
+      "android/arch/paging/ContiguousPagedList$2": "androidx/paging/ContiguousPagedList$2",
+      "android/arch/paging/ContiguousPagedList$1": "androidx/paging/ContiguousPagedList$1",
+      "android/arch/paging/ItemKeyedDataSource$LoadCallback": "androidx/paging/ItemKeyedDataSource$LoadCallback",
+      "android/arch/paging/ItemKeyedDataSource$LoadInitialCallback": "androidx/paging/ItemKeyedDataSource$LoadInitialCallback",
+      "android/arch/paging/SnapshotPagedList": "androidx/paging/SnapshotPagedList",
+      "android/arch/paging/TiledDataSource": "androidx/paging/TiledDataSource",
+      "android/support/text/emoji/widget/EmojiAppCompatButton": "androidx/text/emoji/widget/EmojiAppCompatButton",
+      "android/support/text/emoji/widget/EmojiTextViewHelper": "androidx/text/emoji/widget/EmojiTextViewHelper",
+      "android/support/text/emoji/widget/EmojiAppCompatEditText": "androidx/text/emoji/widget/EmojiAppCompatEditText",
+      "android/support/text/emoji/widget/EmojiEditTextHelper": "androidx/text/emoji/widget/EmojiEditTextHelper",
+      "android/support/text/emoji/widget/EditTextAttributeHelper": "androidx/text/emoji/widget/EditTextAttributeHelper",
+      "android/support/text/emoji/widget/EmojiAppCompatTextView": "androidx/text/emoji/widget/EmojiAppCompatTextView",
+      "android/support/annotation/AnyRes": "androidx/annotation/AnyRes",
+      "android/support/annotation/BinderThread": "androidx/annotation/BinderThread",
+      "android/support/annotation/BoolRes": "androidx/annotation/BoolRes",
+      "android/support/annotation/CheckResult": "androidx/annotation/CheckResult",
+      "android/support/annotation/ColorLong": "androidx/annotation/ColorLong",
+      "android/support/annotation/DimenRes": "androidx/annotation/DimenRes",
+      "android/support/annotation/Dimension": "androidx/annotation/Dimension",
+      "android/support/annotation/FontRes": "androidx/annotation/FontRes",
+      "android/support/annotation/FractionRes": "androidx/annotation/FractionRes",
+      "android/support/annotation/HalfFloat": "androidx/annotation/HalfFloat",
+      "android/support/annotation/IntDef": "androidx/annotation/IntDef",
+      "android/support/annotation/IntegerRes": "androidx/annotation/IntegerRes",
+      "android/support/annotation/InterpolatorRes": "androidx/annotation/InterpolatorRes",
+      "android/support/annotation/Keep": "androidx/annotation/Keep",
+      "android/support/annotation/LongDef": "androidx/annotation/LongDef",
+      "android/support/annotation/NavigationRes": "androidx/annotation/NavigationRes",
+      "android/support/annotation/PluralsRes": "androidx/annotation/PluralsRes",
+      "android/support/annotation/Px": "androidx/annotation/Px",
+      "android/support/annotation/RawRes": "androidx/annotation/RawRes",
+      "android/support/annotation/RequiresPermission$Write": "androidx/annotation/RequiresPermission$Write",
+      "android/support/annotation/Size": "androidx/annotation/Size",
+      "android/support/annotation/StringDef": "androidx/annotation/StringDef",
+      "android/support/annotation/TransitionRes": "androidx/annotation/TransitionRes",
+      "android/support/v7/util/AsyncListUtil$1": "androidx/widget/recyclerview/AsyncListUtil$1",
+      "android/support/v7/util/ThreadUtil$MainThreadCallback": "androidx/widget/recyclerview/ThreadUtil$MainThreadCallback",
+      "android/support/v7/util/AsyncListUtil": "androidx/widget/recyclerview/AsyncListUtil",
+      "android/support/v7/util/TileList$Tile": "androidx/widget/recyclerview/TileList$Tile",
+      "android/support/v7/util/TileList": "androidx/widget/recyclerview/TileList",
+      "android/support/v7/util/ThreadUtil": "androidx/widget/recyclerview/ThreadUtil",
+      "android/support/v7/util/AsyncListUtil$ViewCallback": "androidx/widget/recyclerview/AsyncListUtil$ViewCallback",
+      "android/support/v7/util/ThreadUtil$BackgroundCallback": "androidx/widget/recyclerview/ThreadUtil$BackgroundCallback",
+      "android/support/v7/util/AsyncListUtil$2": "androidx/widget/recyclerview/AsyncListUtil$2",
+      "android/support/v7/util/AsyncListUtil$DataCallback": "androidx/widget/recyclerview/AsyncListUtil$DataCallback",
+      "android/support/v7/util/MessageThreadUtil": "androidx/widget/recyclerview/MessageThreadUtil",
+      "android/support/v7/util/BatchingListUpdateCallback": "androidx/widget/recyclerview/BatchingListUpdateCallback",
+      "android/support/v7/util/DiffUtil$1": "androidx/widget/recyclerview/DiffUtil$1",
+      "android/support/v7/util/DiffUtil$Snake": "androidx/widget/recyclerview/DiffUtil$Snake",
+      "android/support/v7/util/DiffUtil$DiffResult$1": "androidx/widget/recyclerview/DiffUtil$DiffResult$1",
+      "android/support/v7/util/DiffUtil$PostponedUpdate": "androidx/widget/recyclerview/DiffUtil$PostponedUpdate",
+      "android/support/v7/util/DiffUtil$ItemCallback": "androidx/widget/recyclerview/DiffUtil$ItemCallback",
+      "android/support/v7/util/DiffUtil$Range": "androidx/widget/recyclerview/DiffUtil$Range",
+      "android/support/v7/util/MessageThreadUtil$1$1": "androidx/widget/recyclerview/MessageThreadUtil$1$1",
+      "android/support/v7/util/MessageThreadUtil$1": "androidx/widget/recyclerview/MessageThreadUtil$1",
+      "android/support/v7/util/MessageThreadUtil$SyncQueueItem": "androidx/widget/recyclerview/MessageThreadUtil$SyncQueueItem",
+      "android/support/v7/util/MessageThreadUtil$MessageQueue": "androidx/widget/recyclerview/MessageThreadUtil$MessageQueue",
+      "android/support/v7/util/MessageThreadUtil$2$1": "androidx/widget/recyclerview/MessageThreadUtil$2$1",
+      "android/support/v7/util/MessageThreadUtil$2": "androidx/widget/recyclerview/MessageThreadUtil$2",
+      "android/support/v7/util/SortedList$BatchedCallback": "androidx/widget/recyclerview/SortedList$BatchedCallback",
+      "android/support/v7/util/SortedList$Callback": "androidx/widget/recyclerview/SortedList$Callback",
+      "android/support/v7/util/SortedList": "androidx/widget/recyclerview/SortedList",
+      "android/support/v7/widget/AdapterHelper$Callback": "androidx/widget/recyclerview/AdapterHelper$Callback",
+      "android/support/v7/widget/AdapterHelper$UpdateOp": "androidx/widget/recyclerview/AdapterHelper$UpdateOp",
+      "android/support/v7/widget/AdapterHelper": "androidx/widget/recyclerview/AdapterHelper",
+      "android/support/v7/widget/OpReorderer$Callback": "androidx/widget/recyclerview/OpReorderer$Callback",
+      "android/support/v7/widget/OpReorderer": "androidx/widget/recyclerview/OpReorderer",
+      "android/support/v7/widget/ChildHelper$Bucket": "androidx/widget/recyclerview/ChildHelper$Bucket",
+      "android/support/v7/widget/ChildHelper": "androidx/widget/recyclerview/ChildHelper",
+      "android/support/v7/widget/ChildHelper$Callback": "androidx/widget/recyclerview/ChildHelper$Callback",
+      "android/support/v7/widget/DefaultItemAnimator$1": "androidx/widget/recyclerview/DefaultItemAnimator$1",
+      "android/support/v7/widget/DefaultItemAnimator": "androidx/widget/recyclerview/DefaultItemAnimator",
+      "android/support/v7/widget/DefaultItemAnimator$MoveInfo": "androidx/widget/recyclerview/DefaultItemAnimator$MoveInfo",
+      "android/support/v7/widget/DefaultItemAnimator$2": "androidx/widget/recyclerview/DefaultItemAnimator$2",
+      "android/support/v7/widget/DefaultItemAnimator$ChangeInfo": "androidx/widget/recyclerview/DefaultItemAnimator$ChangeInfo",
+      "android/support/v7/widget/DefaultItemAnimator$3": "androidx/widget/recyclerview/DefaultItemAnimator$3",
+      "android/support/v7/widget/DefaultItemAnimator$4": "androidx/widget/recyclerview/DefaultItemAnimator$4",
+      "android/support/v7/widget/DefaultItemAnimator$5": "androidx/widget/recyclerview/DefaultItemAnimator$5",
+      "android/support/v7/widget/DefaultItemAnimator$6": "androidx/widget/recyclerview/DefaultItemAnimator$6",
+      "android/support/v7/widget/DefaultItemAnimator$7": "androidx/widget/recyclerview/DefaultItemAnimator$7",
+      "android/support/v7/widget/DefaultItemAnimator$8": "androidx/widget/recyclerview/DefaultItemAnimator$8",
+      "android/support/v7/widget/DividerItemDecoration": "androidx/widget/recyclerview/DividerItemDecoration",
+      "android/support/v7/widget/FastScroller$1": "androidx/widget/recyclerview/FastScroller$1",
+      "android/support/v7/widget/FastScroller": "androidx/widget/recyclerview/FastScroller",
+      "android/support/v7/widget/FastScroller$2": "androidx/widget/recyclerview/FastScroller$2",
+      "android/support/v7/widget/FastScroller$AnimationState": "androidx/widget/recyclerview/FastScroller$AnimationState",
+      "android/support/v7/widget/FastScroller$AnimatorListener": "androidx/widget/recyclerview/FastScroller$AnimatorListener",
+      "android/support/v7/widget/FastScroller$AnimatorUpdater": "androidx/widget/recyclerview/FastScroller$AnimatorUpdater",
+      "android/support/v7/widget/FastScroller$DragState": "androidx/widget/recyclerview/FastScroller$DragState",
+      "android/support/v7/widget/FastScroller$State": "androidx/widget/recyclerview/FastScroller$State",
+      "android/support/v7/widget/RecyclerView$OnItemTouchListener": "androidx/widget/recyclerview/RecyclerView$OnItemTouchListener",
+      "android/support/v7/widget/GapWorker$1": "androidx/widget/recyclerview/GapWorker$1",
+      "android/support/v7/widget/GapWorker$Task": "androidx/widget/recyclerview/GapWorker$Task",
+      "android/support/v7/widget/GapWorker": "androidx/widget/recyclerview/GapWorker",
+      "android/support/v7/widget/GapWorker$LayoutPrefetchRegistryImpl": "androidx/widget/recyclerview/GapWorker$LayoutPrefetchRegistryImpl",
+      "android/support/v4/os/TraceCompat": "androidx/os/TraceCompat",
+      "android/support/v7/widget/GridLayoutManager$DefaultSpanSizeLookup": "androidx/widget/recyclerview/GridLayoutManager$DefaultSpanSizeLookup",
+      "android/support/v7/widget/GridLayoutManager$SpanSizeLookup": "androidx/widget/recyclerview/GridLayoutManager$SpanSizeLookup",
+      "android/support/v7/widget/GridLayoutManager": "androidx/widget/recyclerview/GridLayoutManager",
+      "android/support/v7/widget/GridLayoutManager$LayoutParams": "androidx/widget/recyclerview/GridLayoutManager$LayoutParams",
+      "android/support/v7/widget/LinearLayoutManager$AnchorInfo": "androidx/widget/recyclerview/LinearLayoutManager$AnchorInfo",
+      "android/support/v7/widget/LinearLayoutManager$LayoutState": "androidx/widget/recyclerview/LinearLayoutManager$LayoutState",
+      "android/support/v7/widget/LinearLayoutManager$LayoutChunkResult": "androidx/widget/recyclerview/LinearLayoutManager$LayoutChunkResult",
+      "android/support/v7/widget/LinearLayoutManager$SavedState": "androidx/widget/recyclerview/LinearLayoutManager$SavedState",
+      "android/support/v7/widget/LayoutState": "androidx/widget/recyclerview/LayoutState",
+      "android/support/v7/widget/LinearLayoutManager$SavedState$1": "androidx/widget/recyclerview/LinearLayoutManager$SavedState$1",
+      "android/support/v7/widget/helper/ItemTouchHelper$ViewDropHandler": "androidx/widget/recyclerview/ItemTouchHelper$ViewDropHandler",
+      "android/support/v7/widget/RecyclerView$SmoothScroller$ScrollVectorProvider": "androidx/widget/recyclerview/RecyclerView$SmoothScroller$ScrollVectorProvider",
+      "android/support/v7/widget/helper/ItemTouchHelper": "androidx/widget/recyclerview/ItemTouchHelper",
+      "android/support/v7/widget/ScrollbarHelper": "androidx/widget/recyclerview/ScrollbarHelper",
+      "android/support/v7/widget/ViewBoundsCheck": "androidx/widget/recyclerview/ViewBoundsCheck",
+      "android/support/v7/widget/LinearSnapHelper": "androidx/widget/recyclerview/LinearSnapHelper",
+      "android/support/v7/widget/SnapHelper": "androidx/widget/recyclerview/SnapHelper",
+      "android/support/v7/widget/OrientationHelper$1": "androidx/widget/recyclerview/OrientationHelper$1",
+      "android/support/v7/widget/OrientationHelper$2": "androidx/widget/recyclerview/OrientationHelper$2",
+      "android/support/v7/widget/PagerSnapHelper$1": "androidx/widget/recyclerview/PagerSnapHelper$1",
+      "android/support/v7/widget/PagerSnapHelper": "androidx/widget/recyclerview/PagerSnapHelper",
+      "android/support/v7/widget/PositionMap$ContainerHelpers": "androidx/widget/recyclerview/PositionMap$ContainerHelpers",
+      "android/support/v7/widget/PositionMap": "androidx/widget/recyclerview/PositionMap",
+      "android/support/v7/widget/RecyclerView$1": "androidx/widget/recyclerview/RecyclerView$1",
+      "android/support/v7/widget/RecyclerView$2": "androidx/widget/recyclerview/RecyclerView$2",
+      "android/support/v7/widget/RecyclerView$3": "androidx/widget/recyclerview/RecyclerView$3",
+      "android/support/v7/widget/RecyclerView$4": "androidx/widget/recyclerview/RecyclerView$4",
+      "android/support/v7/widget/ViewInfoStore$ProcessCallback": "androidx/widget/recyclerview/ViewInfoStore$ProcessCallback",
+      "android/support/v7/widget/RecyclerView$ItemAnimator$ItemHolderInfo": "androidx/widget/recyclerview/RecyclerView$ItemAnimator$ItemHolderInfo",
+      "android/support/v7/widget/ViewInfoStore": "androidx/widget/recyclerview/ViewInfoStore",
+      "android/support/v7/widget/RecyclerView$5": "androidx/widget/recyclerview/RecyclerView$5",
+      "android/support/v7/widget/RecyclerView$6": "androidx/widget/recyclerview/RecyclerView$6",
+      "android/support/v7/widget/RecyclerView$AdapterDataObservable": "androidx/widget/recyclerview/RecyclerView$AdapterDataObservable",
+      "android/support/v7/widget/RecyclerView$ChildDrawingOrderCallback": "androidx/widget/recyclerview/RecyclerView$ChildDrawingOrderCallback",
+      "android/support/v7/widget/RecyclerView$EdgeEffectFactory$EdgeDirection": "androidx/widget/recyclerview/RecyclerView$EdgeEffectFactory$EdgeDirection",
+      "android/support/v7/widget/RecyclerView$EdgeEffectFactory": "androidx/widget/recyclerview/RecyclerView$EdgeEffectFactory",
+      "android/support/v7/widget/RecyclerView$ItemAnimator$AdapterChanges": "androidx/widget/recyclerview/RecyclerView$ItemAnimator$AdapterChanges",
+      "android/support/v7/widget/RecyclerView$ItemAnimator$ItemAnimatorFinishedListener": "androidx/widget/recyclerview/RecyclerView$ItemAnimator$ItemAnimatorFinishedListener",
+      "android/support/v7/widget/RecyclerView$ItemAnimator$ItemAnimatorListener": "androidx/widget/recyclerview/RecyclerView$ItemAnimator$ItemAnimatorListener",
+      "android/support/v7/widget/RecyclerView$ItemAnimatorRestoreListener": "androidx/widget/recyclerview/RecyclerView$ItemAnimatorRestoreListener",
+      "android/support/v7/widget/RecyclerView$LayoutManager$1": "androidx/widget/recyclerview/RecyclerView$LayoutManager$1",
+      "android/support/v7/widget/ViewBoundsCheck$Callback": "androidx/widget/recyclerview/ViewBoundsCheck$Callback",
+      "android/support/v7/widget/RecyclerView$LayoutManager$2": "androidx/widget/recyclerview/RecyclerView$LayoutManager$2",
+      "android/support/v7/recyclerview/R$styleable": "androidx/recyclerview/R$styleable",
+      "android/support/v7/recyclerview/R": "androidx/recyclerview/R",
+      "android/support/v7/widget/RecyclerView$OnChildAttachStateChangeListener": "androidx/widget/recyclerview/RecyclerView$OnChildAttachStateChangeListener",
+      "android/support/v7/widget/RecyclerView$OnFlingListener": "androidx/widget/recyclerview/RecyclerView$OnFlingListener",
+      "android/support/v7/widget/RecyclerView$Orientation": "androidx/widget/recyclerview/RecyclerView$Orientation",
+      "android/support/v7/widget/RecyclerView$RecycledViewPool$ScrapData": "androidx/widget/recyclerview/RecyclerView$RecycledViewPool$ScrapData",
+      "android/support/v7/widget/RecyclerView$ViewCacheExtension": "androidx/widget/recyclerview/RecyclerView$ViewCacheExtension",
+      "android/support/v7/widget/RecyclerView$RecyclerViewDataObserver": "androidx/widget/recyclerview/RecyclerView$RecyclerViewDataObserver",
+      "android/support/v7/widget/RecyclerView$SavedState$1": "androidx/widget/recyclerview/RecyclerView$SavedState$1",
+      "android/support/v7/widget/RecyclerView$SavedState": "androidx/widget/recyclerview/RecyclerView$SavedState",
+      "android/support/v7/widget/RecyclerView$SimpleOnItemTouchListener": "androidx/widget/recyclerview/RecyclerView$SimpleOnItemTouchListener",
+      "android/support/v7/widget/RecyclerView$ViewFlinger": "androidx/widget/recyclerview/RecyclerView$ViewFlinger",
+      "android/support/v7/widget/RecyclerView$State$LayoutState": "androidx/widget/recyclerview/RecyclerView$State$LayoutState",
+      "android/support/v7/recyclerview/R$dimen": "androidx/recyclerview/R$dimen",
+      "android/support/v4/view/ViewConfigurationCompat": "androidx/view/ViewConfigurationCompat",
+      "android/support/v4/view/MotionEventCompat": "androidx/view/MotionEventCompat",
+      "android/support/v7/widget/RecyclerViewAccessibilityDelegate$ItemDelegate": "androidx/widget/recyclerview/RecyclerViewAccessibilityDelegate$ItemDelegate",
+      "android/support/v7/widget/SnapHelper$1": "androidx/widget/recyclerview/SnapHelper$1",
+      "android/support/v7/widget/SnapHelper$2": "androidx/widget/recyclerview/SnapHelper$2",
+      "android/support/v7/widget/StaggeredGridLayoutManager$1": "androidx/widget/recyclerview/StaggeredGridLayoutManager$1",
+      "android/support/v7/widget/StaggeredGridLayoutManager": "androidx/widget/recyclerview/StaggeredGridLayoutManager",
+      "android/support/v7/widget/StaggeredGridLayoutManager$AnchorInfo": "androidx/widget/recyclerview/StaggeredGridLayoutManager$AnchorInfo",
+      "android/support/v7/widget/StaggeredGridLayoutManager$Span": "androidx/widget/recyclerview/StaggeredGridLayoutManager$Span",
+      "android/support/v7/widget/StaggeredGridLayoutManager$LayoutParams": "androidx/widget/recyclerview/StaggeredGridLayoutManager$LayoutParams",
+      "android/support/v7/widget/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem$1": "androidx/widget/recyclerview/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem$1",
+      "android/support/v7/widget/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem": "androidx/widget/recyclerview/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem",
+      "android/support/v7/widget/StaggeredGridLayoutManager$LazySpanLookup": "androidx/widget/recyclerview/StaggeredGridLayoutManager$LazySpanLookup",
+      "android/support/v7/widget/StaggeredGridLayoutManager$SavedState$1": "androidx/widget/recyclerview/StaggeredGridLayoutManager$SavedState$1",
+      "android/support/v7/widget/StaggeredGridLayoutManager$SavedState": "androidx/widget/recyclerview/StaggeredGridLayoutManager$SavedState",
+      "android/support/v7/widget/ViewBoundsCheck$BoundFlags": "androidx/widget/recyclerview/ViewBoundsCheck$BoundFlags",
+      "android/support/v7/widget/ViewBoundsCheck$ViewBounds": "androidx/widget/recyclerview/ViewBoundsCheck$ViewBounds",
+      "android/support/v7/widget/ViewInfoStore$InfoRecord": "androidx/widget/recyclerview/ViewInfoStore$InfoRecord",
+      "android/support/v7/widget/helper/ItemTouchHelper$1": "androidx/widget/recyclerview/ItemTouchHelper$1",
+      "android/support/v7/widget/helper/ItemTouchHelper$2": "androidx/widget/recyclerview/ItemTouchHelper$2",
+      "android/support/v7/widget/helper/ItemTouchHelper$RecoverAnimation": "androidx/widget/recyclerview/ItemTouchHelper$RecoverAnimation",
+      "android/support/v7/widget/helper/ItemTouchHelper$Callback": "androidx/widget/recyclerview/ItemTouchHelper$Callback",
+      "android/support/v4/view/GestureDetectorCompat": "androidx/view/GestureDetectorCompat",
+      "android/support/v7/widget/helper/ItemTouchHelper$3": "androidx/widget/recyclerview/ItemTouchHelper$3",
+      "android/support/v7/widget/helper/ItemTouchHelper$4": "androidx/widget/recyclerview/ItemTouchHelper$4",
+      "android/support/v7/widget/helper/ItemTouchHelper$5": "androidx/widget/recyclerview/ItemTouchHelper$5",
+      "android/support/v7/widget/helper/ItemTouchHelper$Callback$1": "androidx/widget/recyclerview/ItemTouchHelper$Callback$1",
+      "android/support/v7/widget/helper/ItemTouchHelper$Callback$2": "androidx/widget/recyclerview/ItemTouchHelper$Callback$2",
+      "android/support/v7/widget/helper/ItemTouchUIUtilImpl$Api21Impl": "androidx/widget/recyclerview/ItemTouchUIUtilImpl$Api21Impl",
+      "android/support/v7/widget/helper/ItemTouchUIUtilImpl": "androidx/widget/recyclerview/ItemTouchUIUtilImpl",
+      "android/support/v7/widget/helper/ItemTouchUIUtilImpl$BaseImpl": "androidx/widget/recyclerview/ItemTouchUIUtilImpl$BaseImpl",
+      "android/support/v7/widget/helper/ItemTouchUIUtil": "androidx/widget/recyclerview/ItemTouchUIUtil",
+      "android/support/v7/widget/helper/ItemTouchHelper$ItemTouchHelperGestureListener": "androidx/widget/recyclerview/ItemTouchHelper$ItemTouchHelperGestureListener",
+      "android/support/v7/widget/helper/ItemTouchHelper$RecoverAnimation$1": "androidx/widget/recyclerview/ItemTouchHelper$RecoverAnimation$1",
+      "android/support/v7/widget/helper/ItemTouchHelper$SimpleCallback": "androidx/widget/recyclerview/ItemTouchHelper$SimpleCallback",
+      "android/support/v7/recyclerview/R$id": "androidx/recyclerview/R$id",
+      "android/support/v7/widget/util/SortedListAdapterCallback": "androidx/widget/recyclerview/SortedListAdapterCallback",
+      "android/arch/persistence/db/SupportSQLiteOpenHelper$Configuration$Builder": "androidx/persistence/db/SupportSQLiteOpenHelper$Configuration$Builder",
+      "android/arch/persistence/db/SupportSQLiteQueryBuilder": "androidx/persistence/db/SupportSQLiteQueryBuilder",
+      "android/support/v7/graphics/ColorCutQuantizer$1": "androidx/graphics/palette/ColorCutQuantizer$1",
+      "android/support/v7/graphics/ColorCutQuantizer$Vbox": "androidx/graphics/palette/ColorCutQuantizer$Vbox",
+      "android/support/v7/graphics/ColorCutQuantizer": "androidx/graphics/palette/ColorCutQuantizer",
+      "android/support/v7/graphics/Palette$Swatch": "androidx/graphics/palette/Palette$Swatch",
+      "android/support/v7/graphics/Palette": "androidx/graphics/palette/Palette",
+      "android/support/v7/graphics/Palette$Filter": "androidx/graphics/palette/Palette$Filter",
+      "android/support/v7/graphics/Palette$1": "androidx/graphics/palette/Palette$1",
+      "android/support/v7/graphics/Palette$Builder$1": "androidx/graphics/palette/Palette$Builder$1",
+      "android/support/v7/graphics/Palette$Builder": "androidx/graphics/palette/Palette$Builder",
+      "android/support/v7/graphics/Palette$PaletteAsyncListener": "androidx/graphics/palette/Palette$PaletteAsyncListener",
+      "android/support/v7/graphics/Target": "androidx/graphics/palette/Target",
+      "android/support/v7/graphics/Target$Builder": "androidx/graphics/palette/Target$Builder",
+      "android/support/v13/view/DragAndDropPermissionsCompat": "androidx/view/DragAndDropPermissionsCompat",
+      "android/support/v13/view/DragStartHelper$1": "androidx/view/DragStartHelper$1",
+      "android/support/v13/view/DragStartHelper": "androidx/view/DragStartHelper",
+      "android/support/v13/view/DragStartHelper$2": "androidx/view/DragStartHelper$2",
+      "android/support/v13/view/DragStartHelper$OnDragStartListener": "androidx/view/DragStartHelper$OnDragStartListener",
+      "android/support/v13/view/inputmethod/EditorInfoCompat": "androidx/view/inputmethod/EditorInfoCompat",
+      "android/support/v13/view/inputmethod/InputConnectionCompat$1": "androidx/view/inputmethod/InputConnectionCompat$1",
+      "android/support/v13/view/inputmethod/InputConnectionCompat": "androidx/view/inputmethod/InputConnectionCompat",
+      "android/support/v13/view/inputmethod/InputConnectionCompat$OnCommitContentListener": "androidx/view/inputmethod/InputConnectionCompat$OnCommitContentListener",
       "android/support/v13/view/inputmethod/InputContentInfoCompat": "androidx/view/inputmethod/InputContentInfoCompat",
+      "android/support/v13/view/inputmethod/InputConnectionCompat$2": "androidx/view/inputmethod/InputConnectionCompat$2",
+      "android/support/v13/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatApi25Impl": "androidx/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatApi25Impl",
+      "android/support/v13/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatImpl": "androidx/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatImpl",
+      "android/support/v13/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatBaseImpl": "androidx/view/inputmethod/InputContentInfoCompat$InputContentInfoCompatBaseImpl",
+      "android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat": "androidx/accessibilityservice/AccessibilityServiceInfoCompat",
+      "android/support/v4/app/ActivityCompat$1": "androidx/app/ActivityCompat$1",
+      "android/support/v4/app/ActivityCompat$SharedElementCallback21Impl": "androidx/app/ActivityCompat$SharedElementCallback21Impl",
+      "android/support/v4/app/ActivityCompat$SharedElementCallback23Impl$1": "androidx/app/ActivityCompat$SharedElementCallback23Impl$1",
+      "android/support/v4/app/SharedElementCallback$OnSharedElementsReadyListener": "androidx/app/SharedElementCallback$OnSharedElementsReadyListener",
+      "android/support/v4/app/ActivityCompat$SharedElementCallback23Impl": "androidx/app/ActivityCompat$SharedElementCallback23Impl",
+      "android/support/v4/app/ActivityManagerCompat": "androidx/app/ActivityManagerCompat",
+      "android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi16Impl": "androidx/app/ActivityOptionsCompat$ActivityOptionsCompatApi16Impl",
+      "android/support/v4/app/ActivityOptionsCompat": "androidx/app/ActivityOptionsCompat",
+      "android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi23Impl": "androidx/app/ActivityOptionsCompat$ActivityOptionsCompatApi23Impl",
+      "android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi24Impl": "androidx/app/ActivityOptionsCompat$ActivityOptionsCompatApi24Impl",
+      "android/support/v4/app/AlarmManagerCompat": "androidx/app/AlarmManagerCompat",
+      "android/support/v4/app/AppOpsManagerCompat": "androidx/app/AppOpsManagerCompat",
+      "android/support/v4/app/BundleCompat$BundleCompatBaseImpl": "androidx/app/BundleCompat$BundleCompatBaseImpl",
+      "android/support/v4/app/INotificationSideChannel$Stub$Proxy": "androidx/app/INotificationSideChannel$Stub$Proxy",
+      "android/support/v4/app/INotificationSideChannel": "androidx/app/INotificationSideChannel",
+      "android/support/v4/app/INotificationSideChannel$Stub": "androidx/app/INotificationSideChannel$Stub",
+      "android/support/v4/app/JobIntentService$CommandProcessor": "androidx/app/JobIntentService$CommandProcessor",
+      "android/support/v4/app/JobIntentService": "androidx/app/JobIntentService",
+      "android/support/v4/app/JobIntentService$GenericWorkItem": "androidx/app/JobIntentService$GenericWorkItem",
+      "android/support/v4/app/JobIntentService$CompatJobEngine": "androidx/app/JobIntentService$CompatJobEngine",
+      "android/support/v4/app/JobIntentService$CompatWorkEnqueuer": "androidx/app/JobIntentService$CompatWorkEnqueuer",
+      "android/support/v4/app/JobIntentService$WorkEnqueuer": "androidx/app/JobIntentService$WorkEnqueuer",
+      "android/support/v4/app/JobIntentService$CompatWorkItem": "androidx/app/JobIntentService$CompatWorkItem",
+      "android/support/v4/app/JobIntentService$JobServiceEngineImpl$WrapperWorkItem": "androidx/app/JobIntentService$JobServiceEngineImpl$WrapperWorkItem",
+      "android/support/v4/app/JobIntentService$JobServiceEngineImpl": "androidx/app/JobIntentService$JobServiceEngineImpl",
+      "android/support/v4/app/JobIntentService$JobWorkEnqueuer": "androidx/app/JobIntentService$JobWorkEnqueuer",
+      "android/support/v4/app/NotificationCompat$Action$Builder": "androidx/app/NotificationCompat$Action$Builder",
+      "android/support/v4/app/NotificationCompat$Action$Extender": "androidx/app/NotificationCompat$Action$Extender",
+      "android/support/v4/app/RemoteInput": "androidx/app/RemoteInput",
+      "android/support/v4/app/NotificationCompat$Action$WearableExtender": "androidx/app/NotificationCompat$Action$WearableExtender",
+      "android/support/v4/app/NotificationCompat$BadgeIconType": "androidx/app/NotificationCompat$BadgeIconType",
+      "android/support/v4/app/NotificationCompat$BigPictureStyle": "androidx/app/NotificationCompat$BigPictureStyle",
+      "android/support/v4/app/NotificationCompat$BigTextStyle": "androidx/app/NotificationCompat$BigTextStyle",
+      "android/support/v4/app/NotificationCompat$Extender": "androidx/app/NotificationCompat$Extender",
+      "android/support/v4/app/NotificationCompatBuilder": "androidx/app/NotificationCompatBuilder",
+      "android/support/v4/app/NotificationCompat$CarExtender$UnreadConversation$Builder": "androidx/app/NotificationCompat$CarExtender$UnreadConversation$Builder",
+      "android/support/v4/app/NotificationCompat$CarExtender": "androidx/app/NotificationCompat$CarExtender",
+      "android/support/v4/app/NotificationCompat$CarExtender$UnreadConversation": "androidx/app/NotificationCompat$CarExtender$UnreadConversation",
+      "android/support/v4/app/NotificationCompat$DecoratedCustomViewStyle": "androidx/app/NotificationCompat$DecoratedCustomViewStyle",
+      "android/support/compat/R$layout": "androidx/compat/R$layout",
+      "android/support/compat/R": "androidx/compat/R",
+      "android/support/compat/R$id": "androidx/compat/R$id",
+      "android/support/compat/R$color": "androidx/compat/R$color",
+      "android/support/v4/app/NotificationCompat$GroupAlertBehavior": "androidx/app/NotificationCompat$GroupAlertBehavior",
+      "android/support/v4/app/NotificationCompat$InboxStyle": "androidx/app/NotificationCompat$InboxStyle",
+      "android/support/v4/app/NotificationCompat$MessagingStyle$Message": "androidx/app/NotificationCompat$MessagingStyle$Message",
+      "android/support/v4/app/NotificationCompat$MessagingStyle": "androidx/app/NotificationCompat$MessagingStyle",
+      "android/support/v4/text/BidiFormatter": "androidx/text/BidiFormatter",
+      "android/support/v4/app/NotificationCompat$NotificationVisibility": "androidx/app/NotificationCompat$NotificationVisibility",
+      "android/support/v4/app/NotificationCompat$StreamType": "androidx/app/NotificationCompat$StreamType",
+      "android/support/compat/R$drawable": "androidx/compat/R$drawable",
+      "android/support/compat/R$dimen": "androidx/compat/R$dimen",
+      "android/support/compat/R$integer": "androidx/compat/R$integer",
+      "android/support/compat/R$string": "androidx/compat/R$string",
+      "android/support/v4/app/NotificationCompat$WearableExtender": "androidx/app/NotificationCompat$WearableExtender",
+      "android/support/v4/app/NotificationCompatJellybean": "androidx/app/NotificationCompatJellybean",
+      "android/support/v4/app/NotificationCompatExtras": "androidx/app/NotificationCompatExtras",
+      "android/support/v4/app/NotificationCompatSideChannelService$NotificationSideChannelStub": "androidx/app/NotificationCompatSideChannelService$NotificationSideChannelStub",
+      "android/support/v4/app/NotificationCompatSideChannelService": "androidx/app/NotificationCompatSideChannelService",
+      "android/support/v4/app/NotificationManagerCompat$CancelTask": "androidx/app/NotificationManagerCompat$CancelTask",
+      "android/support/v4/app/NotificationManagerCompat$Task": "androidx/app/NotificationManagerCompat$Task",
+      "android/support/v4/app/NotificationManagerCompat": "androidx/app/NotificationManagerCompat",
+      "android/support/v4/app/NotificationManagerCompat$NotifyTask": "androidx/app/NotificationManagerCompat$NotifyTask",
+      "android/support/v4/app/NotificationManagerCompat$ServiceConnectedEvent": "androidx/app/NotificationManagerCompat$ServiceConnectedEvent",
+      "android/support/v4/app/NotificationManagerCompat$SideChannelManager$ListenerRecord": "androidx/app/NotificationManagerCompat$SideChannelManager$ListenerRecord",
+      "android/support/v4/app/NotificationManagerCompat$SideChannelManager": "androidx/app/NotificationManagerCompat$SideChannelManager",
+      "android/support/v4/app/RemoteInput$Builder": "androidx/app/RemoteInput$Builder",
+      "android/support/v4/app/RemoteInputCompatBase$RemoteInput": "androidx/app/RemoteInputCompatBase$RemoteInput",
+      "android/support/v4/app/RemoteInputCompatBase": "androidx/app/RemoteInputCompatBase",
+      "android/support/v4/app/RemoteInputCompatBase$RemoteInput$Factory": "androidx/app/RemoteInputCompatBase$RemoteInput$Factory",
+      "android/support/v4/app/ServiceCompat$StopForegroundFlags": "androidx/app/ServiceCompat$StopForegroundFlags",
+      "android/support/v4/app/ServiceCompat": "androidx/app/ServiceCompat",
+      "android/support/v4/app/ShareCompat$IntentBuilder": "androidx/app/ShareCompat$IntentBuilder",
+      "android/support/v4/app/ShareCompat": "androidx/app/ShareCompat",
+      "android/support/v4/app/ShareCompat$IntentReader": "androidx/app/ShareCompat$IntentReader",
+      "android/support/v4/content/ContentResolverCompat": "androidx/content/ContentResolverCompat",
+      "android/support/v4/os/CancellationSignal": "androidx/os/CancellationSignal",
+      "android/support/v4/os/OperationCanceledException": "androidx/os/OperationCanceledException",
+      "android/support/v4/content/IntentCompat": "androidx/content/IntentCompat",
+      "android/support/v4/content/SharedPreferencesCompat$EditorCompat$Helper": "androidx/content/SharedPreferencesCompat$EditorCompat$Helper",
+      "android/support/v4/content/SharedPreferencesCompat$EditorCompat": "androidx/content/SharedPreferencesCompat$EditorCompat",
+      "android/support/v4/content/SharedPreferencesCompat": "androidx/content/SharedPreferencesCompat",
+      "android/support/v4/content/pm/ActivityInfoCompat": "androidx/content/pm/ActivityInfoCompat",
+      "android/support/v4/content/pm/ShortcutInfoCompat$1": "androidx/content/pm/ShortcutInfoCompat$1",
+      "android/support/v4/content/pm/ShortcutInfoCompat": "androidx/content/pm/ShortcutInfoCompat",
+      "android/support/v4/content/pm/ShortcutInfoCompat$Builder": "androidx/content/pm/ShortcutInfoCompat$Builder",
+      "android/support/v4/graphics/drawable/IconCompat": "androidx/graphics/drawable/IconCompat",
+      "android/support/v4/content/pm/ShortcutManagerCompat$1": "androidx/content/pm/ShortcutManagerCompat$1",
+      "android/support/v4/content/pm/ShortcutManagerCompat": "androidx/content/pm/ShortcutManagerCompat",
+      "android/support/v4/content/res/ConfigurationHelper": "androidx/content/res/ConfigurationHelper",
+      "android/support/v4/content/res/FontResourcesParserCompat$FamilyResourceEntry": "androidx/content/res/FontResourcesParserCompat$FamilyResourceEntry",
+      "android/support/v4/content/res/FontResourcesParserCompat": "androidx/content/res/FontResourcesParserCompat",
+      "android/support/v4/content/res/FontResourcesParserCompat$FetchStrategy": "androidx/content/res/FontResourcesParserCompat$FetchStrategy",
+      "android/support/v4/content/res/FontResourcesParserCompat$FontFamilyFilesResourceEntry": "androidx/content/res/FontResourcesParserCompat$FontFamilyFilesResourceEntry",
+      "android/support/v4/content/res/FontResourcesParserCompat$FontFileResourceEntry": "androidx/content/res/FontResourcesParserCompat$FontFileResourceEntry",
+      "android/support/v4/content/res/FontResourcesParserCompat$ProviderResourceEntry": "androidx/content/res/FontResourcesParserCompat$ProviderResourceEntry",
+      "android/support/v4/provider/FontRequest": "androidx/provider/FontRequest",
+      "android/support/compat/R$styleable": "androidx/compat/R$styleable",
+      "android/support/v4/content/res/ResourcesCompat$FontCallback$1": "androidx/content/res/ResourcesCompat$FontCallback$1",
+      "android/support/v4/content/res/ResourcesCompat$FontCallback$2": "androidx/content/res/ResourcesCompat$FontCallback$2",
+      "android/support/v4/provider/FontsContractCompat$FontRequestCallback": "androidx/provider/FontsContractCompat$FontRequestCallback",
+      "android/support/v4/provider/FontsContractCompat": "androidx/provider/FontsContractCompat",
+      "android/support/v4/graphics/TypefaceCompat": "androidx/graphics/TypefaceCompat",
+      "android/support/v4/database/DatabaseUtilsCompat": "androidx/database/DatabaseUtilsCompat",
+      "android/support/v4/graphics/BitmapCompat$BitmapCompatApi18Impl": "androidx/graphics/BitmapCompat$BitmapCompatApi18Impl",
+      "android/support/v4/graphics/BitmapCompat$BitmapCompatBaseImpl": "androidx/graphics/BitmapCompat$BitmapCompatBaseImpl",
+      "android/support/v4/graphics/BitmapCompat": "androidx/graphics/BitmapCompat",
+      "android/support/v4/graphics/BitmapCompat$BitmapCompatApi19Impl": "androidx/graphics/BitmapCompat$BitmapCompatApi19Impl",
+      "android/support/v4/graphics/PaintCompat": "androidx/graphics/PaintCompat",
+      "android/support/v4/graphics/PathParser$ExtractFloatResult": "androidx/graphics/PathParser$ExtractFloatResult",
+      "android/support/v4/graphics/TypefaceCompat$TypefaceCompatImpl": "androidx/graphics/TypefaceCompat$TypefaceCompatImpl",
+      "android/support/v4/provider/FontsContractCompat$FontInfo": "androidx/provider/FontsContractCompat$FontInfo",
+      "android/support/v4/graphics/TypefaceCompatApi26Impl": "androidx/graphics/TypefaceCompatApi26Impl",
+      "android/support/v4/graphics/TypefaceCompatApi24Impl": "androidx/graphics/TypefaceCompatApi24Impl",
+      "android/support/v4/graphics/TypefaceCompatApi21Impl": "androidx/graphics/TypefaceCompatApi21Impl",
+      "android/support/v4/graphics/TypefaceCompatBaseImpl": "androidx/graphics/TypefaceCompatBaseImpl",
+      "android/support/v4/graphics/TypefaceCompatUtil": "androidx/graphics/TypefaceCompatUtil",
+      "android/support/v4/graphics/TypefaceCompatBaseImpl$1": "androidx/graphics/TypefaceCompatBaseImpl$1",
+      "android/support/v4/graphics/TypefaceCompatBaseImpl$StyleExtractor": "androidx/graphics/TypefaceCompatBaseImpl$StyleExtractor",
+      "android/support/v4/graphics/TypefaceCompatBaseImpl$2": "androidx/graphics/TypefaceCompatBaseImpl$2",
+      "android/support/v4/graphics/drawable/WrappedDrawableApi21": "androidx/graphics/drawable/WrappedDrawableApi21",
+      "android/support/v4/graphics/drawable/WrappedDrawableApi19": "androidx/graphics/drawable/WrappedDrawableApi19",
+      "android/support/v4/graphics/drawable/WrappedDrawableApi14": "androidx/graphics/drawable/WrappedDrawableApi14",
+      "android/support/v4/graphics/drawable/WrappedDrawableApi14$DrawableWrapperState": "androidx/graphics/drawable/WrappedDrawableApi14$DrawableWrapperState",
+      "android/support/v4/graphics/drawable/WrappedDrawableApi14$DrawableWrapperStateBase": "androidx/graphics/drawable/WrappedDrawableApi14$DrawableWrapperStateBase",
+      "android/support/v4/graphics/drawable/WrappedDrawableApi19$DrawableWrapperStateKitKat": "androidx/graphics/drawable/WrappedDrawableApi19$DrawableWrapperStateKitKat",
+      "android/support/v4/graphics/drawable/WrappedDrawableApi21$DrawableWrapperStateLollipop": "androidx/graphics/drawable/WrappedDrawableApi21$DrawableWrapperStateLollipop",
+      "android/support/v4/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi14Impl": "androidx/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi14Impl",
+      "android/support/v4/hardware/display/DisplayManagerCompat": "androidx/hardware/display/DisplayManagerCompat",
+      "android/support/v4/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi17Impl": "androidx/hardware/display/DisplayManagerCompat$DisplayManagerCompatApi17Impl",
+      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat$1": "androidx/hardware/fingerprint/FingerprintManagerCompat$1",
+      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat": "androidx/hardware/fingerprint/FingerprintManagerCompat",
+      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat$AuthenticationCallback": "androidx/hardware/fingerprint/FingerprintManagerCompat$AuthenticationCallback",
+      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat$AuthenticationResult": "androidx/hardware/fingerprint/FingerprintManagerCompat$AuthenticationResult",
+      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat$CryptoObject": "androidx/hardware/fingerprint/FingerprintManagerCompat$CryptoObject",
+      "android/support/v4/net/ConnectivityManagerCompat$RestrictBackgroundStatus": "androidx/net/ConnectivityManagerCompat$RestrictBackgroundStatus",
+      "android/support/v4/net/ConnectivityManagerCompat": "androidx/net/ConnectivityManagerCompat",
+      "android/support/v4/net/DatagramSocketWrapper$DatagramSocketImplWrapper": "androidx/net/DatagramSocketWrapper$DatagramSocketImplWrapper",
+      "android/support/v4/net/DatagramSocketWrapper": "androidx/net/DatagramSocketWrapper",
+      "android/support/v4/net/TrafficStatsCompat": "androidx/net/TrafficStatsCompat",
+      "android/support/v4/os/BuildCompat": "androidx/os/BuildCompat",
+      "android/support/v4/os/CancellationSignal$OnCancelListener": "androidx/os/CancellationSignal$OnCancelListener",
+      "android/support/v4/os/ConfigurationCompat": "androidx/os/ConfigurationCompat",
+      "android/support/v4/os/LocaleListCompat": "androidx/os/LocaleListCompat",
+      "android/support/v4/os/EnvironmentCompat": "androidx/os/EnvironmentCompat",
+      "android/support/v4/os/IResultReceiver$Stub$Proxy": "androidx/os/IResultReceiver$Stub$Proxy",
+      "android/support/v4/os/IResultReceiver": "androidx/os/IResultReceiver",
+      "android/support/v4/os/IResultReceiver$Stub": "androidx/os/IResultReceiver$Stub",
+      "android/support/v4/os/LocaleHelper": "androidx/os/LocaleHelper",
+      "android/support/v4/os/LocaleListCompat$LocaleListCompatApi24Impl": "androidx/os/LocaleListCompat$LocaleListCompatApi24Impl",
+      "android/support/v4/os/LocaleListInterface": "androidx/os/LocaleListInterface",
+      "android/support/v4/os/LocaleListCompat$LocaleListCompatBaseImpl": "androidx/os/LocaleListCompat$LocaleListCompatBaseImpl",
+      "android/support/v4/os/LocaleListHelper": "androidx/os/LocaleListHelper",
+      "android/support/v4/os/ParcelableCompat$ParcelableCompatCreatorHoneycombMR2": "androidx/os/ParcelableCompat$ParcelableCompatCreatorHoneycombMR2",
+      "android/support/v4/os/ParcelableCompat": "androidx/os/ParcelableCompat",
+      "android/support/v4/os/ParcelableCompatCreatorCallbacks": "androidx/os/ParcelableCompatCreatorCallbacks",
+      "android/support/v4/os/ResultReceiver$1": "androidx/os/ResultReceiver$1",
+      "android/support/v4/os/ResultReceiver$MyResultReceiver": "androidx/os/ResultReceiver$MyResultReceiver",
+      "android/support/v4/os/ResultReceiver$MyRunnable": "androidx/os/ResultReceiver$MyRunnable",
+      "android/support/v4/os/UserManagerCompat": "androidx/os/UserManagerCompat",
+      "android/support/v4/provider/FontsContractCompat$1": "androidx/provider/FontsContractCompat$1",
+      "android/support/v4/provider/FontsContractCompat$TypefaceResult": "androidx/provider/FontsContractCompat$TypefaceResult",
+      "android/support/v4/provider/FontsContractCompat$2": "androidx/provider/FontsContractCompat$2",
+      "android/support/v4/provider/SelfDestructiveThread$ReplyCallback": "androidx/provider/SelfDestructiveThread$ReplyCallback",
+      "android/support/v4/provider/SelfDestructiveThread": "androidx/provider/SelfDestructiveThread",
+      "android/support/v4/provider/FontsContractCompat$3": "androidx/provider/FontsContractCompat$3",
+      "android/support/v4/provider/FontsContractCompat$4$1": "androidx/provider/FontsContractCompat$4$1",
+      "android/support/v4/provider/FontsContractCompat$4": "androidx/provider/FontsContractCompat$4",
+      "android/support/v4/provider/FontsContractCompat$4$2": "androidx/provider/FontsContractCompat$4$2",
+      "android/support/v4/provider/FontsContractCompat$4$3": "androidx/provider/FontsContractCompat$4$3",
+      "android/support/v4/provider/FontsContractCompat$4$4": "androidx/provider/FontsContractCompat$4$4",
+      "android/support/v4/provider/FontsContractCompat$4$5": "androidx/provider/FontsContractCompat$4$5",
+      "android/support/v4/provider/FontsContractCompat$4$6": "androidx/provider/FontsContractCompat$4$6",
+      "android/support/v4/provider/FontsContractCompat$4$7": "androidx/provider/FontsContractCompat$4$7",
+      "android/support/v4/provider/FontsContractCompat$4$8": "androidx/provider/FontsContractCompat$4$8",
+      "android/support/v4/provider/FontsContractCompat$4$9": "androidx/provider/FontsContractCompat$4$9",
+      "android/support/v4/provider/FontsContractCompat$FontFamilyResult": "androidx/provider/FontsContractCompat$FontFamilyResult",
+      "android/support/v4/provider/FontsContractCompat$5": "androidx/provider/FontsContractCompat$5",
+      "android/support/v4/provider/FontsContractCompat$Columns": "androidx/provider/FontsContractCompat$Columns",
+      "android/support/v4/provider/FontsContractCompat$FontFamilyResult$FontResultStatus": "androidx/provider/FontsContractCompat$FontFamilyResult$FontResultStatus",
+      "android/support/v4/provider/FontsContractCompat$FontRequestCallback$FontRequestFailReason": "androidx/provider/FontsContractCompat$FontRequestCallback$FontRequestFailReason",
+      "android/support/v4/provider/SelfDestructiveThread$1": "androidx/provider/SelfDestructiveThread$1",
+      "android/support/v4/provider/SelfDestructiveThread$2$1": "androidx/provider/SelfDestructiveThread$2$1",
+      "android/support/v4/provider/SelfDestructiveThread$2": "androidx/provider/SelfDestructiveThread$2",
+      "android/support/v4/provider/SelfDestructiveThread$3": "androidx/provider/SelfDestructiveThread$3",
+      "android/support/v4/text/BidiFormatter$1": "androidx/text/BidiFormatter$1",
+      "android/support/v4/text/BidiFormatter$Builder": "androidx/text/BidiFormatter$Builder",
+      "android/support/v4/text/TextDirectionHeuristicCompat": "androidx/text/TextDirectionHeuristicCompat",
+      "android/support/v4/text/BidiFormatter$DirectionalityEstimator": "androidx/text/BidiFormatter$DirectionalityEstimator",
+      "android/support/v4/text/TextDirectionHeuristicsCompat": "androidx/text/TextDirectionHeuristicsCompat",
+      "android/support/v4/text/TextUtilsCompat": "androidx/text/TextUtilsCompat",
+      "android/support/v4/text/ICUCompat": "androidx/text/ICUCompat",
+      "android/support/v4/text/TextDirectionHeuristicsCompat$AnyStrong": "androidx/text/TextDirectionHeuristicsCompat$AnyStrong",
+      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionAlgorithm": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionAlgorithm",
+      "android/support/v4/text/TextDirectionHeuristicsCompat$FirstStrong": "androidx/text/TextDirectionHeuristicsCompat$FirstStrong",
+      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicImpl": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicImpl",
+      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicInternal": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicInternal",
+      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicLocale": "androidx/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicLocale",
+      "android/support/v4/text/util/LinkifyCompat$1": "androidx/text/util/LinkifyCompat$1",
+      "android/support/v4/text/util/LinkifyCompat$LinkSpec": "androidx/text/util/LinkifyCompat$LinkSpec",
+      "android/support/v4/text/util/LinkifyCompat": "androidx/text/util/LinkifyCompat",
+      "android/support/v4/text/util/LinkifyCompat$LinkifyMask": "androidx/text/util/LinkifyCompat$LinkifyMask",
+      "android/support/v4/util/PatternsCompat": "androidx/util/PatternsCompat",
+      "android/support/v4/util/ArrayMap$1": "androidx/util/ArrayMap$1",
+      "android/support/v4/util/MapCollections": "androidx/util/MapCollections",
+      "android/support/v4/util/ArraySet$1": "androidx/util/ArraySet$1",
+      "android/support/v4/util/ContainerHelpers": "androidx/util/ContainerHelpers",
+      "android/support/v4/util/AtomicFile": "androidx/util/AtomicFile",
+      "android/support/v4/util/MapCollections$ArrayIterator": "androidx/util/MapCollections$ArrayIterator",
+      "android/support/v4/util/MapCollections$EntrySet": "androidx/util/MapCollections$EntrySet",
+      "android/support/v4/util/MapCollections$MapIterator": "androidx/util/MapCollections$MapIterator",
+      "android/support/v4/util/MapCollections$KeySet": "androidx/util/MapCollections$KeySet",
+      "android/support/v4/util/MapCollections$ValuesCollection": "androidx/util/MapCollections$ValuesCollection",
+      "android/support/v4/util/TimeUtils": "androidx/util/TimeUtils",
+      "android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateApi16Impl$1": "androidx/view/AccessibilityDelegateCompat$AccessibilityDelegateApi16Impl$1",
+      "android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateApi16Impl": "androidx/view/AccessibilityDelegateCompat$AccessibilityDelegateApi16Impl",
+      "android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateBaseImpl": "androidx/view/AccessibilityDelegateCompat$AccessibilityDelegateBaseImpl",
+      "android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateBaseImpl$1": "androidx/view/AccessibilityDelegateCompat$AccessibilityDelegateBaseImpl$1",
+      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImpl": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImpl",
+      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImplBase$GestureHandler": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImplBase$GestureHandler",
+      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImplBase": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImplBase",
+      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2",
+      "android/support/v4/view/InputDeviceCompat": "androidx/view/InputDeviceCompat",
+      "android/support/v4/view/LayoutInflaterCompat$Factory2Wrapper": "androidx/view/LayoutInflaterCompat$Factory2Wrapper",
+      "android/support/v4/view/LayoutInflaterFactory": "androidx/view/LayoutInflaterFactory",
+      "android/support/v4/view/LayoutInflaterCompat$LayoutInflaterCompatApi21Impl": "androidx/view/LayoutInflaterCompat$LayoutInflaterCompatApi21Impl",
+      "android/support/v4/view/LayoutInflaterCompat$LayoutInflaterCompatBaseImpl": "androidx/view/LayoutInflaterCompat$LayoutInflaterCompatBaseImpl",
+      "android/support/v4/view/MenuCompat": "androidx/view/MenuCompat",
+      "android/support/v4/view/MenuItemCompat$1": "androidx/view/MenuItemCompat$1",
+      "android/support/v4/view/MenuItemCompat$OnActionExpandListener": "androidx/view/MenuItemCompat$OnActionExpandListener",
+      "android/support/v4/view/MenuItemCompat$MenuItemCompatApi26Impl": "androidx/view/MenuItemCompat$MenuItemCompatApi26Impl",
+      "android/support/v4/view/MenuItemCompat$MenuItemCompatBaseImpl": "androidx/view/MenuItemCompat$MenuItemCompatBaseImpl",
+      "android/support/v4/view/MenuItemCompat$MenuVersionImpl": "androidx/view/MenuItemCompat$MenuVersionImpl",
+      "android/support/v4/view/PointerIconCompat": "androidx/view/PointerIconCompat",
+      "android/support/v4/view/ScaleGestureDetectorCompat": "androidx/view/ScaleGestureDetectorCompat",
+      "android/support/v4/view/VelocityTrackerCompat": "androidx/view/VelocityTrackerCompat",
+      "android/support/v4/view/ViewCompat$AccessibilityLiveRegion": "androidx/view/ViewCompat$AccessibilityLiveRegion",
+      "android/support/v4/view/ViewCompat$AutofillImportance": "androidx/view/ViewCompat$AutofillImportance",
+      "android/support/v4/view/ViewCompat$FocusDirection": "androidx/view/ViewCompat$FocusDirection",
+      "android/support/v4/view/ViewCompat$FocusRealDirection": "androidx/view/ViewCompat$FocusRealDirection",
+      "android/support/v4/view/ViewCompat$FocusRelativeDirection": "androidx/view/ViewCompat$FocusRelativeDirection",
+      "android/support/v4/view/ViewCompat$ImportantForAccessibility": "androidx/view/ViewCompat$ImportantForAccessibility",
+      "android/support/v4/view/ViewCompat$LayerType": "androidx/view/ViewCompat$LayerType",
+      "android/support/v4/view/ViewCompat$LayoutDirectionMode": "androidx/view/ViewCompat$LayoutDirectionMode",
+      "android/support/v4/view/ViewCompat$NestedScrollType": "androidx/view/ViewCompat$NestedScrollType",
+      "android/support/v4/view/ViewCompat$OverScroll": "androidx/view/ViewCompat$OverScroll",
+      "android/support/v4/view/ViewCompat$ResolvedLayoutDirectionMode": "androidx/view/ViewCompat$ResolvedLayoutDirectionMode",
+      "android/support/v4/view/ViewCompat$ScrollAxis": "androidx/view/ViewCompat$ScrollAxis",
+      "android/support/v4/view/ViewCompat$ScrollIndicators": "androidx/view/ViewCompat$ScrollIndicators",
+      "android/support/v4/view/ViewCompat$ViewCompatApi15Impl": "androidx/view/ViewCompat$ViewCompatApi15Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatBaseImpl": "androidx/view/ViewCompat$ViewCompatBaseImpl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi16Impl": "androidx/view/ViewCompat$ViewCompatApi16Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi17Impl": "androidx/view/ViewCompat$ViewCompatApi17Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi18Impl": "androidx/view/ViewCompat$ViewCompatApi18Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi19Impl": "androidx/view/ViewCompat$ViewCompatApi19Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi21Impl$1": "androidx/view/ViewCompat$ViewCompatApi21Impl$1",
+      "android/support/v4/view/ViewCompat$ViewCompatApi21Impl": "androidx/view/ViewCompat$ViewCompatApi21Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi23Impl": "androidx/view/ViewCompat$ViewCompatApi23Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi24Impl": "androidx/view/ViewCompat$ViewCompatApi24Impl",
+      "android/support/v4/view/ViewCompat$ViewCompatApi26Impl": "androidx/view/ViewCompat$ViewCompatApi26Impl",
+      "android/support/v4/view/ViewGroupCompat$ViewGroupCompatApi18Impl": "androidx/view/ViewGroupCompat$ViewGroupCompatApi18Impl",
+      "android/support/v4/view/ViewGroupCompat$ViewGroupCompatBaseImpl": "androidx/view/ViewGroupCompat$ViewGroupCompatBaseImpl",
+      "android/support/v4/view/ViewGroupCompat$ViewGroupCompatApi21Impl": "androidx/view/ViewGroupCompat$ViewGroupCompatApi21Impl",
+      "android/support/v4/view/ViewParentCompat$ViewParentCompatApi19Impl": "androidx/view/ViewParentCompat$ViewParentCompatApi19Impl",
+      "android/support/v4/view/ViewParentCompat$ViewParentCompatBaseImpl": "androidx/view/ViewParentCompat$ViewParentCompatBaseImpl",
+      "android/support/v4/view/ViewParentCompat$ViewParentCompatApi21Impl": "androidx/view/ViewParentCompat$ViewParentCompatApi21Impl",
+      "android/support/v4/view/ViewPropertyAnimatorCompat$1": "androidx/view/ViewPropertyAnimatorCompat$1",
+      "android/support/v4/view/ViewPropertyAnimatorCompat$2": "androidx/view/ViewPropertyAnimatorCompat$2",
+      "android/support/v4/view/ViewPropertyAnimatorCompat$ViewPropertyAnimatorListenerApi14": "androidx/view/ViewPropertyAnimatorCompat$ViewPropertyAnimatorListenerApi14",
+      "android/support/v4/view/WindowCompat": "androidx/view/WindowCompat",
+      "android/support/v4/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListener": "androidx/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListener",
+      "android/support/v4/view/accessibility/AccessibilityManagerCompat": "androidx/view/accessibility/AccessibilityManagerCompat",
+      "android/support/v4/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerCompat": "androidx/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerCompat",
+      "android/support/v4/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerWrapper": "androidx/view/accessibility/AccessibilityManagerCompat$AccessibilityStateChangeListenerWrapper",
+      "android/support/v4/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListener": "androidx/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListener",
+      "android/support/v4/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListenerWrapper": "androidx/view/accessibility/AccessibilityManagerCompat$TouchExplorationStateChangeListenerWrapper",
+      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat": "androidx/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat",
+      "android/support/v4/view/accessibility/AccessibilityWindowInfoCompat": "androidx/view/accessibility/AccessibilityWindowInfoCompat",
+      "android/support/v4/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi16": "androidx/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi16",
+      "android/support/v4/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi19": "androidx/view/accessibility/AccessibilityNodeProviderCompat$AccessibilityNodeProviderApi19",
+      "android/support/v4/view/animation/PathInterpolatorApi14": "androidx/view/animation/PathInterpolatorApi14",
+      "android/support/v4/view/animation/PathInterpolatorCompat": "androidx/view/animation/PathInterpolatorCompat",
+      "android/support/v4/widget/CompoundButtonCompat$CompoundButtonCompatApi21Impl": "androidx/widget/CompoundButtonCompat$CompoundButtonCompatApi21Impl",
+      "android/support/v4/widget/CompoundButtonCompat$CompoundButtonCompatBaseImpl": "androidx/widget/CompoundButtonCompat$CompoundButtonCompatBaseImpl",
+      "android/support/v4/widget/CompoundButtonCompat$CompoundButtonCompatApi23Impl": "androidx/widget/CompoundButtonCompat$CompoundButtonCompatApi23Impl",
+      "android/support/v4/widget/EdgeEffectCompat$EdgeEffectApi21Impl": "androidx/widget/EdgeEffectCompat$EdgeEffectApi21Impl",
+      "android/support/v4/widget/EdgeEffectCompat$EdgeEffectBaseImpl": "androidx/widget/EdgeEffectCompat$EdgeEffectBaseImpl",
+      "android/support/v4/widget/ImageViewCompat$BaseViewCompatImpl": "androidx/widget/ImageViewCompat$BaseViewCompatImpl",
+      "android/support/v4/widget/ImageViewCompat$ImageViewCompatImpl": "androidx/widget/ImageViewCompat$ImageViewCompatImpl",
+      "android/support/v4/widget/ImageViewCompat$LollipopViewCompatImpl": "androidx/widget/ImageViewCompat$LollipopViewCompatImpl",
+      "android/support/v4/widget/ListPopupWindowCompat": "androidx/widget/ListPopupWindowCompat",
+      "android/support/v4/widget/PopupMenuCompat": "androidx/widget/PopupMenuCompat",
+      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatApi19Impl": "androidx/widget/PopupWindowCompat$PopupWindowCompatApi19Impl",
+      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatBaseImpl": "androidx/widget/PopupWindowCompat$PopupWindowCompatBaseImpl",
+      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatApi21Impl": "androidx/widget/PopupWindowCompat$PopupWindowCompatApi21Impl",
+      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatApi23Impl": "androidx/widget/PopupWindowCompat$PopupWindowCompatApi23Impl",
+      "android/support/v4/widget/ScrollerCompat": "androidx/widget/ScrollerCompat",
+      "android/support/v4/widget/TextViewCompat$AutoSizeTextType": "androidx/widget/TextViewCompat$AutoSizeTextType",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatApi16Impl": "androidx/widget/TextViewCompat$TextViewCompatApi16Impl",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatBaseImpl": "androidx/widget/TextViewCompat$TextViewCompatBaseImpl",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatApi17Impl": "androidx/widget/TextViewCompat$TextViewCompatApi17Impl",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatApi18Impl": "androidx/widget/TextViewCompat$TextViewCompatApi18Impl",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatApi23Impl": "androidx/widget/TextViewCompat$TextViewCompatApi23Impl",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatApi26Impl$1": "androidx/widget/TextViewCompat$TextViewCompatApi26Impl$1",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatApi26Impl": "androidx/widget/TextViewCompat$TextViewCompatApi26Impl",
+      "android/support/v4/widget/TextViewCompat$TextViewCompatApi27Impl": "androidx/widget/TextViewCompat$TextViewCompatApi27Impl",
+      "android/support/v13/app/ActivityCompat": "androidx/legacy/app/ActivityCompat",
+      "android/support/v13/app/FragmentCompat$FragmentCompatApi15Impl": "androidx/legacy/app/FragmentCompat$FragmentCompatApi15Impl",
+      "android/support/v13/app/FragmentCompat$FragmentCompatBaseImpl": "androidx/legacy/app/FragmentCompat$FragmentCompatBaseImpl",
+      "android/support/v13/app/FragmentCompat": "androidx/legacy/app/FragmentCompat",
+      "android/support/v13/app/FragmentCompat$FragmentCompatApi23Impl": "androidx/legacy/app/FragmentCompat$FragmentCompatApi23Impl",
+      "android/support/v13/app/FragmentCompat$FragmentCompatApi24Impl": "androidx/legacy/app/FragmentCompat$FragmentCompatApi24Impl",
+      "android/support/v13/app/FragmentCompat$FragmentCompatBaseImpl$1": "androidx/legacy/app/FragmentCompat$FragmentCompatBaseImpl$1",
+      "android/support/v13/app/FragmentCompat$OnRequestPermissionsResultCallback": "androidx/legacy/app/FragmentCompat$OnRequestPermissionsResultCallback",
+      "android/support/v13/app/FragmentCompat$FragmentCompatImpl": "androidx/legacy/app/FragmentCompat$FragmentCompatImpl",
+      "android/support/v13/app/FragmentCompat$PermissionCompatDelegate": "androidx/legacy/app/FragmentCompat$PermissionCompatDelegate",
+      "android/support/v13/app/FragmentPagerAdapter": "androidx/legacy/app/FragmentPagerAdapter",
+      "android/support/v13/app/FragmentStatePagerAdapter": "androidx/legacy/app/FragmentStatePagerAdapter",
+      "android/support/v13/app/FragmentTabHost$DummyTabFactory": "androidx/legacy/app/FragmentTabHost$DummyTabFactory",
+      "android/support/v13/app/FragmentTabHost": "androidx/legacy/app/FragmentTabHost",
+      "android/support/v13/app/FragmentTabHost$SavedState$1": "androidx/legacy/app/FragmentTabHost$SavedState$1",
+      "android/support/v13/app/FragmentTabHost$SavedState": "androidx/legacy/app/FragmentTabHost$SavedState",
+      "android/support/v13/app/FragmentTabHost$TabInfo": "androidx/legacy/app/FragmentTabHost$TabInfo",
+      "android/support/v13/view/ViewCompat": "androidx/legacy/view/ViewCompat",
+      "android/arch/core/executor/JunitTaskExecutorRule$1": "androidx/core/executor/JunitTaskExecutorRule$1",
+      "android/arch/core/executor/JunitTaskExecutorRule": "androidx/core/executor/JunitTaskExecutorRule",
+      "android/arch/core/executor/TaskExecutorWithFakeMainThread": "androidx/core/executor/TaskExecutorWithFakeMainThread",
+      "android/arch/core/executor/TaskExecutor": "androidx/core/executor/TaskExecutor",
+      "android/arch/core/executor/TaskExecutorWithFakeMainThread$1": "androidx/core/executor/TaskExecutorWithFakeMainThread$1",
+      "android/arch/core/executor/TaskExecutorWithFakeMainThread$LoggingThread": "androidx/core/executor/TaskExecutorWithFakeMainThread$LoggingThread",
+      "android/arch/core/executor/TaskExecutorWithFakeMainThread$2": "androidx/core/executor/TaskExecutorWithFakeMainThread$2",
+      "android/arch/core/executor/TaskExecutorWithFakeMainThread$3": "androidx/core/executor/TaskExecutorWithFakeMainThread$3",
+      "android/arch/core/executor/TaskExecutorWithFakeMainThread$4": "androidx/core/executor/TaskExecutorWithFakeMainThread$4",
+      "android/arch/core/executor/TaskExecutorWithFakeMainThread$LoggingThread$1": "androidx/core/executor/TaskExecutorWithFakeMainThread$LoggingThread$1",
+      "android/arch/core/executor/testing/CountingTaskExecutorRule$1": "androidx/core/executor/testing/CountingTaskExecutorRule$1",
+      "android/arch/core/executor/DefaultTaskExecutor": "androidx/core/executor/DefaultTaskExecutor",
+      "android/arch/core/executor/testing/CountingTaskExecutorRule": "androidx/core/executor/testing/CountingTaskExecutorRule",
+      "android/arch/core/executor/testing/CountingTaskExecutorRule$CountingRunnable": "androidx/core/executor/testing/CountingTaskExecutorRule$CountingRunnable",
+      "android/arch/core/executor/testing/InstantTaskExecutorRule$1": "androidx/core/executor/testing/InstantTaskExecutorRule$1",
+      "android/arch/core/executor/testing/InstantTaskExecutorRule": "androidx/core/executor/testing/InstantTaskExecutorRule",
+      "android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout$1": "androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout$1",
+      "android/support/v17/internal/widget/OutlineOnlyWithChildrenFrameLayout": "androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout",
+      "android/support/v17/preference/BaseLeanbackPreferenceFragment": "androidx/leanback/preference/BaseLeanbackPreferenceFragment",
+      "android/support/v17/preference/R$layout": "androidx/leanback/preference/R$layout",
+      "android/support/v17/preference/R": "androidx/leanback/preference/R",
+      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$AdapterMulti": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$AdapterMulti",
+      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$ViewHolder": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$ViewHolder",
+      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$ViewHolder$OnItemClickListener": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$ViewHolder$OnItemClickListener",
+      "android/support/v17/preference/LeanbackListPreferenceDialogFragment": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment",
+      "android/support/v17/preference/LeanbackListPreferenceDialogFragment$AdapterSingle": "androidx/leanback/preference/LeanbackListPreferenceDialogFragment$AdapterSingle",
+      "android/support/v17/preference/R$id": "androidx/leanback/preference/R$id",
+      "android/support/v17/preference/LeanbackPreferenceDialogFragment": "androidx/leanback/preference/LeanbackPreferenceDialogFragment",
+      "android/support/v17/preference/LeanbackPreferenceFragmentTransitionHelperApi21": "androidx/leanback/preference/LeanbackPreferenceFragmentTransitionHelperApi21",
+      "android/support/v17/preference/LeanbackPreferenceFragment": "androidx/leanback/preference/LeanbackPreferenceFragment",
+      "android/support/v17/preference/LeanbackSettingsFragment$1": "androidx/leanback/preference/LeanbackSettingsFragment$1",
+      "android/support/v17/preference/LeanbackSettingsFragment": "androidx/leanback/preference/LeanbackSettingsFragment",
+      "android/support/v17/preference/LeanbackSettingsFragment$DummyFragment": "androidx/leanback/preference/LeanbackSettingsFragment$DummyFragment",
+      "android/support/v17/preference/LeanbackSettingsFragment$RootViewOnKeyListener": "androidx/leanback/preference/LeanbackSettingsFragment$RootViewOnKeyListener",
+      "android/support/v17/preference/LeanbackSettingsRootView": "androidx/leanback/preference/LeanbackSettingsRootView",
+      "android/support/percent/PercentFrameLayout$LayoutParams": "androidx/widget/PercentFrameLayout$LayoutParams",
+      "android/support/percent/PercentLayoutHelper$PercentLayoutParams": "androidx/widget/PercentLayoutHelper$PercentLayoutParams",
+      "android/support/percent/PercentLayoutHelper$PercentLayoutInfo": "androidx/widget/PercentLayoutHelper$PercentLayoutInfo",
+      "android/support/percent/PercentLayoutHelper": "androidx/widget/PercentLayoutHelper",
+      "android/support/percent/PercentFrameLayout": "androidx/widget/PercentFrameLayout",
+      "android/support/percent/PercentLayoutHelper$PercentMarginLayoutParams": "androidx/widget/PercentLayoutHelper$PercentMarginLayoutParams",
+      "android/support/percent/R$styleable": "androidx/widget/R$styleable",
+      "android/support/percent/R": "androidx/widget/R",
+      "android/support/percent/PercentRelativeLayout$LayoutParams": "androidx/widget/PercentRelativeLayout$LayoutParams",
+      "android/support/percent/PercentRelativeLayout": "androidx/widget/PercentRelativeLayout",
+      "android/support/app/recommendation/ContentRecommendation$1": "androidx/app/recommendation/ContentRecommendation$1",
+      "android/support/app/recommendation/ContentRecommendation": "androidx/app/recommendation/ContentRecommendation",
+      "android/support/app/recommendation/ContentRecommendation$Builder": "androidx/app/recommendation/ContentRecommendation$Builder",
+      "android/support/app/recommendation/ContentRecommendation$IntentData": "androidx/app/recommendation/ContentRecommendation$IntentData",
+      "android/support/app/recommendation/ContentRecommendation$ContentMaturity": "androidx/app/recommendation/ContentRecommendation$ContentMaturity",
+      "android/support/app/recommendation/ContentRecommendation$ContentPricing": "androidx/app/recommendation/ContentRecommendation$ContentPricing",
+      "android/support/app/recommendation/ContentRecommendation$ContentStatus": "androidx/app/recommendation/ContentRecommendation$ContentStatus",
+      "android/support/app/recommendation/ContentRecommendation$ContentType": "androidx/app/recommendation/ContentRecommendation$ContentType",
+      "android/support/app/recommendation/ContentRecommendation$IntentType": "androidx/app/recommendation/ContentRecommendation$IntentType",
+      "android/support/app/recommendation/RecommendationExtender": "androidx/app/recommendation/RecommendationExtender",
+      "android/support/media/tv/BasePreviewProgram$AspectRatio": "androidx/media/tv/BasePreviewProgram$AspectRatio",
+      "android/support/media/tv/BasePreviewProgram": "androidx/media/tv/BasePreviewProgram",
+      "android/support/media/tv/BasePreviewProgram$Availability": "androidx/media/tv/BasePreviewProgram$Availability",
+      "android/support/media/tv/BasePreviewProgram$Builder": "androidx/media/tv/BasePreviewProgram$Builder",
+      "android/support/media/tv/BaseProgram$Builder": "androidx/media/tv/BaseProgram$Builder",
+      "android/support/media/tv/BaseProgram": "androidx/media/tv/BaseProgram",
+      "android/support/media/tv/TvContractCompat$PreviewPrograms": "androidx/media/tv/TvContractCompat$PreviewPrograms",
+      "android/support/media/tv/TvContractCompat": "androidx/media/tv/TvContractCompat",
+      "android/support/media/tv/BasePreviewProgram$InteractionType": "androidx/media/tv/BasePreviewProgram$InteractionType",
+      "android/support/media/tv/BasePreviewProgram$Type": "androidx/media/tv/BasePreviewProgram$Type",
+      "android/support/media/tv/TvContractCompat$PreviewProgramColumns": "androidx/media/tv/TvContractCompat$PreviewProgramColumns",
+      "android/support/media/tv/CollectionUtils": "androidx/media/tv/CollectionUtils",
+      "android/support/media/tv/TvContractCompat$BaseTvColumns": "androidx/media/tv/TvContractCompat$BaseTvColumns",
+      "android/support/media/tv/TvContractCompat$Programs": "androidx/media/tv/TvContractCompat$Programs",
+      "android/support/media/tv/TvContractCompat$ProgramColumns": "androidx/media/tv/TvContractCompat$ProgramColumns",
+      "android/support/media/tv/TvContractCompat$Programs$Genres": "androidx/media/tv/TvContractCompat$Programs$Genres",
+      "android/support/media/tv/TvContractUtils": "androidx/media/tv/TvContractUtils",
+      "android/support/media/tv/BaseProgram$ReviewRatingStyle": "androidx/media/tv/BaseProgram$ReviewRatingStyle",
+      "android/support/media/tv/Channel$1": "androidx/media/tv/Channel$1",
+      "android/support/media/tv/Channel": "androidx/media/tv/Channel",
+      "android/support/media/tv/Channel$Builder": "androidx/media/tv/Channel$Builder",
+      "android/support/media/tv/TvContractCompat$Channels": "androidx/media/tv/TvContractCompat$Channels",
+      "android/support/media/tv/ChannelLogoUtils": "androidx/media/tv/ChannelLogoUtils",
+      "android/support/media/tv/PreviewProgram$1": "androidx/media/tv/PreviewProgram$1",
+      "android/support/media/tv/PreviewProgram": "androidx/media/tv/PreviewProgram",
+      "android/support/media/tv/PreviewProgram$Builder": "androidx/media/tv/PreviewProgram$Builder",
+      "android/support/media/tv/Program$1": "androidx/media/tv/Program$1",
+      "android/support/media/tv/Program": "androidx/media/tv/Program",
+      "android/support/media/tv/Program$Builder": "androidx/media/tv/Program$Builder",
+      "android/support/media/tv/TvContractCompat$Channels$Logo": "androidx/media/tv/TvContractCompat$Channels$Logo",
+      "android/support/media/tv/TvContractCompat$Channels$ServiceType": "androidx/media/tv/TvContractCompat$Channels$ServiceType",
+      "android/support/media/tv/TvContractCompat$Channels$Type": "androidx/media/tv/TvContractCompat$Channels$Type",
+      "android/support/media/tv/TvContractCompat$Channels$VideoFormat": "androidx/media/tv/TvContractCompat$Channels$VideoFormat",
+      "android/support/media/tv/TvContractCompat$Channels$VideoResolution": "androidx/media/tv/TvContractCompat$Channels$VideoResolution",
+      "android/support/media/tv/TvContractCompat$Programs$Genres$Genre": "androidx/media/tv/TvContractCompat$Programs$Genres$Genre",
+      "android/support/media/tv/TvContractCompat$RecordedPrograms": "androidx/media/tv/TvContractCompat$RecordedPrograms",
+      "android/support/media/tv/TvContractCompat$WatchNextPrograms": "androidx/media/tv/TvContractCompat$WatchNextPrograms",
+      "android/support/media/tv/WatchNextProgram$1": "androidx/media/tv/WatchNextProgram$1",
+      "android/support/media/tv/WatchNextProgram": "androidx/media/tv/WatchNextProgram",
+      "android/support/media/tv/WatchNextProgram$Builder": "androidx/media/tv/WatchNextProgram$Builder",
+      "android/support/media/tv/WatchNextProgram$WatchNextType": "androidx/media/tv/WatchNextProgram$WatchNextType",
+      "android/support/v7/widget/CardView$1": "androidx/widget/CardView$1",
+      "android/support/v7/widget/CardViewDelegate": "androidx/widget/CardViewDelegate",
+      "android/support/v7/widget/CardView": "androidx/widget/CardView",
+      "android/support/v7/cardview/R$attr": "androidx/cardview/R$attr",
+      "android/support/v7/cardview/R": "androidx/cardview/R",
+      "android/support/v7/cardview/R$styleable": "androidx/cardview/R$styleable",
+      "android/support/v7/cardview/R$style": "androidx/cardview/R$style",
+      "android/support/v7/cardview/R$color": "androidx/cardview/R$color",
+      "android/support/v7/widget/CardViewImpl": "androidx/widget/CardViewImpl",
+      "android/support/v7/widget/CardViewApi21Impl": "androidx/widget/CardViewApi21Impl",
+      "android/support/v7/widget/CardViewApi17Impl": "androidx/widget/CardViewApi17Impl",
+      "android/support/v7/widget/CardViewBaseImpl": "androidx/widget/CardViewBaseImpl",
+      "android/support/v7/widget/CardViewApi17Impl$1": "androidx/widget/CardViewApi17Impl$1",
+      "android/support/v7/widget/RoundRectDrawableWithShadow$RoundRectHelper": "androidx/widget/RoundRectDrawableWithShadow$RoundRectHelper",
+      "android/support/v7/widget/RoundRectDrawableWithShadow": "androidx/widget/RoundRectDrawableWithShadow",
+      "android/support/v7/widget/RoundRectDrawable": "androidx/widget/RoundRectDrawable",
+      "android/support/v7/widget/CardViewBaseImpl$1": "androidx/widget/CardViewBaseImpl$1",
+      "android/support/v7/cardview/R$dimen": "androidx/cardview/R$dimen",
+      "android/arch/lifecycle/LiveData$1": "androidx/lifecycle/LiveData$1",
+      "android/arch/lifecycle/LiveData$AlwaysActiveObserver": "androidx/lifecycle/LiveData$AlwaysActiveObserver",
+      "android/arch/lifecycle/LiveData$ObserverWrapper": "androidx/lifecycle/LiveData$ObserverWrapper",
+      "android/arch/lifecycle/Observer": "androidx/lifecycle/Observer",
+      "android/arch/lifecycle/LiveData$LifecycleBoundObserver": "androidx/lifecycle/LiveData$LifecycleBoundObserver",
+      "android/arch/lifecycle/MutableLiveData": "androidx/lifecycle/MutableLiveData",
+      "android/arch/lifecycle/LiveDataReactiveStreams$LiveDataPublisher$LiveDataSubscription$1": "androidx/lifecycle/LiveDataReactiveStreams$LiveDataPublisher$LiveDataSubscription$1",
+      "android/arch/lifecycle/LiveDataReactiveStreams$LiveDataPublisher$LiveDataSubscription": "androidx/lifecycle/LiveDataReactiveStreams$LiveDataPublisher$LiveDataSubscription",
+      "android/arch/lifecycle/LiveDataReactiveStreams$LiveDataPublisher": "androidx/lifecycle/LiveDataReactiveStreams$LiveDataPublisher",
+      "android/arch/lifecycle/LiveDataReactiveStreams": "androidx/lifecycle/LiveDataReactiveStreams",
+      "android/arch/lifecycle/LiveDataReactiveStreams$LiveDataPublisher$LiveDataSubscription$2": "androidx/lifecycle/LiveDataReactiveStreams$LiveDataPublisher$LiveDataSubscription$2",
+      "android/arch/lifecycle/LiveDataReactiveStreams$PublisherLiveData$LiveDataSubscriber$1": "androidx/lifecycle/LiveDataReactiveStreams$PublisherLiveData$LiveDataSubscriber$1",
+      "android/arch/lifecycle/LiveDataReactiveStreams$PublisherLiveData$LiveDataSubscriber": "androidx/lifecycle/LiveDataReactiveStreams$PublisherLiveData$LiveDataSubscriber",
+      "android/arch/lifecycle/LiveDataReactiveStreams$PublisherLiveData": "androidx/lifecycle/LiveDataReactiveStreams$PublisherLiveData",
+      "android/support/v7/app/MediaRouteActionProvider$MediaRouterCallback": "androidx/app/MediaRouteActionProvider$MediaRouterCallback",
+      "android/support/v7/media/MediaRouter$Callback": "androidx/media/MediaRouter$Callback",
+      "android/support/v7/app/MediaRouteActionProvider": "androidx/app/MediaRouteActionProvider",
+      "android/support/v7/media/MediaRouter$RouteInfo": "androidx/media/MediaRouter$RouteInfo",
+      "android/support/v7/media/MediaRouter": "androidx/media/MediaRouter",
+      "android/support/v7/media/MediaRouter$ProviderInfo": "androidx/media/MediaRouter$ProviderInfo",
+      "android/support/v7/media/MediaRouteSelector": "androidx/media/MediaRouteSelector",
+      "android/support/v7/app/MediaRouteDialogFactory": "androidx/app/MediaRouteDialogFactory",
+      "android/support/v7/app/MediaRouteButton": "androidx/app/MediaRouteButton",
+      "android/support/v7/app/MediaRouteButton$MediaRouterCallback": "androidx/app/MediaRouteButton$MediaRouterCallback",
+      "android/support/v7/app/MediaRouteButton$RemoteIndicatorLoader": "androidx/app/MediaRouteButton$RemoteIndicatorLoader",
+      "android/support/v7/mediarouter/R$attr": "androidx/mediarouter/R$attr",
+      "android/support/v7/mediarouter/R": "androidx/mediarouter/R",
+      "android/support/v7/mediarouter/R$styleable": "androidx/mediarouter/R$styleable",
+      "android/support/v7/mediarouter/R$string": "androidx/mediarouter/R$string",
+      "android/support/v7/app/MediaRouterThemeHelper": "androidx/app/MediaRouterThemeHelper",
+      "android/support/v7/app/MediaRouteChooserDialogFragment": "androidx/app/MediaRouteChooserDialogFragment",
+      "android/support/v7/app/MediaRouteControllerDialogFragment": "androidx/app/MediaRouteControllerDialogFragment",
+      "android/support/v7/app/MediaRouteChooserDialog$1": "androidx/app/MediaRouteChooserDialog$1",
+      "android/support/v7/app/MediaRouteChooserDialog": "androidx/app/MediaRouteChooserDialog",
+      "android/support/v7/app/MediaRouteChooserDialog$MediaRouterCallback": "androidx/app/MediaRouteChooserDialog$MediaRouterCallback",
+      "android/support/v7/app/MediaRouteChooserDialog$RouteAdapter": "androidx/app/MediaRouteChooserDialog$RouteAdapter",
+      "android/support/v7/media/MediaRouter$RouteGroup": "androidx/media/MediaRouter$RouteGroup",
+      "android/support/v7/mediarouter/R$layout": "androidx/mediarouter/R$layout",
+      "android/support/v7/mediarouter/R$id": "androidx/mediarouter/R$id",
+      "android/support/v7/app/MediaRouteChooserDialog$RouteComparator": "androidx/app/MediaRouteChooserDialog$RouteComparator",
+      "android/support/v7/app/MediaRouteDialogHelper": "androidx/app/MediaRouteDialogHelper",
+      "android/support/v7/app/MediaRouteControllerDialog$1": "androidx/app/MediaRouteControllerDialog$1",
+      "android/support/v7/app/MediaRouteControllerDialog": "androidx/app/MediaRouteControllerDialog",
+      "android/support/v7/app/MediaRouteControllerDialog$10": "androidx/app/MediaRouteControllerDialog$10",
+      "android/support/v7/app/OverlayListView$OverlayObject$OnAnimationEndListener": "androidx/app/OverlayListView$OverlayObject$OnAnimationEndListener",
+      "android/support/v7/app/OverlayListView$OverlayObject": "androidx/app/OverlayListView$OverlayObject",
+      "android/support/v7/app/OverlayListView": "androidx/app/OverlayListView",
+      "android/support/v7/app/MediaRouteControllerDialog$VolumeGroupAdapter": "androidx/app/MediaRouteControllerDialog$VolumeGroupAdapter",
+      "android/support/v7/app/MediaRouteControllerDialog$11": "androidx/app/MediaRouteControllerDialog$11",
+      "android/support/v7/app/MediaRouteControllerDialog$12": "androidx/app/MediaRouteControllerDialog$12",
+      "android/support/v7/app/MediaRouteControllerDialog$2": "androidx/app/MediaRouteControllerDialog$2",
+      "android/support/v7/app/MediaRouteControllerDialog$3": "androidx/app/MediaRouteControllerDialog$3",
+      "android/support/v7/app/MediaRouteControllerDialog$4": "androidx/app/MediaRouteControllerDialog$4",
+      "android/support/v7/app/MediaRouteControllerDialog$5": "androidx/app/MediaRouteControllerDialog$5",
+      "android/support/v7/app/MediaRouteControllerDialog$6": "androidx/app/MediaRouteControllerDialog$6",
+      "android/support/v7/app/MediaRouteControllerDialog$7": "androidx/app/MediaRouteControllerDialog$7",
+      "android/support/v7/app/MediaRouteControllerDialog$8": "androidx/app/MediaRouteControllerDialog$8",
+      "android/support/v7/app/MediaRouteControllerDialog$9": "androidx/app/MediaRouteControllerDialog$9",
+      "android/support/v7/app/MediaRouteControllerDialog$ClickListener": "androidx/app/MediaRouteControllerDialog$ClickListener",
+      "android/support/v7/app/MediaRouteControllerDialog$FetchArtTask": "androidx/app/MediaRouteControllerDialog$FetchArtTask",
+      "android/support/v7/app/MediaRouteControllerDialog$MediaControllerCallback": "androidx/app/MediaRouteControllerDialog$MediaControllerCallback",
+      "android/support/v7/app/MediaRouteControllerDialog$MediaRouterCallback": "androidx/app/MediaRouteControllerDialog$MediaRouterCallback",
+      "android/support/v7/app/MediaRouteControllerDialog$VolumeChangeListener$1": "androidx/app/MediaRouteControllerDialog$VolumeChangeListener$1",
+      "android/support/v7/app/MediaRouteControllerDialog$VolumeChangeListener": "androidx/app/MediaRouteControllerDialog$VolumeChangeListener",
+      "android/support/v7/app/MediaRouteVolumeSlider": "androidx/app/MediaRouteVolumeSlider",
+      "android/support/v7/mediarouter/R$dimen": "androidx/mediarouter/R$dimen",
+      "android/support/v7/mediarouter/R$interpolator": "androidx/mediarouter/R$interpolator",
+      "android/support/v7/mediarouter/R$integer": "androidx/mediarouter/R$integer",
+      "android/support/v7/app/MediaRouteExpandCollapseButton": "androidx/app/MediaRouteExpandCollapseButton",
+      "android/support/v7/app/MediaRouteDiscoveryFragment$1": "androidx/app/MediaRouteDiscoveryFragment$1",
+      "android/support/v7/app/MediaRouteDiscoveryFragment": "androidx/app/MediaRouteDiscoveryFragment",
+      "android/support/v7/app/MediaRouteExpandCollapseButton$1": "androidx/app/MediaRouteExpandCollapseButton$1",
+      "android/support/v7/mediarouter/R$drawable": "androidx/mediarouter/R$drawable",
+      "android/support/v7/app/MediaRouterThemeHelper$ControllerColorType": "androidx/app/MediaRouterThemeHelper$ControllerColorType",
+      "android/support/v7/mediarouter/R$style": "androidx/mediarouter/R$style",
+      "android/support/v7/media/MediaControlIntent": "androidx/media/MediaControlIntent",
+      "android/support/v7/media/MediaItemMetadata": "androidx/media/MediaItemMetadata",
+      "android/support/v7/media/MediaItemStatus$Builder": "androidx/media/MediaItemStatus$Builder",
+      "android/support/v7/media/MediaItemStatus": "androidx/media/MediaItemStatus",
+      "android/support/v7/media/MediaRouteDescriptor$Builder": "androidx/media/MediaRouteDescriptor$Builder",
+      "android/support/v7/media/MediaRouteDescriptor": "androidx/media/MediaRouteDescriptor",
+      "android/support/v7/media/MediaRouteDiscoveryRequest": "androidx/media/MediaRouteDiscoveryRequest",
+      "android/support/v7/media/MediaRouteProvider$Callback": "androidx/media/MediaRouteProvider$Callback",
+      "android/support/v7/media/MediaRouteProvider": "androidx/media/MediaRouteProvider",
+      "android/support/v7/media/MediaRouteProviderDescriptor": "androidx/media/MediaRouteProviderDescriptor",
+      "android/support/v7/media/MediaRouteProvider$ProviderHandler": "androidx/media/MediaRouteProvider$ProviderHandler",
+      "android/support/v7/media/MediaRouteProvider$ProviderMetadata": "androidx/media/MediaRouteProvider$ProviderMetadata",
+      "android/support/v7/media/MediaRouteProvider$RouteController": "androidx/media/MediaRouteProvider$RouteController",
+      "android/support/v7/media/MediaRouter$ControlRequestCallback": "androidx/media/MediaRouter$ControlRequestCallback",
+      "android/support/v7/media/MediaRouteProviderDescriptor$1": "androidx/media/MediaRouteProviderDescriptor$1",
+      "android/support/v7/media/MediaRouteProviderDescriptor$Builder": "androidx/media/MediaRouteProviderDescriptor$Builder",
+      "android/support/v7/media/MediaRouteProviderProtocol": "androidx/media/MediaRouteProviderProtocol",
+      "android/support/v7/media/MediaRouteProviderService$1": "androidx/media/MediaRouteProviderService$1",
+      "android/support/v7/media/MediaRouteProviderService": "androidx/media/MediaRouteProviderService",
+      "android/support/v7/media/MediaRouteProviderService$ClientRecord": "androidx/media/MediaRouteProviderService$ClientRecord",
+      "android/support/v7/media/MediaRouteProviderService$PrivateHandler": "androidx/media/MediaRouteProviderService$PrivateHandler",
+      "android/support/v7/media/MediaRouteProviderService$ProviderCallback": "androidx/media/MediaRouteProviderService$ProviderCallback",
+      "android/support/v7/media/MediaRouteProviderService$ReceiveHandler": "androidx/media/MediaRouteProviderService$ReceiveHandler",
+      "android/support/v7/media/MediaRouteSelector$Builder": "androidx/media/MediaRouteSelector$Builder",
+      "android/support/v7/media/MediaRouter$1": "androidx/media/MediaRouter$1",
+      "android/support/v7/media/MediaRouter$CallbackFlags": "androidx/media/MediaRouter$CallbackFlags",
+      "android/support/v7/media/MediaRouter$CallbackRecord": "androidx/media/MediaRouter$CallbackRecord",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$1": "androidx/media/MediaRouter$GlobalMediaRouter$1",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter": "androidx/media/MediaRouter$GlobalMediaRouter",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$CallbackHandler": "androidx/media/MediaRouter$GlobalMediaRouter$CallbackHandler",
+      "android/support/v7/media/SystemMediaRouteProvider": "androidx/media/SystemMediaRouteProvider",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord$1$1": "androidx/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord$1$1",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord$1": "androidx/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord$1",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord": "androidx/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord$1$2": "androidx/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord$1$2",
+      "android/support/v7/media/RemoteControlClientCompat$PlaybackInfo": "androidx/media/RemoteControlClientCompat$PlaybackInfo",
+      "android/support/v7/media/RemoteControlClientCompat": "androidx/media/RemoteControlClientCompat",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$ProviderCallback": "androidx/media/MediaRouter$GlobalMediaRouter$ProviderCallback",
+      "android/support/v7/media/MediaRouter$GlobalMediaRouter$RemoteControlClientRecord": "androidx/media/MediaRouter$GlobalMediaRouter$RemoteControlClientRecord",
+      "android/support/v7/media/RemoteControlClientCompat$VolumeCallback": "androidx/media/RemoteControlClientCompat$VolumeCallback",
+      "android/support/v7/media/SystemMediaRouteProvider$SyncCallback": "androidx/media/SystemMediaRouteProvider$SyncCallback",
+      "android/support/v7/media/RegisteredMediaRouteProviderWatcher$Callback": "androidx/media/RegisteredMediaRouteProviderWatcher$Callback",
+      "android/support/v7/media/RegisteredMediaRouteProviderWatcher": "androidx/media/RegisteredMediaRouteProviderWatcher",
+      "android/support/v7/media/MediaRouter$RouteInfo$ConnectionState": "androidx/media/MediaRouter$RouteInfo$ConnectionState",
+      "android/support/v7/media/MediaRouter$RouteInfo$DeviceType": "androidx/media/MediaRouter$RouteInfo$DeviceType",
+      "android/support/v7/media/MediaRouter$RouteInfo$PlaybackType": "androidx/media/MediaRouter$RouteInfo$PlaybackType",
+      "android/support/v7/media/MediaRouter$RouteInfo$PlaybackVolume": "androidx/media/MediaRouter$RouteInfo$PlaybackVolume",
+      "android/support/v7/media/MediaRouterApi24$RouteInfo": "androidx/media/MediaRouterApi24$RouteInfo",
+      "android/support/v7/media/MediaRouterApi24": "androidx/media/MediaRouterApi24",
+      "android/support/v7/media/MediaRouterJellybean$Callback": "androidx/media/MediaRouterJellybean$Callback",
+      "android/support/v7/media/MediaRouterJellybean": "androidx/media/MediaRouterJellybean",
+      "android/support/v7/media/MediaRouterJellybean$CallbackProxy": "androidx/media/MediaRouterJellybean$CallbackProxy",
+      "android/support/v7/media/MediaRouterJellybean$GetDefaultRouteWorkaround": "androidx/media/MediaRouterJellybean$GetDefaultRouteWorkaround",
+      "android/support/v7/media/MediaRouterJellybean$RouteCategory": "androidx/media/MediaRouterJellybean$RouteCategory",
+      "android/support/v7/media/MediaRouterJellybean$RouteGroup": "androidx/media/MediaRouterJellybean$RouteGroup",
+      "android/support/v7/media/MediaRouterJellybean$RouteInfo": "androidx/media/MediaRouterJellybean$RouteInfo",
+      "android/support/v7/media/MediaRouterJellybean$SelectRouteWorkaround": "androidx/media/MediaRouterJellybean$SelectRouteWorkaround",
+      "android/support/v7/media/MediaRouterJellybean$UserRouteInfo": "androidx/media/MediaRouterJellybean$UserRouteInfo",
+      "android/support/v7/media/MediaRouterJellybean$VolumeCallback": "androidx/media/MediaRouterJellybean$VolumeCallback",
+      "android/support/v7/media/MediaRouterJellybean$VolumeCallbackProxy": "androidx/media/MediaRouterJellybean$VolumeCallbackProxy",
+      "android/support/v7/media/MediaRouterJellybeanMr1$ActiveScanWorkaround": "androidx/media/MediaRouterJellybeanMr1$ActiveScanWorkaround",
+      "android/support/v7/media/MediaRouterJellybeanMr1": "androidx/media/MediaRouterJellybeanMr1",
+      "android/support/v7/media/MediaRouterJellybeanMr1$Callback": "androidx/media/MediaRouterJellybeanMr1$Callback",
+      "android/support/v7/media/MediaRouterJellybeanMr1$CallbackProxy": "androidx/media/MediaRouterJellybeanMr1$CallbackProxy",
+      "android/support/v7/media/MediaRouterJellybeanMr1$IsConnectingWorkaround": "androidx/media/MediaRouterJellybeanMr1$IsConnectingWorkaround",
+      "android/support/v7/media/MediaRouterJellybeanMr1$RouteInfo": "androidx/media/MediaRouterJellybeanMr1$RouteInfo",
+      "android/support/v7/media/MediaRouterJellybeanMr2$RouteInfo": "androidx/media/MediaRouterJellybeanMr2$RouteInfo",
+      "android/support/v7/media/MediaRouterJellybeanMr2": "androidx/media/MediaRouterJellybeanMr2",
+      "android/support/v7/media/MediaRouterJellybeanMr2$UserRouteInfo": "androidx/media/MediaRouterJellybeanMr2$UserRouteInfo",
+      "android/support/v7/media/MediaSessionStatus$Builder": "androidx/media/MediaSessionStatus$Builder",
+      "android/support/v7/media/MediaSessionStatus": "androidx/media/MediaSessionStatus",
+      "android/support/v7/media/RegisteredMediaRouteProvider$Connection$1": "androidx/media/RegisteredMediaRouteProvider$Connection$1",
+      "android/support/v7/media/RegisteredMediaRouteProvider$Connection": "androidx/media/RegisteredMediaRouteProvider$Connection",
+      "android/support/v7/media/RegisteredMediaRouteProvider": "androidx/media/RegisteredMediaRouteProvider",
+      "android/support/v7/media/RegisteredMediaRouteProvider$Connection$2": "androidx/media/RegisteredMediaRouteProvider$Connection$2",
+      "android/support/v7/media/RegisteredMediaRouteProvider$ReceiveHandler": "androidx/media/RegisteredMediaRouteProvider$ReceiveHandler",
+      "android/support/v7/media/RegisteredMediaRouteProvider$PrivateHandler": "androidx/media/RegisteredMediaRouteProvider$PrivateHandler",
+      "android/support/v7/media/RegisteredMediaRouteProvider$Controller": "androidx/media/RegisteredMediaRouteProvider$Controller",
+      "android/support/v7/media/RegisteredMediaRouteProviderWatcher$1": "androidx/media/RegisteredMediaRouteProviderWatcher$1",
+      "android/support/v7/media/RegisteredMediaRouteProviderWatcher$2": "androidx/media/RegisteredMediaRouteProviderWatcher$2",
+      "android/support/v7/media/RemoteControlClientCompat$JellybeanImpl$VolumeCallbackWrapper": "androidx/media/RemoteControlClientCompat$JellybeanImpl$VolumeCallbackWrapper",
+      "android/support/v7/media/RemoteControlClientCompat$JellybeanImpl": "androidx/media/RemoteControlClientCompat$JellybeanImpl",
+      "android/support/v7/media/RemoteControlClientCompat$LegacyImpl": "androidx/media/RemoteControlClientCompat$LegacyImpl",
+      "android/support/v7/media/RemotePlaybackClient$1": "androidx/media/RemotePlaybackClient$1",
+      "android/support/v7/media/RemotePlaybackClient": "androidx/media/RemotePlaybackClient",
+      "android/support/v7/media/RemotePlaybackClient$ItemActionCallback": "androidx/media/RemotePlaybackClient$ItemActionCallback",
+      "android/support/v7/media/RemotePlaybackClient$ActionCallback": "androidx/media/RemotePlaybackClient$ActionCallback",
+      "android/support/v7/media/RemotePlaybackClient$2": "androidx/media/RemotePlaybackClient$2",
+      "android/support/v7/media/RemotePlaybackClient$SessionActionCallback": "androidx/media/RemotePlaybackClient$SessionActionCallback",
+      "android/support/v7/media/RemotePlaybackClient$ActionReceiver": "androidx/media/RemotePlaybackClient$ActionReceiver",
+      "android/support/v7/media/RemotePlaybackClient$StatusCallback": "androidx/media/RemotePlaybackClient$StatusCallback",
+      "android/support/v7/media/RemotePlaybackClient$OnMessageReceivedListener": "androidx/media/RemotePlaybackClient$OnMessageReceivedListener",
+      "android/support/v7/media/SystemMediaRouteProvider$Api24Impl": "androidx/media/SystemMediaRouteProvider$Api24Impl",
+      "android/support/v7/media/SystemMediaRouteProvider$JellybeanMr2Impl": "androidx/media/SystemMediaRouteProvider$JellybeanMr2Impl",
+      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl": "androidx/media/SystemMediaRouteProvider$JellybeanImpl",
+      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteRecord": "androidx/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteRecord",
+      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteController": "androidx/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteController",
+      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl$UserRouteRecord": "androidx/media/SystemMediaRouteProvider$JellybeanImpl$UserRouteRecord",
+      "android/support/v7/media/SystemMediaRouteProvider$JellybeanMr1Impl": "androidx/media/SystemMediaRouteProvider$JellybeanMr1Impl",
+      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl$DefaultRouteController": "androidx/media/SystemMediaRouteProvider$LegacyImpl$DefaultRouteController",
+      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl": "androidx/media/SystemMediaRouteProvider$LegacyImpl",
+      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl$VolumeChangeReceiver": "androidx/media/SystemMediaRouteProvider$LegacyImpl$VolumeChangeReceiver",
+      "android/support/transition/AnimatorUtils": "androidx/transition/AnimatorUtils",
+      "android/support/transition/AnimatorUtilsImpl": "androidx/transition/AnimatorUtilsImpl",
+      "android/support/transition/AnimatorUtilsApi19": "androidx/transition/AnimatorUtilsApi19",
+      "android/support/transition/AnimatorUtilsApi14": "androidx/transition/AnimatorUtilsApi14",
+      "android/support/transition/AnimatorUtilsApi14$AnimatorPauseListenerCompat": "androidx/transition/AnimatorUtilsApi14$AnimatorPauseListenerCompat",
+      "android/support/transition/ArcMotion": "androidx/transition/ArcMotion",
+      "android/support/transition/PathMotion": "androidx/transition/PathMotion",
+      "android/support/transition/Styleable$ArcMotion": "androidx/transition/Styleable$ArcMotion",
+      "android/support/transition/Styleable": "androidx/transition/Styleable",
+      "android/support/transition/AutoTransition": "androidx/transition/AutoTransition",
+      "android/support/transition/TransitionSet": "androidx/transition/TransitionSet",
+      "android/support/transition/Fade": "androidx/transition/Fade",
+      "android/support/transition/Transition": "androidx/transition/Transition",
+      "android/support/transition/ChangeBounds": "androidx/transition/ChangeBounds",
+      "android/support/transition/ChangeBounds$1": "androidx/transition/ChangeBounds$1",
+      "android/support/transition/ChangeBounds$10": "androidx/transition/ChangeBounds$10",
+      "android/support/transition/TransitionValues": "androidx/transition/TransitionValues",
+      "android/support/transition/ViewUtils": "androidx/transition/ViewUtils",
+      "android/support/transition/ViewOverlayImpl": "androidx/transition/ViewOverlayImpl",
+      "android/support/transition/ChangeBounds$2": "androidx/transition/ChangeBounds$2",
+      "android/support/transition/ChangeBounds$ViewBounds": "androidx/transition/ChangeBounds$ViewBounds",
+      "android/support/transition/ChangeBounds$3": "androidx/transition/ChangeBounds$3",
+      "android/support/transition/ChangeBounds$4": "androidx/transition/ChangeBounds$4",
+      "android/support/transition/ChangeBounds$5": "androidx/transition/ChangeBounds$5",
+      "android/support/transition/ChangeBounds$6": "androidx/transition/ChangeBounds$6",
+      "android/support/transition/ChangeBounds$7": "androidx/transition/ChangeBounds$7",
+      "android/support/transition/ChangeBounds$8": "androidx/transition/ChangeBounds$8",
+      "android/support/transition/ChangeBounds$9": "androidx/transition/ChangeBounds$9",
+      "android/support/transition/TransitionListenerAdapter": "androidx/transition/TransitionListenerAdapter",
+      "android/support/transition/Transition$TransitionListener": "androidx/transition/Transition$TransitionListener",
+      "android/support/transition/ViewGroupUtils": "androidx/transition/ViewGroupUtils",
+      "android/support/transition/Styleable$ChangeBounds": "androidx/transition/Styleable$ChangeBounds",
+      "android/support/transition/RectEvaluator": "androidx/transition/RectEvaluator",
+      "android/support/transition/ObjectAnimatorUtils": "androidx/transition/ObjectAnimatorUtils",
+      "android/support/transition/TransitionUtils": "androidx/transition/TransitionUtils",
+      "android/support/transition/PropertyValuesHolderUtils": "androidx/transition/PropertyValuesHolderUtils",
+      "android/support/transition/ChangeClipBounds$1": "androidx/transition/ChangeClipBounds$1",
+      "android/support/transition/ChangeClipBounds": "androidx/transition/ChangeClipBounds",
+      "android/support/transition/ChangeImageTransform$1": "androidx/transition/ChangeImageTransform$1",
+      "android/support/transition/ChangeImageTransform": "androidx/transition/ChangeImageTransform",
+      "android/support/transition/ChangeImageTransform$2": "androidx/transition/ChangeImageTransform$2",
+      "android/support/transition/ImageViewUtils": "androidx/transition/ImageViewUtils",
+      "android/support/transition/ChangeImageTransform$3": "androidx/transition/ChangeImageTransform$3",
+      "android/support/transition/TransitionUtils$MatrixEvaluator": "androidx/transition/TransitionUtils$MatrixEvaluator",
+      "android/support/transition/MatrixUtils": "androidx/transition/MatrixUtils",
+      "android/support/transition/ChangeScroll": "androidx/transition/ChangeScroll",
+      "android/support/transition/ChangeTransform$1": "androidx/transition/ChangeTransform$1",
+      "android/support/transition/ChangeTransform$PathAnimatorMatrix": "androidx/transition/ChangeTransform$PathAnimatorMatrix",
+      "android/support/transition/ChangeTransform": "androidx/transition/ChangeTransform",
+      "android/support/transition/ChangeTransform$2": "androidx/transition/ChangeTransform$2",
+      "android/support/transition/ChangeTransform$3": "androidx/transition/ChangeTransform$3",
+      "android/support/transition/ChangeTransform$Transforms": "androidx/transition/ChangeTransform$Transforms",
+      "android/support/transition/R$id": "androidx/transition/R$id",
+      "android/support/transition/R": "androidx/transition/R",
+      "android/support/transition/ChangeTransform$GhostListener": "androidx/transition/ChangeTransform$GhostListener",
+      "android/support/transition/GhostViewImpl": "androidx/transition/GhostViewImpl",
+      "android/support/transition/GhostViewUtils": "androidx/transition/GhostViewUtils",
+      "android/support/transition/Styleable$ChangeTransform": "androidx/transition/Styleable$ChangeTransform",
+      "android/support/transition/FloatArrayEvaluator": "androidx/transition/FloatArrayEvaluator",
+      "android/support/transition/CircularPropagation": "androidx/transition/CircularPropagation",
+      "android/support/transition/VisibilityPropagation": "androidx/transition/VisibilityPropagation",
+      "android/support/transition/Explode": "androidx/transition/Explode",
+      "android/support/transition/Visibility": "androidx/transition/Visibility",
+      "android/support/transition/TransitionPropagation": "androidx/transition/TransitionPropagation",
+      "android/support/transition/TranslationAnimationCreator": "androidx/transition/TranslationAnimationCreator",
+      "android/support/transition/Fade$1": "androidx/transition/Fade$1",
+      "android/support/transition/Fade$FadeAnimatorListener": "androidx/transition/Fade$FadeAnimatorListener",
+      "android/support/transition/Styleable$Fade": "androidx/transition/Styleable$Fade",
+      "android/support/transition/FragmentTransitionSupport$1": "androidx/transition/FragmentTransitionSupport$1",
+      "android/support/transition/Transition$EpicenterCallback": "androidx/transition/Transition$EpicenterCallback",
+      "android/support/transition/FragmentTransitionSupport": "androidx/transition/FragmentTransitionSupport",
+      "android/support/transition/FragmentTransitionSupport$2": "androidx/transition/FragmentTransitionSupport$2",
+      "android/support/transition/FragmentTransitionSupport$3": "androidx/transition/FragmentTransitionSupport$3",
+      "android/support/transition/FragmentTransitionSupport$4": "androidx/transition/FragmentTransitionSupport$4",
+      "android/support/transition/TransitionManager": "androidx/transition/TransitionManager",
+      "android/support/transition/GhostViewApi14$1": "androidx/transition/GhostViewApi14$1",
+      "android/support/transition/GhostViewApi14": "androidx/transition/GhostViewApi14",
+      "android/support/transition/GhostViewApi14$Creator": "androidx/transition/GhostViewApi14$Creator",
+      "android/support/transition/GhostViewImpl$Creator": "androidx/transition/GhostViewImpl$Creator",
+      "android/support/transition/GhostViewApi21$1": "androidx/transition/GhostViewApi21$1",
+      "android/support/transition/GhostViewApi21": "androidx/transition/GhostViewApi21",
+      "android/support/transition/GhostViewApi21$Creator": "androidx/transition/GhostViewApi21$Creator",
+      "android/support/transition/ImageViewUtilsImpl": "androidx/transition/ImageViewUtilsImpl",
+      "android/support/transition/ImageViewUtilsApi21": "androidx/transition/ImageViewUtilsApi21",
+      "android/support/transition/ImageViewUtilsApi14": "androidx/transition/ImageViewUtilsApi14",
+      "android/support/transition/ImageViewUtilsApi14$1": "androidx/transition/ImageViewUtilsApi14$1",
+      "android/support/transition/MatrixUtils$1": "androidx/transition/MatrixUtils$1",
+      "android/support/transition/ObjectAnimatorUtilsImpl": "androidx/transition/ObjectAnimatorUtilsImpl",
+      "android/support/transition/ObjectAnimatorUtilsApi21": "androidx/transition/ObjectAnimatorUtilsApi21",
+      "android/support/transition/ObjectAnimatorUtilsApi14": "androidx/transition/ObjectAnimatorUtilsApi14",
+      "android/support/transition/PathProperty": "androidx/transition/PathProperty",
+      "android/support/transition/PatternPathMotion": "androidx/transition/PatternPathMotion",
+      "android/support/transition/Styleable$PatternPathMotion": "androidx/transition/Styleable$PatternPathMotion",
+      "android/support/transition/PropertyValuesHolderUtilsImpl": "androidx/transition/PropertyValuesHolderUtilsImpl",
+      "android/support/transition/PropertyValuesHolderUtilsApi21": "androidx/transition/PropertyValuesHolderUtilsApi21",
+      "android/support/transition/PropertyValuesHolderUtilsApi14": "androidx/transition/PropertyValuesHolderUtilsApi14",
+      "android/support/transition/Scene": "androidx/transition/Scene",
+      "android/support/transition/SidePropagation": "androidx/transition/SidePropagation",
+      "android/support/transition/Slide$1": "androidx/transition/Slide$1",
+      "android/support/transition/Slide$CalculateSlideHorizontal": "androidx/transition/Slide$CalculateSlideHorizontal",
+      "android/support/transition/Slide": "androidx/transition/Slide",
+      "android/support/transition/Slide$2": "androidx/transition/Slide$2",
+      "android/support/transition/Slide$3": "androidx/transition/Slide$3",
+      "android/support/transition/Slide$CalculateSlideVertical": "androidx/transition/Slide$CalculateSlideVertical",
+      "android/support/transition/Slide$4": "androidx/transition/Slide$4",
+      "android/support/transition/Slide$5": "androidx/transition/Slide$5",
+      "android/support/transition/Slide$6": "androidx/transition/Slide$6",
+      "android/support/transition/Slide$CalculateSlide": "androidx/transition/Slide$CalculateSlide",
+      "android/support/transition/Slide$GravityFlag": "androidx/transition/Slide$GravityFlag",
+      "android/support/transition/Styleable$Slide": "androidx/transition/Styleable$Slide",
+      "android/support/transition/Styleable$Transition": "androidx/transition/Styleable$Transition",
+      "android/support/transition/Styleable$TransitionManager": "androidx/transition/Styleable$TransitionManager",
+      "android/support/transition/Styleable$TransitionSet": "androidx/transition/Styleable$TransitionSet",
+      "android/support/transition/Styleable$TransitionTarget": "androidx/transition/Styleable$TransitionTarget",
+      "android/support/transition/Styleable$VisibilityTransition": "androidx/transition/Styleable$VisibilityTransition",
+      "android/support/transition/Transition$1": "androidx/transition/Transition$1",
+      "android/support/transition/Transition$2": "androidx/transition/Transition$2",
+      "android/support/transition/Transition$3": "androidx/transition/Transition$3",
+      "android/support/transition/Transition$AnimationInfo": "androidx/transition/Transition$AnimationInfo",
+      "android/support/transition/WindowIdImpl": "androidx/transition/WindowIdImpl",
+      "android/support/transition/Transition$ArrayListManager": "androidx/transition/Transition$ArrayListManager",
+      "android/support/transition/Transition$MatchOrder": "androidx/transition/Transition$MatchOrder",
+      "android/support/transition/TransitionValuesMaps": "androidx/transition/TransitionValuesMaps",
+      "android/support/transition/TransitionInflater": "androidx/transition/TransitionInflater",
+      "android/support/transition/TransitionManager$MultiListener$1": "androidx/transition/TransitionManager$MultiListener$1",
+      "android/support/transition/TransitionManager$MultiListener": "androidx/transition/TransitionManager$MultiListener",
+      "android/support/transition/TransitionSet$1": "androidx/transition/TransitionSet$1",
+      "android/support/transition/TransitionSet$TransitionSetListener": "androidx/transition/TransitionSet$TransitionSetListener",
+      "android/support/transition/TranslationAnimationCreator$1": "androidx/transition/TranslationAnimationCreator$1",
+      "android/support/transition/TranslationAnimationCreator$TransitionPositionListener": "androidx/transition/TranslationAnimationCreator$TransitionPositionListener",
+      "android/support/transition/ViewGroupOverlayApi14": "androidx/transition/ViewGroupOverlayApi14",
+      "android/support/transition/ViewOverlayApi14": "androidx/transition/ViewOverlayApi14",
+      "android/support/transition/ViewGroupOverlayImpl": "androidx/transition/ViewGroupOverlayImpl",
+      "android/support/transition/ViewOverlayApi14$OverlayViewGroup": "androidx/transition/ViewOverlayApi14$OverlayViewGroup",
+      "android/support/transition/ViewGroupOverlayApi18": "androidx/transition/ViewGroupOverlayApi18",
+      "android/support/transition/ViewGroupUtilsImpl": "androidx/transition/ViewGroupUtilsImpl",
+      "android/support/transition/ViewGroupUtilsApi18": "androidx/transition/ViewGroupUtilsApi18",
+      "android/support/transition/ViewGroupUtilsApi14": "androidx/transition/ViewGroupUtilsApi14",
+      "android/support/transition/ViewGroupUtilsApi14$1": "androidx/transition/ViewGroupUtilsApi14$1",
+      "android/support/transition/ViewOverlayApi14$OverlayViewGroup$TouchInterceptor": "androidx/transition/ViewOverlayApi14$OverlayViewGroup$TouchInterceptor",
+      "android/support/transition/ViewOverlayApi18": "androidx/transition/ViewOverlayApi18",
+      "android/support/transition/ViewUtils$1": "androidx/transition/ViewUtils$1",
+      "android/support/transition/ViewUtils$2": "androidx/transition/ViewUtils$2",
+      "android/support/transition/ViewUtilsImpl": "androidx/transition/ViewUtilsImpl",
+      "android/support/transition/ViewUtilsApi22": "androidx/transition/ViewUtilsApi22",
+      "android/support/transition/ViewUtilsApi21": "androidx/transition/ViewUtilsApi21",
       "android/support/transition/ViewUtilsApi19": "androidx/transition/ViewUtilsApi19",
       "android/support/transition/ViewUtilsApi18": "androidx/transition/ViewUtilsApi18",
-      "android/support/v7/widget/AppCompatDrawableManager$InflateDelegate": "androidx/widget/AppCompatDrawableManager$InflateDelegate",
-      "android/support/v13/view/DragAndDropPermissionsCompat": "androidx/view/DragAndDropPermissionsCompat",
-      "android/support/v4/content/res/FontResourcesParserCompat$FontFamilyFilesResourceEntry": "androidx/content/res/FontResourcesParserCompat$FontFamilyFilesResourceEntry",
       "android/support/transition/ViewUtilsApi14": "androidx/transition/ViewUtilsApi14",
-      "android/support/v7/view/menu/MenuItemWrapperICS": "androidx/view/menu/MenuItemWrapperICS",
-      "android/support/design/widget/CollapsingToolbarLayout": "androidx/design/widget/CollapsingToolbarLayout",
-      "android/support/v4/util/ArrayMap": "androidx/util/ArrayMap",
-      "android/support/v17/leanback/widget/ParallaxTarget$PropertyValuesHolderTarget": "androidx/leanback/widget/ParallaxTarget$PropertyValuesHolderTarget",
-      "android/support/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter": "androidx/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter",
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserServiceCallbackImpl": "androidx/media/MediaBrowserCompat$MediaBrowserServiceCallbackImpl",
-      "android/support/wear/widget/SimpleAnimatorListener": "androidx/wear/widget/SimpleAnimatorListener",
-      "android/support/v17/leanback/widget/FacetProviderAdapter": "androidx/leanback/widget/FacetProviderAdapter",
-      "android/support/v4/widget/SlidingPaneLayout$SlidingPanelLayoutImplJBMR1": "androidx/widget/SlidingPaneLayout$SlidingPanelLayoutImplJBMR1",
-      "android/support/v7/widget/SearchView": "androidx/widget/SearchView",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$MediaSessionStub": "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$MediaSessionStub",
-      "android/support/v7/widget/TooltipCompat$ViewCompatImpl": "androidx/widget/TooltipCompat$ViewCompatImpl",
-      "android/support/v13/view/DragAndDropPermissionsCompat$DragAndDropPermissionsCompatImpl": "androidx/view/DragAndDropPermissionsCompat$DragAndDropPermissionsCompatImpl",
-      "android/support/customtabs/IPostMessageService$Stub$Proxy": "androidx/browser/customtabs/IPostMessageService$Stub$Proxy",
-      "android/support/v17/leanback/widget/ItemAlignment$Axis": "androidx/leanback/widget/ItemAlignment$Axis",
-      "android/support/v7/widget/RecyclerView$ViewHolder": "androidx/widget/RecyclerView$ViewHolder",
-      "android/support/v7/widget/GapWorker": "androidx/widget/GapWorker",
-      "android/support/v7/media/MediaItemStatus": "androidx/media/MediaItemStatus",
-      "android/support/transition/Explode": "androidx/transition/Explode",
-      "android/support/v17/leanback/widget/GuidedActionAdapter$ActionEditListener": "androidx/leanback/widget/GuidedActionAdapter$ActionEditListener",
-      "android/support/v4/text/BidiFormatter": "androidx/text/BidiFormatter",
-      "android/support/v7/widget/CardViewApi17Impl": "androidx/widget/CardViewApi17Impl",
-      "android/support/v7/media/MediaRouter$RouteInfo$PlaybackType": "androidx/media/MediaRouter$RouteInfo$PlaybackType",
-      "android/support/v4/view/ViewGroupCompat$ViewGroupCompatBaseImpl": "androidx/view/ViewGroupCompat$ViewGroupCompatBaseImpl",
-      "android/support/v4/view/ViewParentCompat$ViewParentCompatApi21Impl": "androidx/view/ViewParentCompat$ViewParentCompatApi21Impl",
-      "android/support/v7/widget/StaggeredGridLayoutManager": "androidx/widget/StaggeredGridLayoutManager",
-      "android/support/v4/widget/FocusStrategy": "androidx/widget/FocusStrategy",
-      "android/support/customtabs/ICustomTabsCallback$Stub$Proxy": "androidx/browser/customtabs/ICustomTabsCallback$Stub$Proxy",
-      "android/support/v7/media/MediaRouteProvider": "androidx/media/MediaRouteProvider",
-      "android/support/v4/net/DatagramSocketWrapper": "androidx/net/DatagramSocketWrapper",
-      "android/support/design/widget/SnackbarManager": "androidx/design/widget/SnackbarManager",
-      "android/support/v17/leanback/media/MediaControllerGlue": "androidx/leanback/media/MediaControllerGlue",
-      "android/support/v7/widget/PopupMenu$OnMenuItemClickListener": "androidx/widget/PopupMenu$OnMenuItemClickListener",
-      "android/support/v7/widget/helper/ItemTouchUIUtilImpl$Api21Impl": "androidx/widget/helper/ItemTouchUIUtilImpl$Api21Impl",
-      "android/support/text/emoji/widget/EmojiTextViewHelper": "androidx/text/emoji/widget/EmojiTextViewHelper",
-      "android/support/v4/media/session/MediaSessionCompat$Callback": "androidx/media/session/MediaSessionCompat$Callback",
-      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuTextItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuTextItem",
-      "android/support/v13/app/FragmentCompat$OnRequestPermissionsResultCallback": "androidx/app/FragmentCompat$OnRequestPermissionsResultCallback",
-      "android/support/design/widget/AppBarLayout$Behavior$DragCallback": "androidx/design/widget/AppBarLayout$Behavior$DragCallback",
-      "android/support/text/emoji/widget/EmojiEditTextHelper": "androidx/text/emoji/widget/EmojiEditTextHelper",
-      "android/support/v7/widget/AppCompatTextHelperV17": "androidx/widget/AppCompatTextHelperV17",
-      "android/support/v4/widget/SimpleCursorAdapter": "androidx/widget/SimpleCursorAdapter",
-      "android/support/mediacompat/R$integer": "androidx/mediacompat/R$integer",
-      "android/support/v17/leanback/widget/Grid$Provider": "androidx/leanback/widget/Grid$Provider",
-      "android/support/v13/view/ViewCompat": "androidx/view/ViewCompat",
-      "android/support/v14/preference/MultiSelectListPreference$SavedState": "androidx/preference/MultiSelectListPreference$SavedState",
-      "android/support/v4/view/NestedScrollingChild": "androidx/view/NestedScrollingChild",
-      "android/support/v4/app/FragmentTransition": "androidx/app/FragmentTransition",
-      "android/support/v4/app/NotificationCompat$Action$WearableExtender": "androidx/app/NotificationCompat$Action$WearableExtender",
-      "android/support/v17/preference/LeanbackPreferenceDialogFragment": "androidx/leanback/preference/LeanbackPreferenceDialogFragment",
-      "android/support/annotation/WorkerThread": "androidx/annotation/WorkerThread",
-      "android/support/v7/app/MediaRouteDialogFactory": "androidx/app/MediaRouteDialogFactory",
-      "android/support/v7/view/ActionMode": "androidx/view/ActionMode",
-      "android/support/v4/provider/FontsContractCompat$FontRequestCallback$FontRequestFailReason": "androidx/provider/FontsContractCompat$FontRequestCallback$FontRequestFailReason",
-      "android/support/v17/leanback/R$drawable": "androidx/leanback/R$drawable",
-      "android/support/annotation/StringRes": "androidx/annotation/StringRes",
-      "android/support/v4/app/RemoteInputCompatBase$RemoteInput": "androidx/app/RemoteInputCompatBase$RemoteInput",
-      "android/support/v13/app/FragmentTabHost$TabInfo": "androidx/app/legacy/FragmentTabHost$TabInfo",
-      "android/support/v7/app/ActionBarDrawerToggle$ToolbarCompatDelegate": "androidx/app/ActionBarDrawerToggle$ToolbarCompatDelegate",
-      "android/support/v7/widget/PopupMenu$OnDismissListener": "androidx/widget/PopupMenu$OnDismissListener",
-      "android/support/transition/AnimatorUtilsApi14$AnimatorPauseListenerCompat": "androidx/transition/AnimatorUtilsApi14$AnimatorPauseListenerCompat",
-      "android/support/v4/app/JobIntentService$CommandProcessor": "androidx/app/JobIntentService$CommandProcessor",
-      "android/support/v17/leanback/widget/VerticalGridView": "androidx/leanback/widget/VerticalGridView",
-      "android/support/v4/app/FragmentManager": "androidx/app/FragmentManager",
-      "android/support/v4/app/BackStackState": "androidx/app/BackStackState",
-      "android/support/text/emoji/R": "androidx/text/emoji/R",
-      "android/support/v4/media/session/MediaSessionCompatApi21$Callback": "androidx/media/session/MediaSessionCompatApi21$Callback",
-      "android/support/transition/ChangeScroll": "androidx/transition/ChangeScroll",
-      "android/support/v4/view/ViewCompat$LayoutDirectionMode": "androidx/view/legacy/ViewCompat$LayoutDirectionMode",
-      "android/support/v7/widget/AdapterHelper$Callback": "androidx/widget/AdapterHelper$Callback",
-      "android/support/wear/R$layout": "androidx/wear/R$layout",
-      "android/support/v17/leanback/widget/GuidedActionAdapter$ClickListener": "androidx/leanback/widget/GuidedActionAdapter$ClickListener",
-      "android/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraCallback": "androidx/media/session/MediaControllerCompat$MediaControllerImplApi21$ExtraCallback",
-      "android/support/customtabs/ICustomTabsService$Stub": "androidx/browser/customtabs/ICustomTabsService$Stub",
-      "android/support/v17/leanback/widget/ListRowView": "androidx/leanback/widget/ListRowView",
-      "android/support/v7/widget/ActivityChooserView": "androidx/widget/ActivityChooserView",
-      "android/support/v4/os/TraceCompat": "androidx/os/TraceCompat",
-      "android/support/transition/ImageViewUtils": "androidx/transition/ImageViewUtils",
-      "android/support/v4/app/FragmentManager$OnBackStackChangedListener": "androidx/app/FragmentManager$OnBackStackChangedListener",
-      "android/support/v7/app/AppCompatDelegateImplV23$AppCompatWindowCallbackV23": "androidx/app/AppCompatDelegateImplV23$AppCompatWindowCallbackV23",
-      "android/support/transition/GhostViewApi14": "androidx/transition/GhostViewApi14",
-      "android/support/design/widget/SwipeDismissBehavior$SwipeDirection": "androidx/design/widget/SwipeDismissBehavior$SwipeDirection",
-      "android/support/v17/leanback/widget/SearchOrbView": "androidx/leanback/widget/SearchOrbView",
-      "android/support/v4/app/NotificationManagerCompat$NotifyTask": "androidx/app/NotificationManagerCompat$NotifyTask",
-      "android/support/v4/util/LruCache": "androidx/util/LruCache",
-      "android/support/v7/widget/ActionMenuView$LayoutParams": "androidx/widget/ActionMenuView$LayoutParams",
-      "android/support/v7/widget/helper/ItemTouchHelper$ViewDropHandler": "androidx/widget/helper/ItemTouchHelper$ViewDropHandler",
-      "android/support/v7/content/res/AppCompatColorStateListInflater": "androidx/content/res/AppCompatColorStateListInflater",
-      "android/support/v7/widget/ActionMenuPresenter$OpenOverflowRunnable": "androidx/widget/ActionMenuPresenter$OpenOverflowRunnable",
-      "android/support/v7/media/MediaRouter$GlobalMediaRouter$CallbackHandler": "androidx/media/MediaRouter$GlobalMediaRouter$CallbackHandler",
-      "android/support/design/widget/AppBarLayout$Behavior": "androidx/design/widget/AppBarLayout$Behavior",
-      "android/support/v4/widget/ExploreByTouchHelper": "androidx/widget/ExploreByTouchHelper",
-      "android/support/transition/PropertyValuesHolderUtilsImpl": "androidx/transition/PropertyValuesHolderUtilsImpl",
-      "android/support/v14/preference/PreferenceDialogFragment": "androidx/preference/PreferenceDialogFragment",
-      "android/support/transition/GhostViewApi21": "androidx/transition/GhostViewApi21",
-      "android/support/text/emoji/MetadataListReader$InputStreamOpenTypeReader": "androidx/text/emoji/MetadataListReader$InputStreamOpenTypeReader",
-      "android/support/transition/RectEvaluator": "androidx/transition/RectEvaluator",
-      "android/support/v4/view/VelocityTrackerCompat": "androidx/view/VelocityTrackerCompat",
-      "android/support/v7/widget/AppCompatAutoCompleteTextView": "androidx/widget/AppCompatAutoCompleteTextView",
-      "android/support/v7/media/MediaRouterJellybean$VolumeCallback": "androidx/media/MediaRouterJellybean$VolumeCallback",
-      "android/support/media/tv/WatchNextProgram": "androidx/media/tv/WatchNextProgram",
-      "android/support/wear/internal/widget/drawer/MultiPageUi$NavigationPagerAdapter": "androidx/wear/internal/widget/drawer/MultiPageUi$NavigationPagerAdapter",
-      "android/support/v4/widget/ExploreByTouchHelper$MyNodeProvider": "androidx/widget/ExploreByTouchHelper$MyNodeProvider",
-      "android/support/v7/widget/RecyclerView$AdapterDataObserver": "androidx/widget/RecyclerView$AdapterDataObserver",
-      "android/support/v4/media/session/IMediaSession": "androidx/media/session/IMediaSession",
-      "android/support/v17/preference/LeanbackSettingsRootView": "androidx/leanback/preference/LeanbackSettingsRootView",
-      "android/support/v7/widget/AppCompatButton": "androidx/widget/AppCompatButton",
-      "android/support/constraint/solver/widgets/ConstraintWidget$DimensionBehaviour": "androidx/constraint/solver/widgets/ConstraintWidget$DimensionBehaviour",
-      "android/support/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableDelegateState": "androidx/graphics/drawable/AnimatedVectorDrawableCompat$AnimatedVectorDrawableDelegateState",
-      "android/support/v17/leanback/app/DetailsSupportFragmentBackgroundController": "androidx/leanback/app/DetailsSupportFragmentBackgroundController",
-      "android/support/v17/leanback/widget/ThumbsBar": "androidx/leanback/widget/ThumbsBar",
-      "android/support/v4/media/session/MediaSessionCompat$Token": "androidx/media/session/MediaSessionCompat$Token",
-      "android/support/v7/mediarouter/R$integer": "androidx/mediarouter/R$integer",
-      "android/support/v7/app/WindowDecorActionBar": "androidx/app/WindowDecorActionBar",
-      "android/support/v4/app/Fragment$SavedState": "androidx/app/Fragment$SavedState",
-      "android/support/v17/leanback/widget/StaggeredGrid$Location": "androidx/leanback/widget/StaggeredGrid$Location",
-      "android/support/v17/leanback/widget/DiffCallback": "androidx/leanback/widget/DiffCallback",
-      "android/support/v4/os/ParcelableCompat": "androidx/os/ParcelableCompat",
-      "android/support/transition/ViewGroupUtils": "androidx/transition/ViewGroupUtils",
-      "android/support/v7/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord": "androidx/media/MediaRouter$GlobalMediaRouter$MediaSessionRecord",
-      "android/support/v7/widget/ViewBoundsCheck$BoundFlags": "androidx/widget/ViewBoundsCheck$BoundFlags",
-      "android/support/wear/R": "androidx/wear/R",
-      "android/support/v17/leanback/app/DetailsSupportFragment$WaitEnterTransitionTimeout": "androidx/leanback/app/DetailsSupportFragment$WaitEnterTransitionTimeout",
-      "android/support/v4/widget/ViewDragHelper$Callback": "androidx/widget/ViewDragHelper$Callback",
-      "android/support/v7/widget/DropDownListView": "androidx/widget/DropDownListView",
-      "android/support/v17/leanback/transition/TransitionHelper$TransitionHelperVersionImpl": "androidx/leanback/transition/TransitionHelper$TransitionHelperVersionImpl",
-      "android/support/transition/TransitionUtils$MatrixEvaluator": "androidx/transition/TransitionUtils$MatrixEvaluator",
-      "android/support/v4/hardware/display/DisplayManagerCompat": "androidx/hardware/display/DisplayManagerCompat",
-      "android/support/media/tv/TvContractCompat$Channels$VideoResolution": "androidx/media/tv/TvContractCompat$Channels$VideoResolution",
-      "android/support/v4/app/NotificationCompatBuilder": "androidx/app/NotificationCompatBuilder",
-      "android/support/v4/media/session/MediaControllerCompat$TransportControls": "androidx/media/session/MediaControllerCompat$TransportControls",
-      "android/support/v7/view/menu/SubMenuBuilder": "androidx/view/menu/SubMenuBuilder",
-      "android/support/v4/media/session/MediaSessionCompatApi23$CallbackProxy": "androidx/media/session/MediaSessionCompatApi23$CallbackProxy",
-      "android/support/v7/recyclerview/R$id": "androidx/recyclerview/R$id",
-      "android/support/wear/widget/WearableLinearLayoutManager$LayoutCallback": "androidx/wear/widget/WearableLinearLayoutManager$LayoutCallback",
-      "android/support/v17/leanback/widget/PresenterSelector": "androidx/leanback/widget/PresenterSelector",
-      "android/support/v4/app/JobIntentService$JobServiceEngineImpl": "androidx/app/JobIntentService$JobServiceEngineImpl",
-      "android/support/v4/app/ActionBarDrawerToggle$DelegateProvider": "androidx/app/legacy/ActionBarDrawerToggle$DelegateProvider",
-      "android/support/v17/leanback/widget/GuidedActionsRelativeLayout": "androidx/leanback/widget/GuidedActionsRelativeLayout",
-      "android/support/v7/widget/RecyclerView$LayoutManager": "androidx/widget/RecyclerView$LayoutManager",
-      "android/support/v4/print/PrintHelper": "androidx/print/PrintHelper",
-      "android/support/v7/util/AsyncListUtil": "androidx/util/AsyncListUtil",
-      "android/support/transition/TransitionListenerAdapter": "androidx/transition/TransitionListenerAdapter",
-      "android/support/v7/view/menu/MenuItemWrapperICS$ActionProviderWrapper": "androidx/view/menu/MenuItemWrapperICS$ActionProviderWrapper",
-      "android/support/v7/app/TwilightManager": "androidx/app/TwilightManager",
-      "android/support/v17/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperDefault": "androidx/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperDefault",
-      "android/support/v4/app/NotificationCompat$InboxStyle": "androidx/app/NotificationCompat$InboxStyle",
-      "android/support/v14/preference/MultiSelectListPreference": "androidx/preference/MultiSelectListPreference",
-      "android/support/v13/view/inputmethod/EditorInfoCompat$EditorInfoCompatBaseImpl": "androidx/view/inputmethod/EditorInfoCompat$EditorInfoCompatBaseImpl",
-      "android/support/v7/preference/SeekBarPreference$SavedState": "androidx/preference/SeekBarPreference$SavedState",
-      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$BoundData": "androidx/leanback/widget/PlaybackControlsRowPresenter$BoundData",
-      "android/support/customtabs/CustomTabsSessionToken": "androidx/browser/customtabs/CustomTabsSessionToken",
-      "android/support/v4/media/session/MediaControllerCompat$PlaybackInfo": "androidx/media/session/MediaControllerCompat$PlaybackInfo",
-      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper": "androidx/leanback/app/DetailsBackgroundVideoHelper",
-      "android/support/v17/leanback/app/RowsFragment$MainFragmentRowsAdapter": "androidx/leanback/app/RowsFragment$MainFragmentRowsAdapter",
-      "android/support/v7/app/OverlayListView$OverlayObject": "androidx/app/OverlayListView$OverlayObject",
-      "android/support/v4/provider/SingleDocumentFile": "androidx/provider/SingleDocumentFile",
-      "android/support/v7/app/AppCompatDelegateImplV9$ActionModeCallbackWrapperV9": "androidx/app/AppCompatDelegateImplV9$ActionModeCallbackWrapperV9",
-      "android/support/v4/widget/TintableCompoundButton": "androidx/widget/TintableCompoundButton",
-      "android/support/v7/graphics/Target$Builder": "androidx/graphics/Target$Builder",
-      "android/support/v17/leanback/widget/NonOverlappingFrameLayout": "androidx/leanback/widget/NonOverlappingFrameLayout",
-      "android/support/annotation/IntegerRes": "androidx/annotation/IntegerRes",
-      "android/support/media/tv/CollectionUtils": "androidx/media/tv/CollectionUtils",
-      "android/support/v4/provider/FontsContractCompat$FontRequestCallback": "androidx/provider/FontsContractCompat$FontRequestCallback",
-      "android/support/design/internal/BottomNavigationMenuView": "androidx/design/internal/BottomNavigationMenuView",
-      "android/support/v4/graphics/drawable/RoundedBitmapDrawable21": "androidx/graphics/drawable/RoundedBitmapDrawable21",
-      "android/support/design/widget/CoordinatorLayout$SavedState": "androidx/design/widget/CoordinatorLayout$SavedState",
-      "android/support/media/tv/TvContractCompat": "androidx/media/tv/TvContractCompat",
-      "android/support/v7/media/RemoteControlClientCompat$PlaybackInfo": "androidx/media/RemoteControlClientCompat$PlaybackInfo",
-      "android/support/v7/app/AppCompatDelegateImplV9$ActionMenuPresenterCallback": "androidx/app/AppCompatDelegateImplV9$ActionMenuPresenterCallback",
-      "android/support/v17/leanback/widget/StreamingTextView$DottySpan": "androidx/leanback/widget/StreamingTextView$DottySpan",
-      "android/support/v7/view/menu/ActionMenuItemView$PopupCallback": "androidx/view/menu/ActionMenuItemView$PopupCallback",
-      "android/support/percent/PercentLayoutHelper": "androidx/PercentLayoutHelper",
-      "android/support/v17/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperVersion": "androidx/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperVersion",
-      "android/support/v17/leanback/widget/VerticalGridPresenter$ViewHolder": "androidx/leanback/widget/VerticalGridPresenter$ViewHolder",
-      "android/support/media/tv/BaseProgram": "androidx/media/tv/BaseProgram",
-      "android/support/v4/view/ViewGroupCompat": "androidx/view/ViewGroupCompat",
-      "android/support/media/instantvideo/preload/InstantVideoPreloadManager$AsyncTaskVideoPreloader": "androidx/media/instantvideo/preload/InstantVideoPreloadManager$AsyncTaskVideoPreloader",
-      "android/support/v4/widget/FocusStrategy$CollectionAdapter": "androidx/widget/FocusStrategy$CollectionAdapter",
-      "android/support/v7/util/SortedList$Callback": "androidx/util/SortedList$Callback",
-      "android/support/v17/leanback/widget/Parallax$PropertyMarkerValue": "androidx/leanback/widget/Parallax$PropertyMarkerValue",
-      "android/support/v4/text/TextDirectionHeuristicsCompat$AnyStrong": "androidx/text/TextDirectionHeuristicsCompat$AnyStrong",
-      "android/support/v14/preference/PreferenceFragment$OnPreferenceStartScreenCallback": "androidx/preference/PreferenceFragment$OnPreferenceStartScreenCallback",
-      "android/support/v17/leanback/widget/picker/PickerColumn": "androidx/leanback/widget/picker/PickerColumn",
-      "android/support/transition/TransitionPropagation": "androidx/transition/TransitionPropagation",
-      "android/support/v17/leanback/widget/WindowAlignment": "androidx/leanback/widget/WindowAlignment",
-      "android/support/v17/leanback/transition/TranslationAnimationCreator": "androidx/leanback/transition/TranslationAnimationCreator",
-      "android/support/v7/media/MediaRouterApi24": "androidx/media/MediaRouterApi24",
-      "android/support/transition/Styleable$Slide": "androidx/transition/Styleable$Slide",
-      "android/support/v7/view/menu/StandardMenuPopup": "androidx/view/menu/StandardMenuPopup",
-      "android/support/v4/widget/PopupMenuCompat": "androidx/widget/PopupMenuCompat",
-      "android/support/design/widget/CollapsingToolbarLayout$LayoutParams$CollapseMode": "androidx/design/widget/CollapsingToolbarLayout$LayoutParams$CollapseMode",
-      "android/support/v17/leanback/widget/ObjectAdapter": "androidx/leanback/widget/ObjectAdapter",
-      "android/support/v4/view/GestureDetectorCompat": "androidx/view/GestureDetectorCompat",
-      "android/support/v17/leanback/widget/Parallax$IntPropertyMarkerValue": "androidx/leanback/widget/Parallax$IntPropertyMarkerValue",
-      "android/support/v4/view/ViewCompat$ViewCompatApi26Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi26Impl",
-      "android/support/v7/media/RemoteControlClientCompat$VolumeCallback": "androidx/media/RemoteControlClientCompat$VolumeCallback",
-      "android/support/design/widget/AnimationUtils": "androidx/design/widget/AnimationUtils",
-      "android/support/v4/view/ViewCompat$ScrollIndicators": "androidx/view/legacy/ViewCompat$ScrollIndicators",
-      "android/support/media/tv/WatchNextProgram$Builder": "androidx/media/tv/WatchNextProgram$Builder",
-      "android/support/v7/graphics/Palette$Filter": "androidx/graphics/Palette$Filter",
-      "android/support/annotation/BinderThread": "androidx/annotation/BinderThread",
-      "android/support/v17/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight$HeaderFocusAnimator": "androidx/leanback/widget/FocusHighlightHelper$HeaderItemFocusHighlight$HeaderFocusAnimator",
-      "android/support/media/tv/Program$Builder": "androidx/media/tv/Program$Builder",
-      "android/support/v4/hardware/fingerprint/FingerprintManagerCompat$AuthenticationResult": "androidx/hardware/fingerprint/FingerprintManagerCompat$AuthenticationResult",
-      "android/support/v4/os/LocaleListCompat$LocaleListCompatApi24Impl": "androidx/os/LocaleListCompat$LocaleListCompatApi24Impl",
-      "android/support/v17/leanback/widget/GuidedActionAdapter$FocusListener": "androidx/leanback/widget/GuidedActionAdapter$FocusListener",
-      "android/support/v17/leanback/widget/ControlBarPresenter$ViewHolder": "androidx/leanback/widget/ControlBarPresenter$ViewHolder",
-      "android/support/v7/graphics/drawable/DrawerArrowDrawable$ArrowDirection": "androidx/graphics/drawable/DrawerArrowDrawable$ArrowDirection",
-      "android/support/v4/view/ViewPager$DecorView": "androidx/view/ViewPager$DecorView",
-      "android/support/v4/view/ViewParentCompat$ViewParentCompatApi19Impl": "androidx/view/ViewParentCompat$ViewParentCompatApi19Impl",
-      "android/support/v7/widget/StaggeredGridLayoutManager$Span": "androidx/widget/StaggeredGridLayoutManager$Span",
-      "android/support/wear/widget/ProgressDrawable": "androidx/wear/widget/ProgressDrawable",
-      "android/support/v7/media/MediaRouterJellybeanMr2$RouteInfo": "androidx/media/MediaRouterJellybeanMr2$RouteInfo",
-      "android/support/v4/graphics/PathParser$PathDataNode": "androidx/graphics/PathParser$PathDataNode",
-      "android/support/v17/leanback/graphics/ColorFilterCache": "androidx/leanback/graphics/ColorFilterCache",
-      "android/support/text/emoji/EmojiCompat$InitCallback": "androidx/text/emoji/EmojiCompat$InitCallback",
-      "android/support/v17/leanback/app/BrowseFragment$MainFragmentAdapterRegistry": "androidx/leanback/app/BrowseFragment$MainFragmentAdapterRegistry",
-      "android/support/transition/PropertyValuesHolderUtils": "androidx/transition/PropertyValuesHolderUtils",
-      "android/support/v7/widget/ActivityChooserModel$DefaultSorter": "androidx/widget/ActivityChooserModel$DefaultSorter",
-      "android/support/v7/app/AlertController$CheckedItemAdapter": "androidx/app/AlertController$CheckedItemAdapter",
-      "android/support/design/widget/TabItem": "androidx/design/widget/TabItem",
-      "android/support/v4/media/MediaBrowserCompatApi21$ConnectionCallbackProxy": "androidx/media/MediaBrowserCompatApi21$ConnectionCallbackProxy",
-      "android/support/content/LoaderQueryRunner": "androidx/content/LoaderQueryRunner",
-      "android/support/v17/leanback/app/BrowseSupportFragment$FragmentFactory": "androidx/leanback/app/BrowseSupportFragment$FragmentFactory",
-      "android/support/v7/app/AppCompatDelegateImplN$AppCompatWindowCallbackN": "androidx/app/AppCompatDelegateImplN$AppCompatWindowCallbackN",
-      "android/support/wear/widget/drawer/WearableDrawerLayout$DrawerDraggerCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$DrawerDraggerCallback",
-      "android/support/v7/widget/OpReorderer": "androidx/widget/OpReorderer",
-      "android/support/media/instantvideo/preload/InstantVideoPreloadManager": "androidx/media/instantvideo/preload/InstantVideoPreloadManager",
-      "android/support/v4/view/ViewPropertyAnimatorCompat": "androidx/view/ViewPropertyAnimatorCompat",
-      "android/support/v13/app/FragmentCompat$FragmentCompatApi23Impl": "androidx/app/FragmentCompat$FragmentCompatApi23Impl",
-      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi23": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi23",
-      "android/support/v4/internal/view/SupportSubMenu": "androidx/internal/view/SupportSubMenu",
-      "android/support/text/emoji/EmojiProcessor$Action": "androidx/text/emoji/EmojiProcessor$Action",
-      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi21",
-      "android/support/v17/leanback/widget/DetailsOverviewLogoPresenter$ViewHolder": "androidx/leanback/widget/DetailsOverviewLogoPresenter$ViewHolder",
-      "android/support/v7/widget/OrientationHelper": "androidx/widget/OrientationHelper",
-      "android/support/v4/app/FragmentTransition$FragmentContainerTransition": "androidx/app/FragmentTransition$FragmentContainerTransition",
-      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi26": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplApi26",
-      "android/support/v7/preference/PreferenceViewHolder": "androidx/preference/PreferenceViewHolder",
-      "android/support/graphics/drawable/VectorDrawableCommon": "androidx/graphics/drawable/VectorDrawableCommon",
-      "android/support/v4/view/animation/FastOutLinearInInterpolator": "androidx/view/animation/FastOutLinearInInterpolator",
-      "android/support/v4/media/MediaBrowserServiceCompatApi26$MediaBrowserServiceAdaptor": "androidx/media/MediaBrowserServiceCompatApi26$MediaBrowserServiceAdaptor",
-      "android/support/v7/view/SupportActionModeWrapper": "androidx/view/SupportActionModeWrapper",
-      "android/support/v7/app/AppCompatDelegateImplV11": "androidx/app/AppCompatDelegateImplV11",
-      "android/support/v7/app/AppCompatDelegateImplV14": "androidx/app/AppCompatDelegateImplV14",
-      "android/support/v4/graphics/TypefaceCompatApi26Impl": "androidx/graphics/TypefaceCompatApi26Impl",
-      "android/support/v17/leanback/media/PlaybackGlueHost$PlayerCallback": "androidx/leanback/media/PlaybackGlueHost$PlayerCallback",
-      "android/support/design/widget/BottomNavigationView$SavedState": "androidx/design/widget/BottomNavigationView$SavedState",
-      "android/support/text/emoji/R$styleable": "androidx/text/emoji/R$styleable",
-      "android/support/v4/view/animation/LinearOutSlowInInterpolator": "androidx/view/animation/LinearOutSlowInInterpolator",
-      "android/support/v7/widget/LinearLayoutManager$LayoutState": "androidx/widget/LinearLayoutManager$LayoutState",
-      "android/support/wear/widget/BoxInsetLayout": "androidx/wear/widget/BoxInsetLayout",
-      "android/support/design/widget/HeaderBehavior": "androidx/design/widget/HeaderBehavior",
-      "android/support/v17/leanback/widget/PageRow": "androidx/leanback/widget/PageRow",
-      "android/support/v7/widget/ViewStubCompat": "androidx/widget/ViewStubCompat",
-      "android/support/v7/widget/SearchView$AutoCompleteTextViewReflector": "androidx/widget/SearchView$AutoCompleteTextViewReflector",
-      "android/support/v17/leanback/widget/OnChildLaidOutListener": "androidx/leanback/widget/OnChildLaidOutListener",
-      "android/support/v7/app/TwilightManager$TwilightState": "androidx/app/TwilightManager$TwilightState",
-      "android/support/v7/widget/FastScroller": "androidx/widget/FastScroller",
-      "android/support/design/widget/CoordinatorLayout$ViewElevationComparator": "androidx/design/widget/CoordinatorLayout$ViewElevationComparator",
-      "android/support/transition/TransitionManager": "androidx/transition/TransitionManager",
-      "android/support/v7/widget/AppCompatDrawableManager": "androidx/widget/AppCompatDrawableManager",
-      "android/support/animation/DynamicAnimation$OnAnimationUpdateListener": "androidx/animation/DynamicAnimation$OnAnimationUpdateListener",
-      "android/support/v4/graphics/TypefaceCompat": "androidx/graphics/TypefaceCompat",
-      "android/support/v17/preference/LeanbackPreferenceFragment": "androidx/leanback/preference/LeanbackPreferenceFragment",
-      "android/support/v17/leanback/widget/ParallaxTarget": "androidx/leanback/widget/ParallaxTarget",
-      "android/support/annotation/StyleRes": "androidx/annotation/StyleRes",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ThumbsDownAction": "androidx/leanback/widget/PlaybackControlsRow$ThumbsDownAction",
-      "android/support/v17/leanback/media/PlaybackTransportControlGlue$SeekUiClient": "androidx/leanback/media/PlaybackTransportControlGlue$SeekUiClient",
-      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteRecord": "androidx/media/SystemMediaRouteProvider$JellybeanImpl$SystemRouteRecord",
-      "android/support/v17/leanback/widget/ShadowHelper$ShadowHelperStubImpl": "androidx/leanback/widget/ShadowHelper$ShadowHelperStubImpl",
-      "android/support/animation/DynamicAnimation$ViewProperty": "androidx/animation/DynamicAnimation$ViewProperty",
-      "android/support/v7/app/AppCompatDelegateImplV23": "androidx/app/AppCompatDelegateImplV23",
-      "android/support/v4/app/NotificationManagerCompat": "androidx/app/NotificationManagerCompat",
-      "android/support/v4/media/session/MediaControllerCompat": "androidx/media/session/MediaControllerCompat",
-      "android/support/v17/leanback/widget/GuidedDatePickerAction": "androidx/leanback/widget/GuidedDatePickerAction",
-      "android/support/v4/widget/CircularProgressDrawable$ProgressDrawableSize": "androidx/widget/CircularProgressDrawable$ProgressDrawableSize",
-      "android/support/v17/leanback/widget/Presenter$ViewHolderTask": "androidx/leanback/widget/Presenter$ViewHolderTask",
-      "android/support/text/emoji/bundled/BundledEmojiCompatConfig": "androidx/text/emoji/bundled/BundledEmojiCompatConfig",
-      "android/support/content/ContentPager$CursorView": "androidx/content/ContentPager$CursorView",
-      "android/support/transition/TranslationAnimationCreator$TransitionPositionListener": "androidx/transition/TranslationAnimationCreator$TransitionPositionListener",
-      "android/support/v7/recyclerview/R$styleable": "androidx/recyclerview/R$styleable",
-      "android/support/v17/leanback/widget/PersistentFocusWrapper": "androidx/leanback/widget/PersistentFocusWrapper",
-      "android/support/v4/view/accessibility/AccessibilityWindowInfoCompat": "androidx/view/accessibility/AccessibilityWindowInfoCompat",
-      "android/support/v17/leanback/widget/PlaybackControlsRow$RewindAction": "androidx/leanback/widget/PlaybackControlsRow$RewindAction",
-      "android/support/v7/widget/AppCompatPopupWindow": "androidx/widget/AppCompatPopupWindow",
-      "android/support/mediacompat/R$id": "androidx/mediacompat/R$id",
-      "android/support/v17/leanback/widget/ItemAlignmentFacet": "androidx/leanback/widget/ItemAlignmentFacet",
-      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImplBase$GestureHandler": "androidx/view/GestureDetectorCompat$GestureDetectorCompatImplBase$GestureHandler",
-      "android/support/v17/leanback/widget/GuidedAction$BuilderBase": "androidx/leanback/widget/GuidedAction$BuilderBase",
-      "android/support/v17/leanback/widget/RoundedRectHelper$Impl": "androidx/leanback/widget/RoundedRectHelper$Impl",
-      "android/support/v7/media/MediaRouterJellybean$CallbackProxy": "androidx/media/MediaRouterJellybean$CallbackProxy",
-      "android/support/design/widget/CollapsingToolbarLayout$LayoutParams": "androidx/design/widget/CollapsingToolbarLayout$LayoutParams",
-      "android/support/v7/preference/DialogPreference": "androidx/preference/DialogPreference",
-      "android/support/v7/preference/EditTextPreference": "androidx/preference/EditTextPreference",
-      "android/support/v4/media/MediaBrowserCompatApi23$ItemCallbackProxy": "androidx/media/MediaBrowserCompatApi23$ItemCallbackProxy",
-      "android/support/v4/text/util/LinkifyCompat$LinkifyMask": "androidx/text/util/LinkifyCompat$LinkifyMask",
-      "android/support/v7/widget/helper/ItemTouchHelper$SimpleCallback": "androidx/widget/helper/ItemTouchHelper$SimpleCallback",
-      "android/support/wear/ambient/AmbientMode$AmbientCallbackProvider": "androidx/wear/ambient/AmbientMode$AmbientCallbackProvider",
-      "android/support/v7/widget/CardViewImpl": "androidx/widget/CardViewImpl",
-      "android/support/animation/FloatValueHolder": "androidx/animation/FloatValueHolder",
-      "android/support/transition/MatrixUtils": "androidx/transition/MatrixUtils",
-      "android/support/v14/preference/PreferenceFragment$OnPreferenceStartFragmentCallback": "androidx/preference/PreferenceFragment$OnPreferenceStartFragmentCallback",
-      "android/support/v4/widget/SlidingPaneLayout$PanelSlideListener": "androidx/widget/SlidingPaneLayout$PanelSlideListener",
-      "android/support/v7/util/SortedList": "androidx/util/SortedList",
-      "android/support/v4/view/AccessibilityDelegateCompat$AccessibilityDelegateBaseImpl": "androidx/view/AccessibilityDelegateCompat$AccessibilityDelegateBaseImpl",
-      "android/support/v7/app/MediaRouteControllerDialog$FetchArtTask": "androidx/app/MediaRouteControllerDialog$FetchArtTask",
-      "android/support/compat/R$drawable": "androidx/compat/R$drawable",
+      "android/support/transition/WindowIdApi14": "androidx/transition/WindowIdApi14",
+      "android/support/transition/WindowIdApi18": "androidx/transition/WindowIdApi18",
+      "android/support/transition/Visibility$1": "androidx/transition/Visibility$1",
+      "android/support/transition/Visibility$DisappearListener": "androidx/transition/Visibility$DisappearListener",
+      "android/support/transition/Visibility$Mode": "androidx/transition/Visibility$Mode",
       "android/support/transition/Visibility$VisibilityInfo": "androidx/transition/Visibility$VisibilityInfo",
-      "android/support/v7/widget/ThemedSpinnerAdapter": "androidx/widget/ThemedSpinnerAdapter",
-      "android/support/v17/leanback/widget/GuidanceStylingRelativeLayout": "androidx/leanback/widget/GuidanceStylingRelativeLayout",
-      "android/support/v7/media/MediaRouter$ProviderInfo": "androidx/media/MediaRouter$ProviderInfo",
-      "android/support/v7/media/MediaControlIntent": "androidx/media/MediaControlIntent",
-      "android/support/v17/leanback/widget/ListRow": "androidx/leanback/widget/ListRow",
-      "android/support/v7/view/menu/ListMenuPresenter$MenuAdapter": "androidx/view/menu/ListMenuPresenter$MenuAdapter",
-      "android/support/v4/app/FrameMetricsAggregator$FrameMetricsBaseImpl": "androidx/app/FrameMetricsAggregator$FrameMetricsBaseImpl",
-      "android/support/design/widget/TabLayout$SlidingTabStrip": "androidx/design/widget/TabLayout$SlidingTabStrip",
-      "android/support/content/ContentPager$ContentCallback": "androidx/content/ContentPager$ContentCallback",
-      "android/support/v4/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase": "androidx/media/MediaBrowserServiceCompat$MediaBrowserServiceImplBase",
-      "android/support/v7/util/TileList": "androidx/util/TileList",
-      "android/support/v7/widget/ActionBarBackgroundDrawable": "androidx/widget/ActionBarBackgroundDrawable",
-      "android/support/v4/widget/CursorFilter$CursorFilterClient": "androidx/widget/CursorFilter$CursorFilterClient",
-      "android/support/v17/leanback/database/CursorMapper": "androidx/leanback/database/CursorMapper",
-      "android/support/v17/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperKitKatImpl": "androidx/leanback/transition/LeanbackTransitionHelper$LeanbackTransitionHelperKitKatImpl",
-      "android/support/v7/cardview/R$styleable": "androidx/cardview/R$styleable",
-      "android/support/v17/leanback/transition/TransitionHelperApi21": "androidx/leanback/transition/TransitionHelperApi21",
-      "android/support/v7/widget/ViewInfoStore": "androidx/widget/ViewInfoStore",
-      "android/support/design/widget/BaseTransientBottomBar$BaseCallback$DismissEvent": "androidx/design/widget/BaseTransientBottomBar$BaseCallback$DismissEvent",
-      "android/support/percent/PercentLayoutHelper$PercentLayoutInfo": "androidx/PercentLayoutHelper$PercentLayoutInfo",
-      "android/support/v7/app/AppCompatCallback": "androidx/app/AppCompatCallback",
-      "android/support/wear/R$style": "androidx/wear/R$style",
-      "android/support/v17/leanback/widget/ItemAlignmentFacetHelper": "androidx/leanback/widget/ItemAlignmentFacetHelper",
-      "android/support/v7/view/menu/MenuItemImpl": "androidx/view/menu/MenuItemImpl",
-      "android/support/v4/content/ContextCompat": "androidx/content/ContextCompat",
-      "android/support/percent/PercentLayoutHelper$PercentMarginLayoutParams": "androidx/PercentLayoutHelper$PercentMarginLayoutParams",
-      "android/support/v7/widget/LayoutState": "androidx/widget/LayoutState",
-      "android/support/animation/AnimationHandler$AnimationFrameCallback": "androidx/animation/AnimationHandler$AnimationFrameCallback",
-      "android/support/v17/leanback/widget/SingleRow": "androidx/leanback/widget/SingleRow",
-      "android/support/v4/content/ModernAsyncTask$InternalHandler": "androidx/content/ModernAsyncTask$InternalHandler",
-      "android/support/transition/ImageViewUtilsImpl": "androidx/transition/ImageViewUtilsImpl",
-      "android/support/v7/widget/RtlSpacingHelper": "androidx/widget/RtlSpacingHelper",
-      "android/support/v4/content/PermissionChecker": "androidx/content/PermissionChecker",
-      "android/support/v7/preference/PreferenceCategory": "androidx/preference/PreferenceCategory",
-      "android/support/annotation/IntDef": "androidx/annotation/IntDef",
-      "android/support/v4/app/BundleCompat$BundleCompatBaseImpl": "androidx/app/BundleCompat$BundleCompatBaseImpl",
-      "android/support/v7/app/MediaRouteExpandCollapseButton": "androidx/app/MediaRouteExpandCollapseButton",
-      "android/support/v17/leanback/animation/LogAccelerateInterpolator": "androidx/leanback/animation/LogAccelerateInterpolator",
-      "android/support/v13/app/FragmentPagerAdapter": "androidx/app/legacy/FragmentPagerAdapter",
-      "android/support/content/InMemoryCursor": "androidx/content/InMemoryCursor",
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ActionsItemBridgeAdapter": "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ActionsItemBridgeAdapter",
-      "android/support/v7/widget/AppCompatTextViewAutoSizeHelper": "androidx/widget/AppCompatTextViewAutoSizeHelper",
-      "android/support/v7/preference/PreferenceGroup": "androidx/preference/PreferenceGroup",
-      "android/support/v7/media/RegisteredMediaRouteProvider$Connection": "androidx/media/RegisteredMediaRouteProvider$Connection",
-      "android/support/v4/os/ParcelableCompatCreatorCallbacks": "androidx/os/ParcelableCompatCreatorCallbacks",
-      "android/support/v4/media/MediaMetadataCompat$BitmapKey": "androidx/media/MediaMetadataCompat$BitmapKey",
-      "android/support/v7/app/MediaRouteActionProvider$MediaRouterCallback": "androidx/app/MediaRouteActionProvider$MediaRouterCallback",
-      "android/support/v7/view/ViewPropertyAnimatorCompatSet": "androidx/view/ViewPropertyAnimatorCompatSet",
-      "android/support/v7/widget/AppCompatMultiAutoCompleteTextView": "androidx/widget/AppCompatMultiAutoCompleteTextView",
-      "android/support/v17/leanback/widget/GridLayoutManager$GridLinearSmoothScroller": "androidx/leanback/widget/GridLayoutManager$GridLinearSmoothScroller",
-      "android/support/design/internal/NavigationMenuView": "androidx/design/internal/NavigationMenuView",
-      "android/support/v17/leanback/app/SearchSupportFragment": "androidx/leanback/app/SearchSupportFragment",
-      "android/support/v7/media/SystemMediaRouteProvider$Api24Impl": "androidx/media/SystemMediaRouteProvider$Api24Impl",
-      "android/support/v4/content/FileProvider$PathStrategy": "androidx/content/FileProvider$PathStrategy",
-      "android/support/v17/leanback/util/StateMachine": "androidx/leanback/util/StateMachine",
-      "android/support/v7/widget/AppCompatCheckedTextView": "androidx/widget/AppCompatCheckedTextView",
-      "android/support/v4/media/session/PlaybackStateCompat$Builder": "androidx/media/session/PlaybackStateCompat$Builder",
-      "android/support/v17/leanback/widget/DetailsParallaxDrawable": "androidx/leanback/widget/DetailsParallaxDrawable",
-      "android/support/v17/leanback/widget/GuidedDatePickerAction$BuilderBase": "androidx/leanback/widget/GuidedDatePickerAction$BuilderBase",
-      "android/support/v17/leanback/widget/OnItemViewSelectedListener": "androidx/leanback/widget/OnItemViewSelectedListener",
-      "android/support/v7/widget/ShareActionProvider$OnShareTargetSelectedListener": "androidx/widget/ShareActionProvider$OnShareTargetSelectedListener",
-      "android/support/v4/app/JobIntentService$CompatWorkItem": "androidx/app/JobIntentService$CompatWorkItem",
-      "android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat": "androidx/preference/MultiSelectListPreferenceDialogFragmentCompat",
-      "android/support/v17/leanback/widget/OnActionClickedListener": "androidx/leanback/widget/OnActionClickedListener",
-      "android/support/design/widget/SwipeDismissBehavior$OnDismissListener": "androidx/design/widget/SwipeDismissBehavior$OnDismissListener",
-      "android/support/design/R$id": "androidx/design/R$id",
-      "android/support/content/ContentPager$Stats": "androidx/content/ContentPager$Stats",
-      "android/support/v17/leanback/widget/SinglePresenterSelector": "androidx/leanback/widget/SinglePresenterSelector",
-      "android/support/v7/widget/GridLayout$Arc": "androidx/widget/GridLayout$Arc",
-      "android/support/v17/leanback/widget/BaseGridView$OnKeyInterceptListener": "androidx/leanback/widget/BaseGridView$OnKeyInterceptListener",
-      "android/support/customtabs/CustomTabsService$Relation": "androidx/browser/customtabs/CustomTabsService$Relation",
-      "android/support/v4/content/WakefulBroadcastReceiver": "androidx/content/WakefulBroadcastReceiver",
-      "android/support/v4/os/LocaleHelper": "androidx/os/LocaleHelper",
-      "android/support/v7/app/ActionBar$NavigationMode": "androidx/app/ActionBar$NavigationMode",
-      "android/support/v7/media/RemotePlaybackClient$ActionReceiver": "androidx/media/RemotePlaybackClient$ActionReceiver",
-      "android/support/v7/view/menu/CascadingMenuPopup$HorizPosition": "androidx/view/menu/CascadingMenuPopup$HorizPosition",
-      "android/support/v13/view/inputmethod/EditorInfoCompat": "androidx/view/inputmethod/EditorInfoCompat",
-      "android/support/v17/leanback/widget/Grid": "androidx/leanback/widget/Grid",
-      "android/support/annotation/TransitionRes": "androidx/annotation/TransitionRes",
-      "android/support/v4/media/VolumeProviderCompat": "androidx/media/VolumeProviderCompat",
-      "android/support/multidex/MultiDexApplication": "androidx/multidex/MultiDexApplication",
-      "android/support/text/emoji/EmojiCompat$MetadataRepoLoader": "androidx/text/emoji/EmojiCompat$MetadataRepoLoader",
-      "android/support/design/widget/TextInputLayout": "androidx/design/widget/TextInputLayout",
-      "android/support/v4/view/ViewCompat$ViewCompatApi24Impl": "androidx/view/legacy/ViewCompat$ViewCompatApi24Impl",
-      "android/support/v4/provider/FontRequest": "androidx/provider/FontRequest",
-      "android/support/v4/media/session/MediaButtonReceiver$MediaButtonConnectionCallback": "androidx/media/session/MediaButtonReceiver$MediaButtonConnectionCallback",
-      "android/support/v7/widget/RecyclerView$SmoothScroller$ScrollVectorProvider": "androidx/widget/RecyclerView$SmoothScroller$ScrollVectorProvider",
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImpl": "androidx/media/session/MediaSessionCompat$MediaSessionImpl",
-      "android/support/v4/content/ModernAsyncTask$Status": "androidx/content/ModernAsyncTask$Status",
-      "android/support/v7/widget/AppCompatDrawableManager$ColorFilterLruCache": "androidx/widget/AppCompatDrawableManager$ColorFilterLruCache",
-      "android/support/multidex/MultiDex": "androidx/multidex/MultiDex",
-      "android/support/wear/ambient/WearableControllerProvider": "androidx/wear/ambient/WearableControllerProvider",
-      "android/support/v17/leanback/widget/ForegroundHelper": "androidx/leanback/widget/ForegroundHelper",
-      "android/support/v4/app/DialogFragment$DialogStyle": "androidx/app/DialogFragment$DialogStyle",
-      "android/support/v4/graphics/TypefaceCompatApi24Impl": "androidx/graphics/TypefaceCompatApi24Impl",
-      "android/support/v7/app/ActionBar$Tab": "androidx/app/ActionBar$Tab",
-      "android/support/transition/CircularPropagation": "androidx/transition/CircularPropagation",
-      "android/support/v7/app/ResourcesFlusher": "androidx/app/ResourcesFlusher",
-      "android/support/text/emoji/MetadataListReader$OffsetInfo": "androidx/text/emoji/MetadataListReader$OffsetInfo",
-      "android/support/v4/app/ActivityOptionsCompat$ActivityOptionsCompatApi24Impl": "androidx/app/ActivityOptionsCompat$ActivityOptionsCompatApi24Impl",
-      "android/support/v4/content/SharedPreferencesCompat$EditorCompat": "androidx/content/SharedPreferencesCompat$EditorCompat",
-      "android/support/v7/widget/RecyclerView$OnFlingListener": "androidx/widget/RecyclerView$OnFlingListener",
+      "android/arch/persistence/room/parser/SQLiteParser$Select_coreContext": "androidx/persistence/room/parser/SQLiteParser$Select_coreContext",
+      "android/arch/persistence/room/parser/SQLiteParser": "androidx/persistence/room/parser/SQLiteParser",
+      "android/arch/persistence/room/parser/SQLiteParser$Result_columnContext": "androidx/persistence/room/parser/SQLiteParser$Result_columnContext",
+      "android/arch/persistence/room/parser/SQLiteParser$ExprContext": "androidx/persistence/room/parser/SQLiteParser$ExprContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Table_or_subqueryContext": "androidx/persistence/room/parser/SQLiteParser$Table_or_subqueryContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Join_clauseContext": "androidx/persistence/room/parser/SQLiteParser$Join_clauseContext",
+      "android/arch/persistence/room/parser/SQLiteListener": "androidx/persistence/room/parser/SQLiteListener",
+      "android/arch/persistence/room/parser/SQLiteVisitor": "androidx/persistence/room/parser/SQLiteVisitor",
+      "android/arch/persistence/room/parser/SQLiteParser$Function_nameContext": "androidx/persistence/room/parser/SQLiteParser$Function_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Any_nameContext": "androidx/persistence/room/parser/SQLiteParser$Any_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Indexed_columnContext": "androidx/persistence/room/parser/SQLiteParser$Indexed_columnContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Column_nameContext": "androidx/persistence/room/parser/SQLiteParser$Column_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Collation_nameContext": "androidx/persistence/room/parser/SQLiteParser$Collation_nameContext",
+      "android/arch/persistence/room/parser/SQLiteLexer": "androidx/persistence/room/parser/SQLiteLexer",
+      "android/arch/persistence/room/parser/SQLiteParser$KeywordContext": "androidx/persistence/room/parser/SQLiteParser$KeywordContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Create_view_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Create_view_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$View_nameContext": "androidx/persistence/room/parser/SQLiteParser$View_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Select_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Select_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Database_nameContext": "androidx/persistence/room/parser/SQLiteParser$Database_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Unary_operatorContext": "androidx/persistence/room/parser/SQLiteParser$Unary_operatorContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Table_aliasContext": "androidx/persistence/room/parser/SQLiteParser$Table_aliasContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Table_constraintContext": "androidx/persistence/room/parser/SQLiteParser$Table_constraintContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Conflict_clauseContext": "androidx/persistence/room/parser/SQLiteParser$Conflict_clauseContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Foreign_key_clauseContext": "androidx/persistence/room/parser/SQLiteParser$Foreign_key_clauseContext",
+      "android/arch/persistence/room/parser/SQLiteParser$NameContext": "androidx/persistence/room/parser/SQLiteParser$NameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Select_or_valuesContext": "androidx/persistence/room/parser/SQLiteParser$Select_or_valuesContext",
+      "android/arch/persistence/room/parser/SQLiteParser$With_clauseContext": "androidx/persistence/room/parser/SQLiteParser$With_clauseContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Compound_operatorContext": "androidx/persistence/room/parser/SQLiteParser$Compound_operatorContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Ordering_termContext": "androidx/persistence/room/parser/SQLiteParser$Ordering_termContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Update_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Update_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Qualified_table_nameContext": "androidx/persistence/room/parser/SQLiteParser$Qualified_table_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Compound_select_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Compound_select_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Analyze_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Analyze_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Table_or_index_nameContext": "androidx/persistence/room/parser/SQLiteParser$Table_or_index_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Transaction_nameContext": "androidx/persistence/room/parser/SQLiteParser$Transaction_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Savepoint_nameContext": "androidx/persistence/room/parser/SQLiteParser$Savepoint_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Pragma_nameContext": "androidx/persistence/room/parser/SQLiteParser$Pragma_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Module_nameContext": "androidx/persistence/room/parser/SQLiteParser$Module_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Trigger_nameContext": "androidx/persistence/room/parser/SQLiteParser$Trigger_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Index_nameContext": "androidx/persistence/room/parser/SQLiteParser$Index_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Foreign_tableContext": "androidx/persistence/room/parser/SQLiteParser$Foreign_tableContext",
+      "android/arch/persistence/room/parser/SQLiteParser$New_table_nameContext": "androidx/persistence/room/parser/SQLiteParser$New_table_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Table_nameContext": "androidx/persistence/room/parser/SQLiteParser$Table_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Table_function_nameContext": "androidx/persistence/room/parser/SQLiteParser$Table_function_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Schema_nameContext": "androidx/persistence/room/parser/SQLiteParser$Schema_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Column_aliasContext": "androidx/persistence/room/parser/SQLiteParser$Column_aliasContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Module_argumentContext": "androidx/persistence/room/parser/SQLiteParser$Module_argumentContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Error_messageContext": "androidx/persistence/room/parser/SQLiteParser$Error_messageContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Literal_valueContext": "androidx/persistence/room/parser/SQLiteParser$Literal_valueContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Signed_numberContext": "androidx/persistence/room/parser/SQLiteParser$Signed_numberContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Join_constraintContext": "androidx/persistence/room/parser/SQLiteParser$Join_constraintContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Join_operatorContext": "androidx/persistence/room/parser/SQLiteParser$Join_operatorContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Common_table_expressionContext": "androidx/persistence/room/parser/SQLiteParser$Common_table_expressionContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Pragma_valueContext": "androidx/persistence/room/parser/SQLiteParser$Pragma_valueContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Raise_functionContext": "androidx/persistence/room/parser/SQLiteParser$Raise_functionContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Column_constraintContext": "androidx/persistence/room/parser/SQLiteParser$Column_constraintContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Type_nameContext": "androidx/persistence/room/parser/SQLiteParser$Type_nameContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Column_defContext": "androidx/persistence/room/parser/SQLiteParser$Column_defContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Vacuum_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Vacuum_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Update_stmt_limitedContext": "androidx/persistence/room/parser/SQLiteParser$Update_stmt_limitedContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Simple_select_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Simple_select_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Savepoint_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Savepoint_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Rollback_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Rollback_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Release_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Release_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Reindex_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Reindex_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Pragma_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Pragma_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Insert_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Insert_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Factored_select_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Factored_select_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Drop_view_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Drop_view_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Drop_trigger_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Drop_trigger_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Drop_table_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Drop_table_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Drop_index_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Drop_index_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Detach_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Detach_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Delete_stmt_limitedContext": "androidx/persistence/room/parser/SQLiteParser$Delete_stmt_limitedContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Delete_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Delete_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Create_virtual_table_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Create_virtual_table_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Create_trigger_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Create_trigger_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Create_table_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Create_table_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Create_index_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Create_index_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Commit_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Commit_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Begin_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Begin_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Attach_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Attach_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Alter_table_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Alter_table_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Sql_stmtContext": "androidx/persistence/room/parser/SQLiteParser$Sql_stmtContext",
+      "android/arch/persistence/room/parser/SQLiteParser$Sql_stmt_listContext": "androidx/persistence/room/parser/SQLiteParser$Sql_stmt_listContext",
+      "android/arch/persistence/room/parser/SQLiteParser$ErrorContext": "androidx/persistence/room/parser/SQLiteParser$ErrorContext",
+      "android/arch/persistence/room/parser/SQLiteParser$ParseContext": "androidx/persistence/room/parser/SQLiteParser$ParseContext",
+      "android/arch/persistence/room/parser/SQLiteBaseVisitor": "androidx/persistence/room/parser/SQLiteBaseVisitor",
+      "android/arch/persistence/room/parser/SQLiteBaseListener": "androidx/persistence/room/parser/SQLiteBaseListener",
+      "android/arch/persistence/room/verifier/ColumnInfo": "androidx/persistence/room/verifier/ColumnInfo",
+      "android/arch/persistence/room/parser/SQLTypeAffinity": "androidx/persistence/room/parser/SQLTypeAffinity",
+      "android/arch/persistence/room/RoomProcessor$ContextBoundProcessingStep": "androidx/persistence/room/RoomProcessor$ContextBoundProcessingStep",
+      "android/arch/persistence/room/RoomProcessor": "androidx/persistence/room/RoomProcessor",
+      "android/arch/persistence/room/processor/Context": "androidx/persistence/room/processor/Context",
+      "android/arch/persistence/room/preconditions/Checks": "androidx/persistence/room/preconditions/Checks",
+      "android/arch/persistence/room/log/RLog": "androidx/persistence/room/log/RLog",
+      "android/arch/persistence/room/ext/Element_extKt": "androidx/persistence/room/ext/Element_extKt",
+      "android/arch/persistence/room/RoomProcessor$DatabaseProcessingStep": "androidx/persistence/room/RoomProcessor$DatabaseProcessingStep",
+      "android/arch/persistence/room/Database": "androidx/persistence/room/Database",
+      "android/arch/persistence/room/processor/DatabaseProcessor": "androidx/persistence/room/processor/DatabaseProcessor",
+      "android/arch/persistence/room/vo/Database": "androidx/persistence/room/vo/Database",
+      "android/arch/persistence/room/vo/DaoMethod": "androidx/persistence/room/vo/DaoMethod",
+      "android/arch/persistence/room/writer/DaoWriter": "androidx/persistence/room/writer/DaoWriter",
+      "android/arch/persistence/room/vo/Dao": "androidx/persistence/room/vo/Dao",
+      "android/arch/persistence/room/writer/DatabaseWriter": "androidx/persistence/room/writer/DatabaseWriter",
+      "android/arch/persistence/room/vo/Warning": "androidx/persistence/room/vo/Warning",
+      "android/arch/persistence/room/processor/ProcessorErrors": "androidx/persistence/room/processor/ProcessorErrors",
+      "android/arch/persistence/room/Dao": "androidx/persistence/room/Dao",
+      "android/arch/persistence/room/Entity": "androidx/persistence/room/Entity",
+      "android/arch/persistence/room/parser/SQLTypeAffinity$Companion": "androidx/persistence/room/parser/SQLTypeAffinity$Companion",
+      "android/arch/persistence/room/parser/Collate": "androidx/persistence/room/parser/Collate",
+      "android/arch/persistence/room/parser/Collate$Companion": "androidx/persistence/room/parser/Collate$Companion",
+      "android/arch/persistence/room/parser/SQLTypeAffinity$WhenMappings": "androidx/persistence/room/parser/SQLTypeAffinity$WhenMappings",
+      "android/arch/persistence/room/parser/Section$Companion": "androidx/persistence/room/parser/Section$Companion",
+      "android/arch/persistence/room/parser/Section": "androidx/persistence/room/parser/Section",
+      "android/arch/persistence/room/parser/SectionType": "androidx/persistence/room/parser/SectionType",
+      "android/arch/persistence/room/parser/ParsedQuery$sections$2": "androidx/persistence/room/parser/ParsedQuery$sections$2",
+      "android/arch/persistence/room/parser/ParsedQuery": "androidx/persistence/room/parser/ParsedQuery",
+      "android/arch/persistence/room/parser/QueryType": "androidx/persistence/room/parser/QueryType",
+      "android/arch/persistence/room/parser/ParsedQuery$queryWithReplacedBindParams$2$1": "androidx/persistence/room/parser/ParsedQuery$queryWithReplacedBindParams$2$1",
+      "android/arch/persistence/room/parser/ParsedQuery$queryWithReplacedBindParams$2": "androidx/persistence/room/parser/ParsedQuery$queryWithReplacedBindParams$2",
+      "android/arch/persistence/room/parser/ParsedQuery$WhenMappings": "androidx/persistence/room/parser/ParsedQuery$WhenMappings",
+      "android/arch/persistence/room/parser/SqlParser": "androidx/persistence/room/parser/SqlParser",
+      "android/arch/persistence/room/parser/SqlParser$Companion": "androidx/persistence/room/parser/SqlParser$Companion",
+      "android/arch/persistence/room/parser/SqlParser$Companion$parse$1": "androidx/persistence/room/parser/SqlParser$Companion$parse$1",
+      "android/arch/persistence/room/parser/ParserErrors": "androidx/persistence/room/parser/ParserErrors",
+      "android/arch/persistence/room/parser/QueryVisitor": "androidx/persistence/room/parser/QueryVisitor",
+      "android/arch/persistence/room/parser/Table": "androidx/persistence/room/parser/Table",
+      "android/arch/persistence/room/parser/ParsedQuery$errors$2": "androidx/persistence/room/parser/ParsedQuery$errors$2",
+      "android/arch/persistence/room/parser/QueryVisitor$createParsedQuery$$inlined$sortedBy$1": "androidx/persistence/room/parser/QueryVisitor$createParsedQuery$$inlined$sortedBy$1",
+      "android/arch/persistence/room/parser/ParserErrors$invalidQueryType$1": "androidx/persistence/room/parser/ParserErrors$invalidQueryType$1",
+      "android/arch/persistence/room/parser/QueryType$Companion": "androidx/persistence/room/parser/QueryType$Companion",
+      "android/arch/persistence/room/parser/ParsedQuery$bindSections$2": "androidx/persistence/room/parser/ParsedQuery$bindSections$2",
+      "android/arch/persistence/room/parser/ParsedQuery$Companion": "androidx/persistence/room/parser/ParsedQuery$Companion",
+      "android/arch/persistence/room/verifier/QueryResultInfo": "androidx/persistence/room/verifier/QueryResultInfo",
+      "android/arch/persistence/room/ext/RoomTypeNames": "androidx/persistence/room/ext/RoomTypeNames",
+      "android/arch/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_TO_BOOLEAN_VISITOR$1": "androidx/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_TO_BOOLEAN_VISITOR$1",
+      "android/arch/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_STRING_ARR_VISITOR$1": "androidx/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_STRING_ARR_VISITOR$1",
+      "android/arch/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_TO_STRING_VISITOR$1": "androidx/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_TO_STRING_VISITOR$1",
+      "android/arch/persistence/room/ext/LifecyclesTypeNames": "androidx/persistence/room/ext/LifecyclesTypeNames",
+      "android/arch/persistence/room/ext/RoomRxJava2TypeNames": "androidx/persistence/room/ext/RoomRxJava2TypeNames",
+      "android/arch/persistence/room/ext/Element_extKt$TO_LIST_OF_TYPES$1": "androidx/persistence/room/ext/Element_extKt$TO_LIST_OF_TYPES$1",
+      "android/arch/persistence/room/ext/Element_extKt$TO_TYPE$1": "androidx/persistence/room/ext/Element_extKt$TO_TYPE$1",
+      "android/arch/persistence/room/ext/Element_extKt$extendsBound$1": "androidx/persistence/room/ext/Element_extKt$extendsBound$1",
+      "android/arch/persistence/room/ext/RxJava2TypeNames": "androidx/persistence/room/ext/RxJava2TypeNames",
+      "android/arch/persistence/room/ext/ArchTypeNames": "androidx/persistence/room/ext/ArchTypeNames",
+      "android/arch/persistence/room/ext/SupportDbTypeNames": "androidx/persistence/room/ext/SupportDbTypeNames",
+      "android/arch/persistence/room/ext/AndroidTypeNames": "androidx/persistence/room/ext/AndroidTypeNames",
+      "android/arch/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_TO_INT_VISITOR$1": "androidx/persistence/room/ext/Element_extKt$ANNOTATION_VALUE_TO_INT_VISITOR$1",
+      "android/arch/persistence/room/ext/PagingTypeNames": "androidx/persistence/room/ext/PagingTypeNames",
+      "android/arch/persistence/room/ext/ReactiveStreamsTypeNames": "androidx/persistence/room/ext/ReactiveStreamsTypeNames",
+      "android/arch/persistence/room/ext/Javapoet_extKt": "androidx/persistence/room/ext/Javapoet_extKt",
+      "android/arch/persistence/room/ext/CommonTypeNames": "androidx/persistence/room/ext/CommonTypeNames",
+      "android/arch/persistence/room/solver/QueryResultBinderProvider": "androidx/persistence/room/solver/QueryResultBinderProvider",
+      "android/arch/persistence/room/solver/query/result/QueryResultBinder": "androidx/persistence/room/solver/query/result/QueryResultBinder",
+      "android/arch/persistence/room/solver/TypeAdapterStore$Companion$create$4": "androidx/persistence/room/solver/TypeAdapterStore$Companion$create$4",
+      "android/arch/persistence/room/solver/types/ColumnTypeAdapter": "androidx/persistence/room/solver/types/ColumnTypeAdapter",
+      "android/arch/persistence/room/solver/TypeAdapterStore$Companion": "androidx/persistence/room/solver/TypeAdapterStore$Companion",
+      "android/arch/persistence/room/solver/TypeAdapterStore": "androidx/persistence/room/solver/TypeAdapterStore",
+      "android/arch/persistence/room/solver/CodeGenScope": "androidx/persistence/room/solver/CodeGenScope",
+      "android/arch/persistence/room/solver/CodeGenScope$Companion": "androidx/persistence/room/solver/CodeGenScope$Companion",
+      "android/arch/persistence/room/writer/ClassWriter": "androidx/persistence/room/writer/ClassWriter",
+      "android/arch/persistence/room/solver/TypeAdapterStore$Companion$create$1": "androidx/persistence/room/solver/TypeAdapterStore$Companion$create$1",
+      "android/arch/persistence/room/solver/TypeAdapterStore$Companion$create$3": "androidx/persistence/room/solver/TypeAdapterStore$Companion$create$3",
+      "android/arch/persistence/room/solver/types/PrimitiveColumnTypeAdapter": "androidx/persistence/room/solver/types/PrimitiveColumnTypeAdapter",
+      "android/arch/persistence/room/solver/types/PrimitiveColumnTypeAdapter$Companion": "androidx/persistence/room/solver/types/PrimitiveColumnTypeAdapter$Companion",
+      "android/arch/persistence/room/solver/types/BoxedPrimitiveColumnTypeAdapter": "androidx/persistence/room/solver/types/BoxedPrimitiveColumnTypeAdapter",
+      "android/arch/persistence/room/solver/types/BoxedPrimitiveColumnTypeAdapter$Companion": "androidx/persistence/room/solver/types/BoxedPrimitiveColumnTypeAdapter$Companion",
+      "android/arch/persistence/room/solver/types/StringColumnTypeAdapter": "androidx/persistence/room/solver/types/StringColumnTypeAdapter",
+      "android/arch/persistence/room/solver/types/ByteArrayColumnTypeAdapter": "androidx/persistence/room/solver/types/ByteArrayColumnTypeAdapter",
+      "android/arch/persistence/room/solver/types/PrimitiveBooleanToIntConverter": "androidx/persistence/room/solver/types/PrimitiveBooleanToIntConverter",
+      "android/arch/persistence/room/solver/types/TypeConverter": "androidx/persistence/room/solver/types/TypeConverter",
+      "android/arch/persistence/room/solver/types/BoxedBooleanToBoxedIntConverter": "androidx/persistence/room/solver/types/BoxedBooleanToBoxedIntConverter",
+      "android/arch/persistence/room/solver/TypeAdapterStore$findTypeConverter$2": "androidx/persistence/room/solver/TypeAdapterStore$findTypeConverter$2",
+      "android/arch/persistence/room/solver/binderprovider/DataSourceFactoryQueryResultBinderProvider$dataSourceFactoryTypeMirror$2": "androidx/persistence/room/solver/binderprovider/DataSourceFactoryQueryResultBinderProvider$dataSourceFactoryTypeMirror$2",
+      "android/arch/persistence/room/solver/binderprovider/DataSourceFactoryQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/DataSourceFactoryQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/query/result/RowAdapter": "androidx/persistence/room/solver/query/result/RowAdapter",
+      "android/arch/persistence/room/solver/query/result/ListQueryResultAdapter": "androidx/persistence/room/solver/query/result/ListQueryResultAdapter",
+      "android/arch/persistence/room/solver/query/result/PositionalDataSourceQueryResultBinder": "androidx/persistence/room/solver/query/result/PositionalDataSourceQueryResultBinder",
+      "android/arch/persistence/room/solver/query/result/LivePagedListQueryResultBinder": "androidx/persistence/room/solver/query/result/LivePagedListQueryResultBinder",
+      "android/arch/persistence/room/solver/binderprovider/DataSourceQueryResultBinderProvider$positionalDataSourceTypeMirror$2": "androidx/persistence/room/solver/binderprovider/DataSourceQueryResultBinderProvider$positionalDataSourceTypeMirror$2",
+      "android/arch/persistence/room/solver/binderprovider/DataSourceQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/DataSourceQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/binderprovider/DataSourceQueryResultBinderProvider$dataSourceTypeMirror$2": "androidx/persistence/room/solver/binderprovider/DataSourceQueryResultBinderProvider$dataSourceTypeMirror$2",
+      "android/arch/persistence/room/solver/binderprovider/RxSingleQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/RxSingleQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/query/result/RxCallableQueryResultBinder$RxType": "androidx/persistence/room/solver/query/result/RxCallableQueryResultBinder$RxType",
+      "android/arch/persistence/room/solver/binderprovider/CursorQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/CursorQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/query/result/CursorQueryResultBinder": "androidx/persistence/room/solver/query/result/CursorQueryResultBinder",
+      "android/arch/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider$hasRxJava2Artifact$2": "androidx/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider$hasRxJava2Artifact$2",
+      "android/arch/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider$flowableTypeMirror$2": "androidx/persistence/room/solver/binderprovider/FlowableQueryResultBinderProvider$flowableTypeMirror$2",
+      "android/arch/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/ObservableQueryResultBinderProvider": "androidx/persistence/room/solver/ObservableQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider$liveDataTypeMirror$2": "androidx/persistence/room/solver/binderprovider/LiveDataQueryResultBinderProvider$liveDataTypeMirror$2",
+      "android/arch/persistence/room/solver/query/result/QueryResultAdapter": "androidx/persistence/room/solver/query/result/QueryResultAdapter",
+      "android/arch/persistence/room/solver/query/result/LiveDataQueryResultBinder": "androidx/persistence/room/solver/query/result/LiveDataQueryResultBinder",
+      "android/arch/persistence/room/solver/binderprovider/RxMaybeQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/RxMaybeQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider$hasRxJava2Artifact$2": "androidx/persistence/room/solver/binderprovider/RxCallableQueryResultBinderProvider$hasRxJava2Artifact$2",
+      "android/arch/persistence/room/solver/query/result/RxCallableQueryResultBinder": "androidx/persistence/room/solver/query/result/RxCallableQueryResultBinder",
+      "android/arch/persistence/room/solver/query/result/FlowableQueryResultBinder": "androidx/persistence/room/solver/query/result/FlowableQueryResultBinder",
+      "android/arch/persistence/room/solver/binderprovider/InstantQueryResultBinderProvider": "androidx/persistence/room/solver/binderprovider/InstantQueryResultBinderProvider",
+      "android/arch/persistence/room/solver/query/result/InstantQueryResultBinder": "androidx/persistence/room/solver/query/result/InstantQueryResultBinder",
+      "android/arch/persistence/room/solver/types/CursorValueReader": "androidx/persistence/room/solver/types/CursorValueReader",
+      "android/arch/persistence/room/solver/types/PrimitiveColumnTypeAdapter$Companion$WhenMappings": "androidx/persistence/room/solver/types/PrimitiveColumnTypeAdapter$Companion$WhenMappings",
+      "android/arch/persistence/room/solver/types/CustomTypeConverterWrapper": "androidx/persistence/room/solver/types/CustomTypeConverterWrapper",
+      "android/arch/persistence/room/solver/types/CustomTypeConverterWrapper$typeConverter$1": "androidx/persistence/room/solver/types/CustomTypeConverterWrapper$typeConverter$1",
+      "android/arch/persistence/room/vo/CustomTypeConverter": "androidx/persistence/room/vo/CustomTypeConverter",
+      "android/arch/persistence/room/writer/ClassWriter$SharedFieldSpec": "androidx/persistence/room/writer/ClassWriter$SharedFieldSpec",
+      "android/arch/persistence/room/solver/types/CompositeTypeConverter": "androidx/persistence/room/solver/types/CompositeTypeConverter",
+      "android/arch/persistence/room/solver/types/CompositeAdapter": "androidx/persistence/room/solver/types/CompositeAdapter",
+      "android/arch/persistence/room/solver/types/NoOpConverter": "androidx/persistence/room/solver/types/NoOpConverter",
+      "android/arch/persistence/room/solver/types/PrimitiveBooleanToIntConverter$create$1": "androidx/persistence/room/solver/types/PrimitiveBooleanToIntConverter$create$1",
+      "android/arch/persistence/room/solver/types/PrimitiveBooleanToIntConverter$create$2": "androidx/persistence/room/solver/types/PrimitiveBooleanToIntConverter$create$2",
+      "android/arch/persistence/room/solver/types/StatementValueBinder": "androidx/persistence/room/solver/types/StatementValueBinder",
+      "android/arch/persistence/room/solver/types/ColumnTypeAdapter$outTypeName$2": "androidx/persistence/room/solver/types/ColumnTypeAdapter$outTypeName$2",
+      "android/arch/persistence/room/solver/types/BoxedBooleanToBoxedIntConverter$create$1": "androidx/persistence/room/solver/types/BoxedBooleanToBoxedIntConverter$create$1",
+      "android/arch/persistence/room/solver/types/BoxedBooleanToBoxedIntConverter$create$2": "androidx/persistence/room/solver/types/BoxedBooleanToBoxedIntConverter$create$2",
+      "android/arch/persistence/room/solver/query/parameter/ArrayQueryParameterAdapter": "androidx/persistence/room/solver/query/parameter/ArrayQueryParameterAdapter",
+      "android/arch/persistence/room/solver/query/parameter/QueryParameterAdapter": "androidx/persistence/room/solver/query/parameter/QueryParameterAdapter",
+      "android/arch/persistence/room/solver/query/parameter/CollectionQueryParameterAdapter": "androidx/persistence/room/solver/query/parameter/CollectionQueryParameterAdapter",
+      "android/arch/persistence/room/solver/query/parameter/BasicQueryParameterAdapter": "androidx/persistence/room/solver/query/parameter/BasicQueryParameterAdapter",
+      "android/arch/persistence/room/solver/query/result/PojoRowAdapter$Mapping": "androidx/persistence/room/solver/query/result/PojoRowAdapter$Mapping",
+      "android/arch/persistence/room/solver/query/result/PojoRowAdapter": "androidx/persistence/room/solver/query/result/PojoRowAdapter",
+      "android/arch/persistence/room/vo/FieldWithIndex": "androidx/persistence/room/vo/FieldWithIndex",
+      "android/arch/persistence/room/vo/Field": "androidx/persistence/room/vo/Field",
+      "android/arch/persistence/room/solver/query/result/CursorQueryResultBinder$Companion": "androidx/persistence/room/solver/query/result/CursorQueryResultBinder$Companion",
+      "android/arch/persistence/room/solver/query/result/CursorQueryResultBinder$Companion$NO_OP_RESULT_ADAPTER$1": "androidx/persistence/room/solver/query/result/CursorQueryResultBinder$Companion$NO_OP_RESULT_ADAPTER$1",
+      "android/arch/persistence/room/solver/query/result/TransactionWrapper": "androidx/persistence/room/solver/query/result/TransactionWrapper",
+      "android/arch/persistence/room/solver/query/result/PositionalDataSourceQueryResultBinder$convertAndReturn$tableNamesList$1": "androidx/persistence/room/solver/query/result/PositionalDataSourceQueryResultBinder$convertAndReturn$tableNamesList$1",
+      "android/arch/persistence/room/solver/query/result/TransactionWrapperKt": "androidx/persistence/room/solver/query/result/TransactionWrapperKt",
+      "android/arch/persistence/room/writer/DaoWriter$Companion": "androidx/persistence/room/writer/DaoWriter$Companion",
+      "android/arch/persistence/room/solver/query/result/SingleEntityQueryResultAdapter": "androidx/persistence/room/solver/query/result/SingleEntityQueryResultAdapter",
+      "android/arch/persistence/room/solver/query/result/BaseObservableQueryResultBinder": "androidx/persistence/room/solver/query/result/BaseObservableQueryResultBinder",
+      "android/arch/persistence/room/solver/query/result/LiveDataQueryResultBinder$createAnonymousObserver$tableNamesList$1": "androidx/persistence/room/solver/query/result/LiveDataQueryResultBinder$createAnonymousObserver$tableNamesList$1",
+      "android/arch/persistence/room/solver/query/result/TransactionWrapperKt$transactionWrapper$1": "androidx/persistence/room/solver/query/result/TransactionWrapperKt$transactionWrapper$1",
+      "android/arch/persistence/room/solver/query/result/PojoRowAdapter$onCursorFinished$1": "androidx/persistence/room/solver/query/result/PojoRowAdapter$onCursorFinished$1",
+      "android/arch/persistence/room/vo/RelationCollector": "androidx/persistence/room/vo/RelationCollector",
+      "android/arch/persistence/room/vo/Pojo": "androidx/persistence/room/vo/Pojo",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter": "androidx/persistence/room/writer/FieldReadWriteWriter",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion",
+      "android/arch/persistence/room/vo/RelationCollector$Companion": "androidx/persistence/room/vo/RelationCollector$Companion",
+      "android/arch/persistence/room/solver/query/result/TransactionWrapperKt$transactionWrapper$2": "androidx/persistence/room/solver/query/result/TransactionWrapperKt$transactionWrapper$2",
+      "android/arch/persistence/room/solver/query/result/FlowableQueryResultBinder$convertAndReturn$1$tableNamesList$1": "androidx/persistence/room/solver/query/result/FlowableQueryResultBinder$convertAndReturn$1$tableNamesList$1",
+      "android/arch/persistence/room/solver/query/result/SingleColumnRowAdapter": "androidx/persistence/room/solver/query/result/SingleColumnRowAdapter",
+      "android/arch/persistence/room/solver/query/result/ArrayQueryResultAdapter": "androidx/persistence/room/solver/query/result/ArrayQueryResultAdapter",
+      "android/arch/persistence/room/solver/query/result/EntityRowAdapter": "androidx/persistence/room/solver/query/result/EntityRowAdapter",
+      "android/arch/persistence/room/vo/Entity": "androidx/persistence/room/vo/Entity",
+      "android/arch/persistence/room/writer/EntityCursorConverterWriter": "androidx/persistence/room/writer/EntityCursorConverterWriter",
+      "android/arch/persistence/room/writer/ClassWriter$SharedMethodSpec": "androidx/persistence/room/writer/ClassWriter$SharedMethodSpec",
+      "android/arch/persistence/room/solver/TypeAdapterStore$findRowAdapter$1": "androidx/persistence/room/solver/TypeAdapterStore$findRowAdapter$1",
+      "android/arch/persistence/room/solver/TypeAdapterStore$knownColumnTypeMirrors$2": "androidx/persistence/room/solver/TypeAdapterStore$knownColumnTypeMirrors$2",
+      "android/arch/persistence/room/log/RLog$CollectingMessager": "androidx/persistence/room/log/RLog$CollectingMessager",
+      "android/arch/persistence/room/processor/EntityProcessor": "androidx/persistence/room/processor/EntityProcessor",
+      "android/arch/persistence/room/processor/PojoProcessor": "androidx/persistence/room/processor/PojoProcessor",
+      "android/arch/persistence/room/processor/FieldProcessor$BindingScope": "androidx/persistence/room/processor/FieldProcessor$BindingScope",
+      "android/arch/persistence/room/vo/EmbeddedField": "androidx/persistence/room/vo/EmbeddedField",
+      "android/arch/persistence/room/processor/TransactionMethodProcessor": "androidx/persistence/room/processor/TransactionMethodProcessor",
+      "android/arch/persistence/room/vo/TransactionMethod": "androidx/persistence/room/vo/TransactionMethod",
+      "android/arch/persistence/room/processor/ProcessorErrors$cursorPojoMismatch$unusedFieldsWarning$1": "androidx/persistence/room/processor/ProcessorErrors$cursorPojoMismatch$unusedFieldsWarning$1",
+      "android/arch/persistence/room/processor/ProcessorErrors$cursorPojoMismatch$1": "androidx/persistence/room/processor/ProcessorErrors$cursorPojoMismatch$1",
+      "android/arch/persistence/room/processor/ProcessorErrors$duplicateTypeConverters$1": "androidx/persistence/room/processor/ProcessorErrors$duplicateTypeConverters$1",
+      "android/arch/persistence/room/processor/ProcessorErrors$INVALID_ANNOTATION_COUNT_IN_DAO_METHOD$1": "androidx/persistence/room/processor/ProcessorErrors$INVALID_ANNOTATION_COUNT_IN_DAO_METHOD$1",
+      "android/arch/persistence/room/processor/ProcessorErrors$CANNOT_USE_MORE_THAN_ONE_POJO_FIELD_ANNOTATION$1": "androidx/persistence/room/processor/ProcessorErrors$CANNOT_USE_MORE_THAN_ONE_POJO_FIELD_ANNOTATION$1",
+      "android/arch/persistence/room/Query": "androidx/persistence/room/Query",
+      "android/arch/persistence/room/Insert": "androidx/persistence/room/Insert",
+      "android/arch/persistence/room/Delete": "androidx/persistence/room/Delete",
+      "android/arch/persistence/room/Update": "androidx/persistence/room/Update",
+      "android/arch/persistence/room/RawQuery": "androidx/persistence/room/RawQuery",
+      "android/arch/persistence/room/processor/DaoProcessor": "androidx/persistence/room/processor/DaoProcessor",
+      "android/arch/persistence/room/processor/DaoProcessor$Companion": "androidx/persistence/room/processor/DaoProcessor$Companion",
+      "android/arch/persistence/room/processor/PojoProcessor$Companion": "androidx/persistence/room/processor/PojoProcessor$Companion",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor$getInsertionType$2": "androidx/persistence/room/processor/InsertionMethodProcessor$getInsertionType$2",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor": "androidx/persistence/room/processor/InsertionMethodProcessor",
+      "android/arch/persistence/room/vo/InsertionMethod$Type": "androidx/persistence/room/vo/InsertionMethod$Type",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor$getInsertionType$1": "androidx/persistence/room/processor/InsertionMethodProcessor$getInsertionType$1",
+      "android/arch/persistence/room/processor/QueryMethodProcessor$WhenMappings": "androidx/persistence/room/processor/QueryMethodProcessor$WhenMappings",
+      "android/arch/persistence/room/processor/PojoProcessor$assignGetter$success$1": "androidx/persistence/room/processor/PojoProcessor$assignGetter$success$1",
+      "android/arch/persistence/room/processor/EntityProcessor$Companion$INDEX_VISITOR$1": "androidx/persistence/room/processor/EntityProcessor$Companion$INDEX_VISITOR$1",
+      "android/arch/persistence/room/processor/EntityProcessor$IndexInput": "androidx/persistence/room/processor/EntityProcessor$IndexInput",
+      "android/arch/persistence/room/processor/EntityProcessor$Companion": "androidx/persistence/room/processor/EntityProcessor$Companion",
+      "android/arch/persistence/room/processor/EntityProcessor$checkIndicesForForeignKeys$1": "androidx/persistence/room/processor/EntityProcessor$checkIndicesForForeignKeys$1",
+      "android/arch/persistence/room/vo/PrimaryKey": "androidx/persistence/room/vo/PrimaryKey",
+      "android/arch/persistence/room/processor/DatabaseProcessor$validateUniqueDaoClasses$check$1": "androidx/persistence/room/processor/DatabaseProcessor$validateUniqueDaoClasses$check$1",
+      "android/arch/persistence/room/processor/cache/Cache$FullKey": "androidx/persistence/room/processor/cache/Cache$FullKey",
+      "android/arch/persistence/room/processor/cache/Cache": "androidx/persistence/room/processor/cache/Cache",
+      "android/arch/persistence/room/processor/cache/Cache$PojoKey": "androidx/persistence/room/processor/cache/Cache$PojoKey",
+      "android/arch/persistence/room/processor/cache/Cache$Bucket": "androidx/persistence/room/processor/cache/Cache$Bucket",
+      "android/arch/persistence/room/processor/cache/Cache$EntityKey": "androidx/persistence/room/processor/cache/Cache$EntityKey",
+      "android/arch/persistence/room/processor/CustomConverterProcessor$ProcessResult": "androidx/persistence/room/processor/CustomConverterProcessor$ProcessResult",
+      "android/arch/persistence/room/processor/CustomConverterProcessor$ProcessResult$EMPTY": "androidx/persistence/room/processor/CustomConverterProcessor$ProcessResult$EMPTY",
+      "android/arch/persistence/room/processor/CustomConverterProcessor": "androidx/persistence/room/processor/CustomConverterProcessor",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor$getInsertionType$3": "androidx/persistence/room/processor/InsertionMethodProcessor$getInsertionType$3",
+      "android/arch/persistence/room/processor/Context$ProcessorOptions": "androidx/persistence/room/processor/Context$ProcessorOptions",
+      "android/arch/persistence/room/processor/Context$Companion": "androidx/persistence/room/processor/Context$Companion",
+      "android/arch/persistence/room/processor/DatabaseProcessor$baseClassElement$2": "androidx/persistence/room/processor/DatabaseProcessor$baseClassElement$2",
+      "android/arch/persistence/room/verifier/DatabaseVerifier": "androidx/persistence/room/verifier/DatabaseVerifier",
+      "android/arch/persistence/room/SkipQueryVerification": "androidx/persistence/room/SkipQueryVerification",
+      "android/arch/persistence/room/verifier/DatabaseVerifier$Companion": "androidx/persistence/room/verifier/DatabaseVerifier$Companion",
+      "android/arch/persistence/room/vo/ForeignKey": "androidx/persistence/room/vo/ForeignKey",
+      "android/arch/persistence/room/vo/Index": "androidx/persistence/room/vo/Index",
+      "android/arch/persistence/room/vo/ShortcutMethod": "androidx/persistence/room/vo/ShortcutMethod",
+      "android/arch/persistence/room/vo/InsertionMethod": "androidx/persistence/room/vo/InsertionMethod",
+      "android/arch/persistence/room/processor/ShortcutParameterProcessor$extractEntityType$2": "androidx/persistence/room/processor/ShortcutParameterProcessor$extractEntityType$2",
+      "android/arch/persistence/room/processor/ShortcutParameterProcessor": "androidx/persistence/room/processor/ShortcutParameterProcessor",
+      "android/arch/persistence/room/processor/PojoProcessor$assignSetter$success$2": "androidx/persistence/room/processor/PojoProcessor$assignSetter$success$2",
+      "android/arch/persistence/room/vo/Constructor": "androidx/persistence/room/vo/Constructor",
+      "android/arch/persistence/room/vo/FieldSetter": "androidx/persistence/room/vo/FieldSetter",
+      "android/arch/persistence/room/vo/CallType": "androidx/persistence/room/vo/CallType",
+      "android/arch/persistence/room/processor/PojoProcessor$assignSetter$success$1": "androidx/persistence/room/processor/PojoProcessor$assignSetter$success$1",
+      "android/arch/persistence/room/processor/PojoProcessor$chooseConstructor$failureMsg$1$paramsMatching$1": "androidx/persistence/room/processor/PojoProcessor$chooseConstructor$failureMsg$1$paramsMatching$1",
+      "android/arch/persistence/room/processor/PojoProcessor$chooseConstructor$failureMsg$1": "androidx/persistence/room/processor/PojoProcessor$chooseConstructor$failureMsg$1",
+      "android/arch/persistence/room/vo/Constructor$Param": "androidx/persistence/room/vo/Constructor$Param",
+      "android/arch/persistence/room/processor/PojoProcessor$assignGetter$success$2": "androidx/persistence/room/processor/PojoProcessor$assignGetter$success$2",
+      "android/arch/persistence/room/vo/FieldGetter": "androidx/persistence/room/vo/FieldGetter",
+      "android/arch/persistence/room/processor/PojoProcessor$process$1": "androidx/persistence/room/processor/PojoProcessor$process$1",
+      "android/arch/persistence/room/processor/EntityProcessor$Companion$FOREIGN_KEY_VISITOR$1": "androidx/persistence/room/processor/EntityProcessor$Companion$FOREIGN_KEY_VISITOR$1",
+      "android/arch/persistence/room/processor/EntityProcessor$ForeignKeyInput": "androidx/persistence/room/processor/EntityProcessor$ForeignKeyInput",
+      "android/arch/persistence/room/vo/ForeignKeyAction": "androidx/persistence/room/vo/ForeignKeyAction",
+      "android/arch/persistence/room/vo/ForeignKeyAction$Companion": "androidx/persistence/room/vo/ForeignKeyAction$Companion",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor$Companion": "androidx/persistence/room/processor/InsertionMethodProcessor$Companion",
+      "android/arch/persistence/room/vo/ShortcutQueryParameter": "androidx/persistence/room/vo/ShortcutQueryParameter",
+      "android/arch/persistence/room/processor/RawQueryMethodProcessor": "androidx/persistence/room/processor/RawQueryMethodProcessor",
+      "android/arch/persistence/room/vo/RawQueryMethod": "androidx/persistence/room/vo/RawQueryMethod",
+      "android/arch/persistence/room/vo/RawQueryMethod$RuntimeQueryParameter": "androidx/persistence/room/vo/RawQueryMethod$RuntimeQueryParameter",
+      "android/arch/persistence/room/Transaction": "androidx/persistence/room/Transaction",
+      "android/arch/persistence/room/processor/Context$CommonTypes$STRING$2": "androidx/persistence/room/processor/Context$CommonTypes$STRING$2",
+      "android/arch/persistence/room/processor/Context$CommonTypes": "androidx/persistence/room/processor/Context$CommonTypes",
+      "android/arch/persistence/room/processor/PojoProcessor$assignGetter$success$3": "androidx/persistence/room/processor/PojoProcessor$assignGetter$success$3",
+      "android/arch/persistence/room/processor/PojoProcessor$assignGetter$success$4": "androidx/persistence/room/processor/PojoProcessor$assignGetter$success$4",
+      "android/arch/persistence/room/processor/PojoProcessor$assignSetter$success$3": "androidx/persistence/room/processor/PojoProcessor$assignSetter$success$3",
+      "android/arch/persistence/room/processor/PojoProcessor$assignSetter$success$4": "androidx/persistence/room/processor/PojoProcessor$assignSetter$success$4",
+      "android/arch/persistence/room/Ignore": "androidx/persistence/room/Ignore",
+      "android/arch/persistence/room/ColumnInfo": "androidx/persistence/room/ColumnInfo",
+      "android/arch/persistence/room/Embedded": "androidx/persistence/room/Embedded",
+      "android/arch/persistence/room/Relation": "androidx/persistence/room/Relation",
+      "android/arch/persistence/room/processor/FieldProcessor": "androidx/persistence/room/processor/FieldProcessor",
+      "android/arch/persistence/room/vo/Relation": "androidx/persistence/room/vo/Relation",
+      "android/arch/persistence/room/processor/PojoProcessor$chooseConstructor$$inlined$map$lambda$1": "androidx/persistence/room/processor/PojoProcessor$chooseConstructor$$inlined$map$lambda$1",
+      "android/arch/persistence/room/vo/Constructor$FieldParam": "androidx/persistence/room/vo/Constructor$FieldParam",
+      "android/arch/persistence/room/vo/Constructor$EmbeddedParam": "androidx/persistence/room/vo/Constructor$EmbeddedParam",
+      "android/arch/persistence/room/processor/EntityProcessor$Companion$FOREIGN_KEY_LIST_VISITOR$1": "androidx/persistence/room/processor/EntityProcessor$Companion$FOREIGN_KEY_LIST_VISITOR$1",
+      "android/arch/persistence/room/processor/Context$typeAdapterStore$2": "androidx/persistence/room/processor/Context$typeAdapterStore$2",
+      "android/arch/persistence/room/processor/FieldProcessor$WhenMappings": "androidx/persistence/room/processor/FieldProcessor$WhenMappings",
+      "android/arch/persistence/room/processor/ShortcutMethodProcessor": "androidx/persistence/room/processor/ShortcutMethodProcessor",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor$Companion$SINGLE_ITEM_SET$2": "androidx/persistence/room/processor/InsertionMethodProcessor$Companion$SINGLE_ITEM_SET$2",
+      "android/arch/persistence/room/processor/CustomConverterProcessor$Companion": "androidx/persistence/room/processor/CustomConverterProcessor$Companion",
+      "android/arch/persistence/room/TypeConverter": "androidx/persistence/room/TypeConverter",
+      "android/arch/persistence/room/processor/Context$schemaOutFolder$2": "androidx/persistence/room/processor/Context$schemaOutFolder$2",
+      "android/arch/persistence/room/processor/Context$Companion$ARG_OPTIONS$2": "androidx/persistence/room/processor/Context$Companion$ARG_OPTIONS$2",
+      "android/arch/persistence/room/log/RLog$Messager": "androidx/persistence/room/log/RLog$Messager",
+      "android/arch/persistence/room/processor/SuppressWarningProcessor": "androidx/persistence/room/processor/SuppressWarningProcessor",
+      "android/arch/persistence/room/log/RLog$ProcessingEnvMessager": "androidx/persistence/room/log/RLog$ProcessingEnvMessager",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor$Companion$MULTIPLE_ITEM_SET$2": "androidx/persistence/room/processor/InsertionMethodProcessor$Companion$MULTIPLE_ITEM_SET$2",
+      "android/arch/persistence/room/processor/EntityProcessor$process$1": "androidx/persistence/room/processor/EntityProcessor$process$1",
+      "android/arch/persistence/room/processor/DeletionMethodProcessor": "androidx/persistence/room/processor/DeletionMethodProcessor",
+      "android/arch/persistence/room/vo/DeletionMethod": "androidx/persistence/room/vo/DeletionMethod",
+      "android/arch/persistence/room/processor/SuppressWarningProcessor$VISITOR": "androidx/persistence/room/processor/SuppressWarningProcessor$VISITOR",
+      "android/arch/persistence/room/vo/Warning$Companion": "androidx/persistence/room/vo/Warning$Companion",
+      "android/arch/persistence/room/processor/EntityProcessor$Companion$INDEX_LIST_VISITOR$1": "androidx/persistence/room/processor/EntityProcessor$Companion$INDEX_LIST_VISITOR$1",
+      "android/arch/persistence/room/PrimaryKey": "androidx/persistence/room/PrimaryKey",
+      "android/arch/persistence/room/vo/PrimaryKey$Companion": "androidx/persistence/room/vo/PrimaryKey$Companion",
+      "android/arch/persistence/room/processor/QueryParameterProcessor": "androidx/persistence/room/processor/QueryParameterProcessor",
+      "android/arch/persistence/room/vo/QueryParameter": "androidx/persistence/room/vo/QueryParameter",
+      "android/arch/persistence/room/processor/OnConflictProcessor": "androidx/persistence/room/processor/OnConflictProcessor",
+      "android/arch/persistence/room/processor/QueryMethodProcessor": "androidx/persistence/room/processor/QueryMethodProcessor",
+      "android/arch/persistence/room/vo/QueryMethod": "androidx/persistence/room/vo/QueryMethod",
+      "android/arch/persistence/room/processor/UpdateMethodProcessor": "androidx/persistence/room/processor/UpdateMethodProcessor",
+      "android/arch/persistence/room/vo/UpdateMethod": "androidx/persistence/room/vo/UpdateMethod",
+      "android/arch/persistence/room/verifier/DatabaseVerificaitonErrors": "androidx/persistence/room/verifier/DatabaseVerificaitonErrors",
+      "android/arch/persistence/room/processor/ShortcutParameterProcessor$extractEntityType$1": "androidx/persistence/room/processor/ShortcutParameterProcessor$extractEntityType$1",
+      "android/arch/persistence/room/processor/InsertionMethodProcessor$Companion$VOID_SET$2": "androidx/persistence/room/processor/InsertionMethodProcessor$Companion$VOID_SET$2",
+      "android/arch/persistence/room/TypeConverters": "androidx/persistence/room/TypeConverters",
+      "android/arch/persistence/room/writer/DaoWriter$createUpdateMethods$1": "androidx/persistence/room/writer/DaoWriter$createUpdateMethods$1",
+      "android/arch/persistence/room/writer/EntityUpdateAdapterWriter": "androidx/persistence/room/writer/EntityUpdateAdapterWriter",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion$bindToStatement$1": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion$bindToStatement$1",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Node": "androidx/persistence/room/writer/FieldReadWriteWriter$Node",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion$bindToStatement$1$1": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion$bindToStatement$1$1",
+      "android/arch/persistence/room/writer/DaoWriter$PreparedStmtQuery$Companion": "androidx/persistence/room/writer/DaoWriter$PreparedStmtQuery$Companion",
+      "android/arch/persistence/room/writer/DaoWriter$PreparedStmtQuery": "androidx/persistence/room/writer/DaoWriter$PreparedStmtQuery",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion$getAllParents$1": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion$getAllParents$1",
+      "android/arch/persistence/room/writer/TableInfoValidationWriter$write$1$3$columnNames$1": "androidx/persistence/room/writer/TableInfoValidationWriter$write$1$3$columnNames$1",
+      "android/arch/persistence/room/writer/TableInfoValidationWriter": "androidx/persistence/room/writer/TableInfoValidationWriter",
+      "android/arch/persistence/room/writer/DaoWriter$InsertionMethodField": "androidx/persistence/room/writer/DaoWriter$InsertionMethodField",
+      "android/arch/persistence/room/writer/EntityInsertionAdapterWriter": "androidx/persistence/room/writer/EntityInsertionAdapterWriter",
+      "android/arch/persistence/room/writer/EntityInsertionAdapterWriter$createAnonymous$1$1$query$1": "androidx/persistence/room/writer/EntityInsertionAdapterWriter$createAnonymous$1$1$query$1",
+      "android/arch/persistence/room/writer/EntityInsertionAdapterWriter$createAnonymous$$inlined$apply$lambda$1": "androidx/persistence/room/writer/EntityInsertionAdapterWriter$createAnonymous$$inlined$apply$lambda$1",
+      "android/arch/persistence/room/vo/FieldWithIndex$Companion": "androidx/persistence/room/vo/FieldWithIndex$Companion",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$readFromCursor$1": "androidx/persistence/room/writer/FieldReadWriteWriter$readFromCursor$1",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$WhenMappings": "androidx/persistence/room/writer/FieldReadWriteWriter$WhenMappings",
+      "android/arch/persistence/room/writer/RelationCollectorMethodWriter$Companion": "androidx/persistence/room/writer/RelationCollectorMethodWriter$Companion",
+      "android/arch/persistence/room/writer/RelationCollectorMethodWriter": "androidx/persistence/room/writer/RelationCollectorMethodWriter",
+      "android/arch/persistence/room/writer/RelationCollectorMethodWriter$prepare$$inlined$apply$lambda$1": "androidx/persistence/room/writer/RelationCollectorMethodWriter$prepare$$inlined$apply$lambda$1",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion$readFromCursor$1$allNullCheck$1": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion$readFromCursor$1$allNullCheck$1",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion$readFromCursor$1": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion$readFromCursor$1",
+      "android/arch/persistence/room/writer/SQLiteOpenHelperWriter": "androidx/persistence/room/writer/SQLiteOpenHelperWriter",
+      "android/arch/persistence/room/writer/PreparedStatementWriter": "androidx/persistence/room/writer/PreparedStatementWriter",
+      "android/arch/persistence/room/writer/QueryWriter": "androidx/persistence/room/writer/QueryWriter",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion$construct$args$1": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion$construct$args$1",
+      "android/arch/persistence/room/writer/DaoWriter$PreparedStatementField": "androidx/persistence/room/writer/DaoWriter$PreparedStatementField",
+      "android/arch/persistence/room/writer/QueryWriter$createSqlQueryAndArgs$1$2": "androidx/persistence/room/writer/QueryWriter$createSqlQueryAndArgs$1$2",
+      "android/arch/persistence/room/writer/QueryWriter$WhenMappings": "androidx/persistence/room/writer/QueryWriter$WhenMappings",
+      "android/arch/persistence/room/writer/QueryWriter$bindArgs$1$1$1": "androidx/persistence/room/writer/QueryWriter$bindArgs$1$1$1",
+      "android/arch/persistence/room/writer/DaoWriter$DeleteOrUpdateAdapterField": "androidx/persistence/room/writer/DaoWriter$DeleteOrUpdateAdapterField",
+      "android/arch/persistence/room/writer/DaoWriter$createDeletionMethods$1": "androidx/persistence/room/writer/DaoWriter$createDeletionMethods$1",
+      "android/arch/persistence/room/writer/EntityDeletionAdapterWriter": "androidx/persistence/room/writer/EntityDeletionAdapterWriter",
+      "android/arch/persistence/room/writer/EntityUpdateAdapterWriter$createAnonymous$1$1$query$1": "androidx/persistence/room/writer/EntityUpdateAdapterWriter$createAnonymous$1$1$query$1",
+      "android/arch/persistence/room/writer/EntityDeletionAdapterWriter$createAnonymous$1$1$query$1": "androidx/persistence/room/writer/EntityDeletionAdapterWriter$createAnonymous$1$1$query$1",
+      "android/arch/persistence/room/writer/TableInfoValidationWriter$write$1$2$myColumnNames$1": "androidx/persistence/room/writer/TableInfoValidationWriter$write$1$2$myColumnNames$1",
+      "android/arch/persistence/room/writer/TableInfoValidationWriter$write$1$2$refColumnNames$1": "androidx/persistence/room/writer/TableInfoValidationWriter$write$1$2$refColumnNames$1",
+      "android/arch/persistence/room/writer/FieldReadWriteWriter$Companion$readFromCursor$1$1": "androidx/persistence/room/writer/FieldReadWriteWriter$Companion$readFromCursor$1$1",
+      "android/arch/persistence/room/writer/EntityUpdateAdapterWriter$createAnonymous$1$1$query$2": "androidx/persistence/room/writer/EntityUpdateAdapterWriter$createAnonymous$1$1$query$2",
+      "android/arch/persistence/room/writer/DatabaseWriter$createCreateInvalidationTracker$1$tableNames$1": "androidx/persistence/room/writer/DatabaseWriter$createCreateInvalidationTracker$1$tableNames$1",
+      "android/arch/persistence/room/log/RLog$Messager$DefaultImpls": "androidx/persistence/room/log/RLog$Messager$DefaultImpls",
+      "android/arch/persistence/room/vo/RawQueryMethod$returnsValue$2": "androidx/persistence/room/vo/RawQueryMethod$returnsValue$2",
+      "android/arch/persistence/room/vo/Database$typeName$2": "androidx/persistence/room/vo/Database$typeName$2",
+      "android/arch/persistence/room/vo/Database$implClassName$2": "androidx/persistence/room/vo/Database$implClassName$2",
+      "android/arch/persistence/room/vo/Database$implTypeName$2": "androidx/persistence/room/vo/Database$implTypeName$2",
+      "android/arch/persistence/room/vo/Database$bundle$2": "androidx/persistence/room/vo/Database$bundle$2",
+      "android/arch/persistence/room/vo/Database$identityHash$2": "androidx/persistence/room/vo/Database$identityHash$2",
+      "android/arch/persistence/room/vo/Database$legacyIdentityHash$2": "androidx/persistence/room/vo/Database$legacyIdentityHash$2",
+      "android/arch/persistence/room/vo/FieldGetter$WhenMappings": "androidx/persistence/room/vo/FieldGetter$WhenMappings",
+      "android/arch/persistence/room/vo/ForeignKey$getIdKey$1": "androidx/persistence/room/vo/ForeignKey$getIdKey$1",
+      "android/arch/persistence/room/vo/HasSchemaIdentity": "androidx/persistence/room/vo/HasSchemaIdentity",
+      "android/arch/persistence/room/vo/PrimaryKey$toHumanReadableString$1": "androidx/persistence/room/vo/PrimaryKey$toHumanReadableString$1",
+      "android/arch/persistence/room/vo/PrimaryKey$columnNames$2": "androidx/persistence/room/vo/PrimaryKey$columnNames$2",
+      "android/arch/persistence/room/vo/Field$setterNameWithVariations$2": "androidx/persistence/room/vo/Field$setterNameWithVariations$2",
+      "android/arch/persistence/room/vo/EmbeddedField$setter$2": "androidx/persistence/room/vo/EmbeddedField$setter$2",
+      "android/arch/persistence/room/vo/CustomTypeConverter$typeName$2": "androidx/persistence/room/vo/CustomTypeConverter$typeName$2",
+      "android/arch/persistence/room/vo/ForeignKey$joinEscaped$1": "androidx/persistence/room/vo/ForeignKey$joinEscaped$1",
+      "android/arch/persistence/room/vo/QueryMethod$sectionToParamMapping$2": "androidx/persistence/room/vo/QueryMethod$sectionToParamMapping$2",
+      "android/arch/persistence/room/vo/QueryMethod$returnsValue$2": "androidx/persistence/room/vo/QueryMethod$returnsValue$2",
+      "android/arch/persistence/room/vo/Constructor$ParamType": "androidx/persistence/room/vo/Constructor$ParamType",
+      "android/arch/persistence/room/vo/Relation$pojoTypeName$2": "androidx/persistence/room/vo/Relation$pojoTypeName$2",
+      "android/arch/persistence/room/vo/Field$typeName$2": "androidx/persistence/room/vo/Field$typeName$2",
+      "android/arch/persistence/room/vo/RelationCollector$Companion$createCollectors$1$1": "androidx/persistence/room/vo/RelationCollector$Companion$createCollectors$1$1",
+      "android/arch/persistence/room/vo/Dao$implTypeName$2": "androidx/persistence/room/vo/Dao$implTypeName$2",
+      "android/arch/persistence/room/vo/Field$pathWithDotNotation$2": "androidx/persistence/room/vo/Field$pathWithDotNotation$2",
+      "android/arch/persistence/room/vo/Dao$shortcutMethods$2": "androidx/persistence/room/vo/Dao$shortcutMethods$2",
+      "android/arch/persistence/room/vo/RelationCollector$WhenMappings": "androidx/persistence/room/vo/RelationCollector$WhenMappings",
+      "android/arch/persistence/room/vo/Field$getterNameWithVariations$2": "androidx/persistence/room/vo/Field$getterNameWithVariations$2",
+      "android/arch/persistence/room/vo/Dao$implClassName$2": "androidx/persistence/room/vo/Dao$implClassName$2",
+      "android/arch/persistence/room/vo/SchemaIdentityKey$Companion$ENGLISH_SORT$1": "androidx/persistence/room/vo/SchemaIdentityKey$Companion$ENGLISH_SORT$1",
+      "android/arch/persistence/room/vo/SchemaIdentityKey": "androidx/persistence/room/vo/SchemaIdentityKey",
+      "android/arch/persistence/room/vo/EmbeddedField$getter$2": "androidx/persistence/room/vo/EmbeddedField$getter$2",
+      "android/arch/persistence/room/vo/EmbeddedField$mRootParent$2": "androidx/persistence/room/vo/EmbeddedField$mRootParent$2",
+      "android/arch/persistence/room/vo/CustomTypeConverter$methodName$2": "androidx/persistence/room/vo/CustomTypeConverter$methodName$2",
+      "android/arch/persistence/room/vo/Pojo$typeName$2": "androidx/persistence/room/vo/Pojo$typeName$2",
+      "android/arch/persistence/room/vo/CustomTypeConverter$isStatic$2": "androidx/persistence/room/vo/CustomTypeConverter$isStatic$2",
+      "android/arch/persistence/room/vo/SchemaIdentityKey$Companion": "androidx/persistence/room/vo/SchemaIdentityKey$Companion",
+      "android/arch/persistence/room/vo/FieldSetter$WhenMappings": "androidx/persistence/room/vo/FieldSetter$WhenMappings",
+      "android/arch/persistence/room/vo/Entity$createTableQuery$2": "androidx/persistence/room/vo/Entity$createTableQuery$2",
+      "android/arch/persistence/room/vo/RelationCollector$Companion$WhenMappings": "androidx/persistence/room/vo/RelationCollector$Companion$WhenMappings",
+      "android/arch/persistence/room/vo/ForeignKeyAction$Companion$mapping$2": "androidx/persistence/room/vo/ForeignKeyAction$Companion$mapping$2",
+      "android/arch/persistence/room/vo/Index$Companion": "androidx/persistence/room/vo/Index$Companion",
+      "android/arch/persistence/room/RoomMasterTable": "androidx/persistence/room/RoomMasterTable",
+      "android/arch/persistence/room/vo/RelationCollector$writeReadParentKeyCode$$inlined$apply$lambda$1": "androidx/persistence/room/vo/RelationCollector$writeReadParentKeyCode$$inlined$apply$lambda$1",
+      "android/arch/persistence/room/vo/Dao$typeName$2": "androidx/persistence/room/vo/Dao$typeName$2",
+      "android/arch/persistence/room/vo/Field$nameWithVariations$2": "androidx/persistence/room/vo/Field$nameWithVariations$2",
+      "android/arch/persistence/room/vo/Database$legacyIdentityHash$2$$special$$inlined$sortedBy$1": "androidx/persistence/room/vo/Database$legacyIdentityHash$2$$special$$inlined$sortedBy$1",
+      "android/arch/persistence/room/vo/Index$createQuery$2": "androidx/persistence/room/vo/Index$createQuery$2",
+      "android/arch/persistence/room/vo/CustomTypeConverter$fromTypeName$2": "androidx/persistence/room/vo/CustomTypeConverter$fromTypeName$2",
+      "android/arch/persistence/room/vo/Index$getIdKey$1": "androidx/persistence/room/vo/Index$getIdKey$1",
+      "android/arch/persistence/room/vo/Index$columnNames$2": "androidx/persistence/room/vo/Index$columnNames$2",
+      "android/arch/persistence/room/vo/CustomTypeConverter$toTypeName$2": "androidx/persistence/room/vo/CustomTypeConverter$toTypeName$2",
       "android/support/animation/AnimationHandler$AnimationCallbackDispatcher": "androidx/animation/AnimationHandler$AnimationCallbackDispatcher",
-      "android/support/v7/widget/ResourcesWrapper": "androidx/widget/ResourcesWrapper",
-      "android/support/v17/leanback/widget/BrowseFrameLayout$OnChildFocusListener": "androidx/leanback/widget/BrowseFrameLayout$OnChildFocusListener",
-      "android/support/v7/widget/AppCompatEditText": "androidx/widget/AppCompatEditText",
-      "android/support/media/tv/TvContractCompat$WatchNextPrograms": "androidx/media/tv/TvContractCompat$WatchNextPrograms",
-      "android/support/v4/widget/ListPopupWindowCompat": "androidx/widget/ListPopupWindowCompat",
-      "android/support/v7/preference/PreferenceFragmentCompat$OnPreferenceDisplayDialogCallback": "androidx/preference/PreferenceFragmentCompat$OnPreferenceDisplayDialogCallback",
-      "android/support/v7/util/DiffUtil$PostponedUpdate": "androidx/util/DiffUtil$PostponedUpdate",
-      "android/support/transition/TransitionManager$MultiListener": "androidx/transition/TransitionManager$MultiListener",
-      "android/support/v4/view/ViewPropertyAnimatorCompat$ViewPropertyAnimatorListenerApi14": "androidx/view/ViewPropertyAnimatorCompat$ViewPropertyAnimatorListenerApi14",
-      "android/support/v17/leanback/widget/ViewsStateBundle": "androidx/leanback/widget/ViewsStateBundle",
-      "android/support/v4/provider/FontsContractCompat$TypefaceResult": "androidx/provider/FontsContractCompat$TypefaceResult",
-      "android/support/v4/widget/DrawerLayout$State": "androidx/widget/DrawerLayout$State",
-      "android/support/v4/widget/SwipeRefreshLayout$OnRefreshListener": "androidx/widget/SwipeRefreshLayout$OnRefreshListener",
-      "android/support/media/ExifInterface$Rational": "androidx/media/ExifInterface$Rational",
-      "android/support/v4/view/ViewPager$PagerObserver": "androidx/view/ViewPager$PagerObserver",
-      "android/support/design/widget/StateListAnimator": "androidx/design/widget/StateListAnimator",
-      "android/support/v4/media/MediaBrowserCompat$CallbackHandler": "androidx/media/MediaBrowserCompat$CallbackHandler",
-      "android/support/customtabs/CustomTabsClient": "androidx/browser/customtabs/CustomTabsClient",
-      "android/support/v4/media/MediaBrowserServiceCompatApi26$ServiceCompatProxy": "androidx/media/MediaBrowserServiceCompatApi26$ServiceCompatProxy",
-      "android/support/transition/Slide$CalculateSlideHorizontal": "androidx/transition/Slide$CalculateSlideHorizontal",
-      "android/support/v17/leanback/media/PlaybackBannerControlGlue$SPEED": "androidx/leanback/media/PlaybackBannerControlGlue$SPEED",
-      "android/support/annotation/CallSuper": "androidx/annotation/CallSuper",
-      "android/support/design/widget/Snackbar$Callback": "androidx/design/widget/Snackbar$Callback",
-      "android/support/v4/app/ActivityManagerCompat": "androidx/app/ActivityManagerCompat",
-      "android/support/v17/leanback/widget/RoundedRectHelperApi21": "androidx/leanback/widget/RoundedRectHelperApi21",
-      "android/support/v7/graphics/Palette": "androidx/graphics/palette/Palette",
-      "android/support/wear/R$color": "androidx/wear/R$color",
-      "android/support/v17/leanback/widget/ItemBridgeAdapter$OnFocusChangeListener": "androidx/leanback/widget/ItemBridgeAdapter$OnFocusChangeListener",
-      "android/support/v7/media/MediaRouteProviderService$ProviderCallback": "androidx/media/MediaRouteProviderService$ProviderCallback",
-      "android/support/media/ExifInterface": "androidx/media/ExifInterface",
-      "android/support/v4/app/FragmentManagerImpl": "androidx/app/FragmentManagerImpl",
-      "android/support/v13/app/FragmentTabHost$DummyTabFactory": "androidx/app/legacy/FragmentTabHost$DummyTabFactory",
-      "android/support/app/recommendation/ContentRecommendation$Builder": "androidx/app/recommendation/ContentRecommendation$Builder",
-      "android/support/v17/leanback/widget/RowHeaderView": "androidx/leanback/widget/RowHeaderView",
-      "android/support/v4/widget/DrawerLayout$EdgeGravity": "androidx/widget/DrawerLayout$EdgeGravity",
-      "android/support/v7/view/menu/MenuWrapperICS": "androidx/view/menu/MenuWrapperICS",
-      "android/support/v7/widget/RoundRectDrawableWithShadow$RoundRectHelper": "androidx/widget/RoundRectDrawableWithShadow$RoundRectHelper",
-      "android/support/v4/media/session/MediaControllerCompat$Callback$MessageHandler": "androidx/media/session/MediaControllerCompat$Callback$MessageHandler",
-      "android/support/v4/text/ICUCompat": "androidx/text/ICUCompat",
-      "android/support/v17/leanback/widget/PlaybackSeekDataProvider$ResultCallback": "androidx/leanback/widget/PlaybackSeekDataProvider$ResultCallback",
-      "android/support/v7/widget/ViewUtils": "androidx/widget/ViewUtils",
-      "android/support/v7/appcompat/R$string": "androidx/appcompat/R$string",
-      "android/support/constraint/ConstraintLayout": "androidx/constraint/ConstraintLayout",
-      "android/support/v4/view/ViewPager$SimpleOnPageChangeListener": "androidx/view/ViewPager$SimpleOnPageChangeListener",
-      "android/support/wear/internal/widget/drawer/MultiPageUi": "androidx/wear/internal/widget/drawer/MultiPageUi",
-      "android/support/v17/leanback/media/PlayerAdapter$Callback": "androidx/leanback/media/PlayerAdapter$Callback",
-      "android/support/design/widget/BaseTransientBottomBar$ContentViewCallback": "androidx/design/widget/BaseTransientBottomBar$ContentViewCallback",
-      "android/support/annotation/RestrictTo$Scope": "androidx/annotation/RestrictTo$Scope",
-      "android/support/v4/content/AsyncTaskLoader": "androidx/content/AsyncTaskLoader",
-      "android/support/v17/leanback/widget/ParallaxEffect": "androidx/leanback/widget/ParallaxEffect",
-      "android/support/v17/leanback/app/BackgroundManager$DrawableWrapper": "androidx/leanback/app/BackgroundManager$DrawableWrapper",
-      "android/support/v4/app/ListFragment": "androidx/app/ListFragment",
-      "android/support/design/widget/DirectedAcyclicGraph": "androidx/widget/DirectedAcyclicGraph",
-      "android/support/design/widget/AppBarLayout": "androidx/design/widget/AppBarLayout",
-      "android/support/v7/media/RemoteControlClientCompat$JellybeanImpl": "androidx/media/RemoteControlClientCompat$JellybeanImpl",
-      "android/support/design/widget/ViewGroupUtils": "androidx/widget/ViewGroupUtils",
-      "android/support/design/R$styleable": "androidx/design/R$styleable",
+      "android/support/animation/AnimationHandler": "androidx/animation/AnimationHandler",
+      "android/support/animation/AnimationHandler$AnimationFrameCallbackProvider": "androidx/animation/AnimationHandler$AnimationFrameCallbackProvider",
+      "android/support/animation/AnimationHandler$AnimationFrameCallback": "androidx/animation/AnimationHandler$AnimationFrameCallback",
+      "android/support/animation/AnimationHandler$FrameCallbackProvider14$1": "androidx/animation/AnimationHandler$FrameCallbackProvider14$1",
+      "android/support/animation/AnimationHandler$FrameCallbackProvider14": "androidx/animation/AnimationHandler$FrameCallbackProvider14",
+      "android/support/animation/AnimationHandler$FrameCallbackProvider16$1": "androidx/animation/AnimationHandler$FrameCallbackProvider16$1",
+      "android/support/animation/AnimationHandler$FrameCallbackProvider16": "androidx/animation/AnimationHandler$FrameCallbackProvider16",
+      "android/support/animation/DynamicAnimation$1": "androidx/animation/DynamicAnimation$1",
+      "android/support/animation/DynamicAnimation$ViewProperty": "androidx/animation/DynamicAnimation$ViewProperty",
+      "android/support/animation/DynamicAnimation": "androidx/animation/DynamicAnimation",
+      "android/support/animation/DynamicAnimation$10": "androidx/animation/DynamicAnimation$10",
+      "android/support/animation/DynamicAnimation$11": "androidx/animation/DynamicAnimation$11",
+      "android/support/animation/DynamicAnimation$12": "androidx/animation/DynamicAnimation$12",
+      "android/support/animation/DynamicAnimation$13": "androidx/animation/DynamicAnimation$13",
+      "android/support/animation/DynamicAnimation$14": "androidx/animation/DynamicAnimation$14",
+      "android/support/animation/DynamicAnimation$15": "androidx/animation/DynamicAnimation$15",
+      "android/support/animation/FloatPropertyCompat": "androidx/animation/FloatPropertyCompat",
+      "android/support/animation/FloatValueHolder": "androidx/animation/FloatValueHolder",
+      "android/support/animation/DynamicAnimation$2": "androidx/animation/DynamicAnimation$2",
+      "android/support/animation/DynamicAnimation$3": "androidx/animation/DynamicAnimation$3",
+      "android/support/animation/DynamicAnimation$4": "androidx/animation/DynamicAnimation$4",
+      "android/support/animation/DynamicAnimation$5": "androidx/animation/DynamicAnimation$5",
+      "android/support/animation/DynamicAnimation$6": "androidx/animation/DynamicAnimation$6",
+      "android/support/animation/DynamicAnimation$7": "androidx/animation/DynamicAnimation$7",
+      "android/support/animation/DynamicAnimation$8": "androidx/animation/DynamicAnimation$8",
+      "android/support/animation/DynamicAnimation$9": "androidx/animation/DynamicAnimation$9",
+      "android/support/animation/DynamicAnimation$MassState": "androidx/animation/DynamicAnimation$MassState",
       "android/support/animation/DynamicAnimation$OnAnimationEndListener": "androidx/animation/DynamicAnimation$OnAnimationEndListener",
-      "android/support/media/tv/TvContractUtils": "androidx/media/tv/TvContractUtils",
-      "android/support/v4/app/JobIntentService$JobWorkEnqueuer": "androidx/app/JobIntentService$JobWorkEnqueuer",
-      "android/support/percent/PercentLayoutHelper$PercentLayoutParams": "androidx/PercentLayoutHelper$PercentLayoutParams",
-      "android/support/v4/util/Pair": "androidx/util/Pair",
-      "android/support/v17/leanback/transition/LeanbackTransitionHelperKitKat": "androidx/leanback/transition/LeanbackTransitionHelperKitKat",
-      "android/support/v13/view/DragStartHelper": "androidx/view/DragStartHelper",
-      "android/support/v7/widget/ListViewCompat": "androidx/widget/internal/ListViewCompat",
-      "android/support/v7/preference/CheckBoxPreference$Listener": "androidx/preference/CheckBoxPreference$Listener",
-      "android/support/v7/app/AppCompatDelegate$NightMode": "androidx/app/AppCompatDelegate$NightMode",
-      "android/support/v17/leanback/transition/SlideNoPropagation": "androidx/leanback/transition/SlideNoPropagation",
-      "android/support/v7/media/MediaRouteProviderService$ClientRecord": "androidx/media/MediaRouteProviderService$ClientRecord",
-      "android/support/graphics/drawable/VectorDrawableCompat$VectorDrawableCompatState": "androidx/graphics/drawable/VectorDrawableCompat$VectorDrawableCompatState",
+      "android/support/animation/DynamicAnimation$OnAnimationUpdateListener": "androidx/animation/DynamicAnimation$OnAnimationUpdateListener",
+      "android/support/animation/FlingAnimation$1": "androidx/animation/FlingAnimation$1",
+      "android/support/animation/FlingAnimation": "androidx/animation/FlingAnimation",
+      "android/support/animation/FlingAnimation$DragForce": "androidx/animation/FlingAnimation$DragForce",
+      "android/support/animation/Force": "androidx/animation/Force",
+      "android/support/animation/FloatPropertyCompat$1": "androidx/animation/FloatPropertyCompat$1",
+      "android/support/animation/SpringAnimation": "androidx/animation/SpringAnimation",
+      "android/support/animation/SpringForce": "androidx/animation/SpringForce",
+      "android/arch/persistence/room/EmptyResultSetException": "androidx/persistence/room/EmptyResultSetException",
+      "android/arch/persistence/room/RxRoom$1$1": "androidx/persistence/room/RxRoom$1$1",
+      "android/arch/persistence/room/InvalidationTracker$Observer": "androidx/persistence/room/InvalidationTracker$Observer",
+      "android/arch/persistence/room/RxRoom$1": "androidx/persistence/room/RxRoom$1",
+      "android/arch/persistence/room/InvalidationTracker": "androidx/persistence/room/InvalidationTracker",
+      "android/arch/persistence/room/RxRoom": "androidx/persistence/room/RxRoom",
+      "android/arch/persistence/room/RxRoom$1$2": "androidx/persistence/room/RxRoom$1$2",
+      "android/arch/persistence/room/RoomDatabase": "androidx/persistence/room/RoomDatabase",
+      "android/arch/persistence/room/RxRoom$2": "androidx/persistence/room/RxRoom$2",
+      "android/arch/persistence/room/RxRoom$Optional": "androidx/persistence/room/RxRoom$Optional",
+      "android/arch/persistence/room/RxRoom$3": "androidx/persistence/room/RxRoom$3",
+      "android/arch/persistence/room/RxRoom$4": "androidx/persistence/room/RxRoom$4",
+      "android/arch/persistence/room/RxRoom$5$1": "androidx/persistence/room/RxRoom$5$1",
+      "android/arch/persistence/room/RxRoom$5": "androidx/persistence/room/RxRoom$5",
+      "android/arch/persistence/room/RxRoom$DisposableRunnable": "androidx/persistence/room/RxRoom$DisposableRunnable",
+      "android/support/v4/app/AppLaunchChecker": "androidx/app/AppLaunchChecker",
+      "android/support/v4/app/FrameMetricsAggregator$1": "androidx/app/FrameMetricsAggregator$1",
+      "android/support/v4/app/FrameMetricsAggregator": "androidx/app/FrameMetricsAggregator",
+      "android/support/v4/app/FrameMetricsAggregator$FrameMetricsApi24Impl$1": "androidx/app/FrameMetricsAggregator$FrameMetricsApi24Impl$1",
+      "android/support/v4/app/FrameMetricsAggregator$FrameMetricsApi24Impl": "androidx/app/FrameMetricsAggregator$FrameMetricsApi24Impl",
+      "android/support/v4/app/FrameMetricsAggregator$FrameMetricsBaseImpl": "androidx/app/FrameMetricsAggregator$FrameMetricsBaseImpl",
+      "android/support/v4/app/FrameMetricsAggregator$MetricType": "androidx/app/FrameMetricsAggregator$MetricType",
+      "android/support/v4/app/TaskStackBuilder$TaskStackBuilderApi16Impl": "androidx/app/TaskStackBuilder$TaskStackBuilderApi16Impl",
+      "android/support/v4/app/TaskStackBuilder$TaskStackBuilderBaseImpl": "androidx/app/TaskStackBuilder$TaskStackBuilderBaseImpl",
+      "android/support/v4/content/AsyncTaskLoader$LoadTask": "androidx/content/AsyncTaskLoader$LoadTask",
+      "android/support/v4/content/ModernAsyncTask": "androidx/content/ModernAsyncTask",
+      "android/support/v4/content/AsyncTaskLoader": "androidx/content/AsyncTaskLoader",
+      "android/support/v4/content/CursorLoader": "androidx/content/CursorLoader",
+      "android/support/v4/content/Loader$ForceLoadContentObserver": "androidx/content/Loader$ForceLoadContentObserver",
+      "android/support/v4/content/FileProvider$PathStrategy": "androidx/content/FileProvider$PathStrategy",
+      "android/support/v4/content/FileProvider": "androidx/content/FileProvider",
+      "android/support/v4/content/FileProvider$SimplePathStrategy": "androidx/content/FileProvider$SimplePathStrategy",
+      "android/support/v4/content/LocalBroadcastManager$1": "androidx/content/LocalBroadcastManager$1",
+      "android/support/v4/content/LocalBroadcastManager": "androidx/content/LocalBroadcastManager",
+      "android/support/v4/content/LocalBroadcastManager$BroadcastRecord": "androidx/content/LocalBroadcastManager$BroadcastRecord",
+      "android/support/v4/content/LocalBroadcastManager$ReceiverRecord": "androidx/content/LocalBroadcastManager$ReceiverRecord",
+      "android/support/v4/content/MimeTypeFilter": "androidx/content/MimeTypeFilter",
+      "android/support/v4/content/ModernAsyncTask$1": "androidx/content/ModernAsyncTask$1",
+      "android/support/v4/content/ModernAsyncTask$2": "androidx/content/ModernAsyncTask$2",
+      "android/support/v4/content/ModernAsyncTask$WorkerRunnable": "androidx/content/ModernAsyncTask$WorkerRunnable",
+      "android/support/v4/content/ModernAsyncTask$3": "androidx/content/ModernAsyncTask$3",
+      "android/support/v4/content/ModernAsyncTask$4": "androidx/content/ModernAsyncTask$4",
+      "android/support/v4/content/ModernAsyncTask$Status": "androidx/content/ModernAsyncTask$Status",
+      "android/support/v4/content/ModernAsyncTask$AsyncTaskResult": "androidx/content/ModernAsyncTask$AsyncTaskResult",
+      "android/support/v4/content/ModernAsyncTask$InternalHandler": "androidx/content/ModernAsyncTask$InternalHandler",
+      "android/support/v4/content/PermissionChecker$PermissionResult": "androidx/content/PermissionChecker$PermissionResult",
+      "android/support/v4/content/WakefulBroadcastReceiver": "androidx/content/WakefulBroadcastReceiver",
+      "android/support/v4/graphics/drawable/RoundedBitmapDrawable": "androidx/graphics/drawable/RoundedBitmapDrawable",
+      "android/support/v4/graphics/drawable/RoundedBitmapDrawable21": "androidx/graphics/drawable/RoundedBitmapDrawable21",
+      "android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory$DefaultRoundedBitmapDrawable": "androidx/graphics/drawable/RoundedBitmapDrawableFactory$DefaultRoundedBitmapDrawable",
+      "android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory": "androidx/graphics/drawable/RoundedBitmapDrawableFactory",
+      "android/support/v4/print/PrintHelper$1": "androidx/print/PrintHelper$1",
+      "android/support/v4/print/PrintHelper": "androidx/print/PrintHelper",
+      "android/support/v4/print/PrintHelper$ColorMode": "androidx/print/PrintHelper$ColorMode",
+      "android/support/v4/print/PrintHelper$OnPrintFinishCallback": "androidx/print/PrintHelper$OnPrintFinishCallback",
+      "android/support/v4/print/PrintHelper$Orientation": "androidx/print/PrintHelper$Orientation",
+      "android/support/v4/print/PrintHelper$PrintHelperApi19$1": "androidx/print/PrintHelper$PrintHelperApi19$1",
+      "android/support/v4/print/PrintHelper$PrintHelperApi19": "androidx/print/PrintHelper$PrintHelperApi19",
+      "android/support/v4/print/PrintHelper$PrintHelperApi19$2": "androidx/print/PrintHelper$PrintHelperApi19$2",
+      "android/support/v4/print/PrintHelper$PrintHelperApi19$3$1$1": "androidx/print/PrintHelper$PrintHelperApi19$3$1$1",
+      "android/support/v4/print/PrintHelper$PrintHelperApi19$3$1": "androidx/print/PrintHelper$PrintHelperApi19$3$1",
+      "android/support/v4/print/PrintHelper$PrintHelperApi19$3": "androidx/print/PrintHelper$PrintHelperApi19$3",
+      "android/support/v4/print/PrintHelper$PrintHelperVersionImpl": "androidx/print/PrintHelper$PrintHelperVersionImpl",
+      "android/support/v4/print/PrintHelper$PrintHelperApi20": "androidx/print/PrintHelper$PrintHelperApi20",
+      "android/support/v4/print/PrintHelper$PrintHelperApi23": "androidx/print/PrintHelper$PrintHelperApi23",
+      "android/support/v4/print/PrintHelper$PrintHelperApi24": "androidx/print/PrintHelper$PrintHelperApi24",
+      "android/support/v4/print/PrintHelper$PrintHelperStub": "androidx/print/PrintHelper$PrintHelperStub",
+      "android/support/v4/print/PrintHelper$ScaleMode": "androidx/print/PrintHelper$ScaleMode",
+      "android/support/v4/provider/DocumentFile": "androidx/provider/DocumentFile",
+      "android/support/v4/provider/RawDocumentFile": "androidx/provider/RawDocumentFile",
+      "android/support/v4/provider/SingleDocumentFile": "androidx/provider/SingleDocumentFile",
+      "android/support/v4/provider/TreeDocumentFile": "androidx/provider/TreeDocumentFile",
+      "android/support/v4/provider/DocumentsContractApi19": "androidx/provider/DocumentsContractApi19",
+      "android/support/v7/widget/GridLayout$1": "androidx/widget/GridLayout$1",
+      "android/support/v7/widget/GridLayout": "androidx/widget/GridLayout",
+      "android/support/v7/widget/GridLayout$2": "androidx/widget/GridLayout$2",
+      "android/support/v7/widget/GridLayout$Alignment": "androidx/widget/GridLayout$Alignment",
+      "android/support/v7/widget/GridLayout$3": "androidx/widget/GridLayout$3",
+      "android/support/v7/widget/GridLayout$4": "androidx/widget/GridLayout$4",
+      "android/support/v7/widget/GridLayout$5": "androidx/widget/GridLayout$5",
+      "android/support/v7/widget/GridLayout$6": "androidx/widget/GridLayout$6",
+      "android/support/v7/widget/GridLayout$7$1": "androidx/widget/GridLayout$7$1",
+      "android/support/v7/widget/GridLayout$Bounds": "androidx/widget/GridLayout$Bounds",
+      "android/support/v7/widget/GridLayout$7": "androidx/widget/GridLayout$7",
+      "android/support/v7/widget/GridLayout$8": "androidx/widget/GridLayout$8",
+      "android/support/v7/widget/GridLayout$Arc": "androidx/widget/GridLayout$Arc",
+      "android/support/v7/widget/GridLayout$Interval": "androidx/widget/GridLayout$Interval",
+      "android/support/v7/widget/GridLayout$MutableInt": "androidx/widget/GridLayout$MutableInt",
+      "android/support/v7/widget/GridLayout$Assoc": "androidx/widget/GridLayout$Assoc",
+      "android/support/v7/widget/GridLayout$PackedMap": "androidx/widget/GridLayout$PackedMap",
+      "android/support/v7/widget/GridLayout$Axis$1": "androidx/widget/GridLayout$Axis$1",
+      "android/support/v7/widget/GridLayout$Axis": "androidx/widget/GridLayout$Axis",
+      "android/support/v7/widget/GridLayout$Spec": "androidx/widget/GridLayout$Spec",
+      "android/support/v7/widget/GridLayout$LayoutParams": "androidx/widget/GridLayout$LayoutParams",
+      "android/support/v7/gridlayout/R$styleable": "androidx/gridlayout/R$styleable",
+      "android/support/v7/gridlayout/R": "androidx/gridlayout/R",
+      "android/support/v7/gridlayout/R$dimen": "androidx/gridlayout/R$dimen",
+      "android/arch/lifecycle/ClassesInfoCache$CallbackInfo": "androidx/lifecycle/ClassesInfoCache$CallbackInfo",
+      "android/arch/lifecycle/ClassesInfoCache$MethodReference": "androidx/lifecycle/ClassesInfoCache$MethodReference",
+      "android/arch/lifecycle/ClassesInfoCache": "androidx/lifecycle/ClassesInfoCache",
+      "android/arch/lifecycle/ReflectiveGenericLifecycleObserver": "androidx/lifecycle/ReflectiveGenericLifecycleObserver",
+      "android/arch/lifecycle/FullLifecycleObserverAdapter": "androidx/lifecycle/FullLifecycleObserverAdapter",
+      "android/arch/lifecycle/SingleGeneratedAdapterObserver": "androidx/lifecycle/SingleGeneratedAdapterObserver",
+      "android/arch/lifecycle/CompositeGeneratedAdaptersObserver": "androidx/lifecycle/CompositeGeneratedAdaptersObserver",
+      "android/arch/lifecycle/FullLifecycleObserverAdapter$1": "androidx/lifecycle/FullLifecycleObserverAdapter$1",
+      "android/arch/persistence/room/testing/MigrationTestHelper$CreatingDelegate": "androidx/persistence/room/testing/MigrationTestHelper$CreatingDelegate",
+      "android/arch/persistence/room/testing/MigrationTestHelper$RoomOpenHelperDelegate": "androidx/persistence/room/testing/MigrationTestHelper$RoomOpenHelperDelegate",
+      "android/arch/persistence/room/testing/MigrationTestHelper": "androidx/persistence/room/testing/MigrationTestHelper",
+      "android/arch/persistence/room/testing/MigrationTestHelper$MigratingDelegate": "androidx/persistence/room/testing/MigrationTestHelper$MigratingDelegate",
+      "android/arch/persistence/room/util/TableInfo": "androidx/persistence/room/util/TableInfo",
+      "android/arch/persistence/room/RoomOpenHelper$Delegate": "androidx/persistence/room/RoomOpenHelper$Delegate",
+      "android/arch/persistence/room/RoomOpenHelper": "androidx/persistence/room/RoomOpenHelper",
+      "android/arch/persistence/room/RoomDatabase$MigrationContainer": "androidx/persistence/room/RoomDatabase$MigrationContainer",
+      "android/arch/persistence/room/util/TableInfo$Index": "androidx/persistence/room/util/TableInfo$Index",
+      "android/arch/persistence/room/util/TableInfo$ForeignKey": "androidx/persistence/room/util/TableInfo$ForeignKey",
+      "android/arch/persistence/room/util/TableInfo$Column": "androidx/persistence/room/util/TableInfo$Column",
+      "android/arch/persistence/room/DatabaseConfiguration": "androidx/persistence/room/DatabaseConfiguration",
+      "android/arch/persistence/room/migration/Migration": "androidx/persistence/room/migration/Migration",
+      "android/arch/lifecycle/ComputableLiveData$1": "androidx/lifecycle/ComputableLiveData$1",
+      "android/arch/lifecycle/ComputableLiveData$2": "androidx/lifecycle/ComputableLiveData$2",
+      "android/arch/lifecycle/ComputableLiveData$3": "androidx/lifecycle/ComputableLiveData$3",
+      "android/arch/lifecycle/MediatorLiveData$Source": "androidx/lifecycle/MediatorLiveData$Source",
+      "android/arch/lifecycle/MediatorLiveData": "androidx/lifecycle/MediatorLiveData",
+      "android/arch/lifecycle/Transformations$1": "androidx/lifecycle/Transformations$1",
+      "android/arch/lifecycle/Transformations": "androidx/lifecycle/Transformations",
+      "android/arch/core/util/Function": "androidx/core/util/Function",
+      "android/arch/lifecycle/Transformations$2$1": "androidx/lifecycle/Transformations$2$1",
+      "android/arch/lifecycle/Transformations$2": "androidx/lifecycle/Transformations$2",
+      "android/support/wear/ambient/AmbientDelegate$AmbientCallback": "androidx/wear/ambient/AmbientDelegate$AmbientCallback",
+      "android/support/wear/ambient/AmbientDelegate": "androidx/wear/ambient/AmbientDelegate",
+      "android/support/wear/ambient/WearableControllerProvider": "androidx/wear/ambient/WearableControllerProvider",
+      "android/support/wear/ambient/AmbientMode$1": "androidx/wear/ambient/AmbientMode$1",
+      "android/support/wear/ambient/AmbientMode": "androidx/wear/ambient/AmbientMode",
+      "android/support/wear/ambient/AmbientMode$AmbientCallback": "androidx/wear/ambient/AmbientMode$AmbientCallback",
+      "android/support/wear/ambient/AmbientMode$AmbientCallbackProvider": "androidx/wear/ambient/AmbientMode$AmbientCallbackProvider",
+      "android/support/wear/ambient/AmbientMode$AmbientController": "androidx/wear/ambient/AmbientMode$AmbientController",
+      "android/support/wear/ambient/AmbientModeSupport$1": "androidx/wear/ambient/AmbientModeSupport$1",
+      "android/support/wear/ambient/AmbientModeSupport": "androidx/wear/ambient/AmbientModeSupport",
+      "android/support/wear/ambient/AmbientModeSupport$AmbientCallback": "androidx/wear/ambient/AmbientModeSupport$AmbientCallback",
+      "android/support/wear/ambient/AmbientModeSupport$AmbientCallbackProvider": "androidx/wear/ambient/AmbientModeSupport$AmbientCallbackProvider",
+      "android/support/wear/ambient/AmbientModeSupport$AmbientController": "androidx/wear/ambient/AmbientModeSupport$AmbientController",
+      "android/support/wear/ambient/SharedLibraryVersion$PresenceHolder": "androidx/wear/ambient/SharedLibraryVersion$PresenceHolder",
+      "android/support/wear/ambient/SharedLibraryVersion": "androidx/wear/ambient/SharedLibraryVersion",
+      "android/support/wear/ambient/SharedLibraryVersion$VersionHolder": "androidx/wear/ambient/SharedLibraryVersion$VersionHolder",
+      "android/support/wear/ambient/WearableControllerProvider$1": "androidx/wear/ambient/WearableControllerProvider$1",
+      "android/support/wear/internal/widget/ResourcesUtil": "androidx/wear/internal/widget/ResourcesUtil",
+      "android/support/wear/internal/widget/drawer/MultiPagePresenter$Ui": "androidx/wear/internal/widget/drawer/MultiPagePresenter$Ui",
+      "android/support/wear/widget/drawer/WearableNavigationDrawerView$WearableNavigationDrawerAdapter": "androidx/wear/widget/drawer/WearableNavigationDrawerView$WearableNavigationDrawerAdapter",
+      "android/support/wear/widget/drawer/WearableNavigationDrawerView": "androidx/wear/widget/drawer/WearableNavigationDrawerView",
+      "android/support/wear/internal/widget/drawer/MultiPagePresenter": "androidx/wear/internal/widget/drawer/MultiPagePresenter",
+      "android/support/wear/internal/widget/drawer/WearableNavigationDrawerPresenter": "androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter",
+      "android/support/wear/widget/drawer/WearableDrawerController": "androidx/wear/widget/drawer/WearableDrawerController",
+      "android/support/wear/internal/widget/drawer/MultiPageUi$1": "androidx/wear/internal/widget/drawer/MultiPageUi$1",
+      "android/support/wear/internal/widget/drawer/MultiPageUi": "androidx/wear/internal/widget/drawer/MultiPageUi",
+      "android/support/wear/internal/widget/drawer/MultiPageUi$NavigationPagerAdapter": "androidx/wear/internal/widget/drawer/MultiPageUi$NavigationPagerAdapter",
+      "android/support/wear/R$layout": "androidx/wear/R$layout",
+      "android/support/wear/R": "androidx/wear/R",
+      "android/support/wear/R$id": "androidx/wear/R$id",
+      "android/support/wear/widget/drawer/PageIndicatorView": "androidx/wear/widget/drawer/PageIndicatorView",
+      "android/support/wear/internal/widget/drawer/SinglePagePresenter$Ui": "androidx/wear/internal/widget/drawer/SinglePagePresenter$Ui",
+      "android/support/wear/internal/widget/drawer/SinglePagePresenter": "androidx/wear/internal/widget/drawer/SinglePagePresenter",
+      "android/support/wear/internal/widget/drawer/SinglePageUi$1": "androidx/wear/internal/widget/drawer/SinglePageUi$1",
+      "android/support/wear/internal/widget/drawer/SinglePageUi": "androidx/wear/internal/widget/drawer/SinglePageUi",
+      "android/support/wear/internal/widget/drawer/SinglePageUi$OnSelectedClickHandler": "androidx/wear/internal/widget/drawer/SinglePageUi$OnSelectedClickHandler",
+      "android/support/wear/widget/CircledImageView": "androidx/wear/widget/CircledImageView",
+      "android/support/wear/widget/drawer/WearableNavigationDrawerView$OnItemSelectedListener": "androidx/wear/widget/drawer/WearableNavigationDrawerView$OnItemSelectedListener",
+      "android/support/wear/utils/MetadataConstants": "androidx/wear/utils/MetadataConstants",
+      "android/support/wear/widget/BezierSCurveInterpolator": "androidx/wear/widget/BezierSCurveInterpolator",
+      "android/support/wear/widget/BoxInsetLayout$LayoutParams$BoxedEdges": "androidx/wear/widget/BoxInsetLayout$LayoutParams$BoxedEdges",
+      "android/support/wear/widget/BoxInsetLayout$LayoutParams": "androidx/wear/widget/BoxInsetLayout$LayoutParams",
+      "android/support/wear/widget/BoxInsetLayout": "androidx/wear/widget/BoxInsetLayout",
+      "android/support/wear/R$styleable": "androidx/wear/R$styleable",
+      "android/support/wear/widget/CircledImageView$1": "androidx/wear/widget/CircledImageView$1",
+      "android/support/wear/widget/CircledImageView$2": "androidx/wear/widget/CircledImageView$2",
+      "android/support/wear/widget/CircledImageView$OvalShadowPainter": "androidx/wear/widget/CircledImageView$OvalShadowPainter",
+      "android/support/wear/widget/ProgressDrawable": "androidx/wear/widget/ProgressDrawable",
+      "android/support/wear/widget/CircularProgressLayout$1": "androidx/wear/widget/CircularProgressLayout$1",
+      "android/support/wear/widget/CircularProgressLayout": "androidx/wear/widget/CircularProgressLayout",
+      "android/support/wear/widget/CircularProgressLayout$OnTimerFinishedListener": "androidx/wear/widget/CircularProgressLayout$OnTimerFinishedListener",
+      "android/support/wear/R$array": "androidx/wear/R$array",
+      "android/support/wear/R$dimen": "androidx/wear/R$dimen",
+      "android/support/wear/R$color": "androidx/wear/R$color",
+      "android/support/wear/widget/CircularProgressLayoutController": "androidx/wear/widget/CircularProgressLayoutController",
+      "android/support/wear/widget/CircularProgressLayoutController$CircularProgressTimer": "androidx/wear/widget/CircularProgressLayoutController$CircularProgressTimer",
+      "android/support/wear/widget/CurvingLayoutCallback": "androidx/wear/widget/CurvingLayoutCallback",
+      "android/support/wear/widget/WearableLinearLayoutManager$LayoutCallback": "androidx/wear/widget/WearableLinearLayoutManager$LayoutCallback",
+      "android/support/wear/widget/WearableLinearLayoutManager": "androidx/wear/widget/WearableLinearLayoutManager",
+      "android/support/wear/widget/ProgressDrawable$1": "androidx/wear/widget/ProgressDrawable$1",
+      "android/support/wear/widget/RoundedDrawable": "androidx/wear/widget/RoundedDrawable",
+      "android/support/wear/widget/ScrollManager": "androidx/wear/widget/ScrollManager",
+      "android/support/wear/widget/SimpleAnimatorListener": "androidx/wear/widget/SimpleAnimatorListener",
+      "android/support/wear/widget/SwipeDismissFrameLayout$1": "androidx/wear/widget/SwipeDismissFrameLayout$1",
+      "android/support/wear/widget/SwipeDismissFrameLayout": "androidx/wear/widget/SwipeDismissFrameLayout",
+      "android/support/wear/widget/SwipeDismissFrameLayout$Callback": "androidx/wear/widget/SwipeDismissFrameLayout$Callback",
+      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnDismissedListener$1": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnDismissedListener$1",
+      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnDismissedListener": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnDismissedListener",
+      "android/support/wear/widget/SwipeDismissLayout": "androidx/wear/widget/SwipeDismissLayout",
+      "android/support/wear/widget/SwipeDismissLayout$OnDismissedListener": "androidx/wear/widget/SwipeDismissLayout$OnDismissedListener",
+      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnPreSwipeListener": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnPreSwipeListener",
+      "android/support/wear/widget/SwipeDismissLayout$OnPreSwipeListener": "androidx/wear/widget/SwipeDismissLayout$OnPreSwipeListener",
+      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnSwipeProgressChangedListener$1": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnSwipeProgressChangedListener$1",
+      "android/support/wear/widget/SwipeDismissFrameLayout$MyOnSwipeProgressChangedListener": "androidx/wear/widget/SwipeDismissFrameLayout$MyOnSwipeProgressChangedListener",
+      "android/support/wear/widget/SwipeDismissLayout$OnSwipeProgressChangedListener": "androidx/wear/widget/SwipeDismissLayout$OnSwipeProgressChangedListener",
+      "android/support/wear/widget/WearableRecyclerView": "androidx/wear/widget/WearableRecyclerView",
+      "android/support/wear/widget/WearableRecyclerView$1": "androidx/wear/widget/WearableRecyclerView$1",
+      "android/support/wear/widget/drawer/AbsListViewFlingWatcher": "androidx/wear/widget/drawer/AbsListViewFlingWatcher",
+      "android/support/wear/widget/drawer/FlingWatcherFactory$FlingWatcher": "androidx/wear/widget/drawer/FlingWatcherFactory$FlingWatcher",
+      "android/support/wear/widget/drawer/FlingWatcherFactory$FlingListener": "androidx/wear/widget/drawer/FlingWatcherFactory$FlingListener",
+      "android/support/wear/widget/drawer/FlingWatcherFactory": "androidx/wear/widget/drawer/FlingWatcherFactory",
+      "android/support/wear/widget/drawer/RecyclerViewFlingWatcher": "androidx/wear/widget/drawer/RecyclerViewFlingWatcher",
+      "android/support/wear/widget/drawer/ScrollViewFlingWatcher": "androidx/wear/widget/drawer/ScrollViewFlingWatcher",
+      "android/support/wear/widget/drawer/NestedScrollViewFlingWatcher": "androidx/wear/widget/drawer/NestedScrollViewFlingWatcher",
+      "android/support/wear/widget/drawer/NestedScrollViewFlingWatcher$1": "androidx/wear/widget/drawer/NestedScrollViewFlingWatcher$1",
+      "android/support/wear/widget/drawer/PageIndicatorView$1": "androidx/wear/widget/drawer/PageIndicatorView$1",
+      "android/support/wear/R$style": "androidx/wear/R$style",
+      "android/support/wear/widget/drawer/ScrollViewFlingWatcher$1": "androidx/wear/widget/drawer/ScrollViewFlingWatcher$1",
+      "android/support/wear/widget/drawer/WearableActionDrawerMenu$1": "androidx/wear/widget/drawer/WearableActionDrawerMenu$1",
+      "android/support/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem$MenuItemChangedListener": "androidx/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem$MenuItemChangedListener",
+      "android/support/wear/widget/drawer/WearableActionDrawerMenu": "androidx/wear/widget/drawer/WearableActionDrawerMenu",
+      "android/support/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem": "androidx/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuItem",
+      "android/support/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuListener": "androidx/wear/widget/drawer/WearableActionDrawerMenu$WearableActionDrawerMenuListener",
+      "android/support/wear/widget/drawer/WearableActionDrawerView$1": "androidx/wear/widget/drawer/WearableActionDrawerView$1",
+      "android/support/wear/widget/drawer/WearableActionDrawerView": "androidx/wear/widget/drawer/WearableActionDrawerView",
+      "android/support/wear/widget/drawer/WearableActionDrawerView$ActionItemViewHolder": "androidx/wear/widget/drawer/WearableActionDrawerView$ActionItemViewHolder",
+      "android/support/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter$1": "androidx/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter$1",
+      "android/support/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter": "androidx/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter",
+      "android/support/wear/widget/drawer/WearableActionDrawerView$TitleViewHolder": "androidx/wear/widget/drawer/WearableActionDrawerView$TitleViewHolder",
+      "android/support/wear/widget/drawer/WearableDrawerView": "androidx/wear/widget/drawer/WearableDrawerView",
+      "android/support/wear/R$string": "androidx/wear/R$string",
+      "android/support/wear/R$fraction": "androidx/wear/R$fraction",
+      "android/support/wear/widget/drawer/WearableDrawerLayout": "androidx/wear/widget/drawer/WearableDrawerLayout",
+      "android/support/wear/widget/drawer/WearableDrawerLayout$1": "androidx/wear/widget/drawer/WearableDrawerLayout$1",
+      "android/support/wear/widget/drawer/WearableDrawerLayout$2": "androidx/wear/widget/drawer/WearableDrawerLayout$2",
+      "android/support/wear/widget/drawer/WearableDrawerLayout$BottomDrawerDraggerCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$BottomDrawerDraggerCallback",
+      "android/support/wear/widget/drawer/WearableDrawerLayout$DrawerDraggerCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$DrawerDraggerCallback",
+      "android/support/wear/widget/drawer/WearableDrawerLayout$ClosePeekRunnable": "androidx/wear/widget/drawer/WearableDrawerLayout$ClosePeekRunnable",
+      "android/support/wear/widget/drawer/WearableDrawerLayout$DrawerStateCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$DrawerStateCallback",
+      "android/support/wear/widget/drawer/WearableDrawerLayout$TopDrawerDraggerCallback": "androidx/wear/widget/drawer/WearableDrawerLayout$TopDrawerDraggerCallback",
+      "android/support/wear/widget/drawer/WearableDrawerView$1": "androidx/wear/widget/drawer/WearableDrawerView$1",
+      "android/support/wear/widget/drawer/WearableDrawerView$DrawerState": "androidx/wear/widget/drawer/WearableDrawerView$DrawerState",
+      "android/support/wear/R$drawable": "androidx/wear/R$drawable",
+      "android/support/wear/widget/drawer/WearableNavigationDrawerView$1": "androidx/wear/widget/drawer/WearableNavigationDrawerView$1",
+      "android/support/wear/widget/drawer/WearableNavigationDrawerView$2": "androidx/wear/widget/drawer/WearableNavigationDrawerView$2",
+      "android/support/wear/widget/drawer/WearableNavigationDrawerView$NavigationStyle": "androidx/wear/widget/drawer/WearableNavigationDrawerView$NavigationStyle",
+      "android/support/text/emoji/EmojiCompat$CompatInternal": "androidx/text/emoji/EmojiCompat$CompatInternal",
+      "android/support/text/emoji/EmojiCompat": "androidx/text/emoji/EmojiCompat",
+      "android/support/text/emoji/EmojiProcessor$GlyphChecker": "androidx/text/emoji/EmojiProcessor$GlyphChecker",
+      "android/support/text/emoji/EmojiProcessor": "androidx/text/emoji/EmojiProcessor",
+      "android/support/text/emoji/EmojiCompat$CompatInternal19$1": "androidx/text/emoji/EmojiCompat$CompatInternal19$1",
+      "android/support/text/emoji/EmojiCompat$MetadataRepoLoaderCallback": "androidx/text/emoji/EmojiCompat$MetadataRepoLoaderCallback",
+      "android/support/text/emoji/EmojiCompat$CompatInternal19": "androidx/text/emoji/EmojiCompat$CompatInternal19",
+      "android/support/text/emoji/MetadataRepo": "androidx/text/emoji/MetadataRepo",
+      "android/support/text/emoji/EmojiCompat$SpanFactory": "androidx/text/emoji/EmojiCompat$SpanFactory",
+      "android/support/text/emoji/EmojiCompat$MetadataRepoLoader": "androidx/text/emoji/EmojiCompat$MetadataRepoLoader",
+      "android/support/text/emoji/EmojiMetadata": "androidx/text/emoji/EmojiMetadata",
+      "android/support/text/emoji/EmojiCompat$Config": "androidx/text/emoji/EmojiCompat$Config",
+      "android/support/text/emoji/EmojiCompat$InitCallback": "androidx/text/emoji/EmojiCompat$InitCallback",
+      "android/support/text/emoji/EmojiCompat$ListenerDispatcher": "androidx/text/emoji/EmojiCompat$ListenerDispatcher",
+      "android/support/text/emoji/EmojiCompat$LoadState": "androidx/text/emoji/EmojiCompat$LoadState",
+      "android/support/text/emoji/EmojiCompat$ReplaceStrategy": "androidx/text/emoji/EmojiCompat$ReplaceStrategy",
+      "android/support/text/emoji/EmojiSpan": "androidx/text/emoji/EmojiSpan",
+      "android/support/text/emoji/TypefaceEmojiSpan": "androidx/text/emoji/TypefaceEmojiSpan",
+      "android/support/text/emoji/EmojiMetadata$HasGlyph": "androidx/text/emoji/EmojiMetadata$HasGlyph",
+      "android/support/text/emoji/EmojiProcessor$Action": "androidx/text/emoji/EmojiProcessor$Action",
+      "android/support/text/emoji/EmojiProcessor$CodepointIndexFinder": "androidx/text/emoji/EmojiProcessor$CodepointIndexFinder",
+      "android/support/text/emoji/EmojiProcessor$ProcessorSm": "androidx/text/emoji/EmojiProcessor$ProcessorSm",
+      "android/support/text/emoji/MetadataRepo$Node": "androidx/text/emoji/MetadataRepo$Node",
+      "android/support/text/emoji/widget/SpannableBuilder": "androidx/text/emoji/widget/SpannableBuilder",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig$ExponentialBackoffRetryPolicy": "androidx/text/emoji/FontRequestEmojiCompatConfig$ExponentialBackoffRetryPolicy",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig$RetryPolicy": "androidx/text/emoji/FontRequestEmojiCompatConfig$RetryPolicy",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig": "androidx/text/emoji/FontRequestEmojiCompatConfig",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig$FontProviderHelper": "androidx/text/emoji/FontRequestEmojiCompatConfig$FontProviderHelper",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1": "androidx/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$1",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader": "androidx/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$2": "androidx/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$2",
+      "android/support/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$3": "androidx/text/emoji/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$3",
+      "android/support/text/emoji/MetadataListReader$ByteBufferReader": "androidx/text/emoji/MetadataListReader$ByteBufferReader",
+      "android/support/text/emoji/MetadataListReader$OpenTypeReader": "androidx/text/emoji/MetadataListReader$OpenTypeReader",
+      "android/support/text/emoji/MetadataListReader": "androidx/text/emoji/MetadataListReader",
+      "android/support/text/emoji/MetadataListReader$InputStreamOpenTypeReader": "androidx/text/emoji/MetadataListReader$InputStreamOpenTypeReader",
+      "android/support/text/emoji/MetadataListReader$OffsetInfo": "androidx/text/emoji/MetadataListReader$OffsetInfo",
+      "android/support/text/emoji/MetadataRepo$1": "androidx/text/emoji/MetadataRepo$1",
+      "android/support/text/emoji/R$styleable": "androidx/text/emoji/R$styleable",
+      "android/support/text/emoji/R": "androidx/text/emoji/R",
+      "android/support/text/emoji/widget/EmojiButton": "androidx/text/emoji/widget/EmojiButton",
+      "android/support/text/emoji/widget/EmojiEditText": "androidx/text/emoji/widget/EmojiEditText",
+      "android/support/text/emoji/widget/EmojiEditTextHelper$1": "androidx/text/emoji/widget/EmojiEditTextHelper$1",
+      "android/support/text/emoji/widget/EmojiEditTextHelper$HelperInternal": "androidx/text/emoji/widget/EmojiEditTextHelper$HelperInternal",
+      "android/support/text/emoji/widget/EmojiEditTextHelper$HelperInternal19": "androidx/text/emoji/widget/EmojiEditTextHelper$HelperInternal19",
+      "android/support/text/emoji/widget/EmojiTextWatcher": "androidx/text/emoji/widget/EmojiTextWatcher",
+      "android/support/text/emoji/widget/EmojiEditableFactory": "androidx/text/emoji/widget/EmojiEditableFactory",
+      "android/support/text/emoji/widget/EmojiKeyListener": "androidx/text/emoji/widget/EmojiKeyListener",
+      "android/support/text/emoji/widget/EmojiInputConnection": "androidx/text/emoji/widget/EmojiInputConnection",
+      "android/support/text/emoji/widget/EmojiExtractEditText": "androidx/text/emoji/widget/EmojiExtractEditText",
+      "android/support/text/emoji/widget/EmojiExtractTextLayout$ButtonOnclickListener": "androidx/text/emoji/widget/EmojiExtractTextLayout$ButtonOnclickListener",
+      "android/support/text/emoji/widget/EmojiExtractTextLayout": "androidx/text/emoji/widget/EmojiExtractTextLayout",
       "android/support/text/emoji/R$layout": "androidx/text/emoji/R$layout",
-      "android/support/v4/media/session/MediaSessionCompat$SessionFlags": "androidx/media/session/MediaSessionCompat$SessionFlags",
-      "android/support/v7/preference/PreferenceRecyclerViewAccessibilityDelegate": "androidx/preference/PreferenceRecyclerViewAccessibilityDelegate",
-      "android/support/transition/AnimatorUtils": "androidx/transition/AnimatorUtils",
-      "android/support/v17/leanback/system/Settings": "androidx/leanback/system/Settings",
-      "android/support/v4/app/FragmentActivity$NonConfigurationInstances": "androidx/app/FragmentActivity$NonConfigurationInstances",
-      "android/support/v17/leanback/widget/GuidedActionAdapter$EditListener": "androidx/leanback/widget/GuidedActionAdapter$EditListener",
-      "android/support/v7/media/MediaRouteProvider$Callback": "androidx/media/MediaRouteProvider$Callback",
-      "android/support/v7/app/AppCompatDelegateImplV9$PanelMenuPresenterCallback": "androidx/app/AppCompatDelegateImplV9$PanelMenuPresenterCallback",
-      "android/support/constraint/ConstraintSet$Constraint": "androidx/constraint/ConstraintSet$Constraint",
-      "android/support/wear/R$dimen": "androidx/wear/R$dimen"
-    },
-    "fields": {
-      "android/support/v4/view/AbsSavedState": {
-        "androidx/view/AbsSavedState": [
-          "CREATOR",
-          "EMPTY_STATE"
-        ]
-      },
-      "android/support/v4/view/PagerTabStrip": {
-        "androidx/widget/PagerTabStrip": [
-          "TAG",
-          "TAB_PADDING",
-          "TAB_SPACING",
-          "FULL_UNDERLINE_HEIGHT",
-          "MIN_PADDING_BOTTOM",
-          "MIN_STRIP_HEIGHT",
-          "MIN_TEXT_SPACING",
-          "INDICATOR_HEIGHT"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$Channels": {
-        "androidx/media/tv/TvContractCompat$Channels": [
-          "VIDEO_FORMAT_4320P",
-          "VIDEO_RESOLUTION_HD",
-          "VIDEO_RESOLUTION_ED",
-          "VIDEO_FORMAT_720P",
-          "COLUMN_TRANSIENT",
-          "VIDEO_FORMAT_TO_RESOLUTION_MAP",
-          "COLUMN_DISPLAY_NAME",
-          "VIDEO_FORMAT_240P",
-          "COLUMN_VIDEO_FORMAT",
-          "COLUMN_APP_LINK_TEXT",
-          "COLUMN_APP_LINK_POSTER_ART_URI",
-          "VIDEO_FORMAT_360P",
-          "TYPE_OTHER",
-          "COLUMN_NETWORK_AFFILIATION",
-          "TYPE_PAL",
-          "SERVICE_TYPE_OTHER",
-          "VIDEO_FORMAT_480P",
-          "VIDEO_FORMAT_480I",
-          "CONTENT_URI",
-          "TYPE_CMMB",
-          "TYPE_ATSC_C",
-          "TYPE_ATSC_T",
-          "VIDEO_RESOLUTION_FHD",
-          "COLUMN_APP_LINK_INTENT_URI",
-          "VIDEO_FORMAT_2160P",
-          "TYPE_SECAM",
-          "COLUMN_INTERNAL_PROVIDER_FLAG2",
-          "COLUMN_INTERNAL_PROVIDER_FLAG1",
-          "COLUMN_INTERNAL_PROVIDER_FLAG4",
-          "COLUMN_INTERNAL_PROVIDER_FLAG3",
-          "TYPE_T_DMB",
-          "CONTENT_TYPE",
-          "COLUMN_TRANSPORT_STREAM_ID",
-          "VIDEO_FORMAT_576P",
-          "VIDEO_FORMAT_576I",
-          "COLUMN_LOCKED",
-          "COLUMN_SERVICE_TYPE",
-          "TYPE_ISDB_S",
-          "TYPE_ISDB_T",
-          "TYPE_ISDB_C",
-          "COLUMN_DESCRIPTION",
-          "TYPE_DVB_S2",
-          "TYPE_DVB_T2",
-          "TYPE_DVB_SH",
-          "TYPE_DTMB",
-          "COLUMN_INPUT_ID",
-          "VIDEO_RESOLUTION_SD",
-          "COLUMN_VERSION_NUMBER",
-          "COLUMN_SEARCHABLE",
-          "COLUMN_SERVICE_ID",
-          "TYPE_1SEG",
-          "TYPE_DVB_C2",
-          "TYPE_DVB_C",
-          "TYPE_DVB_H",
-          "TYPE_DVB_S",
-          "TYPE_DVB_T",
-          "CONTENT_ITEM_TYPE",
-          "SERVICE_TYPE_AUDIO",
-          "TYPE_ATSC_M_H",
-          "TYPE_NTSC",
-          "COLUMN_BROWSABLE",
-          "TYPE_ISDB_TB",
-          "COLUMN_INTERNAL_PROVIDER_DATA",
-          "COLUMN_DISPLAY_NUMBER",
-          "COLUMN_SYSTEM_APPROVED",
-          "VIDEO_FORMAT_1080I",
-          "VIDEO_FORMAT_1080P",
-          "COLUMN_TYPE",
-          "VIDEO_RESOLUTION_UHD",
-          "COLUMN_APP_LINK_ICON_URI",
-          "TYPE_S_DMB",
-          "COLUMN_APP_LINK_COLOR",
-          "SERVICE_TYPE_AUDIO_VIDEO",
-          "TYPE_PREVIEW",
-          "COLUMN_ORIGINAL_NETWORK_ID",
-          "COLUMN_INTERNAL_PROVIDER_ID"
-        ]
-      },
-      "android/support/v7/widget/ViewBoundsCheck": {
-        "androidx/widget/ViewBoundsCheck": [
-          "FLAG_CVS_EQ_PVE",
-          "FLAG_CVS_EQ_PVS",
-          "GT",
-          "LT",
-          "EQ",
-          "FLAG_CVS_GT_PVS",
-          "FLAG_CVS_GT_PVE",
-          "FLAG_CVE_EQ_PVE",
-          "FLAG_CVE_EQ_PVS",
-          "MASK",
-          "CVS_PVE_POS",
-          "CVE_PVE_POS",
-          "FLAG_CVS_LT_PVE",
-          "FLAG_CVS_LT_PVS",
-          "CVS_PVS_POS",
-          "FLAG_CVE_LT_PVS",
-          "FLAG_CVE_LT_PVE",
-          "CVE_PVS_POS",
-          "FLAG_CVE_GT_PVS",
-          "FLAG_CVE_GT_PVE"
-        ]
-      },
-      "android/support/constraint/ConstraintLayout$LayoutParams": {
-        "androidx/constraint/ConstraintLayout$LayoutParams": [
-          "topToTop",
-          "goneTopMargin",
-          "verticalWeight",
-          "horizontalDimensionFixed",
-          "goneBottomMargin",
-          "matchConstraintMaxHeight",
-          "resolveGoneLeftMargin",
-          "leftMargin",
-          "MATCH_CONSTRAINT",
-          "resolvedRightToLeft",
-          "needsBaseline",
-          "startToEnd",
-          "TOP",
-          "horizontalChainStyle",
-          "guidePercent",
-          "CHAIN_SPREAD",
-          "topMargin",
-          "goneStartMargin",
-          "goneRightMargin",
-          "UNSET",
-          "HORIZONTAL",
-          "dimensionRatioValue",
-          "MATCH_CONSTRAINT_SPREAD",
-          "END",
-          "guideBegin",
-          "matchConstraintMaxWidth",
-          "verticalDimensionFixed",
-          "resolvedRightToRight",
-          "BASELINE",
-          "START",
-          "resolvedHorizontalBias",
-          "bottomToBottom",
-          "MATCH_CONSTRAINT_WRAP",
-          "startToStart",
-          "RIGHT",
-          "orientation",
-          "matchConstraintDefaultHeight",
-          "guideEnd",
-          "bottomToTop",
-          "CHAIN_PACKED",
-          "isGuideline",
-          "dimensionRatioSide",
-          "dimensionRatio",
-          "goneLeftMargin",
-          "matchConstraintMinWidth",
-          "PARENT_ID",
-          "endToStart",
-          "LEFT",
-          "horizontalBias",
-          "leftToLeft",
-          "BOTTOM",
-          "resolveGoneRightMargin",
-          "leftToRight",
-          "verticalBias",
-          "goneEndMargin",
-          "VERTICAL",
-          "rightMargin",
-          "rightToRight",
-          "resolvedLeftToLeft",
-          "topToBottom",
-          "endToEnd",
-          "matchConstraintDefaultWidth",
-          "matchConstraintMinHeight",
-          "height",
-          "CHAIN_SPREAD_INSIDE",
-          "widget",
-          "resolvedLeftToRight",
-          "baselineToBaseline",
-          "rightToLeft",
-          "verticalChainStyle",
-          "editorAbsoluteY",
-          "editorAbsoluteX",
-          "bottomMargin",
-          "width",
-          "horizontalWeight"
-        ]
-      },
-      "android/support/v4/media/session/PlaybackStateCompat": {
-        "androidx/media/session/PlaybackStateCompat": [
-          "STATE_NONE",
-          "ACTION_SET_SHUFFLE_MODE",
-          "ACTION_SKIP_TO_QUEUE_ITEM",
-          "ERROR_CODE_CONTENT_ALREADY_PLAYING",
-          "STATE_ERROR",
-          "SHUFFLE_MODE_NONE",
-          "CREATOR",
-          "STATE_SKIPPING_TO_PREVIOUS",
-          "PLAYBACK_POSITION_UNKNOWN",
-          "REPEAT_MODE_INVALID",
-          "REPEAT_MODE_GROUP",
-          "ACTION_SET_REPEAT_MODE",
-          "ACTION_SKIP_TO_PREVIOUS",
-          "ACTION_PREPARE",
-          "ERROR_CODE_SKIP_LIMIT_REACHED",
-          "REPEAT_MODE_NONE",
-          "ACTION_PREPARE_FROM_URI",
-          "STATE_PLAYING",
-          "STATE_SKIPPING_TO_NEXT",
-          "ACTION_FAST_FORWARD",
-          "ERROR_CODE_END_OF_QUEUE",
-          "ERROR_CODE_PARENTAL_CONTROL_RESTRICTED",
-          "STATE_BUFFERING",
-          "ACTION_REWIND",
-          "KEYCODE_MEDIA_PAUSE",
-          "ACTION_PLAY_FROM_MEDIA_ID",
-          "STATE_FAST_FORWARDING",
-          "ACTION_STOP",
-          "KEYCODE_MEDIA_PLAY",
-          "ACTION_PLAY",
-          "ACTION_SET_CAPTIONING_ENABLED",
-          "ERROR_CODE_NOT_SUPPORTED",
-          "STATE_STOPPED",
-          "ACTION_PLAY_PAUSE",
-          "SHUFFLE_MODE_ALL",
-          "ERROR_CODE_AUTHENTICATION_EXPIRED",
-          "ERROR_CODE_APP_ERROR",
-          "ACTION_SEEK_TO",
-          "ERROR_CODE_CONCURRENT_STREAM_LIMIT",
-          "REPEAT_MODE_ALL",
-          "ERROR_CODE_NOT_AVAILABLE_IN_REGION",
-          "ERROR_CODE_ACTION_ABORTED",
-          "STATE_CONNECTING",
-          "ACTION_SKIP_TO_NEXT",
-          "SHUFFLE_MODE_INVALID",
-          "ACTION_PLAY_FROM_SEARCH",
-          "ERROR_CODE_UNKNOWN_ERROR",
-          "ACTION_PAUSE",
-          "ACTION_PLAY_FROM_URI",
-          "REPEAT_MODE_ONE",
-          "ACTION_SET_RATING",
-          "ACTION_PREPARE_FROM_SEARCH",
-          "STATE_PAUSED",
-          "SHUFFLE_MODE_GROUP",
-          "STATE_REWINDING",
-          "ACTION_PREPARE_FROM_MEDIA_ID",
-          "ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED",
-          "STATE_SKIPPING_TO_QUEUE_ITEM",
-          "ACTION_SET_SHUFFLE_MODE_ENABLED"
-        ]
-      },
-      "android/support/v7/appcompat/R$styleable": {
-        "androidx/appcompat/R$styleable": [
-          "MenuItem_android_title",
-          "Toolbar_android_gravity",
-          "ActionMode_titleTextStyle",
-          "ActionBar_popupTheme",
-          "MenuView_android_itemTextAppearance",
-          "SearchView_goIcon",
-          "MenuItem_actionLayout",
-          "Toolbar_navigationIcon",
-          "ColorStateListItem_android_alpha",
-          "AppCompatTheme_android_windowAnimationStyle",
-          "LinearLayoutCompat_android_orientation",
-          "AppCompatTheme_windowActionBar",
-          "MenuItem_showAsAction",
-          "ColorStateListItem_android_color",
-          "ActivityChooserView_initialActivityCount",
-          "AppCompatSeekBar_tickMarkTint",
-          "CompoundButton_android_button",
-          "MenuGroup_android_orderInCategory",
-          "PopupWindow_overlapAnchor",
-          "ViewBackgroundHelper_backgroundTint",
-          "PopupWindow",
-          "Toolbar_contentInsetEndWithActions",
-          "MenuItem_android_titleCondensed",
-          "TextAppearance",
-          "MenuItem_android_id",
-          "LinearLayoutCompat_measureWithLargestChild",
-          "AppCompatTextView_autoSizeTextType",
-          "AppCompatTheme_windowMinWidthMajor",
-          "DrawerArrowToggle_color",
-          "AppCompatTheme",
-          "SwitchCompat_trackTintMode",
-          "AppCompatTheme_windowActionBarOverlay",
-          "DrawerArrowToggle_spinBars",
-          "LinearLayoutCompat",
-          "AppCompatTextHelper",
-          "ActionMode_subtitleTextStyle",
-          "Toolbar_titleTextAppearance",
-          "ActivityChooserView",
-          "LinearLayoutCompat_divider",
-          "MenuItem_android_alphabeticShortcut",
-          "Toolbar_subtitleTextColor",
-          "AppCompatImageView_tint",
-          "AppCompatTheme_windowFixedHeightMajor",
-          "LinearLayoutCompat_android_baselineAlignedChildIndex",
-          "AppCompatTheme_windowMinWidthMinor",
-          "SearchView_suggestionRowLayout",
-          "ListPopupWindow_android_dropDownHorizontalOffset",
-          "ActionBar_subtitleTextStyle",
-          "Toolbar_titleMarginEnd",
-          "Toolbar_titleMarginTop",
-          "LinearLayoutCompat_Layout",
-          "TextAppearance_android_textColor",
-          "Toolbar_subtitleTextAppearance",
-          "ActionBar_displayOptions",
-          "Toolbar_title",
-          "Spinner_android_entries",
-          "MenuItem_numericModifiers",
-          "RecycleListView",
-          "AppCompatTextHelper_android_drawableEnd",
-          "SearchView_searchHintIcon",
-          "Toolbar_collapseIcon",
-          "AppCompatImageView",
-          "MenuItem_android_icon",
-          "ActionBar_contentInsetStart",
-          "MenuItem_android_onClick",
-          "SearchView_searchIcon",
-          "MenuItem_actionViewClass",
-          "MenuGroup_android_enabled",
-          "Toolbar_subtitle",
-          "MenuGroup_android_id",
-          "TextAppearance_android_fontFamily",
-          "ViewBackgroundHelper_android_background",
-          "TextAppearance_android_textColorHint",
-          "LinearLayoutCompat_android_baselineAligned",
-          "MenuItem_contentDescription",
-          "SearchView_voiceIcon",
-          "ActionBar_background",
-          "ActionMenuItemView",
-          "SwitchCompat_switchMinWidth",
-          "AppCompatTheme_windowFixedWidthMajor",
-          "ActionMenuItemView_android_minWidth",
-          "AlertDialog_buttonPanelSideLayout",
-          "SearchView_defaultQueryHint",
-          "MenuItem_android_numericShortcut",
-          "ActionBar_homeAsUpIndicator",
-          "AppCompatTextHelper_android_drawableTop",
-          "DrawerArrowToggle_arrowHeadLength",
-          "TextAppearance_android_shadowRadius",
-          "Toolbar_titleMargins",
-          "SwitchCompat",
-          "ActionBar_height",
-          "LinearLayoutCompat_Layout_android_layout_gravity",
-          "AlertDialog_multiChoiceItemLayout",
-          "CompoundButton_buttonTint",
-          "SearchView_android_imeOptions",
-          "MenuGroup",
-          "ActionBar_customNavigationLayout",
-          "Toolbar_navigationContentDescription",
-          "Toolbar_popupTheme",
-          "View",
-          "ActionBar",
-          "SwitchCompat_android_textOff",
-          "MenuGroup_android_menuCategory",
-          "MenuItem_tooltipText",
-          "AppCompatTextView",
-          "Spinner",
-          "ViewStubCompat_android_inflatedId",
-          "Spinner_popupTheme",
-          "SearchView_closeIcon",
-          "TextAppearance_textAllCaps",
-          "SwitchCompat_trackTint",
-          "Toolbar_logoDescription",
-          "MenuView_android_itemBackground",
-          "TextAppearance_android_textSize",
-          "SearchView_queryBackground",
-          "MenuItem_android_checked",
-          "SearchView_commitIcon",
-          "LinearLayoutCompat_Layout_android_layout_weight",
-          "ViewStubCompat_android_id",
-          "AppCompatTextView_autoSizePresetSizes",
-          "ActionBar_hideOnContentScroll",
-          "Toolbar_contentInsetStartWithNavigation",
-          "AppCompatTextHelper_android_drawableBottom",
-          "PopupWindow_android_popupBackground",
-          "Toolbar_buttonGravity",
-          "AlertDialog",
-          "TextAppearance_android_textStyle",
-          "SwitchCompat_thumbTintMode",
-          "MenuItem_android_checkable",
-          "AppCompatTheme_windowFixedWidthMinor",
-          "TextAppearance_android_textColorLink",
-          "Toolbar_titleMarginStart",
-          "RecycleListView_paddingBottomNoButtons",
-          "ActionMode_closeItemLayout",
-          "Toolbar",
-          "Toolbar_collapseContentDescription",
-          "MenuItem_android_menuCategory",
-          "AppCompatTextHelper_android_textAppearance",
-          "View_theme",
-          "MenuItem_iconTintMode",
-          "Toolbar_contentInsetLeft",
-          "Toolbar_contentInsetStart",
-          "LinearLayoutCompat_android_weightSum",
-          "SwitchCompat_android_textOn",
-          "AppCompatSeekBar",
-          "MenuItem_actionProviderClass",
-          "Toolbar_titleMargin",
-          "AlertDialog_singleChoiceItemLayout",
-          "Toolbar_contentInsetRight",
-          "LinearLayoutCompat_showDividers",
-          "SwitchCompat_android_thumb",
-          "AlertDialog_showTitle",
-          "TextAppearance_android_shadowDy",
-          "TextAppearance_android_shadowDx",
-          "AppCompatTheme_windowActionModeOverlay",
-          "MenuItem_android_visible",
-          "MenuView",
-          "SearchView",
-          "MenuItem",
-          "SearchView_queryHint",
-          "SwitchCompat_thumbTint",
-          "SwitchCompat_thumbTextPadding",
-          "AlertDialog_listLayout",
-          "ActionBar_subtitle",
-          "AlertDialog_android_layout",
-          "ListPopupWindow_android_dropDownVerticalOffset",
-          "Toolbar_titleMarginBottom",
-          "AppCompatSeekBar_android_thumb",
-          "ListPopupWindow",
-          "ButtonBarLayout_allowStacking",
-          "MenuGroup_android_checkableBehavior",
-          "SwitchCompat_switchPadding",
-          "LinearLayoutCompat_android_gravity",
-          "AppCompatTheme_windowNoTitle",
-          "ActionBar_icon",
-          "AppCompatTextView_autoSizeMinTextSize",
-          "Toolbar_logo",
-          "ViewStubCompat_android_layout",
-          "MenuItem_android_enabled",
-          "MenuItem_iconTint",
-          "AppCompatTextHelper_android_drawableRight",
-          "AppCompatTheme_android_windowIsFloating",
-          "Spinner_android_popupBackground",
-          "TextAppearance_android_shadowColor",
-          "Toolbar_maxButtonHeight",
-          "TextAppearance_android_typeface",
-          "DrawerArrowToggle_drawableSize",
-          "DrawerArrowToggle_barLength",
-          "CompoundButton",
-          "ActionMode_height",
-          "DrawerArrowToggle_arrowShaftLength",
-          "DrawerArrowToggle_gapBetweenBars",
-          "SearchView_android_focusable",
-          "ActionMode",
-          "AppCompatTextHelper_android_drawableStart",
-          "SearchView_android_maxWidth",
-          "ActivityChooserView_expandActivityOverflowButtonDrawable",
-          "ActionMode_background",
-          "ActionBar_backgroundSplit",
-          "SwitchCompat_track",
-          "MenuItem_alphabeticModifiers",
-          "TextAppearance_fontFamily",
-          "DrawerArrowToggle_thickness",
-          "AppCompatTextHelper_android_drawableLeft",
-          "ActionBar_contentInsetEnd",
-          "Spinner_android_dropDownWidth",
-          "ColorStateListItem_alpha",
-          "LinearLayoutCompat_dividerPadding",
-          "ViewStubCompat",
-          "View_android_theme",
-          "ActionBar_backgroundStacked",
-          "SearchView_android_inputType",
-          "AlertDialog_listItemLayout",
-          "AppCompatTheme_panelBackground",
-          "AppCompatImageView_srcCompat",
-          "ColorStateListItem",
-          "AppCompatTheme_windowFixedHeightMinor",
-          "MenuView_preserveIconSpacing",
-          "ActionBar_logo",
-          "AppCompatSeekBar_tickMarkTintMode",
-          "SwitchCompat_showText",
-          "AppCompatTextView_autoSizeStepGranularity",
-          "Toolbar_contentInsetEnd",
-          "SearchView_submitBackground",
-          "MenuView_subMenuArrow",
-          "CompoundButton_buttonTintMode",
-          "MenuItem_android_orderInCategory",
-          "ViewBackgroundHelper_backgroundTintMode",
-          "SwitchCompat_switchTextAppearance",
-          "ActionBar_titleTextStyle",
-          "Toolbar_titleTextColor",
-          "MenuGroup_android_visible",
-          "SwitchCompat_splitTrack",
-          "ButtonBarLayout",
-          "AppCompatSeekBar_tickMark",
-          "Spinner_android_prompt",
-          "AppCompatTextView_autoSizeMaxTextSize",
-          "ActionBar_elevation",
-          "ActionBarLayout_android_layout_gravity",
-          "DrawerArrowToggle",
-          "ActionBar_title",
-          "AppCompatImageView_tintMode",
-          "SearchView_layout",
-          "ViewBackgroundHelper",
-          "RecycleListView_paddingTopNoTitle",
-          "ActionBarLayout",
-          "SearchView_iconifiedByDefault"
-        ]
-      },
-      "android/support/v17/leanback/widget/FocusHighlight": {
-        "androidx/leanback/widget/FocusHighlight": [
-          "ZOOM_FACTOR_SMALL",
-          "ZOOM_FACTOR_XSMALL",
-          "ZOOM_FACTOR_NONE",
-          "ZOOM_FACTOR_LARGE",
-          "ZOOM_FACTOR_MEDIUM"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$Command": {
-        "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$Command": [
-          "extras",
-          "command",
-          "stub"
-        ]
-      },
-      "android/support/v7/appcompat/R$attr": {
-        "androidx/appcompat/R$attr": [
-          "checkboxStyle",
-          "colorButtonNormal",
-          "editTextStyle",
-          "actionDropDownStyle",
-          "colorControlNormal",
-          "colorAccent",
-          "actionBarSize",
-          "listMenuViewStyle",
-          "buttonStyle",
-          "colorControlHighlight",
-          "panelMenuListTheme",
-          "seekBarStyle",
-          "actionModeStyle",
-          "alertDialogStyle",
-          "isLightTheme",
-          "ratingBarStyle",
-          "radioButtonStyle",
-          "actionBarTabTextStyle",
-          "alertDialogCenterButtons",
-          "actionBarStyle",
-          "listPopupWindowStyle",
-          "actionBarPopupTheme",
-          "actionOverflowButtonStyle",
-          "spinnerStyle",
-          "popupMenuStyle",
-          "colorPrimaryDark",
-          "drawerArrowStyle",
-          "actionBarWidgetTheme",
-          "alpha",
-          "actionBarTabStyle",
-          "imageButtonStyle",
-          "colorControlActivated",
-          "toolbarStyle",
-          "homeAsUpIndicator",
-          "toolbarNavigationButtonStyle",
-          "colorPrimary",
-          "actionBarTheme",
-          "actionOverflowMenuStyle",
-          "dropDownListViewStyle",
-          "actionModePopupWindowStyle",
-          "actionModeShareDrawable",
-          "dialogTheme",
-          "alertDialogTheme",
-          "searchViewStyle",
-          "colorSwitchThumbNormal",
-          "actionBarTabBarStyle",
-          "textColorSearchUrl",
-          "switchStyle",
-          "autoCompleteTextViewStyle"
-        ]
-      },
-      "android/support/v7/widget/StaggeredGridLayoutManager$Span": {
-        "androidx/widget/StaggeredGridLayoutManager$Span": [
-          "INVALID_LINE"
-        ]
-      },
-      "android/support/v4/app/NotificationManagerCompat": {
-        "androidx/app/NotificationManagerCompat": [
-          "OP_POST_NOTIFICATION",
-          "sEnabledNotificationListeners",
-          "IMPORTANCE_HIGH",
-          "SIDE_CHANNEL_RETRY_MAX_COUNT",
-          "TAG",
-          "SETTING_ENABLED_NOTIFICATION_LISTENERS",
-          "sSideChannelManager",
-          "sLock",
-          "IMPORTANCE_DEFAULT",
-          "SIDE_CHANNEL_RETRY_BASE_INTERVAL_MS",
-          "EXTRA_USE_SIDE_CHANNEL",
-          "IMPORTANCE_NONE",
-          "sEnabledNotificationListenersLock",
-          "ACTION_BIND_SIDE_CHANNEL",
-          "CHECK_OP_NO_THROW",
-          "sEnabledNotificationListenerPackages",
-          "IMPORTANCE_LOW",
-          "IMPORTANCE_MAX",
-          "MAX_SIDE_CHANNEL_SDK_VERSION",
-          "IMPORTANCE_MIN",
-          "IMPORTANCE_UNSPECIFIED"
-        ]
-      },
-      "android/support/v4/util/LruCache": {
-        "androidx/util/LruCache": [
-          "map",
-          "hitCount",
-          "missCount",
-          "maxSize",
-          "putCount",
-          "createCount",
-          "evictionCount",
-          "size"
-        ]
-      },
-      "android/support/v4/content/FileProvider": {
-        "androidx/content/FileProvider": [
-          "META_DATA_FILE_PROVIDER_PATHS",
-          "TAG_EXTERNAL_CACHE",
-          "TAG_FILES_PATH",
-          "TAG_EXTERNAL_FILES",
-          "ATTR_PATH",
-          "ATTR_NAME",
-          "DEVICE_ROOT",
-          "sCache",
-          "COLUMNS",
-          "TAG_EXTERNAL",
-          "TAG_ROOT_PATH",
-          "TAG_CACHE_PATH"
-        ]
-      },
-      "android/support/v4/media/AudioAttributesCompat": {
-        "androidx/media/AudioAttributesCompat": [
-          "FLAG_LOW_LATENCY",
-          "FLAG_DEEP_BUFFER",
-          "USAGE_NOTIFICATION",
-          "SUPPRESSIBLE_USAGES",
-          "SUPPRESSIBLE_CALL",
-          "USAGE_NOTIFICATION_COMMUNICATION_INSTANT",
-          "USAGE_NOTIFICATION_RINGTONE",
-          "USAGE_NOTIFICATION_EVENT",
-          "USAGE_VIRTUAL_SOURCE",
-          "FLAG_BYPASS_MUTE",
-          "USAGE_ASSISTANCE_SONIFICATION",
-          "CONTENT_TYPE_SPEECH",
-          "FLAG_BYPASS_INTERRUPTION_POLICY",
-          "SDK_USAGES",
-          "USAGE_GAME",
-          "USAGE_UNKNOWN",
-          "USAGE_NOTIFICATION_COMMUNICATION_DELAYED",
-          "FLAG_ALL_PUBLIC",
-          "FLAG_SCO",
-          "FLAG_SECURE",
-          "FLAG_ALL",
-          "USAGE_VOICE_COMMUNICATION",
-          "USAGE_VOICE_COMMUNICATION_SIGNALLING",
-          "USAGE_MEDIA",
-          "USAGE_ALARM",
-          "CONTENT_TYPE_MOVIE",
-          "TAG",
-          "FLAG_HW_AV_SYNC",
-          "sForceLegacyBehavior",
-          "USAGE_ASSISTANCE_NAVIGATION_GUIDANCE",
-          "FLAG_BEACON",
-          "CONTENT_TYPE_UNKNOWN",
-          "USAGE_ASSISTANT",
-          "FLAG_AUDIBILITY_ENFORCED",
-          "FLAG_HW_HOTWORD",
-          "USAGE_NOTIFICATION_COMMUNICATION_REQUEST",
-          "USAGE_ASSISTANCE_ACCESSIBILITY",
-          "CONTENT_TYPE_MUSIC",
-          "SUPPRESSIBLE_NOTIFICATION",
-          "CONTENT_TYPE_SONIFICATION"
-        ]
-      },
-      "android/support/v7/mediarouter/R$id": {
-        "androidx/mediarouter/R$id": [
-          "mr_custom_control",
-          "mr_art",
-          "mr_name",
-          "mr_control_subtitle",
-          "mr_control_title",
-          "mr_control_playback_ctrl",
-          "mr_chooser_title",
-          "mr_group_expand_collapse",
-          "mr_close",
-          "mr_chooser_list",
-          "mr_volume_group_list",
-          "mr_expandable_area",
-          "mr_chooser_route_desc",
-          "mr_chooser_route_icon",
-          "mr_control_divider",
-          "volume_item_container",
-          "mr_chooser_route_name",
-          "mr_volume_control",
-          "mr_dialog_area",
-          "mr_default_control",
-          "mr_volume_slider",
-          "mr_volume_item_icon",
-          "mr_media_main_control",
-          "mr_playback_control",
-          "mr_control_title_container"
-        ]
-      },
-      "android/support/text/emoji/flatbuffer/Table": {
-        "androidx/text/emoji/flatbuffer/Table": [
-          "UTF8_CHARSET",
-          "bb",
-          "bb_pos",
-          "UTF8_DECODER",
-          "CHAR_BUFFER"
-        ]
-      },
-      "android/support/v17/leanback/R$id": {
-        "androidx/leanback/R$id": [
-          "paused",
-          "content_container",
-          "guidedactions_item_title",
-          "container_list",
-          "lb_parallax_source",
-          "description_dock",
-          "guidedactions_list",
-          "browse_grid_dock",
-          "details_overview_image",
-          "scale_frame",
-          "details_overview_right_panel",
-          "playback_progress",
-          "guidedactions_sub_list_background",
-          "guidedactions_root2",
-          "mediaItemDetails",
-          "button_start",
-          "title_badge",
-          "lb_search_text_editor",
-          "bottom_spacer",
-          "lb_slide_transition_value",
-          "info_field",
-          "mediaItemActionsContainer",
-          "thumbs_row",
-          "controls_container",
-          "guidedactions_list_background2",
-          "guidedactions_item_content",
-          "lb_action_button",
-          "guidedactions_item_icon",
-          "guidedactions_item_checkmark",
-          "lb_control_closed_captioning",
-          "browse_grid",
-          "title_orb",
-          "details_root",
-          "guidedactions_list_background",
-          "total_time",
-          "controls_card",
-          "lb_control_more_actions",
-          "lb_control_shuffle",
-          "mediaRowSeparator",
-          "image",
-          "lb_control_fast_rewind",
-          "row_header",
-          "controls_card_right_panel",
-          "description",
-          "background_imagein",
-          "title_text",
-          "details_fragment_root",
-          "playback_fragment_background",
-          "browse_frame",
-          "title",
-          "current_time",
-          "browse_headers_dock",
-          "guidedactions_sub_list",
-          "details_overview_actions_background",
-          "background_imageout",
-          "guidedactions_item_chevron",
-          "mediaItemDuration",
-          "lb_control_skip_previous",
-          "browse_container_dock",
-          "lb_control_skip_next",
-          "mediaListHeader",
-          "main_image",
-          "lb_control_thumbs_down",
-          "mediaItemNumberViewFlipper",
-          "details_overview",
-          "actionIcon",
-          "guidedactions_item_description",
-          "guidance_container",
-          "guidedstep_background",
-          "guidedactions_activator_item",
-          "transport_row",
-          "playback_controls_dock",
-          "page_container",
-          "lb_shadow_focused",
-          "icon",
-          "guidedactions_content",
-          "playing",
-          "lb_control_high_quality",
-          "guidance_description",
-          "details_frame",
-          "guidance_icon",
-          "control_bar",
-          "page_indicator",
-          "lb_search_bar_speech_orb",
-          "details_rows_dock",
-          "row_header_description",
-          "lb_control_thumbs_up",
-          "secondary_controls_dock",
-          "button",
-          "lb_shadow_impl",
-          "lb_focus_animator",
-          "spacer",
-          "lb_search_bar_badge",
-          "initial",
-          "lb_control_repeat",
-          "guidedactions_content2",
-          "guidance_title",
-          "message",
-          "action_fragment_root",
-          "lb_shadow_normal",
-          "guidedactions_root",
-          "lb_details_description_title",
-          "guidance_breadcrumb",
-          "action_fragment",
-          "background_container",
-          "lb_row_container_header_dock",
-          "details_background_view",
-          "browse_title_group",
-          "main_icon",
-          "video_surface_container",
-          "lb_search_frame",
-          "picker",
-          "lb_control_play_pause",
-          "lb_details_description_body",
-          "controls_dock",
-          "lb_control_picture_in_picture",
-          "lb_results_frame",
-          "grid_frame",
-          "lb_control_fast_forward",
-          "details_overview_description",
-          "mediaItemRow",
-          "mediaItemName",
-          "content_fragment",
-          "details_overview_actions",
-          "more_actions_dock",
-          "fade_out_edge",
-          "label",
-          "action_fragment_background",
-          "browse_headers",
-          "foreground_container",
-          "transitionPosition",
-          "lb_search_bar",
-          "error_frame",
-          "guidedactions_list2",
-          "lb_details_description_subtitle",
-          "lb_search_bar_items",
-          "mediaRowSelector",
-          "bar3",
-          "bar2",
-          "bar1",
-          "logo",
-          "search_orb",
-          "row_content",
-          "guidedstep_background_view_root"
-        ]
-      },
-      "android/support/v17/leanback/widget/picker/Picker$ViewHolder": {
-        "androidx/leanback/widget/picker/Picker$ViewHolder": [
-          "textView",
-          "itemView"
-        ]
-      },
-      "android/support/v4/media/MediaMetadataCompat": {
-        "androidx/media/MediaMetadataCompat": [
-          "METADATA_KEY_COMPILATION",
-          "METADATA_KEY_ART",
-          "METADATA_KEY_NUM_TRACKS",
-          "METADATA_KEY_ALBUM",
-          "METADATA_TYPE_TEXT",
-          "METADATA_TYPE_LONG",
-          "METADATA_KEY_TRACK_NUMBER",
-          "METADATA_KEY_ARTIST",
-          "METADATA_KEY_DOWNLOAD_STATUS",
-          "METADATA_KEY_AUTHOR",
-          "METADATA_KEY_DATE",
-          "METADATA_KEY_DISPLAY_TITLE",
-          "METADATA_KEY_DISPLAY_DESCRIPTION",
-          "METADATA_KEY_DURATION",
-          "METADATA_KEY_YEAR",
-          "METADATA_TYPE_BITMAP",
-          "METADATA_KEY_USER_RATING",
-          "METADATA_KEY_ALBUM_ART_URI",
-          "METADATA_KEY_MEDIA_URI",
-          "METADATA_KEY_MEDIA_ID",
-          "PREFERRED_BITMAP_ORDER",
-          "CREATOR",
-          "METADATA_KEY_BT_FOLDER_TYPE",
-          "METADATA_KEY_TITLE",
-          "METADATA_KEY_DISPLAY_ICON_URI",
-          "PREFERRED_URI_ORDER",
-          "METADATA_TYPE_RATING",
-          "METADATA_KEY_WRITER",
-          "PREFERRED_DESCRIPTION_ORDER",
-          "TAG",
-          "METADATA_KEY_COMPOSER",
-          "METADATA_KEY_ALBUM_ART",
-          "METADATA_KEY_GENRE",
-          "METADATA_KEY_ART_URI",
-          "METADATA_KEY_DISPLAY_ICON",
-          "METADATA_KEY_ALBUM_ARTIST",
-          "METADATA_KEY_ADVERTISEMENT",
-          "METADATA_KEYS_TYPE",
-          "METADATA_KEY_RATING",
-          "METADATA_KEY_DISPLAY_SUBTITLE",
-          "METADATA_KEY_DISC_NUMBER"
-        ]
-      },
-      "android/support/transition/Fade": {
-        "androidx/transition/Fade": [
-          "PROPNAME_TRANSITION_ALPHA",
-          "IN",
-          "LOG_TAG",
-          "OUT"
-        ]
-      },
-      "android/support/v17/leanback/R$layout": {
-        "androidx/leanback/R$layout": [
-          "lb_rows_fragment",
-          "lb_video_surface",
-          "lb_headers_fragment",
-          "lb_image_card_view_themed_badge_left",
-          "lb_search_orb",
-          "lb_details_fragment",
-          "lb_guidedstep_fragment",
-          "lb_image_card_view",
-          "lb_details_overview",
-          "lb_playback_controls",
-          "lb_guidedactions_datepicker_item",
-          "lb_image_card_view_themed_title",
-          "lb_picker_column",
-          "lb_playback_transport_controls_row",
-          "lb_image_card_view_themed_badge_right",
-          "lb_row_media_item",
-          "lb_row_container",
-          "lb_search_bar",
-          "lb_shadow",
-          "lb_error_fragment",
-          "lb_guidedbuttonactions",
-          "lb_browse_fragment",
-          "lb_guidedactions_item",
-          "lb_browse_title",
-          "lb_list_row",
-          "lb_section_header",
-          "lb_image_card_view_themed_content",
-          "lb_action_1_line",
-          "lb_media_list_header",
-          "lb_media_item_number_view_flipper",
-          "lb_vertical_grid_fragment",
-          "lb_divider",
-          "lb_details_description",
-          "lb_playback_now_playing_bars",
-          "lb_row_media_item_action",
-          "lb_fullwidth_details_overview",
-          "lb_picker",
-          "lb_guidedstep_background",
-          "lb_guidance",
-          "lb_picker_item",
-          "lb_speech_orb",
-          "lb_vertical_grid",
-          "lb_control_button_primary",
-          "lb_search_fragment",
-          "lb_playback_fragment",
-          "lb_picker_separator",
-          "lb_onboarding_fragment",
-          "lb_playback_controls_row",
-          "lb_row_header",
-          "lb_list_row_hovercard",
-          "lb_control_bar",
-          "lb_header",
-          "lb_guidedactions",
-          "lb_action_2_lines",
-          "lb_control_button_secondary",
-          "lb_title_view",
-          "lb_fullwidth_details_overview_logo"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat": {
-        "androidx/app/NotificationCompat": [
-          "EXTRA_BACKGROUND_IMAGE_URI",
-          "FLAG_FOREGROUND_SERVICE",
-          "CATEGORY_SYSTEM",
-          "EXTRA_REMOTE_INPUT_HISTORY",
-          "EXTRA_LARGE_ICON",
-          "EXTRA_SHOW_WHEN",
-          "EXTRA_COMPACT_ACTIONS",
-          "CATEGORY_ERROR",
-          "GROUP_ALERT_CHILDREN",
-          "BADGE_ICON_LARGE",
-          "PRIORITY_DEFAULT",
-          "EXTRA_PEOPLE",
-          "STREAM_DEFAULT",
-          "VISIBILITY_PRIVATE",
-          "FLAG_ONLY_ALERT_ONCE",
-          "CATEGORY_EMAIL",
-          "DEFAULT_VIBRATE",
-          "CATEGORY_PROGRESS",
-          "FLAG_ONGOING_EVENT",
-          "EXTRA_PROGRESS_MAX",
-          "EXTRA_TITLE",
-          "CATEGORY_PROMO",
-          "EXTRA_SELF_DISPLAY_NAME",
-          "VISIBILITY_SECRET",
-          "PRIORITY_LOW",
-          "EXTRA_LARGE_ICON_BIG",
-          "CATEGORY_TRANSPORT",
-          "DEFAULT_SOUND",
-          "CATEGORY_CALL",
-          "EXTRA_SMALL_ICON",
-          "CATEGORY_RECOMMENDATION",
-          "EXTRA_PROGRESS",
-          "PRIORITY_HIGH",
-          "EXTRA_CONVERSATION_TITLE",
-          "GROUP_ALERT_SUMMARY",
-          "EXTRA_INFO_TEXT",
-          "BADGE_ICON_NONE",
-          "EXTRA_BIG_TEXT",
-          "EXTRA_TEXT_LINES",
-          "EXTRA_PICTURE",
-          "PRIORITY_MIN",
-          "FLAG_HIGH_PRIORITY",
-          "COLOR_DEFAULT",
-          "PRIORITY_MAX",
-          "EXTRA_TEMPLATE",
-          "FLAG_LOCAL_ONLY",
-          "CATEGORY_ALARM",
-          "EXTRA_SUMMARY_TEXT",
-          "BADGE_ICON_SMALL",
-          "DEFAULT_ALL",
-          "CATEGORY_STATUS",
-          "CATEGORY_EVENT",
-          "GROUP_ALERT_ALL",
-          "EXTRA_SHOW_CHRONOMETER",
-          "DEFAULT_LIGHTS",
-          "VISIBILITY_PUBLIC",
-          "CATEGORY_SOCIAL",
-          "CATEGORY_MESSAGE",
-          "FLAG_INSISTENT",
-          "CATEGORY_REMINDER",
-          "EXTRA_AUDIO_CONTENTS_URI",
-          "CATEGORY_SERVICE",
-          "EXTRA_TITLE_BIG",
-          "FLAG_AUTO_CANCEL",
-          "EXTRA_MEDIA_SESSION",
-          "EXTRA_MESSAGES",
-          "EXTRA_TEXT",
-          "FLAG_SHOW_LIGHTS",
-          "FLAG_GROUP_SUMMARY",
-          "FLAG_NO_CLEAR",
-          "EXTRA_SUB_TEXT",
-          "EXTRA_PROGRESS_INDETERMINATE"
-        ]
-      },
-      "android/support/animation/AnimationHandler": {
-        "androidx/animation/AnimationHandler": [
-          "sAnimatorHandler",
-          "FRAME_DELAY_MS"
-        ]
-      },
-      "android/support/media/ExifInterface": {
-        "androidx/media/ExifInterface": [
-          "FLAG_FLASH_RED_EYE_SUPPORTED",
-          "sTagSetForCompatibility",
-          "TAG_CUSTOM_RENDERED",
-          "TAG_SENSITIVITY_TYPE",
-          "GAIN_CONTROL_HIGH_GAIN_UP",
-          "TAG_FOCAL_PLANE_Y_RESOLUTION",
-          "LIGHT_SOURCE_OTHER",
-          "TAG_GPS_TIMESTAMP",
-          "TAG_COMPRESSION",
-          "IFD_INTEROPERABILITY_TAGS",
-          "IFD_FORMAT_DOUBLE",
-          "TAG_PIXEL_Y_DIMENSION",
-          "TAG_GPS_IMG_DIRECTION_REF",
-          "JPEG_INTERCHANGE_FORMAT_LENGTH_TAG",
-          "FLIPPED_ROTATION_ORDER",
-          "LIGHT_SOURCE_WARM_WHITE_FLUORESCENT",
-          "LIGHT_SOURCE_UNKNOWN",
-          "WHITE_BALANCE_MANUAL",
-          "TAG_SUBSEC_TIME",
-          "FILE_SOURCE_DSC",
-          "IFD_FORMAT_SSHORT",
-          "MARKER",
-          "LONGITUDE_WEST",
-          "IMAGE_TYPE_UNKNOWN",
-          "METERING_MODE_SPOT",
-          "IMAGE_TYPE_CR2",
-          "TAG_GPS_DOP",
-          "MAX_THUMBNAIL_SIZE",
-          "SENSOR_TYPE_TWO_CHIP",
-          "TAG_GPS_TRACK",
-          "SENSITIVITY_TYPE_REI_AND_ISO",
-          "SENSOR_TYPE_ONE_CHIP",
-          "GPS_MEASUREMENT_NO_DIFFERENTIAL",
-          "ORIENTATION_ROTATE_90",
-          "TAG_WHITE_POINT",
-          "PEF_SIGNATURE",
-          "TAG_GPS_IMG_DIRECTION",
-          "ORIGINAL_RESOLUTION_IMAGE",
-          "METERING_MODE_CENTER_WEIGHT_AVERAGE",
-          "TAG_ORF_CAMERA_SETTINGS_IFD_POINTER",
-          "TAG_ISO_SPEED",
-          "IMAGE_TYPE_DNG",
-          "GAIN_CONTROL_NONE",
-          "LONGITUDE_EAST",
-          "IFD_TYPE_ORF_MAKER_NOTE",
-          "TAG_DEVICE_SETTING_DESCRIPTION",
-          "TAG_BRIGHTNESS_VALUE",
-          "TAG_GPS_MAP_DATUM",
-          "METERING_MODE_MULTI_SPOT",
-          "TAG_RW2_ISO",
-          "TAG_ORF_PREVIEW_IMAGE_START",
-          "LIGHT_SOURCE_FLUORESCENT",
-          "COLOR_SPACE_S_RGB",
-          "IMAGE_TYPE_SRW",
-          "FLAG_FLASH_RETURN_LIGHT_DETECTED",
-          "SUBJECT_DISTANCE_RANGE_DISTANT_VIEW",
-          "TAG_ISO_SPEED_LATITUDE_YYY",
-          "RAF_INFO_SIZE",
-          "TAG",
-          "ORIENTATION_NORMAL",
-          "TAG_SUB_IFD_POINTER",
-          "LIGHT_SOURCE_TUNGSTEN",
-          "RESOLUTION_UNIT_CENTIMETERS",
-          "ALTITUDE_ABOVE_SEA_LEVEL",
-          "BYTE_ALIGN_MM",
-          "METERING_MODE_OTHER",
-          "TAG_EXIF_IFD_POINTER",
-          "BYTE_ALIGN_II",
-          "TAG_GPS_TRACK_REF",
-          "SHARPNESS_NORMAL",
-          "FILE_SOURCE_OTHER",
-          "TAG_OECF",
-          "SENSOR_TYPE_COLOR_SEQUENTIAL",
-          "sFormatter",
-          "FLAG_FLASH_MODE_COMPULSORY_FIRING",
-          "GPS_SPEED_KNOTS",
-          "DATA_DEFLATE_ZIP",
-          "TAG_DNG_VERSION",
-          "IMAGE_TYPE_ARW",
-          "TAG_RELATED_SOUND_FILE",
-          "TAG_BODY_SERIAL_NUMBER",
-          "EXPOSURE_PROGRAM_NOT_DEFINED",
-          "SIGNATURE_CHECK_SIZE",
-          "JPEG_INTERCHANGE_FORMAT_TAG",
-          "TAG_RW2_SENSOR_RIGHT_BORDER",
-          "TAG_CAMARA_OWNER_NAME",
-          "TAG_SPATIAL_FREQUENCY_RESPONSE",
-          "COLOR_SPACE_UNCALIBRATED",
-          "EXPOSURE_PROGRAM_NORMAL",
-          "EXPOSURE_PROGRAM_SHUTTER_PRIORITY",
-          "TAG_THUMBNAIL_LENGTH",
-          "TAG_TRANSFER_FUNCTION",
-          "IMAGE_TYPE_RW2",
-          "TAG_RW2_SENSOR_LEFT_BORDER",
-          "TAG_CFA_PATTERN",
-          "TAG_THUMBNAIL_IMAGE_LENGTH",
-          "TAG_GPS_H_POSITIONING_ERROR",
-          "sGpsTimestampPattern",
-          "PEF_MAKER_NOTE_SKIP_SIZE",
-          "IFD_FORMAT_STRING",
-          "TAG_SUBJECT_DISTANCE",
-          "TAG_GPS_SPEED_REF",
-          "SENSITIVITY_TYPE_SOS_AND_REI_AND_ISO",
-          "TAG_ORIENTATION",
-          "TAG_PHOTOMETRIC_INTERPRETATION",
-          "LIGHT_SOURCE_DAYLIGHT",
-          "TAG_MODEL",
-          "IFD_TYPE_GPS",
-          "LIGHT_SOURCE_SHADE",
-          "Y_CB_CR_POSITIONING_CO_SITED",
-          "TAG_RAF_IMAGE_SIZE",
-          "IFD_FORMAT_BYTES_PER_FORMAT",
-          "SENSITIVITY_TYPE_SOS_AND_REI",
-          "TAG_Y_RESOLUTION",
-          "TAG_GPS_DIFFERENTIAL",
-          "EXPOSURE_MODE_AUTO",
-          "MARKER_SOS",
-          "MARKER_SOI",
-          "IFD_TYPE_PREVIEW",
-          "IMAGE_TYPE_RAF",
-          "IFD_FORMAT_SBYTE",
-          "ORIENTATION_FLIP_VERTICAL",
-          "TAG_LENS_SERIAL_NUMBER",
-          "TAG_FLASHPIX_VERSION",
-          "EXIF_ASCII_PREFIX",
-          "IFD_TYPE_ORF_IMAGE_PROCESSING",
-          "TAG_ORF_IMAGE_PROCESSING_IFD_POINTER",
-          "DATA_LOSSY_JPEG",
-          "TAG_GPS_SPEED",
-          "TAG_USER_COMMENT",
-          "TAG_SUBSEC_TIME_ORIGINAL",
-          "TAG_THUMBNAIL_IMAGE_WIDTH",
-          "IFD_FORMAT_UNDEFINED",
-          "RW2_SIGNATURE",
-          "ORF_MAKER_NOTE_HEADER_2",
-          "ORF_MAKER_NOTE_HEADER_1",
-          "TAG_WHITE_BALANCE",
-          "TAG_ISO_SPEED_LATITUDE_ZZZ",
-          "TAG_PHOTOGRAPHIC_SENSITIVITY",
-          "SCENE_CAPTURE_TYPE_LANDSCAPE",
-          "MARKER_COM",
-          "TAG_HAS_THUMBNAIL",
-          "TAG_EXPOSURE_TIME",
-          "TAG_GPS_SATELLITES",
-          "TAG_COLOR_SPACE",
-          "TAG_GPS_LATITUDE_REF",
-          "IMAGE_TYPE_JPEG",
-          "START_CODE",
-          "TAG_APERTURE_VALUE",
-          "TAG_BITS_PER_SAMPLE",
-          "TAG_DIGITAL_ZOOM_RATIO",
-          "METERING_MODE_PATTERN",
-          "TAG_SHUTTER_SPEED_VALUE",
-          "DATA_PACK_BITS_COMPRESSED",
-          "sExifPointerTagMap",
-          "EXPOSURE_PROGRAM_APERTURE_PRIORITY",
-          "TAG_SAMPLES_PER_PIXEL",
-          "TAG_FILE_SOURCE",
-          "LIGHT_SOURCE_DAY_WHITE_FLUORESCENT",
-          "IFD_EXIF_TAGS",
-          "TAG_GPS_INFO_IFD_POINTER",
-          "TAG_GAMMA",
-          "IMAGE_TYPE_ORF",
-          "TAG_GAIN_CONTROL",
-          "IFD_TYPE_EXIF",
-          "TAG_SUBJECT_AREA",
-          "FORMAT_CHUNKY",
-          "ASCII",
-          "ORF_IMAGE_PROCESSING_TAGS",
-          "TAG_ORF_THUMBNAIL_IMAGE",
-          "IMAGE_TYPE_PEF",
-          "IFD_TYPE_ORF_CAMERA_SETTINGS",
-          "EXPOSURE_MODE_MANUAL",
-          "TAG_GPS_DATESTAMP",
-          "IFD_FORMAT_SRATIONAL",
-          "TAG_SUBJECT_LOCATION",
-          "FILE_SOURCE_REFLEX_SCANNER",
-          "TAG_LENS_SPECIFICATION",
-          "LIGHT_SOURCE_DAYLIGHT_FLUORESCENT",
-          "TAG_COMPONENTS_CONFIGURATION",
-          "TAG_REFERENCE_BLACK_WHITE",
-          "IMAGE_TYPE_NEF",
-          "GAIN_CONTROL_HIGH_GAIN_DOWN",
-          "LIGHT_SOURCE_ISO_STUDIO_TUNGSTEN",
-          "ORIENTATION_TRANSVERSE",
-          "IFD_FORMAT_URATIONAL",
-          "EXPOSURE_PROGRAM_LANDSCAPE_MODE",
-          "IMAGE_TYPE_NRW",
-          "TAG_FLASH",
-          "RAF_SIGNATURE",
-          "EXPOSURE_PROGRAM_ACTION",
-          "TAG_PLANAR_CONFIGURATION",
-          "LIGHT_SOURCE_CLOUDY_WEATHER",
-          "FLAG_FLASH_FIRED",
-          "EXPOSURE_MODE_AUTO_BRACKET",
-          "ORIENTATION_TRANSPOSE",
-          "REDUCED_RESOLUTION_IMAGE",
-          "WHITE_BALANCE_AUTO",
-          "TAG_FOCAL_PLANE_RESOLUTION_UNIT",
-          "PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO",
-          "DATA_UNCOMPRESSED",
-          "MARKER_EOI",
-          "TAG_SUBSEC_TIME_DIGITIZED",
-          "TAG_THUMBNAIL_DATA",
-          "TAG_GPS_DEST_BEARING_REF",
-          "EXPOSURE_PROGRAM_PORTRAIT_MODE",
-          "TAG_GPS_ALTITUDE",
-          "DATA_JPEG",
-          "TAG_GPS_DEST_LATITUDE_REF",
-          "ALTITUDE_BELOW_SEA_LEVEL",
-          "TAG_F_NUMBER",
-          "SUBJECT_DISTANCE_RANGE_UNKNOWN",
-          "TAG_SPECTRAL_SENSITIVITY",
-          "SCENE_CAPTURE_TYPE_NIGHT",
-          "TAG_PIXEL_X_DIMENSION",
-          "TAG_DEFAULT_CROP_SIZE",
-          "LIGHT_SOURCE_D75",
-          "LIGHT_SOURCE_D65",
-          "GPS_MEASUREMENT_INTERRUPTED",
-          "TAG_GPS_DEST_DISTANCE",
-          "LIGHT_SOURCE_D50",
-          "LIGHT_SOURCE_D55",
-          "ORIENTATION_ROTATE_180",
-          "SATURATION_NORMAL",
-          "TAG_THUMBNAIL_OFFSET",
-          "RESOLUTION_UNIT_INCHES",
-          "ORF_CAMERA_SETTINGS_TAGS",
-          "IFD_FORMAT_BYTE",
-          "TAG_LENS_MAKE",
-          "JPEG_SIGNATURE",
-          "EXPOSURE_PROGRAM_MANUAL",
-          "EXPOSURE_PROGRAM_CREATIVE",
-          "SUBJECT_DISTANCE_RANGE_CLOSE_VIEW",
-          "TAG_MAX_APERTURE_VALUE",
-          "DEBUG",
-          "METERING_MODE_AVERAGE",
-          "RENDERED_PROCESS_NORMAL",
-          "LIGHT_SOURCE_STANDARD_LIGHT_B",
-          "LIGHT_SOURCE_STANDARD_LIGHT_C",
-          "LIGHT_SOURCE_STANDARD_LIGHT_A",
-          "TAG_ISO_SPEED_RATINGS",
-          "TAG_STANDARD_OUTPUT_SENSITIVITY",
-          "PHOTOMETRIC_INTERPRETATION_YCBCR",
-          "TAG_ARTIST",
-          "IFD_TYPE_THUMBNAIL",
-          "PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO",
-          "FLAG_FLASH_RETURN_LIGHT_NOT_DETECTED",
-          "TAG_FOCAL_PLANE_X_RESOLUTION",
-          "TAG_LIGHT_SOURCE",
-          "MARKER_SOF1",
-          "MARKER_SOF2",
-          "MARKER_SOF0",
-          "MARKER_SOF9",
-          "MARKER_SOF7",
-          "MARKER_SOF5",
-          "MARKER_SOF6",
-          "MARKER_SOF3",
-          "sExifTagMapsForWriting",
-          "SHARPNESS_SOFT",
-          "TAG_SCENE_TYPE",
-          "TAG_GPS_DEST_LONGITUDE",
-          "sNonZeroTimePattern",
-          "GPS_DIRECTION_MAGNETIC",
-          "EXIF_TAGS",
-          "TAG_GPS_AREA_INFORMATION",
-          "FLAG_FLASH_MODE_COMPULSORY_SUPPRESSION",
-          "IFD_THUMBNAIL_TAGS",
-          "IFD_FORMAT_ULONG",
-          "TAG_INTEROPERABILITY_IFD_POINTER",
-          "TAG_SUBFILE_TYPE",
-          "TAG_RW2_SENSOR_TOP_BORDER",
-          "TAG_INTEROPERABILITY_INDEX",
-          "GPS_MEASUREMENT_3D",
-          "GPS_DIRECTION_TRUE",
-          "GPS_MEASUREMENT_2D",
-          "sExifTagMapsForReading",
-          "TAG_JPEG_INTERCHANGE_FORMAT",
-          "LATITUDE_SOUTH",
-          "PHOTOMETRIC_INTERPRETATION_RGB",
-          "BITS_PER_SAMPLE_RGB",
-          "CONTRAST_HARD",
-          "SHARPNESS_HARD",
-          "LATITUDE_NORTH",
-          "TAG_CONTRAST",
-          "ORIENTATION_FLIP_HORIZONTAL",
-          "TAG_GPS_LONGITUDE",
-          "TAG_COMPRESSED_BITS_PER_PIXEL",
-          "TAG_METERING_MODE",
-          "BITS_PER_SAMPLE_GREYSCALE_1",
-          "BITS_PER_SAMPLE_GREYSCALE_2",
-          "TAG_ROWS_PER_STRIP",
-          "GPS_DISTANCE_MILES",
-          "TAG_MAKER_NOTE",
-          "SUBJECT_DISTANCE_RANGE_MACRO",
-          "GAIN_CONTROL_LOW_GAIN_DOWN",
-          "SATURATION_HIGH",
-          "SCENE_TYPE_DIRECTLY_PHOTOGRAPHED",
-          "LIGHT_SOURCE_WHITE_FLUORESCENT",
-          "TAG_SHARPNESS",
-          "GPS_DISTANCE_KILOMETERS",
-          "TAG_GPS_LATITUDE",
-          "TAG_RW2_SENSOR_BOTTOM_BORDER",
-          "WHITEBALANCE_AUTO",
-          "TAG_SCENE_CAPTURE_TYPE",
-          "TAG_STRIP_BYTE_COUNTS",
-          "TAG_GPS_LONGITUDE_REF",
-          "GPS_MEASUREMENT_IN_PROGRESS",
-          "ORIENTATION_UNDEFINED",
-          "RAF_OFFSET_TO_JPEG_IMAGE_OFFSET",
-          "TAG_SUBJECT_DISTANCE_RANGE",
-          "ROTATION_ORDER",
-          "TAG_GPS_STATUS",
-          "ORF_MAKER_NOTE_HEADER_1_SIZE",
-          "TAG_GPS_DEST_BEARING",
-          "TAG_Y_CB_CR_COEFFICIENTS",
-          "TAG_MAKE",
-          "IFD_TYPE_PEF",
-          "TAG_RESOLUTION_UNIT",
-          "TAG_IMAGE_DESCRIPTION",
-          "SENSOR_TYPE_NOT_DEFINED",
-          "ORF_MAKER_NOTE_HEADER_2_SIZE",
-          "IFD_FORMAT_IFD",
-          "TAG_SATURATION",
-          "TAG_FOCAL_LENGTH_IN_35MM_FILM",
-          "TAG_FOCAL_LENGTH",
-          "SENSITIVITY_TYPE_SOS_AND_ISO",
-          "TAG_EXIF_VERSION",
-          "TAG_ORF_PREVIEW_IMAGE_LENGTH",
-          "GPS_MEASUREMENT_DIFFERENTIAL_CORRECTED",
-          "IFD_FORMAT_SINGLE",
-          "CONTRAST_NORMAL",
-          "TAG_PRIMARY_CHROMATICITIES",
-          "TAG_LENS_MODEL",
-          "TAG_IMAGE_LENGTH",
-          "TAG_RW2_JPG_FROM_RAW",
-          "SATURATION_LOW",
-          "TAG_SOFTWARE",
-          "IFD_TIFF_TAGS",
-          "SENSITIVITY_TYPE_ISO_SPEED",
-          "TAG_GPS_PROCESSING_METHOD",
-          "TAG_X_RESOLUTION",
-          "LIGHT_SOURCE_COOL_WHITE_FLUORESCENT",
-          "DATA_HUFFMAN_COMPRESSED",
-          "SENSOR_TYPE_THREE_CHIP",
-          "TAG_IMAGE_WIDTH",
-          "METERING_MODE_PARTIAL",
-          "SENSOR_TYPE_COLOR_SEQUENTIAL_LINEAR",
-          "LIGHT_SOURCE_FINE_WEATHER",
-          "TAG_EXPOSURE_INDEX",
-          "TAG_STRIP_OFFSETS",
-          "TAG_EXPOSURE_PROGRAM",
-          "TAG_IMAGE_UNIQUE_ID",
-          "IFD_FORMAT_USHORT",
-          "TAG_GPS_VERSION_ID",
-          "CONTRAST_SOFT",
-          "TAG_DATETIME_DIGITIZED",
-          "EXIF_POINTER_TAGS",
-          "FLAG_FLASH_NO_FLASH_FUNCTION",
-          "IFD_FORMAT_NAMES",
-          "ORF_MAKER_NOTE_TAGS",
-          "TAG_EXPOSURE_BIAS_VALUE",
-          "TAG_GPS_DEST_LONGITUDE_REF",
-          "IFD_OFFSET",
-          "ORF_SIGNATURE_1",
-          "ORF_SIGNATURE_2",
-          "METERING_MODE_UNKNOWN",
-          "GPS_SPEED_KILOMETERS_PER_HOUR",
-          "FORMAT_PLANAR",
-          "MARKER_SOF10",
-          "MARKER_SOF11",
-          "MARKER_SOF13",
-          "MARKER_SOF14",
-          "MARKER_SOF15",
-          "IFD_FORMAT_SLONG",
-          "TAG_COPYRIGHT",
-          "TAG_GPS_DEST_DISTANCE_REF",
-          "TAG_GPS_MEASURE_MODE",
-          "Y_CB_CR_POSITIONING_CENTERED",
-          "TAG_Y_CB_CR_POSITIONING",
-          "GPS_DISTANCE_NAUTICAL_MILES",
-          "WHITEBALANCE_MANUAL",
-          "GAIN_CONTROL_LOW_GAIN_UP",
-          "IDENTIFIER_EXIF_APP1",
-          "DATA_JPEG_COMPRESSED",
-          "SCENE_CAPTURE_TYPE_PORTRAIT",
-          "GPS_SPEED_MILES_PER_HOUR",
-          "IFD_TYPE_PRIMARY",
-          "TAG_Y_CB_CR_SUB_SAMPLING",
-          "TAG_GPS_ALTITUDE_REF",
-          "SENSITIVITY_TYPE_SOS",
-          "TAG_SENSING_METHOD",
-          "TAG_ORF_ASPECT_FRAME",
-          "TAG_NEW_SUBFILE_TYPE",
-          "TAG_EXPOSURE_MODE",
-          "ORIENTATION_ROTATE_270",
-          "IFD_GPS_TAGS",
-          "RAF_JPEG_LENGTH_VALUE_SIZE",
-          "TAG_FLASH_ENERGY",
-          "TAG_RECOMMENDED_EXPOSURE_INDEX",
-          "SENSOR_TYPE_TRILINEAR",
-          "SCENE_CAPTURE_TYPE_STANDARD",
-          "PEF_TAGS",
-          "SENSITIVITY_TYPE_UNKNOWN",
-          "TAG_DATETIME",
-          "TAG_JPEG_INTERCHANGE_FORMAT_LENGTH",
-          "LIGHT_SOURCE_FLASH",
-          "FLAG_FLASH_MODE_AUTO",
-          "MARKER_APP1",
-          "SENSITIVITY_TYPE_REI",
-          "TAG_DATETIME_ORIGINAL",
-          "TAG_GPS_DEST_LATITUDE",
-          "FILE_SOURCE_TRANSPARENT_SCANNER",
-          "RENDERED_PROCESS_CUSTOM",
-          "IFD_TYPE_INTEROPERABILITY"
-        ]
-      },
-      "android/support/v4/widget/ViewDragHelper": {
-        "androidx/widget/ViewDragHelper": [
-          "DIRECTION_HORIZONTAL",
-          "TAG",
-          "INVALID_POINTER",
-          "EDGE_SIZE",
-          "EDGE_LEFT",
-          "STATE_IDLE",
-          "STATE_DRAGGING",
-          "EDGE_ALL",
-          "DIRECTION_ALL",
-          "EDGE_RIGHT",
-          "sInterpolator",
-          "EDGE_TOP",
-          "STATE_SETTLING",
-          "BASE_SETTLE_DURATION",
-          "EDGE_BOTTOM",
-          "MAX_SETTLE_DURATION",
-          "DIRECTION_VERTICAL"
-        ]
-      },
-      "android/support/design/widget/NavigationView": {
-        "androidx/design/widget/NavigationView": [
-          "EMPTY_STATE_SET",
-          "CHECKED_STATE_SET",
-          "PRESENTER_NAVIGATION_VIEW_ID",
-          "DISABLED_STATE_SET"
-        ]
-      },
-      "android/support/customtabs/ICustomTabsCallback$Stub": {
-        "androidx/browser/customtabs/ICustomTabsCallback$Stub": [
-          "TRANSACTION_onMessageChannelReady",
-          "TRANSACTION_onPostMessage",
-          "TRANSACTION_onNavigationEvent",
-          "TRANSACTION_onRelationshipValidationResult",
-          "TRANSACTION_extraCallback",
-          "DESCRIPTOR"
-        ]
-      },
-      "android/support/v7/media/MediaRouterJellybeanMr1$ActiveScanWorkaround": {
-        "androidx/media/MediaRouterJellybeanMr1$ActiveScanWorkaround": [
-          "WIFI_DISPLAY_SCAN_INTERVAL"
-        ]
-      },
-      "android/support/v17/leanback/widget/GridLayoutManager$LayoutParams": {
-        "androidx/leanback/widget/GridLayoutManager$LayoutParams": [
-          "bottomMargin",
-          "leftMargin",
-          "topMargin",
-          "width",
-          "height",
-          "rightMargin"
-        ]
-      },
-      "android/support/v7/cardview/R$styleable": {
-        "androidx/cardview/R$styleable": [
-          "CardView_contentPaddingRight",
-          "CardView",
-          "CardView_android_minWidth",
-          "CardView_cardCornerRadius",
-          "CardView_contentPaddingLeft",
-          "CardView_cardBackgroundColor",
-          "CardView_contentPadding",
-          "CardView_contentPaddingBottom",
-          "CardView_cardElevation",
-          "CardView_cardUseCompatPadding",
-          "CardView_contentPaddingTop",
-          "CardView_android_minHeight",
-          "CardView_cardPreventCornerOverlap",
-          "CardView_cardMaxElevation"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ThumbsAction": {
-        "androidx/leanback/widget/PlaybackControlsRow$ThumbsAction": [
-          "INDEX_OUTLINE",
-          "OUTLINE",
-          "SOLID",
-          "INDEX_SOLID"
-        ]
-      },
-      "android/support/v4/media/session/IMediaSession$Stub": {
-        "androidx/media/session/IMediaSession$Stub": [
-          "TRANSACTION_playFromUri",
-          "TRANSACTION_playFromSearch",
-          "TRANSACTION_getRepeatMode",
-          "TRANSACTION_previous",
-          "TRANSACTION_getPlaybackState",
-          "TRANSACTION_adjustVolume",
-          "TRANSACTION_setShuffleMode",
-          "TRANSACTION_setVolumeTo",
-          "TRANSACTION_prepareFromSearch",
-          "TRANSACTION_removeQueueItemAt",
-          "TRANSACTION_playFromMediaId",
-          "TRANSACTION_getPackageName",
-          "TRANSACTION_sendCommand",
-          "TRANSACTION_isTransportControlEnabled",
-          "TRANSACTION_pause",
-          "DESCRIPTOR",
-          "TRANSACTION_rewind",
-          "TRANSACTION_getRatingType",
-          "TRANSACTION_prepareFromUri",
-          "TRANSACTION_getMetadata",
-          "TRANSACTION_addQueueItemAt",
-          "TRANSACTION_getQueueTitle",
-          "TRANSACTION_getLaunchPendingIntent",
-          "TRANSACTION_getQueue",
-          "TRANSACTION_registerCallbackListener",
-          "TRANSACTION_getShuffleMode",
-          "TRANSACTION_seekTo",
-          "TRANSACTION_prepareFromMediaId",
-          "TRANSACTION_setShuffleModeEnabledRemoved",
-          "TRANSACTION_removeQueueItem",
-          "TRANSACTION_setRepeatMode",
-          "TRANSACTION_getFlags",
-          "TRANSACTION_prepare",
-          "TRANSACTION_isShuffleModeEnabledRemoved",
-          "TRANSACTION_addQueueItem",
-          "TRANSACTION_isCaptioningEnabled",
-          "TRANSACTION_setCaptioningEnabled",
-          "TRANSACTION_rateWithExtras",
-          "TRANSACTION_stop",
-          "TRANSACTION_getVolumeAttributes",
-          "TRANSACTION_next",
-          "TRANSACTION_skipToQueueItem",
-          "TRANSACTION_rate",
-          "TRANSACTION_unregisterCallbackListener",
-          "TRANSACTION_play",
-          "TRANSACTION_getTag",
-          "TRANSACTION_sendMediaButton",
-          "TRANSACTION_sendCustomAction",
-          "TRANSACTION_fastForward",
-          "TRANSACTION_getExtras"
-        ]
-      },
-      "android/support/v4/provider/FontsContractCompat$Columns": {
-        "androidx/provider/FontsContractCompat$Columns": [
-          "TTC_INDEX",
-          "FILE_ID",
-          "RESULT_CODE",
-          "WEIGHT",
-          "ITALIC",
-          "VARIATION_SETTINGS",
-          "RESULT_CODE_OK",
-          "RESULT_CODE_MALFORMED_QUERY",
-          "RESULT_CODE_FONT_UNAVAILABLE",
-          "RESULT_CODE_FONT_NOT_FOUND"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserProtocol": {
-        "androidx/media/MediaBrowserProtocol": [
-          "DATA_CALLING_UID",
-          "EXTRA_MESSENGER_BINDER",
-          "DATA_ROOT_HINTS",
-          "CLIENT_MSG_UNREGISTER_CALLBACK_MESSENGER",
-          "EXTRA_SERVICE_VERSION",
-          "SERVICE_VERSION_1",
-          "DATA_OPTIONS",
-          "CLIENT_MSG_DISCONNECT",
-          "EXTRA_SESSION_BINDER",
-          "SERVICE_VERSION_CURRENT",
-          "CLIENT_VERSION_CURRENT",
-          "EXTRA_CLIENT_VERSION",
-          "CLIENT_VERSION_1",
-          "CLIENT_MSG_GET_MEDIA_ITEM",
-          "DATA_MEDIA_ITEM_LIST",
-          "DATA_MEDIA_SESSION_TOKEN",
-          "SERVICE_MSG_ON_CONNECT",
-          "DATA_RESULT_RECEIVER",
-          "CLIENT_MSG_SEND_CUSTOM_ACTION",
-          "CLIENT_MSG_CONNECT",
-          "SERVICE_MSG_ON_CONNECT_FAILED",
-          "SERVICE_MSG_ON_LOAD_CHILDREN",
-          "DATA_MEDIA_ITEM_ID",
-          "DATA_CALLBACK_TOKEN",
-          "DATA_SEARCH_QUERY",
-          "DATA_CUSTOM_ACTION_EXTRAS",
-          "CLIENT_MSG_SEARCH",
-          "DATA_SEARCH_EXTRAS",
-          "CLIENT_MSG_ADD_SUBSCRIPTION",
-          "DATA_CUSTOM_ACTION",
-          "CLIENT_MSG_REGISTER_CALLBACK_MESSENGER",
-          "DATA_PACKAGE_NAME",
-          "CLIENT_MSG_REMOVE_SUBSCRIPTION"
-        ]
-      },
-      "android/support/v17/leanback/R$color": {
-        "androidx/leanback/R$color": [
-          "lb_error_background_color_opaque",
-          "lb_playback_controls_background_dark",
-          "lb_default_brand_color_dark",
-          "lb_error_background_color_translucent",
-          "lb_background_protection",
-          "lb_speech_orb_recording",
-          "lb_default_brand_color",
-          "lb_page_indicator_dot",
-          "lb_search_bar_hint",
-          "lb_playback_progress_color_no_theme",
-          "lb_speech_orb_not_recording",
-          "lb_search_bar_text_speech_mode",
-          "lb_view_dim_mask_color",
-          "lb_playback_controls_background_light",
-          "lb_playback_media_row_highlight_color",
-          "lb_default_search_color",
-          "lb_playback_icon_highlight_no_theme",
-          "lb_search_bar_hint_speech_mode",
-          "lb_page_indicator_arrow_shadow",
-          "lb_speech_orb_not_recording_icon",
-          "lb_speech_orb_not_recording_pulsed",
-          "lb_search_bar_text",
-          "lb_page_indicator_arrow_background"
-        ]
-      },
-      "android/support/transition/ViewGroupUtilsApi18": {
-        "androidx/transition/ViewGroupUtilsApi18": [
-          "sSuppressLayoutMethod",
-          "TAG",
-          "sSuppressLayoutMethodFetched"
-        ]
-      },
-      "android/support/v4/text/TextDirectionHeuristicsCompat": {
-        "androidx/text/TextDirectionHeuristicsCompat": [
-          "STATE_UNKNOWN",
-          "RTL",
-          "LOCALE",
-          "ANYRTL_LTR",
-          "LTR",
-          "FIRSTSTRONG_RTL",
-          "FIRSTSTRONG_LTR",
-          "STATE_TRUE",
-          "STATE_FALSE"
-        ]
-      },
-      "android/support/v7/widget/ListViewCompat": {
-        "androidx/widget/internal/ListViewCompat": [
-          "INVALID_POSITION",
-          "NO_POSITION",
-          "STATE_SET_NOTHING"
-        ]
-      },
-      "android/support/v17/leanback/app/GuidedStepSupportFragment": {
-        "androidx/leanback/app/GuidedStepSupportFragment": [
-          "SLIDE_FROM_BOTTOM",
-          "SLIDE_FROM_SIDE",
-          "EXTRA_BUTTON_ACTION_PREFIX",
-          "TAG_LEAN_BACK_ACTIONS_FRAGMENT",
-          "ENTRY_NAME_ENTRANCE",
-          "DEBUG",
-          "UI_STYLE_DEFAULT",
-          "UI_STYLE_REPLACE",
-          "IS_FRAMEWORK_FRAGMENT",
-          "UI_STYLE_ACTIVITY_ROOT",
-          "EXTRA_UI_STYLE",
-          "UI_STYLE_ENTRANCE",
-          "entranceTransitionType",
-          "TAG",
-          "ENTRY_NAME_REPLACE",
-          "EXTRA_ACTION_PREFIX"
-        ]
-      },
-      "android/support/v7/media/MediaRouter$GlobalMediaRouter$CallbackHandler": {
-        "androidx/media/MediaRouter$GlobalMediaRouter$CallbackHandler": [
-          "MSG_TYPE_MASK",
-          "MSG_PROVIDER_REMOVED",
-          "MSG_ROUTE_SELECTED",
-          "MSG_ROUTE_VOLUME_CHANGED",
-          "MSG_PROVIDER_ADDED",
-          "MSG_TYPE_ROUTE",
-          "MSG_ROUTE_REMOVED",
-          "MSG_ROUTE_UNSELECTED",
-          "MSG_TYPE_PROVIDER",
-          "MSG_PROVIDER_CHANGED",
-          "MSG_ROUTE_ADDED",
-          "MSG_ROUTE_PRESENTATION_DISPLAY_CHANGED",
-          "MSG_ROUTE_CHANGED"
-        ]
-      },
-      "android/support/v7/view/menu/ActionMenuItem": {
-        "androidx/view/menu/ActionMenuItem": [
-          "EXCLUSIVE",
-          "CHECKED",
-          "ENABLED",
-          "CHECKABLE",
-          "NO_ICON",
-          "HIDDEN"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$WearableExtender": {
-        "androidx/app/NotificationCompat$WearableExtender": [
-          "SCREEN_TIMEOUT_LONG",
-          "KEY_FLAGS",
-          "KEY_DISMISSAL_ID",
-          "SIZE_LARGE",
-          "KEY_GRAVITY",
-          "KEY_CONTENT_ICON",
-          "FLAG_START_SCROLL_BOTTOM",
-          "DEFAULT_FLAGS",
-          "DEFAULT_CONTENT_ICON_GRAVITY",
-          "FLAG_CONTENT_INTENT_AVAILABLE_OFFLINE",
-          "UNSET_ACTION_INDEX",
-          "DEFAULT_GRAVITY",
-          "FLAG_HINT_SHOW_BACKGROUND_ONLY",
-          "SIZE_XSMALL",
-          "KEY_CUSTOM_CONTENT_HEIGHT",
-          "FLAG_HINT_AVOID_BACKGROUND_CLIPPING",
-          "SIZE_DEFAULT",
-          "KEY_BACKGROUND",
-          "FLAG_BIG_PICTURE_AMBIENT",
-          "SCREEN_TIMEOUT_SHORT",
-          "SIZE_FULL_SCREEN",
-          "KEY_ACTIONS",
-          "EXTRA_WEARABLE_EXTENSIONS",
-          "KEY_CONTENT_ACTION_INDEX",
-          "FLAG_HINT_CONTENT_INTENT_LAUNCHES_ACTIVITY",
-          "KEY_CONTENT_ICON_GRAVITY",
-          "KEY_DISPLAY_INTENT",
-          "SIZE_SMALL",
-          "KEY_CUSTOM_SIZE_PRESET",
-          "KEY_HINT_SCREEN_TIMEOUT",
-          "FLAG_HINT_HIDE_ICON",
-          "KEY_BRIDGE_TAG",
-          "SIZE_MEDIUM",
-          "KEY_PAGES"
-        ]
-      },
-      "android/support/design/R$styleable": {
-        "androidx/design/R$styleable": [
-          "TabLayout_tabSelectedTextColor",
-          "BottomSheetBehavior_Layout_behavior_peekHeight",
-          "TextInputLayout_counterOverflowTextAppearance",
-          "BottomNavigationView_itemTextColor",
-          "ScrimInsetsFrameLayout_insetForeground",
-          "TabItem_android_icon",
-          "CoordinatorLayout",
-          "TextInputLayout_counterTextAppearance",
-          "TabLayout_tabMode",
-          "TextInputLayout_hintAnimationEnabled",
-          "TextInputLayout_passwordToggleTint",
-          "NavigationView_android_fitsSystemWindows",
-          "AppBarLayout_android_background",
-          "BottomSheetBehavior_Layout",
-          "FloatingActionButton_fabSize",
-          "TextInputLayout_android_hint",
-          "FloatingActionButton_elevation",
-          "TabItem_android_text",
-          "CollapsingToolbarLayout_expandedTitleTextAppearance",
-          "TextInputLayout_hintTextAppearance",
-          "BottomNavigationView_elevation",
-          "BottomNavigationView_itemIconTint",
-          "CollapsingToolbarLayout_collapsedTitleTextAppearance",
-          "TabLayout_tabPaddingEnd",
-          "TextInputLayout",
-          "TextInputLayout_counterEnabled",
-          "TextInputLayout_passwordToggleContentDescription",
-          "NavigationView_itemBackground",
-          "CollapsingToolbarLayout_expandedTitleMarginBottom",
-          "AppBarLayout_android_keyboardNavigationCluster",
-          "FloatingActionButton_Behavior_Layout",
-          "NavigationView_itemTextAppearance",
-          "TabLayout_tabBackground",
-          "TabLayout_tabContentStart",
-          "ScrollingViewBehavior_Layout",
-          "TabItem_android_layout",
-          "TextInputLayout_hintEnabled",
-          "CollapsingToolbarLayout_scrimVisibleHeightTrigger",
-          "TabLayout_tabPaddingTop",
-          "CoordinatorLayout_Layout_layout_anchorGravity",
-          "CoordinatorLayout_statusBarBackground",
-          "NavigationView",
-          "CollapsingToolbarLayout_expandedTitleMarginEnd",
-          "CoordinatorLayout_Layout_layout_anchor",
-          "TabLayout_tabMinWidth",
-          "TabLayout_tabPaddingStart",
-          "TextInputLayout_errorEnabled",
-          "TabLayout_tabMaxWidth",
-          "TabLayout_tabTextColor",
-          "CollapsingToolbarLayout_collapsedTitleGravity",
-          "BottomNavigationView",
-          "TabLayout_tabTextAppearance",
-          "NavigationView_itemIconTint",
-          "TabLayout_tabIndicatorColor",
-          "TabLayout",
-          "TabLayout_tabIndicatorHeight",
-          "NavigationView_headerLayout",
-          "CoordinatorLayout_Layout",
-          "BottomNavigationView_menu",
-          "CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier",
-          "NavigationView_menu",
-          "TextInputLayout_passwordToggleDrawable",
-          "ScrimInsetsFrameLayout",
-          "CoordinatorLayout_Layout_layout_insetEdge",
-          "CollapsingToolbarLayout_titleEnabled",
-          "ForegroundLinearLayout",
-          "TabLayout_tabGravity",
-          "CollapsingToolbarLayout_contentScrim",
-          "ForegroundLinearLayout_android_foreground",
-          "CollapsingToolbarLayout_expandedTitleGravity",
-          "TextInputLayout_errorTextAppearance",
-          "TabLayout_tabPaddingBottom",
-          "CollapsingToolbarLayout",
-          "AppBarLayout",
-          "FloatingActionButton_pressedTranslationZ",
-          "FloatingActionButton_Behavior_Layout_behavior_autoHide",
-          "FloatingActionButton_useCompatPadding",
-          "NavigationView_android_maxWidth",
-          "CollapsingToolbarLayout_title",
-          "CollapsingToolbarLayout_Layout",
-          "SnackbarLayout_maxActionInlineWidth",
-          "ForegroundLinearLayout_android_foregroundGravity",
-          "AppBarLayout_android_touchscreenBlocksFocus",
-          "ScrollingViewBehavior_Layout_behavior_overlapTop",
-          "BottomSheetBehavior_Layout_behavior_skipCollapsed",
-          "CollapsingToolbarLayout_expandedTitleMarginTop",
-          "BottomNavigationView_itemBackground",
-          "FloatingActionButton_rippleColor",
-          "NavigationView_android_background",
-          "SnackbarLayout_elevation",
-          "TextInputLayout_android_textColorHint",
-          "NavigationView_itemTextColor",
-          "BottomSheetBehavior_Layout_behavior_hideable",
-          "AppBarLayout_Layout_layout_scrollInterpolator",
-          "FloatingActionButton_backgroundTint",
-          "AppBarLayout_Layout_layout_scrollFlags",
-          "CollapsingToolbarLayout_Layout_layout_collapseMode",
-          "TabLayout_tabPadding",
-          "FloatingActionButton_backgroundTintMode",
-          "CoordinatorLayout_Layout_layout_behavior",
-          "CoordinatorLayout_Layout_android_layout_gravity",
-          "AppBarLayout_elevation",
-          "ForegroundLinearLayout_foregroundInsidePadding",
-          "TabItem",
-          "AppBarLayout_expanded",
-          "FloatingActionButton",
-          "TextInputLayout_passwordToggleTintMode",
-          "SnackbarLayout_android_maxWidth",
-          "TextInputLayout_passwordToggleEnabled",
-          "CollapsingToolbarLayout_expandedTitleMargin",
-          "NavigationView_elevation",
-          "FloatingActionButton_borderWidth",
-          "CoordinatorLayout_Layout_layout_keyline",
-          "SnackbarLayout",
-          "CollapsingToolbarLayout_toolbarId",
-          "CoordinatorLayout_keylines",
-          "CollapsingToolbarLayout_scrimAnimationDuration",
-          "TextInputLayout_counterMaxLength",
-          "CoordinatorLayout_Layout_layout_dodgeInsetEdges",
-          "AppBarLayout_Layout",
-          "CollapsingToolbarLayout_statusBarScrim",
-          "CollapsingToolbarLayout_expandedTitleMarginStart"
-        ]
-      },
-      "android/support/text/emoji/MetadataListReader": {
-        "androidx/text/emoji/MetadataListReader": [
-          "META_TABLE_NAME",
-          "EMJI_TAG_DEPRECATED",
-          "EMJI_TAG"
-        ]
-      },
-      "android/support/v4/widget/DrawerLayout": {
-        "androidx/widget/DrawerLayout": [
-          "TAG",
-          "DRAWER_ELEVATION",
-          "SET_DRAWER_SHADOW_FROM_ELEVATION",
-          "STATE_DRAGGING",
-          "MIN_FLING_VELOCITY",
-          "TOUCH_SLOP_SENSITIVITY",
-          "LOCK_MODE_UNDEFINED",
-          "MIN_DRAWER_MARGIN",
-          "STATE_IDLE",
-          "THEME_ATTRS",
-          "LOCK_MODE_LOCKED_OPEN",
-          "ALLOW_EDGE_LOCK",
-          "CAN_HIDE_DESCENDANTS",
-          "CHILDREN_DISALLOW_INTERCEPT",
-          "PEEK_DELAY",
-          "LOCK_MODE_UNLOCKED",
-          "DEFAULT_SCRIM_COLOR",
-          "STATE_SETTLING",
-          "LOCK_MODE_LOCKED_CLOSED",
-          "LAYOUT_ATTRS"
-        ]
-      },
-      "android/support/v4/content/ModernAsyncTask": {
-        "androidx/content/ModernAsyncTask": [
-          "MESSAGE_POST_RESULT",
-          "MESSAGE_POST_PROGRESS",
-          "sDefaultExecutor",
-          "KEEP_ALIVE",
-          "sThreadFactory",
-          "sPoolWorkQueue",
-          "THREAD_POOL_EXECUTOR",
-          "CORE_POOL_SIZE",
-          "MAXIMUM_POOL_SIZE",
-          "sHandler",
-          "LOG_TAG"
-        ]
-      },
-      "android/support/v7/media/MediaControlIntent": {
-        "androidx/media/MediaControlIntent": [
-          "EXTRA_SESSION_STATUS_UPDATE_RECEIVER",
-          "CATEGORY_REMOTE_PLAYBACK",
-          "ACTION_START_SESSION",
-          "ACTION_PLAY",
-          "ACTION_SEEK",
-          "ERROR_UNSUPPORTED_OPERATION",
-          "ERROR_INVALID_ITEM_ID",
-          "ACTION_ENQUEUE",
-          "ACTION_SEND_MESSAGE",
-          "EXTRA_ITEM_CONTENT_POSITION",
-          "ERROR_UNKNOWN",
-          "ACTION_STOP",
-          "CATEGORY_LIVE_VIDEO",
-          "EXTRA_ITEM_STATUS_UPDATE_RECEIVER",
-          "EXTRA_ITEM_METADATA",
-          "EXTRA_SESSION_ID",
-          "EXTRA_MESSAGE",
-          "EXTRA_ITEM_HTTP_HEADERS",
-          "CATEGORY_LIVE_AUDIO",
-          "ACTION_END_SESSION",
-          "EXTRA_MESSAGE_RECEIVER",
-          "ACTION_GET_SESSION_STATUS",
-          "ACTION_REMOVE",
-          "EXTRA_ITEM_STATUS",
-          "EXTRA_ERROR_CODE",
-          "ACTION_GET_STATUS",
-          "ERROR_INVALID_SESSION_ID",
-          "EXTRA_SESSION_STATUS",
-          "EXTRA_ITEM_ID",
-          "ACTION_RESUME",
-          "ACTION_PAUSE"
-        ]
-      },
-      "android/support/design/widget/CoordinatorLayout$LayoutParams": {
-        "androidx/design/widget/CoordinatorLayout$LayoutParams": [
-          "keyline",
-          "topMargin",
-          "leftMargin",
-          "anchorGravity",
-          "bottomMargin",
-          "rightMargin",
-          "height",
-          "gravity",
-          "dodgeInsetEdges",
-          "insetEdge"
-        ]
-      },
-      "android/support/design/internal/NavigationMenuPresenter$NormalViewHolder": {
-        "androidx/design/internal/NavigationMenuPresenter$NormalViewHolder": [
-          "itemView"
-        ]
-      },
-      "android/support/v7/recyclerview/R$styleable": {
-        "androidx/recyclerview/R$styleable": [
-          "RecyclerView_fastScrollHorizontalThumbDrawable",
-          "RecyclerView_fastScrollVerticalTrackDrawable",
-          "RecyclerView_android_descendantFocusability",
-          "RecyclerView_spanCount",
-          "RecyclerView_stackFromEnd",
-          "RecyclerView_reverseLayout",
-          "RecyclerView_fastScrollVerticalThumbDrawable",
-          "RecyclerView_layoutManager",
-          "RecyclerView_android_orientation",
-          "RecyclerView",
-          "RecyclerView_fastScrollEnabled",
-          "RecyclerView_fastScrollHorizontalTrackDrawable"
-        ]
-      },
-      "android/support/v4/app/ActionBarDrawerToggle": {
-        "androidx/app/legacy/ActionBarDrawerToggle": [
-          "TAG",
-          "ID_HOME",
-          "THEME_ATTRS",
-          "TOGGLE_DRAWABLE_OFFSET"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$Axis": {
-        "androidx/widget/GridLayout$Axis": [
-          "backwardLinks",
-          "orderPreserved",
-          "trailingMargins",
-          "leadingMargins",
-          "locationsValid",
-          "groupBounds",
-          "hasWeights",
-          "groupBoundsValid",
-          "PENDING",
-          "arcsValid",
-          "trailingMarginsValid",
-          "arcs",
-          "locations",
-          "backwardLinksValid",
-          "leadingMarginsValid",
-          "maxIndex",
-          "horizontal",
-          "forwardLinksValid",
-          "definedCount",
-          "NEW",
-          "deltas",
-          "parentMax",
-          "parentMin",
-          "COMPLETE",
-          "hasWeightsValid",
-          "forwardLinks"
-        ]
-      },
-      "android/support/v4/app/BundleCompat$BundleCompatBaseImpl": {
-        "androidx/app/BundleCompat$BundleCompatBaseImpl": [
-          "sGetIBinderMethod",
-          "sGetIBinderMethodFetched",
-          "sPutIBinderMethodFetched",
-          "TAG",
-          "sPutIBinderMethod"
-        ]
-      },
-      "android/support/v7/app/AppCompatViewInflater": {
-        "androidx/app/AppCompatViewInflater": [
-          "sOnClickAttrs",
-          "sConstructorMap",
-          "sClassPrefixList",
-          "sConstructorSignature",
-          "LOG_TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/SearchBar": {
-        "androidx/leanback/widget/SearchBar": [
-          "FULL_RIGHT_VOLUME",
-          "DEBUG",
-          "DEFAULT_RATE",
-          "FULL_LEFT_VOLUME",
-          "DO_NOT_LOOP",
-          "DEFAULT_PRIORITY",
-          "TAG"
-        ]
-      },
-      "android/support/v7/appcompat/R$drawable": {
-        "androidx/appcompat/R$drawable": [
-          "abc_ic_ab_back_material",
-          "abc_text_select_handle_middle_mtrl_dark",
-          "abc_text_select_handle_left_mtrl_light",
-          "abc_textfield_activated_mtrl_alpha",
-          "abc_text_select_handle_left_mtrl_dark",
-          "abc_text_cursor_material",
-          "abc_text_select_handle_right_mtrl_light",
-          "abc_ratingbar_material",
-          "abc_ic_menu_share_mtrl_alpha",
-          "abc_ratingbar_small_material",
-          "abc_ic_menu_paste_mtrl_am_alpha",
-          "abc_textfield_search_default_mtrl_alpha",
-          "abc_menu_hardkey_panel_mtrl_mult",
-          "abc_text_select_handle_right_mtrl_dark",
-          "abc_dialog_material_background",
-          "abc_ratingbar_indicator_material",
-          "abc_btn_colored_material",
-          "abc_edit_text_material",
-          "abc_btn_borderless_material",
-          "abc_btn_check_material",
-          "abc_ab_share_pack_mtrl_alpha",
-          "abc_tab_indicator_material",
-          "abc_spinner_textfield_background_material",
-          "abc_ic_commit_search_api_mtrl_alpha",
-          "abc_textfield_default_mtrl_alpha",
-          "abc_switch_track_mtrl_alpha",
-          "abc_seekbar_thumb_material",
-          "abc_list_divider_mtrl_alpha",
-          "abc_spinner_mtrl_am_alpha",
-          "abc_btn_radio_material",
-          "abc_cab_background_top_material",
-          "abc_cab_background_top_mtrl_alpha",
-          "abc_text_select_handle_middle_mtrl_light",
-          "abc_vector_test",
-          "abc_btn_default_mtrl_shape",
-          "abc_switch_thumb_material",
-          "abc_seekbar_track_material",
-          "abc_popup_background_mtrl_mult",
-          "abc_seekbar_tick_mark_material",
-          "abc_ic_menu_copy_mtrl_am_alpha",
-          "abc_ic_menu_selectall_mtrl_alpha",
-          "abc_textfield_search_activated_mtrl_alpha",
-          "abc_cab_background_internal_bg",
-          "abc_ic_menu_cut_mtrl_alpha",
-          "abc_textfield_search_material"
-        ]
-      },
-      "android/support/v17/leanback/widget/GuidedActionsStylist": {
-        "androidx/leanback/widget/GuidedActionsStylist": [
-          "sGuidedActionItemAlignFacet",
-          "TAG",
-          "VIEW_TYPE_DEFAULT",
-          "VIEW_TYPE_DATE_PICKER"
-        ]
-      },
-      "android/support/v17/leanback/R$dimen": {
-        "androidx/leanback/R$dimen": [
-          "lb_details_v2_align_pos_for_description",
-          "lb_details_overview_image_margin_vertical",
-          "lb_search_browse_rows_align_top",
-          "lb_material_shadow_normal_z",
-          "lb_details_v2_left",
-          "lb_details_v2_description_margin_top",
-          "lb_playback_controls_child_margin_bigger",
-          "lb_details_v2_actions_height",
-          "lb_playback_transport_thumbs_height",
-          "lb_details_rows_align_top",
-          "lb_control_icon_width",
-          "lb_page_indicator_dot_radius",
-          "lb_playback_controls_z",
-          "lb_error_under_image_baseline_margin",
-          "lb_browse_rows_margin_start",
-          "lb_playback_transport_thumbs_margin",
-          "lb_playback_transport_hero_thumbs_width",
-          "lb_details_description_under_subtitle_baseline_margin",
-          "lb_rounded_rect_corner_radius",
-          "lb_search_orb_unfocused_z",
-          "lb_playback_transport_progressbar_active_bar_height",
-          "picker_item_height",
-          "lb_page_indicator_arrow_shadow_offset",
-          "lb_page_indicator_arrow_gap",
-          "lb_details_description_title_baseline",
-          "lb_details_v2_blank_height",
-          "lb_search_bar_height",
-          "lb_playback_controls_child_margin_default",
-          "lb_details_v2_logo_margin_start",
-          "lb_browse_selected_row_top_padding",
-          "lb_details_cover_drawable_parallax_movement",
-          "lb_playback_transport_hero_thumbs_height",
-          "lb_details_overview_height_small",
-          "lb_material_shadow_focused_z",
-          "lb_playback_transport_thumbs_width",
-          "lb_browse_rows_margin_top",
-          "lb_action_padding_horizontal",
-          "lb_page_indicator_arrow_radius",
-          "lb_details_description_body_line_spacing",
-          "lb_browse_expanded_selected_row_top_padding",
-          "lb_browse_header_select_scale",
-          "lb_details_v2_align_pos_for_actions",
-          "lb_action_with_icon_padding_start",
-          "lb_page_indicator_arrow_shadow_radius",
-          "lb_playback_transport_progressbar_bar_height",
-          "lb_playback_controls_child_margin_biggest",
-          "lb_playback_controls_padding_bottom",
-          "lb_browse_expanded_row_no_hovercard_bottom_padding",
-          "lb_browse_header_select_duration",
-          "lb_playback_other_rows_center_to_bottom",
-          "lb_details_overview_image_margin_horizontal",
-          "lb_search_orb_focused_z",
-          "lb_error_under_message_baseline_margin",
-          "lb_playback_major_fade_translate_y",
-          "lb_page_indicator_dot_gap",
-          "lb_details_overview_height_large",
-          "lb_details_overview_actions_fade_size",
-          "lb_action_with_icon_padding_end",
-          "lb_details_description_title_line_spacing",
-          "lb_playback_minor_fade_translate_y",
-          "lb_playback_transport_progressbar_active_radius",
-          "lb_details_description_under_title_baseline_margin"
-        ]
-      },
-      "android/support/v7/appcompat/R$layout": {
-        "androidx/appcompat/R$layout": [
-          "abc_screen_toolbar",
-          "abc_screen_simple",
-          "abc_action_mode_close_item_material",
-          "abc_dialog_title_material",
-          "abc_list_menu_item_checkbox",
-          "abc_activity_chooser_view",
-          "abc_search_dropdown_item_icons_2line",
-          "support_simple_spinner_dropdown_item",
-          "abc_list_menu_item_radio",
-          "abc_popup_menu_header_item_layout",
-          "abc_list_menu_item_layout",
-          "tooltip",
-          "abc_action_menu_layout",
-          "abc_list_menu_item_icon",
-          "abc_action_menu_item_layout",
-          "abc_action_bar_title_item",
-          "abc_popup_menu_item_layout",
-          "abc_activity_chooser_view_list_item",
-          "abc_search_view",
-          "abc_expanded_menu_layout",
-          "abc_screen_simple_overlay_action_mode"
-        ]
-      },
-      "android/support/v7/appcompat/R$id": {
-        "androidx/appcompat/R$id": [
-          "submit_area",
-          "split_action_bar",
-          "scrollIndicatorUp",
-          "search_button",
-          "contentPanel",
-          "title",
-          "action_mode_close_button",
-          "custom",
-          "search_edit_frame",
-          "decor_content_parent",
-          "action_bar_title",
-          "submenuarrow",
-          "search_voice_btn",
-          "title_template",
-          "action_bar",
-          "action_bar_subtitle",
-          "alertTitle",
-          "default_activity_button",
-          "search_close_btn",
-          "textSpacerNoTitle",
-          "action_mode_bar_stub",
-          "titleDividerNoCustom",
-          "action_bar_container",
-          "parentPanel",
-          "shortcut",
-          "icon",
-          "search_src_text",
-          "activity_chooser_view_content",
-          "search_plate",
-          "customPanel",
-          "edit_query",
-          "action_menu_presenter",
-          "spacer",
-          "scrollIndicatorDown",
-          "scrollView",
-          "message",
-          "buttonPanel",
-          "topPanel",
-          "list_item",
-          "action_context_bar",
-          "search_go_btn",
-          "textSpacerNoButtons",
-          "search_mag_icon",
-          "action_bar_activity_content",
-          "expand_activities_button",
-          "image"
-        ]
-      },
-      "android/support/v7/widget/Toolbar$LayoutParams": {
-        "androidx/widget/Toolbar$LayoutParams": [
-          "gravity",
-          "EXPANDED",
-          "width",
-          "SYSTEM",
-          "leftMargin",
-          "CUSTOM",
-          "bottomMargin",
-          "rightMargin",
-          "topMargin",
-          "height"
-        ]
-      },
-      "android/support/v4/app/NotificationCompatJellybean": {
-        "androidx/app/NotificationCompatJellybean": [
-          "KEY_LABEL",
-          "sActionIntentField",
-          "KEY_ACTION_INTENT",
-          "sActionClass",
-          "sExtrasLock",
-          "KEY_REMOTE_INPUTS",
-          "KEY_ALLOWED_DATA_TYPES",
-          "sActionsLock",
-          "KEY_CHOICES",
-          "sExtrasField",
-          "EXTRA_DATA_ONLY_REMOTE_INPUTS",
-          "sActionTitleField",
-          "sActionIconField",
-          "KEY_EXTRAS",
-          "KEY_TITLE",
-          "sActionsAccessFailed",
-          "TAG",
-          "KEY_ICON",
-          "EXTRA_ALLOW_GENERATED_REPLIES",
-          "KEY_ALLOW_FREE_FORM_INPUT",
-          "KEY_DATA_ONLY_REMOTE_INPUTS",
-          "sExtrasFieldAccessFailed",
-          "KEY_RESULT_KEY",
-          "sActionsField"
-        ]
-      },
-      "android/support/v7/widget/GridLayout": {
-        "androidx/widget/GridLayout": [
-          "RIGHT",
-          "DEFAULT_COUNT",
-          "DEFAULT_ORIENTATION",
-          "ROW_ORDER_PRESERVED",
-          "TOP",
-          "LEADING",
-          "START",
-          "BASELINE",
-          "UNDEFINED",
-          "ALIGN_BOUNDS",
-          "CENTER",
-          "MAX_SIZE",
-          "ALIGNMENT_MODE",
-          "COLUMN_COUNT",
-          "ROW_COUNT",
-          "CAN_STRETCH",
-          "USE_DEFAULT_MARGINS",
-          "FILL",
-          "HORIZONTAL",
-          "DEFAULT_CONTAINER_MARGIN",
-          "LOG_PRINTER",
-          "ALIGN_MARGINS",
-          "VERTICAL",
-          "DEFAULT_ALIGNMENT_MODE",
-          "COLUMN_ORDER_PRESERVED",
-          "ORIENTATION",
-          "LEFT",
-          "TRAILING",
-          "DEFAULT_ORDER_PRESERVED",
-          "BOTTOM",
-          "END",
-          "DEFAULT_USE_DEFAULT_MARGINS",
-          "INFLEXIBLE",
-          "UNINITIALIZED_HASH",
-          "UNDEFINED_ALIGNMENT",
-          "NO_PRINTER"
-        ]
-      },
-      "android/support/wear/widget/BoxInsetLayout$LayoutParams": {
-        "androidx/wear/widget/BoxInsetLayout$LayoutParams": [
-          "BOX_ALL",
-          "BOX_LEFT",
-          "BOX_TOP",
-          "gravity",
-          "height",
-          "topMargin",
-          "rightMargin",
-          "bottomMargin",
-          "boxedEdges",
-          "BOX_RIGHT",
-          "width",
-          "leftMargin",
-          "BOX_NONE",
-          "BOX_BOTTOM"
-        ]
-      },
-      "android/support/design/widget/TabLayout": {
-        "androidx/design/widget/TabLayout": [
-          "GRAVITY_FILL",
-          "TAB_MIN_WIDTH_MARGIN",
-          "DEFAULT_HEIGHT_WITH_TEXT_ICON",
-          "ANIMATION_DURATION",
-          "INVALID_WIDTH",
-          "FIXED_WRAP_GUTTER_MIN",
-          "MOTION_NON_ADJACENT_OFFSET",
-          "DEFAULT_HEIGHT",
-          "MODE_FIXED",
-          "SELECTED_STATE_SET",
-          "MODE_SCROLLABLE",
-          "EMPTY_STATE_SET",
-          "sTabPool",
-          "GRAVITY_CENTER",
-          "DEFAULT_GAP_TEXT_ICON"
-        ]
-      },
-      "android/support/v4/view/MotionEventCompat": {
-        "androidx/view/MotionEventCompat": [
-          "ACTION_SCROLL",
-          "AXIS_RUDDER",
-          "AXIS_BRAKE",
-          "AXIS_TOOL_MINOR",
-          "AXIS_GENERIC_3",
-          "AXIS_GENERIC_4",
-          "AXIS_GENERIC_5",
-          "AXIS_GENERIC_6",
-          "AXIS_GENERIC_7",
-          "AXIS_GENERIC_8",
-          "AXIS_GENERIC_9",
-          "AXIS_GENERIC_1",
-          "AXIS_GENERIC_2",
-          "AXIS_DISTANCE",
-          "AXIS_ORIENTATION",
-          "AXIS_LTRIGGER",
-          "AXIS_HSCROLL",
-          "ACTION_POINTER_DOWN",
-          "AXIS_TILT",
-          "AXIS_WHEEL",
-          "AXIS_Y",
-          "AXIS_Z",
-          "AXIS_X",
-          "AXIS_SCROLL",
-          "AXIS_TOUCH_MAJOR",
-          "ACTION_HOVER_ENTER",
-          "AXIS_GAS",
-          "ACTION_HOVER_MOVE",
-          "ACTION_HOVER_EXIT",
-          "AXIS_THROTTLE",
-          "AXIS_HAT_X",
-          "AXIS_HAT_Y",
-          "AXIS_SIZE",
-          "ACTION_POINTER_INDEX_SHIFT",
-          "AXIS_RTRIGGER",
-          "AXIS_RELATIVE_X",
-          "AXIS_RELATIVE_Y",
-          "AXIS_RY",
-          "AXIS_RZ",
-          "AXIS_RX",
-          "AXIS_TOUCH_MINOR",
-          "ACTION_POINTER_INDEX_MASK",
-          "BUTTON_PRIMARY",
-          "AXIS_PRESSURE",
-          "AXIS_TOOL_MAJOR",
-          "AXIS_GENERIC_13",
-          "AXIS_GENERIC_12",
-          "AXIS_GENERIC_11",
-          "AXIS_GENERIC_10",
-          "AXIS_GENERIC_16",
-          "AXIS_GENERIC_15",
-          "AXIS_GENERIC_14",
-          "ACTION_POINTER_UP",
-          "ACTION_MASK",
-          "AXIS_VSCROLL"
-        ]
-      },
-      "android/support/v4/view/PagerTitleStrip": {
-        "androidx/widget/PagerTitleStrip": [
-          "ATTRS",
-          "SIDE_ALPHA",
-          "TEXT_ATTRS",
-          "TEXT_SPACING"
-        ]
-      },
-      "android/support/v4/graphics/TypefaceCompatApi26Impl": {
-        "androidx/graphics/TypefaceCompatApi26Impl": [
-          "sAddFontFromAssetManager",
-          "sFreeze",
-          "TAG",
-          "RESOLVE_BY_FONT_TABLE",
-          "sFontFamily",
-          "ADD_FONT_FROM_ASSET_MANAGER_METHOD",
-          "sCreateFromFamiliesWithDefault",
-          "FONT_FAMILY_CLASS",
-          "ABORT_CREATION_METHOD",
-          "sFontFamilyCtor",
-          "CREATE_FROM_FAMILIES_WITH_DEFAULT_METHOD",
-          "sAbortCreation",
-          "ADD_FONT_FROM_BUFFER_METHOD",
-          "sAddFontFromBuffer",
-          "FREEZE_METHOD"
-        ]
-      },
-      "android/support/v7/app/AppCompatDelegate": {
-        "androidx/app/AppCompatDelegate": [
-          "sCompatVectorFromResourcesEnabled",
-          "MODE_NIGHT_FOLLOW_SYSTEM",
-          "MODE_NIGHT_YES",
-          "TAG",
-          "FEATURE_SUPPORT_ACTION_BAR_OVERLAY",
-          "sDefaultNightMode",
-          "MODE_NIGHT_NO",
-          "MODE_NIGHT_AUTO",
-          "FEATURE_ACTION_MODE_OVERLAY",
-          "FEATURE_SUPPORT_ACTION_BAR",
-          "MODE_NIGHT_UNSPECIFIED"
-        ]
-      },
-      "android/support/v7/view/menu/ListMenuItemView": {
-        "androidx/view/menu/ListMenuItemView": [
-          "TAG"
-        ]
-      },
-      "android/support/media/instantvideo/preload/InstantVideoPreloadManager": {
-        "androidx/media/instantvideo/preload/InstantVideoPreloadManager": [
-          "DEBUG",
-          "sInstance",
-          "TAG",
-          "DEFAULT_MAX_VIDEO_COUNT"
-        ]
-      },
-      "android/support/graphics/drawable/AndroidResources": {
-        "androidx/graphics/drawable/AndroidResources": [
-          "STYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET",
-          "STYLEABLE_VECTOR_DRAWABLE_CLIP_PATH_NAME",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_NAME",
-          "STYLEABLE_ANIMATED_VECTOR_DRAWABLE_DRAWABLE",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_TRIM_PATH_END",
-          "STYLEABLE_PATH_INTERPOLATOR",
-          "STYLEABLE_PROPERTY_VALUES_HOLDER_PROPERTY_NAME",
-          "STYLEABLE_KEYFRAME_INTERPOLATOR",
-          "STYLEABLE_KEYFRAME_FRACTION",
-          "STYLEABLE_ANIMATOR_REPEAT_MODE",
-          "STYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET_NAME",
-          "STYLEABLE_VECTOR_DRAWABLE_VIEWPORT_WIDTH",
-          "FAST_OUT_LINEAR_IN",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_STROKE_LINE_JOIN",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_PATH_DATA",
-          "STYLEABLE_VECTOR_DRAWABLE_TINT_MODE",
-          "STYLEABLE_VECTOR_DRAWABLE_TINT",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_NAME",
-          "STYLEABLE_KEYFRAME_VALUE_TYPE",
-          "STYLEABLE_PATH_INTERPOLATOR_PATH_DATA",
-          "STYLEABLE_ANIMATOR_START_OFFSET",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_STROKE_COLOR",
-          "STYLEABLE_ANIMATED_VECTOR_DRAWABLE_TARGET_ANIMATION",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_ROTATION",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_STROKE_WIDTH",
-          "STYLEABLE_PROPERTY_ANIMATOR_PROPERTY_Y_NAME",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_STROKE_ALPHA",
-          "STYLEABLE_ANIMATOR_INTERPOLATOR",
-          "STYLEABLE_VECTOR_DRAWABLE_WIDTH",
-          "STYLEABLE_ANIMATOR_SET_ORDERING",
-          "STYLEABLE_ANIMATED_VECTOR_DRAWABLE",
-          "STYLEABLE_ANIMATOR_DURATION",
-          "STYLEABLE_VECTOR_DRAWABLE_ALPHA",
-          "STYLEABLE_VECTOR_DRAWABLE_HEIGHT",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_FILL_ALPHA",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_STROKE_MITER_LIMIT",
-          "STYLEABLE_PATH_INTERPOLATOR_CONTROL_X_2",
-          "STYLEABLE_PATH_INTERPOLATOR_CONTROL_X_1",
-          "LINEAR_OUT_SLOW_IN",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_FILL_COLOR",
-          "STYLEABLE_PROPERTY_VALUES_HOLDER_VALUE_TO",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH",
-          "STYLEABLE_ANIMATOR_REMOVE_BEFORE_M_RELEASE",
-          "STYLEABLE_PATH_INTERPOLATOR_CONTROL_Y_1",
-          "STYLEABLE_PATH_INTERPOLATOR_CONTROL_Y_2",
-          "FAST_OUT_SLOW_IN",
-          "STYLEABLE_ANIMATOR_VALUE_FROM",
-          "STYLEABLE_ANIMATOR_REPEAT_COUNT",
-          "STYLEABLE_ANIMATOR_SET",
-          "STYLEABLE_PROPERTY_ANIMATOR_PATH_DATA",
-          "STYLEABLE_ANIMATOR_VALUE_TO",
-          "STYLEABLE_VECTOR_DRAWABLE_VIEWPORT_HEIGHT",
-          "STYLEABLE_KEYFRAME",
-          "STYLEABLE_VECTOR_DRAWABLE_TYPE_ARRAY",
-          "STYLEABLE_ANIMATOR_VALUE_TYPE",
-          "STYLEABLE_PROPERTY_VALUES_HOLDER",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_PIVOT_X",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_TRIM_PATH_OFFSET",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_PIVOT_Y",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_TRANSLATE_X",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_TRANSLATE_Y",
-          "STYLEABLE_VECTOR_DRAWABLE_AUTO_MIRRORED",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_TRIM_PATH_START",
-          "STYLEABLE_KEYFRAME_VALUE",
-          "STYLEABLE_PROPERTY_VALUES_HOLDER_VALUE_TYPE",
-          "STYLEABLE_PROPERTY_ANIMATOR_PROPERTY_NAME",
-          "STYLEABLE_VECTOR_DRAWABLE_CLIP_PATH",
-          "STYLEABLE_VECTOR_DRAWABLE_NAME",
-          "STYLEABLE_PROPERTY_VALUES_HOLDER_VALUE_FROM",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_SCALE_Y",
-          "STYLEABLE_VECTOR_DRAWABLE_GROUP_SCALE_X",
-          "STYLEABLE_ANIMATOR",
-          "STYLEABLE_VECTOR_DRAWABLE_CLIP_PATH_PATH_DATA",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_STROKE_LINE_CAP",
-          "STYLEABLE_VECTOR_DRAWABLE_PATH_TRIM_PATH_FILLTYPE",
-          "STYLEABLE_PROPERTY_ANIMATOR",
-          "STYLEABLE_PROPERTY_ANIMATOR_PROPERTY_X_NAME"
-        ]
-      },
-      "android/support/v7/app/ActionBar$LayoutParams": {
-        "androidx/app/ActionBar$LayoutParams": [
-          "gravity"
-        ]
-      },
-      "android/support/v7/widget/LinearLayoutCompat": {
-        "androidx/widget/LinearLayoutCompat": [
-          "VERTICAL_GRAVITY_COUNT",
-          "SHOW_DIVIDER_BEGINNING",
-          "HORIZONTAL",
-          "SHOW_DIVIDER_MIDDLE",
-          "SHOW_DIVIDER_NONE",
-          "INDEX_CENTER_VERTICAL",
-          "INDEX_TOP",
-          "INDEX_FILL",
-          "VERTICAL",
-          "INDEX_BOTTOM",
-          "SHOW_DIVIDER_END"
-        ]
-      },
-      "android/support/percent/PercentLayoutHelper$PercentMarginLayoutParams": {
-        "androidx/PercentLayoutHelper$PercentMarginLayoutParams": [
-          "topMargin",
-          "leftMargin",
-          "rightMargin",
-          "height",
-          "width",
-          "bottomMargin"
-        ]
-      },
-      "android/support/v17/leanback/widget/StreamingTextView": {
-        "androidx/leanback/widget/StreamingTextView": [
-          "STREAM_POSITION_PROPERTY",
-          "DOTS_FOR_STABLE",
-          "ANIMATE_DOTS_FOR_PENDING",
-          "STREAM_UPDATE_DELAY_MILLIS",
-          "DEBUG",
-          "TEXT_DOT_SCALE",
-          "DOTS_FOR_PENDING",
-          "SPLIT_PATTERN",
-          "TAG"
-        ]
-      },
-      "android/support/v7/view/SupportMenuInflater$MenuState": {
-        "androidx/view/SupportMenuInflater$MenuState": [
-          "itemListenerMethodName",
-          "itemActionViewClassName",
-          "itemContentDescription",
-          "itemEnabled",
-          "defaultItemChecked",
-          "itemCategoryOrder",
-          "itemTitle",
-          "groupCategory",
-          "itemIconTintMode",
-          "itemAdded",
-          "groupCheckable",
-          "itemNumericShortcut",
-          "groupVisible",
-          "itemNumericModifiers",
-          "itemTitleCondensed",
-          "defaultItemVisible",
-          "itemAlphabeticShortcut",
-          "itemShowAsAction",
-          "menu",
-          "defaultItemCheckable",
-          "itemActionProvider",
-          "itemCheckable",
-          "itemActionViewLayout",
-          "itemIconResId",
-          "itemVisible",
-          "itemTooltipText",
-          "defaultItemCategory",
-          "defaultGroupId",
-          "groupOrder",
-          "defaultItemId",
-          "itemActionProviderClassName",
-          "itemId",
-          "itemIconTintList",
-          "itemChecked",
-          "groupId",
-          "defaultItemEnabled",
-          "defaultItemOrder",
-          "itemAlphabeticModifiers",
-          "groupEnabled"
-        ]
-      },
-      "android/support/v4/view/InputDeviceCompat": {
-        "androidx/view/InputDeviceCompat": [
-          "SOURCE_CLASS_JOYSTICK",
-          "SOURCE_KEYBOARD",
-          "SOURCE_CLASS_MASK",
-          "SOURCE_CLASS_POINTER",
-          "SOURCE_ROTARY_ENCODER",
-          "SOURCE_TOUCHSCREEN",
-          "SOURCE_TOUCHPAD",
-          "SOURCE_STYLUS",
-          "SOURCE_CLASS_POSITION",
-          "SOURCE_UNKNOWN",
-          "SOURCE_DPAD",
-          "SOURCE_CLASS_BUTTON",
-          "SOURCE_JOYSTICK",
-          "SOURCE_ANY",
-          "SOURCE_TOUCH_NAVIGATION",
-          "SOURCE_TRACKBALL",
-          "SOURCE_MOUSE",
-          "SOURCE_HDMI",
-          "SOURCE_GAMEPAD",
-          "SOURCE_CLASS_TRACKBALL",
-          "SOURCE_CLASS_NONE"
-        ]
-      },
-      "android/support/v17/leanback/R$styleable": {
-        "androidx/leanback/R$styleable": [
-          "lbImageCardView_lbImageCardViewType",
-          "LeanbackTheme_browseRowsMarginTop",
-          "lbPlaybackControlsActionIcons_thumb_down_outline",
-          "lbSlide_android_interpolator",
-          "lbBaseCardView_cardType",
-          "lbResizingTextView_resizedPaddingAdjustmentBottom",
-          "lbBaseGridView_android_horizontalSpacing",
-          "lbResizingTextView_maintainLineSpacing",
-          "lbBaseGridView_verticalMargin",
-          "lbPlaybackControlsActionIcons_repeat_one",
-          "lbBaseGridView_horizontalMargin",
-          "lbHorizontalGridView_rowHeight",
-          "lbHorizontalGridView_numberOfRows",
-          "LeanbackTheme_browseRowsFadingEdgeLength",
-          "PagingIndicator_dotToDotGap",
-          "PagingIndicator_arrowColor",
-          "PagingIndicator",
-          "lbSearchOrbView_searchOrbColor",
-          "lbTimePicker_is24HourFormat",
-          "lbDatePicker",
-          "lbSearchOrbView_searchOrbBrightColor",
-          "lbDatePicker_android_maxDate",
-          "lbVerticalGridView_columnWidth",
-          "PagingIndicator_arrowRadius",
-          "lbTimePicker_useCurrentTime",
-          "LeanbackGuidedStepTheme",
-          "lbPlaybackControlsActionIcons_shuffle",
-          "lbBaseCardView_cardBackground",
-          "lbPlaybackControlsActionIcons",
-          "lbBaseCardView",
-          "lbPlaybackControlsActionIcons_play",
-          "lbSlide_lb_slideEdge",
-          "lbBaseCardView_extraVisibility",
-          "LeanbackTheme_overlayDimActiveLevel",
-          "lbResizingTextView_resizeTrigger",
-          "lbPlaybackControlsActionIcons_picture_in_picture",
-          "lbBaseGridView_android_gravity",
-          "lbBaseGridView_focusOutEnd",
-          "LeanbackTheme",
-          "lbPlaybackControlsActionIcons_thumb_up",
-          "PagingIndicator_dotBgColor",
-          "lbSearchOrbView_searchOrbIconColor",
-          "lbSearchOrbView",
-          "lbBaseGridView_focusOutFront",
-          "lbBaseCardView_infoVisibility",
-          "lbResizingTextView_resizedTextSize",
-          "lbPlaybackControlsActionIcons_skip_previous",
-          "PagingIndicator_dotToArrowGap",
-          "lbHorizontalGridView",
-          "lbDatePicker_datePickerFormat",
-          "lbVerticalGridView_numberOfColumns",
-          "lbSlide_android_duration",
-          "PagingIndicator_lbDotRadius",
-          "lbPlaybackControlsActionIcons_skip_next",
-          "lbSlide",
-          "lbSlide_android_startDelay",
-          "lbPlaybackControlsActionIcons_fast_forward",
-          "lbImageCardView",
-          "LeanbackTheme_browseRowsMarginStart",
-          "lbBaseCardView_Layout_layout_viewType",
-          "lbTimePicker",
-          "lbResizingTextView",
-          "lbImageCardView_infoAreaBackground",
-          "lbBaseCardView_Layout",
-          "lbPlaybackControlsActionIcons_repeat",
-          "lbPlaybackControlsActionIcons_rewind",
-          "lbBaseCardView_selectedAnimationDelay",
-          "lbBaseGridView_focusOutSideStart",
-          "lbBaseCardView_selectedAnimationDuration",
-          "lbBaseGridView_android_verticalSpacing",
-          "lbSearchOrbView_searchOrbIcon",
-          "lbPlaybackControlsActionIcons_pause",
-          "lbBaseGridView",
-          "PagingIndicator_arrowBgColor",
-          "lbVerticalGridView",
-          "lbDatePicker_android_minDate",
-          "lbPlaybackControlsActionIcons_thumb_up_outline",
-          "LeanbackTheme_overlayDimDimmedLevel",
-          "lbBaseGridView_focusOutSideEnd",
-          "lbPlaybackControlsActionIcons_high_quality",
-          "lbResizingTextView_resizedPaddingAdjustmentTop",
-          "lbBaseCardView_activatedAnimationDuration",
-          "lbPlaybackControlsActionIcons_closed_captioning",
-          "LeanbackTheme_overlayDimMaskColor",
-          "lbPlaybackControlsActionIcons_thumb_down",
-          "LeanbackGuidedStepTheme_guidedStepKeyline",
-          "lbBaseCardView_cardForeground"
-        ]
-      },
-      "android/support/v17/leanback/R$drawable": {
-        "androidx/leanback/R$drawable": [
-          "lb_ic_in_app_search",
-          "lb_text_dot_one",
-          "lb_ic_search_mic_out",
-          "lb_ic_search_mic",
-          "lb_background",
-          "lb_text_dot_two",
-          "lb_ic_nav_arrow",
-          "lb_ic_more"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$ViewHolder": {
-        "androidx/widget/RecyclerView$ViewHolder": [
-          "FLAG_NOT_RECYCLABLE",
-          "FLAG_INVALID",
-          "FULLUPDATE_PAYLOADS",
-          "FLAG_RETURNED_FROM_SCRAP",
-          "PENDING_ACCESSIBILITY_STATE_NOT_SET",
-          "FLAG_REMOVED",
-          "FLAG_TMP_DETACHED",
-          "FLAG_ADAPTER_POSITION_UNKNOWN",
-          "FLAG_SET_A11Y_ITEM_DELEGATE",
-          "itemView",
-          "FLAG_APPEARED_IN_PRE_LAYOUT",
-          "FLAG_ADAPTER_FULLUPDATE",
-          "FLAG_BOUNCED_FROM_HIDDEN_LIST",
-          "FLAG_IGNORE",
-          "FLAG_BOUND",
-          "FLAG_UPDATE",
-          "FLAG_MOVED"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$Token": {
-        "androidx/media/session/MediaSessionCompat$Token": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseFragment$ExpandPreLayout": {
-        "androidx/leanback/app/BrowseFragment$ExpandPreLayout": [
-          "STATE_SECOND_DRAW",
-          "STATE_INIT",
-          "mainFragmentAdapter",
-          "STATE_FIRST_DRAW"
-        ]
-      },
-      "android/support/v13/app/FragmentTabHost$TabInfo": {
-        "androidx/app/legacy/FragmentTabHost$TabInfo": [
-          "fragment",
-          "args",
-          "tag",
-          "clss"
-        ]
-      },
-      "android/support/media/tv/Channel": {
-        "androidx/media/tv/Channel": [
-          "IS_SEARCHABLE",
-          "IS_SYSTEM_APPROVED",
-          "INVALID_INT_VALUE",
-          "INVALID_CHANNEL_ID",
-          "PROJECTION",
-          "IS_TRANSIENT",
-          "IS_BROWSABLE",
-          "IS_LOCKED"
-        ]
-      },
-      "android/support/v4/text/BidiFormatter$DirectionalityEstimator": {
-        "androidx/text/BidiFormatter$DirectionalityEstimator": [
-          "lastChar",
-          "DIR_TYPE_CACHE_SIZE",
-          "DIR_TYPE_CACHE",
-          "charIndex",
-          "isHtml",
-          "text",
-          "length"
-        ]
-      },
-      "android/support/v7/widget/AppCompatDrawableManager": {
-        "androidx/widget/AppCompatDrawableManager": [
-          "COLOR_FILTER_CACHE",
-          "TINT_COLOR_CONTROL_NORMAL",
-          "TAG",
-          "COLORFILTER_TINT_COLOR_CONTROL_NORMAL",
-          "COLORFILTER_COLOR_CONTROL_ACTIVATED",
-          "TINT_CHECKABLE_BUTTON_LIST",
-          "INSTANCE",
-          "TINT_COLOR_CONTROL_STATE_LIST",
-          "DEFAULT_MODE",
-          "DEBUG",
-          "COLORFILTER_COLOR_BACKGROUND_MULTIPLY",
-          "PLATFORM_VD_CLAZZ",
-          "SKIP_DRAWABLE_TAG"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat": {
-        "androidx/media/tv/TvContractCompat": [
-          "PARAM_INPUT",
-          "PATH_CHANNEL",
-          "ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED",
-          "ACTION_REQUEST_CHANNEL_BROWSABLE",
-          "EXTRA_PREVIEW_PROGRAM_ID",
-          "PATH_RECORDED_PROGRAM",
-          "PATH_PASSTHROUGH",
-          "PARAM_CHANNEL",
-          "AUTHORITY",
-          "PARAM_START_TIME",
-          "PARAM_BROWSABLE_ONLY",
-          "EXTRA_DATA_TYPE",
-          "EXTRA_DEFAULT_VALUE",
-          "PARAM_END_TIME",
-          "EXTRA_WATCH_NEXT_PROGRAM_ID",
-          "PARAM_CANONICAL_GENRE",
-          "METHOD_GET_COLUMNS",
-          "PATH_PROGRAM",
-          "METHOD_ADD_COLUMN",
-          "PATH_PREVIEW_PROGRAM",
-          "PATH_WATCH_NEXT_PROGRAM",
-          "EXTRA_COLUMN_NAME",
-          "ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED",
-          "PERMISSION_READ_TV_LISTINGS",
-          "EXTRA_EXISTING_COLUMN_NAMES",
-          "ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT",
-          "EXTRA_PACKAGE_NAME",
-          "ACTION_CHANNEL_BROWSABLE_REQUESTED",
-          "EXTRA_CHANNEL_ID",
-          "ACTION_INITIALIZE_PROGRAMS"
-        ]
-      },
-      "android/support/v17/leanback/widget/GridLayoutManager$PendingMoveSmoothScroller": {
-        "androidx/leanback/widget/GridLayoutManager$PendingMoveSmoothScroller": [
-          "TARGET_UNDEFINED"
-        ]
-      },
-      "android/support/v7/media/RemoteControlClientCompat$PlaybackInfo": {
-        "androidx/media/RemoteControlClientCompat$PlaybackInfo": [
-          "volumeMax",
-          "playbackType",
-          "volume",
-          "volumeHandling",
-          "playbackStream"
-        ]
-      },
-      "android/support/v4/util/ArraySet": {
-        "androidx/util/ArraySet": [
-          "OBJECT",
-          "TAG",
-          "sTwiceBaseCacheSize",
-          "CACHE_SIZE",
-          "sBaseCacheSize",
-          "sTwiceBaseCache",
-          "BASE_SIZE",
-          "INT",
-          "sBaseCache",
-          "DEBUG"
-        ]
-      },
-      "android/support/v17/leanback/app/OnboardingFragment": {
-        "androidx/leanback/app/OnboardingFragment": [
-          "DESCRIPTION_START_DELAY_MS",
-          "TAG",
-          "HEADER_ANIMATION_DURATION_MS",
-          "HEADER_APPEAR_DELAY_MS",
-          "KEY_LOGO_ANIMATION_FINISHED",
-          "HEADER_DISAPPEAR_INTERPOLATOR",
-          "DEBUG",
-          "HEADER_APPEAR_INTERPOLATOR",
-          "KEY_ENTER_ANIMATION_FINISHED",
-          "KEY_CURRENT_PAGE_INDEX",
-          "sSlideDistance",
-          "LOGO_SPLASH_PAUSE_DURATION_MS",
-          "SLIDE_DISTANCE"
-        ]
-      },
-      "android/support/v17/leanback/R$string": {
-        "androidx/leanback/R$string": [
-          "lb_control_display_fast_forward_multiplier",
-          "lb_playback_controls_repeat_one",
-          "lb_playback_controls_thumb_up_outline",
-          "lb_playback_controls_thumb_up",
-          "lb_playback_controls_repeat_none",
-          "lb_guidedaction_finish_title",
-          "lb_control_display_rewind_multiplier",
-          "lb_playback_controls_closed_captioning_disable",
-          "lb_playback_controls_repeat_all",
-          "lb_playback_controls_pause",
-          "lb_playback_controls_thumb_down",
-          "lb_playback_controls_shuffle_enable",
-          "lb_playback_controls_rewind_multiplier",
-          "lb_guidedaction_continue_title",
-          "lb_playback_controls_shuffle_disable",
-          "lb_media_player_error",
-          "lb_playback_controls_hidden",
-          "lb_playback_controls_play",
-          "lb_guidedactions_item_unselected_description_text_alpha",
-          "lb_playback_controls_skip_next",
-          "lb_playback_controls_fast_forward",
-          "lb_playback_controls_high_quality_enable",
-          "lb_search_bar_hint_speech",
-          "lb_search_bar_hint_with_title_speech",
-          "lb_playback_controls_closed_captioning_enable",
-          "lb_playback_controls_shown",
-          "lb_guidedactions_item_disabled_description_text_alpha",
-          "lb_search_bar_hint",
-          "lb_playback_controls_fast_forward_multiplier",
-          "lb_playback_controls_picture_in_picture",
-          "lb_playback_controls_thumb_down_outline",
-          "lb_playback_controls_high_quality_disable",
-          "lb_playback_controls_rewind",
-          "lb_playback_controls_more_actions",
-          "lb_guidedactions_item_unselected_text_alpha",
-          "lb_guidedactions_item_disabled_text_alpha",
-          "lb_playback_controls_skip_previous",
-          "lb_search_bar_hint_with_title"
-        ]
-      },
-      "android/support/v7/preference/PreferenceInflater": {
-        "androidx/preference/PreferenceInflater": [
-          "EXTRA_TAG_NAME",
-          "INTENT_TAG_NAME",
-          "CONSTRUCTOR_MAP",
-          "TAG",
-          "CONSTRUCTOR_SIGNATURE"
-        ]
-      },
-      "android/support/constraint/R$styleable": {
-        "androidx/constraint/R$styleable": [
-          "ConstraintLayout_Layout_layout_constraintWidth_max",
-          "ConstraintLayout_Layout_layout_constraintWidth_min",
-          "ConstraintSet_layout_constraintDimensionRatio",
-          "ConstraintSet_android_transformPivotY",
-          "ConstraintSet_android_transformPivotX",
-          "ConstraintSet_layout_goneMarginRight",
-          "ConstraintLayout_Layout_layout_constraintGuide_percent",
-          "ConstraintLayout_Layout_layout_constraintLeft_toLeftOf",
-          "ConstraintSet_layout_goneMarginStart",
-          "ConstraintSet_android_orientation",
-          "ConstraintLayout_Layout_layout_constraintRight_toLeftOf",
-          "ConstraintSet_android_layout_marginBottom",
-          "ConstraintSet_layout_constraintBaseline_toBaselineOf",
-          "ConstraintSet_android_layout_height",
-          "ConstraintSet_layout_constraintRight_creator",
-          "ConstraintSet_layout_constraintWidth_max",
-          "ConstraintSet_layout_constraintEnd_toStartOf",
-          "ConstraintLayout_Layout_layout_constraintBottom_creator",
-          "ConstraintSet_android_visibility",
-          "ConstraintLayout_Layout_layout_constraintTop_toBottomOf",
-          "ConstraintSet_layout_constraintGuide_begin",
-          "ConstraintSet_layout_constraintWidth_min",
-          "ConstraintLayout_Layout_android_maxHeight",
-          "ConstraintSet_android_id",
-          "ConstraintSet_layout_constraintBottom_creator",
-          "ConstraintLayout_Layout_layout_optimizationLevel",
-          "ConstraintLayout_Layout_layout_constraintVertical_bias",
-          "ConstraintSet_layout_constraintHorizontal_bias",
-          "ConstraintSet_layout_constraintHeight_default",
-          "ConstraintSet",
-          "ConstraintLayout_Layout_layout_constraintBottom_toBottomOf",
-          "ConstraintLayout_Layout",
-          "ConstraintLayout_Layout_layout_constraintBaseline_creator",
-          "ConstraintLayout_Layout_layout_constraintVertical_chainStyle",
-          "ConstraintSet_android_rotationY",
-          "ConstraintSet_android_rotationX",
-          "ConstraintSet_android_alpha",
-          "ConstraintLayout_Layout_layout_constraintDimensionRatio",
-          "ConstraintLayout_Layout_android_orientation",
-          "ConstraintSet_layout_constraintLeft_creator",
-          "ConstraintSet_layout_goneMarginLeft",
-          "ConstraintSet_layout_constraintLeft_toLeftOf",
-          "ConstraintLayout_Layout_layout_constraintVertical_weight",
-          "ConstraintSet_layout_constraintStart_toStartOf",
-          "ConstraintLayout_Layout_layout_constraintHorizontal_chainStyle",
-          "ConstraintLayout_Layout_layout_constraintEnd_toEndOf",
-          "ConstraintSet_layout_editor_absoluteY",
-          "ConstraintSet_layout_editor_absoluteX",
-          "ConstraintLayout_Layout_layout_constraintEnd_toStartOf",
-          "ConstraintLayout_Layout_layout_constraintTop_toTopOf",
-          "ConstraintSet_android_layout_marginEnd",
-          "ConstraintLayout_Layout_layout_goneMarginLeft",
-          "ConstraintLayout_Layout_layout_constraintGuide_begin",
-          "ConstraintSet_layout_constraintGuide_end",
-          "ConstraintSet_android_translationZ",
-          "ConstraintSet_android_translationY",
-          "ConstraintSet_android_translationX",
-          "ConstraintSet_layout_constraintStart_toEndOf",
-          "ConstraintSet_layout_constraintRight_toRightOf",
-          "ConstraintSet_layout_constraintHeight_max",
-          "ConstraintSet_android_layout_marginTop",
-          "ConstraintSet_layout_constraintHeight_min",
-          "ConstraintSet_layout_constraintTop_creator",
-          "ConstraintLayout_Layout_layout_editor_absoluteX",
-          "ConstraintLayout_Layout_layout_editor_absoluteY",
-          "ConstraintLayout_Layout_layout_goneMarginTop",
-          "ConstraintSet_layout_goneMarginEnd",
-          "ConstraintSet_layout_constraintLeft_toRightOf",
-          "ConstraintLayout_Layout_layout_goneMarginBottom",
-          "ConstraintLayout_Layout_android_minHeight",
-          "ConstraintLayout_Layout_layout_constraintBaseline_toBaselineOf",
-          "ConstraintSet_android_layout_marginLeft",
-          "ConstraintSet_layout_constraintHorizontal_weight",
-          "ConstraintLayout_Layout_layout_goneMarginEnd",
-          "ConstraintSet_layout_constraintVertical_weight",
-          "ConstraintSet_layout_constraintBaseline_creator",
-          "ConstraintSet_layout_constraintVertical_bias",
-          "ConstraintSet_layout_goneMarginTop",
-          "ConstraintLayout_Layout_layout_constraintRight_creator",
-          "ConstraintSet_layout_constraintBottom_toTopOf",
-          "ConstraintLayout_Layout_layout_constraintWidth_default",
-          "ConstraintSet_android_layout_marginStart",
-          "ConstraintSet_android_layout_width",
-          "ConstraintSet_layout_constraintWidth_default",
-          "ConstraintLayout_Layout_layout_constraintBottom_toTopOf",
-          "ConstraintLayout_Layout_layout_constraintStart_toEndOf",
-          "ConstraintLayout_Layout_layout_constraintHorizontal_weight",
-          "ConstraintSet_android_layout_marginRight",
-          "ConstraintSet_layout_constraintBottom_toBottomOf",
-          "ConstraintSet_android_scaleX",
-          "ConstraintSet_android_scaleY",
-          "ConstraintLayout_Layout_layout_constraintRight_toRightOf",
-          "ConstraintSet_layout_constraintGuide_percent",
-          "ConstraintLayout_Layout_layout_constraintLeft_creator",
-          "ConstraintLayout_Layout_layout_constraintTop_creator",
-          "ConstraintSet_layout_constraintTop_toTopOf",
-          "ConstraintLayout_Layout_layout_goneMarginRight",
-          "ConstraintSet_layout_constraintEnd_toEndOf",
-          "ConstraintLayout_Layout_layout_constraintHeight_max",
-          "ConstraintLayout_Layout_constraintSet",
-          "ConstraintLayout_Layout_layout_constraintHeight_min",
-          "ConstraintLayout_Layout_layout_goneMarginStart",
-          "ConstraintSet_android_elevation",
-          "ConstraintSet_layout_constraintTop_toBottomOf",
-          "ConstraintLayout_Layout_layout_constraintLeft_toRightOf",
-          "ConstraintLayout_Layout_layout_constraintStart_toStartOf",
-          "ConstraintSet_layout_constraintHorizontal_chainStyle",
-          "ConstraintLayout_Layout_android_maxWidth",
-          "ConstraintLayout_Layout_layout_constraintHorizontal_bias",
-          "ConstraintLayout_Layout_layout_constraintHeight_default",
-          "ConstraintSet_layout_constraintRight_toLeftOf",
-          "ConstraintLayout_Layout_android_minWidth",
-          "ConstraintSet_layout_constraintVertical_chainStyle",
-          "ConstraintLayout_Layout_layout_constraintGuide_end",
-          "ConstraintSet_layout_goneMarginBottom"
-        ]
-      },
-      "android/support/v4/view/ViewPager": {
-        "androidx/widget/ViewPager": [
-          "SCROLL_STATE_DRAGGING",
-          "MIN_FLING_VELOCITY",
-          "LAYOUT_ATTRS",
-          "DRAW_ORDER_DEFAULT",
-          "DEFAULT_OFFSCREEN_PAGES",
-          "USE_CACHE",
-          "INVALID_POINTER",
-          "sPositionComparator",
-          "SCROLL_STATE_IDLE",
-          "TAG",
-          "DEBUG",
-          "MAX_SETTLE_DURATION",
-          "SCROLL_STATE_SETTLING",
-          "DEFAULT_GUTTER_SIZE",
-          "sInterpolator",
-          "MIN_DISTANCE_FOR_FLING",
-          "DRAW_ORDER_REVERSE",
-          "CLOSE_ENOUGH",
-          "DRAW_ORDER_FORWARD",
-          "COMPARATOR"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase$MessageHandler": {
-        "androidx/media/session/MediaSessionCompat$MediaSessionImplBase$MessageHandler": [
-          "MSG_CUSTOM_ACTION",
-          "MSG_SET_VOLUME",
-          "MSG_SET_SHUFFLE_MODE",
-          "MSG_PREPARE",
-          "MSG_COMMAND",
-          "MSG_REMOVE_QUEUE_ITEM",
-          "MSG_RATE_EXTRA",
-          "MSG_PREPARE_SEARCH",
-          "MSG_FAST_FORWARD",
-          "MSG_PREPARE_URI",
-          "MSG_PAUSE",
-          "MSG_PLAY_URI",
-          "MSG_STOP",
-          "MSG_SKIP_TO_ITEM",
-          "MSG_ADD_QUEUE_ITEM",
-          "MSG_RATE",
-          "MSG_PLAY",
-          "MSG_NEXT",
-          "MSG_REMOVE_QUEUE_ITEM_AT",
-          "MSG_SET_REPEAT_MODE",
-          "MSG_PREVIOUS",
-          "MSG_SEEK_TO",
-          "MSG_PLAY_SEARCH",
-          "MSG_PLAY_MEDIA_ID",
-          "MSG_MEDIA_BUTTON",
-          "KEYCODE_MEDIA_PAUSE",
-          "MSG_PREPARE_MEDIA_ID",
-          "KEYCODE_MEDIA_PLAY",
-          "MSG_ADD_QUEUE_ITEM_AT",
-          "MSG_SET_CAPTIONING_ENABLED",
-          "MSG_ADJUST_VOLUME",
-          "MSG_REWIND"
-        ]
-      },
-      "android/support/design/R$dimen": {
-        "androidx/design/R$dimen": [
-          "design_bottom_navigation_item_min_width",
-          "design_tab_scrollable_min_width",
-          "design_tab_text_size_2line",
-          "design_bottom_sheet_peek_height_min",
-          "design_fab_size_mini",
-          "design_snackbar_padding_vertical_2lines",
-          "design_snackbar_padding_vertical",
-          "design_bottom_navigation_item_max_width",
-          "design_bottom_navigation_active_text_size",
-          "design_navigation_separator_vertical_padding",
-          "design_navigation_icon_size",
-          "design_bottom_navigation_text_size",
-          "design_fab_image_size",
-          "design_bottom_navigation_height",
-          "design_bottom_navigation_margin",
-          "design_fab_size_normal",
-          "design_bottom_navigation_active_item_max_width",
-          "design_bottom_navigation_shadow_height"
-        ]
-      },
-      "android/support/multidex/MultiDex": {
-        "androidx/multidex/MultiDex": [
-          "installedApk",
-          "CODE_CACHE_SECONDARY_FOLDER_NAME",
-          "CODE_CACHE_NAME",
-          "VM_WITH_MULTIDEX_VERSION_MAJOR",
-          "TAG",
-          "NO_KEY_PREFIX",
-          "IS_VM_MULTIDEX_CAPABLE",
-          "VM_WITH_MULTIDEX_VERSION_MINOR",
-          "MIN_SDK_VERSION",
-          "MAX_SUPPORTED_SDK_VERSION",
-          "OLD_SECONDARY_FOLDER_NAME"
-        ]
-      },
-      "android/support/constraint/ConstraintSet$Constraint": {
-        "androidx/constraint/ConstraintSet$Constraint": [
-          "guidePercent",
-          "topToTop",
-          "guideEnd",
-          "heightDefault",
-          "topMargin",
-          "goneRightMargin",
-          "goneTopMargin",
-          "visibility",
-          "elevation",
-          "dimensionRatio",
-          "startToStart",
-          "widthMax",
-          "applyElevation",
-          "widthMin",
-          "verticalWeight",
-          "endToStart",
-          "bottomToTop",
-          "rotationY",
-          "rotationX",
-          "horizontalBias",
-          "translationY",
-          "translationZ",
-          "translationX",
-          "transformPivotX",
-          "transformPivotY",
-          "leftMargin",
-          "horizontalChainStyle",
-          "orientation",
-          "leftToRight",
-          "endMargin",
-          "verticalBias",
-          "heightMax",
-          "scaleX",
-          "scaleY",
-          "rightMargin",
-          "leftToLeft",
-          "heightMin",
-          "endToEnd",
-          "topToBottom",
-          "startMargin",
-          "goneLeftMargin",
-          "bottomToBottom",
-          "editorAbsoluteY",
-          "editorAbsoluteX",
-          "baselineToBaseline",
-          "horizontalWeight",
-          "guideBegin",
-          "bottomMargin",
-          "widthDefault",
-          "startToEnd",
-          "rightToRight",
-          "alpha",
-          "UNSET",
-          "goneStartMargin",
-          "rightToLeft",
-          "goneBottomMargin",
-          "verticalChainStyle",
-          "goneEndMargin"
-        ]
-      },
-      "android/support/compat/R$id": {
-        "androidx/compat/R$id": [
-          "right_icon",
-          "action_container",
-          "icon",
-          "notification_background",
-          "line1",
-          "line3",
-          "text",
-          "action_divider",
-          "time",
-          "action_text",
-          "right_side",
-          "notification_main_column",
-          "action_image",
-          "tag_transition_group",
-          "title",
-          "text2",
-          "actions",
-          "notification_main_column_container",
-          "info",
-          "chronometer"
-        ]
-      },
-      "android/support/v7/widget/helper/ItemTouchHelper": {
-        "androidx/widget/helper/ItemTouchHelper": [
-          "DOWN",
-          "DEBUG",
-          "PIXELS_PER_SECOND",
-          "ACTION_STATE_SWIPE",
-          "ANIMATION_TYPE_SWIPE_CANCEL",
-          "END",
-          "UP",
-          "START",
-          "ANIMATION_TYPE_SWIPE_SUCCESS",
-          "ANIMATION_TYPE_DRAG",
-          "LEFT",
-          "ACTIVE_POINTER_ID_NONE",
-          "RIGHT",
-          "TAG",
-          "ACTION_STATE_DRAG",
-          "ACTION_MODE_IDLE_MASK",
-          "ACTION_MODE_SWIPE_MASK",
-          "DIRECTION_FLAG_COUNT",
-          "ACTION_MODE_DRAG_MASK",
-          "ACTION_STATE_IDLE"
-        ]
-      },
-      "android/support/graphics/drawable/VectorDrawableCompat": {
-        "androidx/graphics/drawable/VectorDrawableCompat": [
-          "LINECAP_ROUND",
-          "SHAPE_VECTOR",
-          "LOGTAG",
-          "DEFAULT_TINT_MODE",
-          "SHAPE_CLIP_PATH",
-          "LINECAP_SQUARE",
-          "LINEJOIN_MITER",
-          "LINEJOIN_ROUND",
-          "LINEJOIN_BEVEL",
-          "LINECAP_BUTT",
-          "SHAPE_PATH",
-          "MAX_CACHED_BITMAP_SIZE",
-          "DBG_VECTOR_DRAWABLE",
-          "SHAPE_GROUP"
-        ]
-      },
-      "android/support/v14/preference/R$styleable": {
-        "androidx/preference/R$styleable": [
-          "SwitchPreference_switchTextOff",
-          "SwitchPreference_switchTextOn",
-          "SwitchPreference_disableDependentsState",
-          "PreferenceFragment",
-          "SwitchPreference_android_summaryOn",
-          "PreferenceFragment_android_dividerHeight",
-          "SwitchPreference_android_switchTextOff",
-          "SwitchPreference_android_summaryOff",
-          "PreferenceFragment_allowDividerAfterLastItem",
-          "SwitchPreference",
-          "SwitchPreference_summaryOff",
-          "SwitchPreference_summaryOn",
-          "SwitchPreference_android_switchTextOn",
-          "PreferenceFragment_android_divider",
-          "SwitchPreference_android_disableDependentsState",
-          "PreferenceFragment_android_layout"
-        ]
-      },
-      "android/support/v7/app/MediaRouteControllerDialog": {
-        "androidx/app/MediaRouteControllerDialog": [
-          "BUTTON_DISCONNECT_RES_ID",
-          "DEBUG",
-          "BUTTON_NEUTRAL_RES_ID",
-          "VOLUME_UPDATE_DELAY_MILLIS",
-          "CONNECTION_TIMEOUT_MILLIS",
-          "BUTTON_STOP_RES_ID",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/picker/PickerUtility": {
-        "androidx/leanback/widget/picker/PickerUtility": [
-          "SUPPORTS_BEST_DATE_TIME_PATTERN"
-        ]
-      },
-      "android/support/wear/widget/drawer/WearableActionDrawerView$TitleViewHolder": {
-        "androidx/wear/widget/drawer/WearableActionDrawerView$TitleViewHolder": [
-          "textView",
-          "view"
-        ]
-      },
-      "android/support/customtabs/CustomTabsIntent": {
-        "androidx/browser/customtabs/CustomTabsIntent": [
-          "TOOLBAR_ACTION_BUTTON_ID",
-          "EXTRA_ACTION_BUTTON_BUNDLE",
-          "EXTRA_EXIT_ANIMATION_BUNDLE",
-          "EXTRA_MENU_ITEMS",
-          "EXTRA_CLOSE_BUTTON_ICON",
-          "startAnimationBundle",
-          "KEY_ICON",
-          "EXTRA_SESSION",
-          "EXTRA_DEFAULT_SHARE_MENU_ITEM",
-          "MAX_TOOLBAR_ITEMS",
-          "intent",
-          "EXTRA_SECONDARY_TOOLBAR_COLOR",
-          "KEY_ID",
-          "EXTRA_TOOLBAR_COLOR",
-          "SHOW_PAGE_TITLE",
-          "EXTRA_TITLE_VISIBILITY_STATE",
-          "EXTRA_TOOLBAR_ITEMS",
-          "EXTRA_TINT_ACTION_BUTTON",
-          "NO_TITLE",
-          "KEY_DESCRIPTION",
-          "EXTRA_ENABLE_INSTANT_APPS",
-          "EXTRA_REMOTEVIEWS_PENDINGINTENT",
-          "EXTRA_REMOTEVIEWS_CLICKED_ID",
-          "KEY_MENU_ITEM_TITLE",
-          "EXTRA_ENABLE_URLBAR_HIDING",
-          "KEY_PENDING_INTENT",
-          "EXTRA_REMOTEVIEWS",
-          "EXTRA_USER_OPT_OUT_FROM_CUSTOM_TABS",
-          "EXTRA_REMOTEVIEWS_VIEW_IDS"
-        ]
-      },
-      "android/support/wear/R$styleable": {
-        "androidx/wear/R$styleable": [
-          "PageIndicatorView_wsPageIndicatorDotFadeInDuration",
-          "CircularProgressLayout_strokeWidth",
-          "WearableActionDrawerView",
-          "WearableRecyclerView_circularScrollingGestureEnabled",
-          "PageIndicatorView_wsPageIndicatorDotColor",
-          "PageIndicatorView",
-          "WearableActionDrawerView_actionMenu",
-          "PageIndicatorView_wsPageIndicatorDotFadeOutDelay",
-          "PageIndicatorView_wsPageIndicatorDotRadius",
-          "PageIndicatorView_wsPageIndicatorDotRadiusSelected",
-          "RoundedDrawable",
-          "WearableNavigationDrawerView_navigationStyle",
-          "CircledImageView_img_horizontal_offset_percentage",
-          "CircularProgressLayout",
-          "CircledImageView_img_tint",
-          "WearableActionDrawerView_showOverflowInPeek",
-          "CircledImageView_background_border_cap",
-          "CircledImageView_img_circle_percentage",
-          "BoxInsetLayout_Layout",
-          "CircledImageView_background_radius_pressed_percent",
-          "WearableActionDrawerView_drawerTitle",
-          "WearableRecyclerView",
-          "PageIndicatorView_wsPageIndicatorDotColorSelected",
-          "CircledImageView_img_padding",
-          "WearableDrawerView_android_elevation",
-          "RoundedDrawable_backgroundColor",
-          "PageIndicatorView_wsPageIndicatorDotShadowDx",
-          "PageIndicatorView_wsPageIndicatorDotShadowDy",
-          "CircularProgressLayout_backgroundColor",
-          "CircledImageView_background_radius_pressed",
-          "WearableDrawerView",
-          "BoxInsetLayout_Layout_boxedEdges",
-          "RoundedDrawable_radius",
-          "CircularProgressLayout_indeterminate",
-          "WearableDrawerView_peekView",
-          "WearableDrawerView_android_background",
-          "WearableDrawerView_enableAutoPeek",
-          "CircledImageView",
-          "PageIndicatorView_wsPageIndicatorDotFadeOutDuration",
-          "CircledImageView_background_shadow_width",
-          "CircledImageView_android_src",
-          "CircledImageView_background_radius_percent",
-          "PageIndicatorView_wsPageIndicatorDotShadowRadius",
-          "WearableRecyclerView_scrollDegreesPerScreen",
-          "CircledImageView_background_color",
-          "CircledImageView_clip_dimen",
-          "CircledImageView_background_radius",
-          "PageIndicatorView_wsPageIndicatorDotShadowColor",
-          "RoundedDrawable_clipEnabled",
-          "RoundedDrawable_android_src",
-          "WearableRecyclerView_bezelWidth",
-          "CircularProgressLayout_colorSchemeColors",
-          "WearableDrawerView_drawerContent",
-          "CircledImageView_background_border_color",
-          "WearableNavigationDrawerView",
-          "PageIndicatorView_wsPageIndicatorDotSpacing",
-          "CircledImageView_background_border_width",
-          "PageIndicatorView_wsPageIndicatorDotFadeWhenIdle"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ShuffleAction": {
-        "androidx/leanback/widget/PlaybackControlsRow$ShuffleAction": [
-          "INDEX_ON",
-          "INDEX_OFF",
-          "ON",
-          "OFF"
-        ]
-      },
-      "android/support/v7/widget/TooltipCompatHandler": {
-        "androidx/widget/TooltipCompatHandler": [
-          "LONG_CLICK_HIDE_TIMEOUT_MS",
-          "sActiveHandler",
-          "HOVER_HIDE_TIMEOUT_MS",
-          "TAG",
-          "HOVER_HIDE_TIMEOUT_SHORT_MS"
-        ]
-      },
-      "android/support/v4/media/AudioAttributesCompat$AudioManagerHidden": {
-        "androidx/media/AudioAttributesCompat$AudioManagerHidden": [
-          "STREAM_TTS",
-          "STREAM_BLUETOOTH_SCO",
-          "STREAM_SYSTEM_ENFORCED",
-          "STREAM_ACCESSIBILITY"
-        ]
-      },
-      "android/support/v17/leanback/widget/CursorObjectAdapter": {
-        "androidx/leanback/widget/CursorObjectAdapter": [
-          "CACHE_SIZE"
-        ]
-      },
-      "android/support/v7/mediarouter/R$dimen": {
-        "androidx/mediarouter/R$dimen": [
-          "mr_controller_volume_group_list_padding_top",
-          "mr_controller_volume_group_list_max_height",
-          "mr_controller_volume_group_list_item_height",
-          "mr_controller_volume_group_list_item_icon_size",
-          "mr_dialog_fixed_width_major",
-          "mr_dialog_fixed_width_minor"
-        ]
-      },
-      "android/support/transition/Transition": {
-        "androidx/transition/Transition": [
-          "MATCH_INSTANCE",
-          "MATCH_LAST",
-          "MATCH_FIRST",
-          "sRunningAnimators",
-          "MATCH_ID_STR",
-          "DBG",
-          "MATCH_INSTANCE_STR",
-          "MATCH_ITEM_ID",
-          "DEFAULT_MATCH_ORDER",
-          "MATCH_NAME_STR",
-          "MATCH_NAME",
-          "STRAIGHT_PATH_MOTION",
-          "MATCH_ITEM_ID_STR",
-          "MATCH_ID",
-          "LOG_TAG"
-        ]
-      },
-      "android/support/design/widget/CoordinatorLayout": {
-        "androidx/widget/CoordinatorLayout": [
-          "EVENT_VIEW_REMOVED",
-          "sConstructors",
-          "TOP_SORTED_CHILDREN_COMPARATOR",
-          "TYPE_ON_TOUCH",
-          "sRectPool",
-          "CONSTRUCTOR_PARAMS",
-          "TAG",
-          "EVENT_NESTED_SCROLL",
-          "WIDGET_PACKAGE_NAME",
-          "EVENT_PRE_DRAW",
-          "TYPE_ON_INTERCEPT"
-        ]
-      },
-      "android/support/constraint/ConstraintSet": {
-        "androidx/constraint/ConstraintSet": [
-          "CHAIN_SPREAD_INSIDE",
-          "UNUSED",
-          "GONE_LEFT_MARGIN",
-          "WIDTH_MAX",
-          "DIMENSION_RATIO",
-          "WIDTH_MIN",
-          "GUIDE_BEGIN",
-          "START_TO_START",
-          "ORIENTATION",
-          "RIGHT_TO_LEFT",
-          "VERTICAL",
-          "GUIDE_PERCENT",
-          "GONE_END_MARGIN",
-          "CHAIN_SPREAD",
-          "LAYOUT_HEIGHT",
-          "HORIZONTAL_STYLE",
-          "TOP_MARGIN",
-          "TRANSLATION_X",
-          "TRANSLATION_Z",
-          "TRANSLATION_Y",
-          "ELEVATION",
-          "EDITOR_ABSOLUTE_Y",
-          "EDITOR_ABSOLUTE_X",
-          "END_TO_START",
-          "DEBUG",
-          "MATCH_CONSTRAINT",
-          "BOTTOM_TO_TOP",
-          "RIGHT_MARGIN",
-          "TRANSFORM_PIVOT_Y",
-          "TRANSFORM_PIVOT_X",
-          "WRAP_CONTENT",
-          "BASELINE",
-          "HORIZONTAL_BIAS",
-          "SCALE_Y",
-          "SCALE_X",
-          "VISIBILITY_FLAGS",
-          "CHAIN_PACKED",
-          "VERTICAL_STYLE",
-          "mapToConstant",
-          "HORIZONTAL_GUIDELINE",
-          "LEFT",
-          "START_MARGIN",
-          "PARENT_ID",
-          "GUIDE_END",
-          "END_TO_END",
-          "TOP",
-          "LAYOUT_VISIBILITY",
-          "GONE_BOTTOM_MARGIN",
-          "LEFT_MARGIN",
-          "RIGHT",
-          "GONE_TOP_MARGIN",
-          "VERTICAL_GUIDELINE",
-          "START",
-          "GONE_RIGHT_MARGIN",
-          "TAG",
-          "GONE_START_MARGIN",
-          "HEIGHT_MIN",
-          "MATCH_CONSTRAINT_WRAP",
-          "UNSET",
-          "HEIGHT_MAX",
-          "END",
-          "BASELINE_TO_BASELINE",
-          "LAYOUT_WIDTH",
-          "VERTICAL_BIAS",
-          "HORIZONTAL",
-          "MATCH_CONSTRAINT_SPREAD",
-          "ALPHA",
-          "TOP_TO_TOP",
-          "RIGHT_TO_RIGHT",
-          "TOP_TO_BOTTOM",
-          "BOTTOM",
-          "LEFT_TO_LEFT",
-          "VIEW_ID",
-          "INVISIBLE",
-          "VERTICAL_WEIGHT",
-          "VISIBLE",
-          "HEIGHT_DEFAULT",
-          "WIDTH_DEFAULT",
-          "LEFT_TO_RIGHT",
-          "END_MARGIN",
-          "BOTTOM_MARGIN",
-          "HORIZONTAL_WEIGHT",
-          "START_TO_END",
-          "BOTTOM_TO_BOTTOM",
-          "GONE",
-          "ROTATION_X",
-          "ROTATION_Y"
-        ]
-      },
-      "android/support/v4/app/FrameMetricsAggregator$FrameMetricsApi24Impl": {
-        "androidx/app/FrameMetricsAggregator$FrameMetricsApi24Impl": [
-          "NANOS_PER_MS",
-          "NANOS_ROUNDING_VALUE",
-          "sHandlerThread",
-          "sHandler"
-        ]
-      },
-      "android/support/v4/view/GestureDetectorCompat$GestureDetectorCompatImplBase": {
-        "androidx/view/GestureDetectorCompat$GestureDetectorCompatImplBase": [
-          "LONGPRESS_TIMEOUT",
-          "TAP_TIMEOUT",
-          "DOUBLE_TAP_TIMEOUT",
-          "LONG_PRESS",
-          "TAP",
-          "SHOW_PRESS"
-        ]
-      },
-      "android/support/multidex/MultiDexExtractor": {
-        "androidx/multidex/MultiDexExtractor": [
-          "KEY_DEX_TIME",
-          "MAX_EXTRACT_ATTEMPTS",
-          "TAG",
-          "DEX_PREFIX",
-          "DEX_SUFFIX",
-          "EXTRACTED_NAME_EXT",
-          "KEY_CRC",
-          "KEY_DEX_CRC",
-          "NO_VALUE",
-          "LOCK_FILENAME",
-          "KEY_TIME_STAMP",
-          "EXTRACTED_SUFFIX",
-          "BUFFER_SIZE",
-          "KEY_DEX_NUMBER",
-          "PREFS_FILE"
-        ]
-      },
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat": {
-        "androidx/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat": [
-          "ACTION_FOCUS",
-          "ACTION_SCROLL_BACKWARD",
-          "ACTION_SCROLL_DOWN",
-          "ACTION_CONTEXT_CLICK",
-          "ACTION_CLEAR_FOCUS",
-          "ACTION_ACCESSIBILITY_FOCUS",
-          "ACTION_PASTE",
-          "ACTION_SET_PROGRESS",
-          "ACTION_EXPAND",
-          "ACTION_NEXT_HTML_ELEMENT",
-          "ACTION_SCROLL_UP",
-          "ACTION_SCROLL_FORWARD",
-          "ACTION_CLEAR_SELECTION",
-          "ACTION_LONG_CLICK",
-          "ACTION_SET_TEXT",
-          "ACTION_NEXT_AT_MOVEMENT_GRANULARITY",
-          "ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY",
-          "ACTION_SHOW_ON_SCREEN",
-          "ACTION_COLLAPSE",
-          "ACTION_COPY",
-          "ACTION_SCROLL_LEFT",
-          "ACTION_PREVIOUS_HTML_ELEMENT",
-          "ACTION_SET_SELECTION",
-          "ACTION_CLEAR_ACCESSIBILITY_FOCUS",
-          "ACTION_SCROLL_TO_POSITION",
-          "ACTION_DISMISS",
-          "ACTION_CLICK",
-          "ACTION_CUT",
-          "ACTION_SCROLL_RIGHT",
-          "ACTION_SELECT"
-        ]
-      },
-      "android/support/v4/graphics/drawable/DrawableWrapperApi21": {
-        "androidx/graphics/drawable/DrawableWrapperApi21": [
-          "sIsProjectedDrawableMethod",
-          "TAG"
-        ]
-      },
-      "android/support/v7/media/MediaRouter$RouteInfo": {
-        "androidx/media/MediaRouter$RouteInfo": [
-          "PRESENTATION_DISPLAY_ID_NONE",
-          "SYSTEM_MEDIA_ROUTE_PROVIDER_PACKAGE_NAME",
-          "PLAYBACK_TYPE_REMOTE",
-          "CHANGE_VOLUME",
-          "DEVICE_TYPE_BLUETOOTH",
-          "CHANGE_PRESENTATION_DISPLAY",
-          "CHANGE_GENERAL",
-          "CONNECTION_STATE_DISCONNECTED",
-          "DEVICE_TYPE_TV",
-          "PLAYBACK_VOLUME_VARIABLE",
-          "CONNECTION_STATE_CONNECTING",
-          "PLAYBACK_TYPE_LOCAL",
-          "DEVICE_TYPE_UNKNOWN",
-          "CONNECTION_STATE_CONNECTED",
-          "PLAYBACK_VOLUME_FIXED",
-          "DEVICE_TYPE_SPEAKER"
-        ]
-      },
-      "android/support/v17/leanback/widget/picker/TimePicker": {
-        "androidx/leanback/widget/picker/TimePicker": [
-          "TAG",
-          "HOURS_IN_HALF_DAY",
-          "AM_INDEX",
-          "PM_INDEX"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView": {
-        "androidx/widget/RecyclerView": [
-          "LAYOUT_MANAGER_CONSTRUCTOR_SIGNATURE",
-          "TRACE_ON_DATA_SET_CHANGE_LAYOUT_TAG",
-          "NO_ID",
-          "NO_POSITION",
-          "DISPATCH_TEMP_DETACH",
-          "TRACE_SCROLL_TAG",
-          "SCROLL_STATE_DRAGGING",
-          "TRACE_PREFETCH_TAG",
-          "INVALID_POINTER",
-          "MAX_SCROLL_DURATION",
-          "TOUCH_SLOP_PAGING",
-          "TOUCH_SLOP_DEFAULT",
-          "VERBOSE_TRACING",
-          "TRACE_CREATE_VIEW_TAG",
-          "ALLOW_SIZE_IN_UNSPECIFIED_SPEC",
-          "FORCE_ABS_FOCUS_SEARCH_DIRECTION",
-          "TRACE_BIND_VIEW_TAG",
-          "HORIZONTAL",
-          "ALLOW_THREAD_GAP_WORK",
-          "DEBUG",
-          "TRACE_NESTED_PREFETCH_TAG",
-          "SCROLL_STATE_SETTLING",
-          "POST_UPDATES_ON_ANIMATION",
-          "sQuinticInterpolator",
-          "VERTICAL",
-          "CLIP_TO_PADDING_ATTR",
-          "FOREVER_NS",
-          "IGNORE_DETACHED_FOCUSED_CHILD",
-          "INVALID_TYPE",
-          "SCROLL_STATE_IDLE",
-          "NESTED_SCROLLING_ATTRS",
-          "TAG",
-          "TRACE_ON_LAYOUT_TAG",
-          "FORCE_INVALIDATE_DISPLAY_LIST",
-          "TRACE_HANDLE_ADAPTER_UPDATES_TAG"
-        ]
-      },
-      "android/support/v4/view/PagerAdapter": {
-        "androidx/widget/PagerAdapter": [
-          "POSITION_NONE",
-          "POSITION_UNCHANGED"
-        ]
-      },
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat": {
-        "androidx/view/accessibility/AccessibilityNodeInfoCompat": [
-          "ACTION_PREVIOUS_HTML_ELEMENT",
-          "ACTION_ARGUMENT_SELECTION_END_INT",
-          "ACTION_SET_SELECTION",
-          "MOVEMENT_GRANULARITY_CHARACTER",
-          "MOVEMENT_GRANULARITY_LINE",
-          "ACTION_SET_TEXT",
-          "MOVEMENT_GRANULARITY_PARAGRAPH",
-          "ACTION_SELECT",
-          "FOCUS_ACCESSIBILITY",
-          "ACTION_DISMISS",
-          "ACTION_EXPAND",
-          "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE",
-          "ACTION_CLEAR_ACCESSIBILITY_FOCUS",
-          "ACTION_CUT",
-          "ACTION_PASTE",
-          "ACTION_ARGUMENT_ROW_INT",
-          "FOCUS_INPUT",
-          "ACTION_ARGUMENT_HTML_ELEMENT_STRING",
-          "MOVEMENT_GRANULARITY_PAGE",
-          "ACTION_ARGUMENT_PROGRESS_VALUE",
-          "ACTION_CLEAR_FOCUS",
-          "MOVEMENT_GRANULARITY_WORD",
-          "ACTION_SCROLL_BACKWARD",
-          "ROLE_DESCRIPTION_KEY",
-          "ACTION_FOCUS",
-          "ACTION_NEXT_HTML_ELEMENT",
-          "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN",
-          "ACTION_CLEAR_SELECTION",
-          "ACTION_ARGUMENT_COLUMN_INT",
-          "ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY",
-          "ACTION_NEXT_AT_MOVEMENT_GRANULARITY",
-          "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT",
-          "ACTION_ACCESSIBILITY_FOCUS",
-          "ACTION_CLICK",
-          "ACTION_ARGUMENT_SELECTION_START_INT",
-          "ACTION_SCROLL_FORWARD",
-          "ACTION_COPY",
-          "ACTION_COLLAPSE",
-          "ACTION_LONG_CLICK"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$RecordedPrograms": {
-        "androidx/media/tv/TvContractCompat$RecordedPrograms": [
-          "CONTENT_URI",
-          "COLUMN_RECORDING_DURATION_MILLIS",
-          "COLUMN_CHANNEL_ID",
-          "COLUMN_BROADCAST_GENRE",
-          "COLUMN_RECORDING_DATA_BYTES",
-          "COLUMN_END_TIME_UTC_MILLIS",
-          "CONTENT_TYPE",
-          "COLUMN_RECORDING_DATA_URI",
-          "COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS",
-          "COLUMN_INPUT_ID",
-          "COLUMN_START_TIME_UTC_MILLIS",
-          "CONTENT_ITEM_TYPE"
-        ]
-      },
-      "android/support/v17/leanback/app/PlaybackSupportFragment": {
-        "androidx/leanback/app/PlaybackSupportFragment": [
-          "IDLE",
-          "ANIMATION_MULTIPLIER",
-          "ANIMATING",
-          "BG_LIGHT",
-          "START_FADE_OUT",
-          "TAG",
-          "BG_DARK",
-          "BG_NONE",
-          "BUNDLE_CONTROL_VISIBLE_ON_CREATEVIEW",
-          "DEBUG"
-        ]
-      },
-      "android/support/v17/leanback/widget/ShadowOverlayHelper$Options": {
-        "androidx/leanback/widget/ShadowOverlayHelper$Options": [
-          "DEFAULT",
-          "roundedCornerRadius",
-          "dynamicShadowUnfocusedZ",
-          "dynamicShadowFocusedZ"
-        ]
-      },
-      "android/support/v17/leanback/widget/ShadowOverlayHelper": {
-        "androidx/leanback/widget/ShadowOverlayHelper": [
-          "SHADOW_NONE",
-          "SHADOW_STATIC",
-          "SHADOW_DYNAMIC"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserServiceCompat": {
-        "androidx/media/MediaBrowserServiceCompat": [
-          "EPSILON",
-          "RESULT_ERROR",
-          "DEBUG",
-          "RESULT_FLAG_ON_SEARCH_NOT_IMPLEMENTED",
-          "RESULT_FLAG_ON_LOAD_ITEM_NOT_IMPLEMENTED",
-          "KEY_MEDIA_ITEM",
-          "TAG",
-          "SERVICE_INTERFACE",
-          "KEY_SEARCH_RESULTS",
-          "RESULT_OK",
-          "RESULT_PROGRESS_UPDATE",
-          "RESULT_FLAG_OPTION_NOT_HANDLED"
-        ]
-      },
-      "android/support/v13/app/FragmentPagerAdapter": {
-        "androidx/app/legacy/FragmentPagerAdapter": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/design/widget/BaseTransientBottomBar$BaseCallback": {
-        "androidx/design/widget/BaseTransientBottomBar$BaseCallback": [
-          "DISMISS_EVENT_MANUAL",
-          "DISMISS_EVENT_SWIPE",
-          "DISMISS_EVENT_TIMEOUT",
-          "DISMISS_EVENT_ACTION",
-          "DISMISS_EVENT_CONSECUTIVE"
-        ]
-      },
-      "android/support/v7/widget/GapWorker": {
-        "androidx/widget/GapWorker": [
-          "sGapWorker",
-          "sTaskComparator"
-        ]
-      },
-      "android/support/v7/preference/PreferenceManager": {
-        "androidx/preference/PreferenceManager": [
-          "STORAGE_DEFAULT",
-          "KEY_HAS_SET_DEFAULT_VALUES",
-          "STORAGE_DEVICE_PROTECTED"
-        ]
-      },
-      "android/support/v4/widget/SlidingPaneLayout$LayoutParams": {
-        "androidx/widget/SlidingPaneLayout$LayoutParams": [
-          "width",
-          "ATTRS",
-          "height",
-          "dimPaint",
-          "leftMargin",
-          "weight",
-          "slideable",
-          "rightMargin",
-          "dimWhenOffset"
-        ]
-      },
-      "android/support/v17/leanback/widget/GuidedAction": {
-        "androidx/leanback/widget/GuidedAction": [
-          "ACTION_ID_CONTINUE",
-          "PF_ENABLED",
-          "ACTION_ID_YES",
-          "ACTION_ID_OK",
-          "ACTION_ID_NO",
-          "PF_INFO_ONLY",
-          "ACTION_ID_FINISH",
-          "TAG",
-          "EDITING_TITLE",
-          "EDITING_DESCRIPTION",
-          "PF_MULTI_lINE_DESCRIPTION",
-          "PF_CHECKED",
-          "DEFAULT_CHECK_SET_ID",
-          "ACTION_ID_CURRENT",
-          "CHECKBOX_CHECK_SET_ID",
-          "EDITING_NONE",
-          "PF_AUTORESTORE",
-          "EDITING_ACTIVATOR_VIEW",
-          "PF_HAS_NEXT",
-          "ACTION_ID_NEXT",
-          "ACTION_ID_CANCEL",
-          "PF_FOCUSABLE",
-          "NO_CHECK_SET"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$PreviewPrograms": {
-        "androidx/media/tv/TvContractCompat$PreviewPrograms": [
-          "COLUMN_CHANNEL_ID",
-          "CONTENT_ITEM_TYPE",
-          "CONTENT_URI",
-          "CONTENT_TYPE",
-          "COLUMN_WEIGHT"
-        ]
-      },
-      "android/support/v17/leanback/widget/BaseCardView": {
-        "androidx/leanback/widget/BaseCardView": [
-          "CARD_TYPE_INFO_OVER",
-          "CARD_TYPE_INVALID",
-          "DEBUG",
-          "CARD_TYPE_INFO_UNDER",
-          "CARD_TYPE_MAIN_ONLY",
-          "LB_PRESSED_STATE_SET",
-          "CARD_REGION_VISIBLE_ALWAYS",
-          "CARD_REGION_VISIBLE_SELECTED",
-          "TAG",
-          "CARD_TYPE_INFO_UNDER_WITH_EXTRA",
-          "CARD_REGION_VISIBLE_ACTIVATED"
-        ]
-      },
-      "android/support/v7/mediarouter/R$string": {
-        "androidx/mediarouter/R$string": [
-          "mr_user_route_category_name",
-          "mr_controller_no_info_available",
-          "mr_system_route_name",
-          "mr_controller_disconnect",
-          "mr_cast_button_disconnected",
-          "mr_controller_casting_screen",
-          "mr_button_content_description",
-          "mr_controller_no_media_selected",
-          "mr_controller_expand_group",
-          "mr_controller_play",
-          "mr_controller_stop",
-          "mr_cast_button_connected",
-          "mr_controller_pause",
-          "mr_controller_collapse_group",
-          "mr_cast_button_connecting",
-          "mr_controller_stop_casting"
-        ]
-      },
-      "android/support/v4/text/util/LinkifyCompat$LinkSpec": {
-        "androidx/text/util/LinkifyCompat$LinkSpec": [
-          "end",
-          "url",
-          "frameworkAddedSpan",
-          "start"
-        ]
-      },
-      "android/support/transition/ArcMotion": {
-        "androidx/transition/ArcMotion": [
-          "DEFAULT_MIN_ANGLE_DEGREES",
-          "DEFAULT_MAX_ANGLE_DEGREES",
-          "DEFAULT_MAX_TANGENT"
-        ]
-      },
-      "android/support/v17/leanback/widget/TitleViewAdapter": {
-        "androidx/leanback/widget/TitleViewAdapter": [
-          "BRANDING_VIEW_VISIBLE",
-          "FULL_VIEW_VISIBLE",
-          "SEARCH_VIEW_VISIBLE"
-        ]
-      },
-      "android/support/v17/leanback/app/DetailsFragment": {
-        "androidx/leanback/app/DetailsFragment": [
-          "EVT_ON_CREATE",
-          "EVT_SWITCH_TO_VIDEO",
-          "STATE_ENTRANCE_INIT",
-          "STATE_SWITCH_TO_VIDEO_IN_ON_CREATE",
-          "STATE_START",
-          "EVT_DETAILS_ROW_LOADED",
-          "STATE_ENTER_TRANSITION_INIT",
-          "STATE_ENTER_TRANSITION_CANCEL",
-          "COND_TRANSITION_NOT_SUPPORTED",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "EVT_NO_ENTER_TRANSITION",
-          "EVT_ON_CREATEVIEW",
-          "STATE_ENTER_TRANSITION_PENDING",
-          "EVT_ONSTART",
-          "STATE_ON_SAFE_START",
-          "DEBUG",
-          "EVT_ENTER_TRANSIITON_DONE",
-          "STATE_SET_ENTRANCE_START_STATE",
-          "STATE_ENTRANCE_PERFORM",
-          "STATE_ENTRANCE_COMPLETE",
-          "STATE_ENTER_TRANSITION_COMPLETE",
-          "STATE_ENTER_TRANSITION_ADDLISTENER",
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/FastScroller": {
-        "androidx/widget/FastScroller": [
-          "ANIMATION_STATE_OUT",
-          "ANIMATION_STATE_IN",
-          "SHOW_DURATION_MS",
-          "STATE_VISIBLE",
-          "DRAG_NONE",
-          "STATE_HIDDEN",
-          "ANIMATION_STATE_FADING_IN",
-          "STATE_DRAGGING",
-          "HIDE_DELAY_AFTER_VISIBLE_MS",
-          "DRAG_X",
-          "DRAG_Y",
-          "HIDE_DELAY_AFTER_DRAGGING_MS",
-          "HIDE_DURATION_MS",
-          "SCROLLBAR_FULL_OPAQUE",
-          "ANIMATION_STATE_FADING_OUT",
-          "PRESSED_STATE_SET",
-          "EMPTY_STATE_SET"
-        ]
-      },
-      "android/support/v7/media/MediaRouteDescriptor": {
-        "androidx/media/MediaRouteDescriptor": [
-          "KEY_VOLUME",
-          "KEY_PLAYBACK_TYPE",
-          "KEY_SETTINGS_INTENT",
-          "KEY_ID",
-          "KEY_ENABLED",
-          "KEY_MAX_CLIENT_VERSION",
-          "KEY_ICON_URI",
-          "KEY_DESCRIPTION",
-          "KEY_PLAYBACK_STREAM",
-          "KEY_GROUP_MEMBER_IDS",
-          "KEY_CONNECTION_STATE",
-          "KEY_EXTRAS",
-          "KEY_VOLUME_HANDLING",
-          "KEY_PRESENTATION_DISPLAY_ID",
-          "KEY_MIN_CLIENT_VERSION",
-          "KEY_CONTROL_FILTERS",
-          "KEY_CAN_DISCONNECT",
-          "KEY_DEVICE_TYPE",
-          "KEY_NAME",
-          "KEY_VOLUME_MAX",
-          "KEY_CONNECTING"
-        ]
-      },
-      "android/support/design/widget/BottomNavigationView": {
-        "androidx/design/widget/BottomNavigationView": [
-          "DISABLED_STATE_SET",
-          "CHECKED_STATE_SET",
-          "EMPTY_STATE_SET",
-          "MENU_PRESENTER_ID"
-        ]
-      },
-      "android/support/wear/widget/drawer/WearableActionDrawerView": {
-        "androidx/wear/widget/drawer/WearableActionDrawerView": [
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/media/PlaybackBaseControlGlue": {
-        "androidx/leanback/media/PlaybackBaseControlGlue": [
-          "ACTION_FAST_FORWARD",
-          "DEBUG",
-          "ACTION_CUSTOM_LEFT_FIRST",
-          "ACTION_SKIP_TO_PREVIOUS",
-          "TAG",
-          "ACTION_SKIP_TO_NEXT",
-          "ACTION_CUSTOM_RIGHT_FIRST",
-          "ACTION_PLAY_PAUSE",
-          "ACTION_REPEAT",
-          "ACTION_REWIND",
-          "ACTION_SHUFFLE"
-        ]
-      },
-      "android/support/v4/app/AppLaunchChecker": {
-        "androidx/app/AppLaunchChecker": [
-          "KEY_STARTED_FROM_LAUNCHER",
-          "SHARED_PREFS_NAME"
-        ]
-      },
-      "android/support/transition/Styleable$ArcMotion": {
-        "androidx/transition/Styleable$ArcMotion": [
-          "MAXIMUM_ANGLE",
-          "MINIMUM_VERTICAL_ANGLE",
-          "MINIMUM_HORIZONTAL_ANGLE"
-        ]
-      },
-      "android/support/v7/cardview/R$color": {
-        "androidx/cardview/R$color": [
-          "cardview_shadow_end_color",
-          "cardview_light_background",
-          "cardview_dark_background",
-          "cardview_shadow_start_color"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseFragment": {
-        "androidx/leanback/app/BrowseFragment": [
-          "TAG",
-          "EVT_SCREEN_DATA_READY",
-          "LB_HEADERS_BACKSTACK",
-          "STATE_ENTRANCE_PERFORM",
-          "IS_PAGE_ROW",
-          "ARG_TITLE",
-          "HEADERS_HIDDEN",
-          "HEADER_SHOW",
-          "EVT_MAIN_FRAGMENT_VIEW_CREATED",
-          "CURRENT_SELECTED_POSITION",
-          "DEBUG",
-          "EVT_HEADER_VIEW_CREATED",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "HEADERS_ENABLED",
-          "ARG_HEADERS_STATE",
-          "STATE_ENTRANCE_ON_PREPARED_ON_CREATEVIEW",
-          "STATE_SET_ENTRANCE_START_STATE",
-          "HEADERS_DISABLED",
-          "HEADER_STACK_INDEX"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$ProgramColumns": {
-        "androidx/media/tv/TvContractCompat$ProgramColumns": [
-          "COLUMN_SHORT_DESCRIPTION",
-          "COLUMN_SEASON_DISPLAY_NUMBER",
-          "COLUMN_SEASON_TITLE",
-          "COLUMN_VIDEO_WIDTH",
-          "COLUMN_AUDIO_LANGUAGE",
-          "REVIEW_RATING_STYLE_STARS",
-          "COLUMN_EPISODE_TITLE",
-          "REVIEW_RATING_STYLE_THUMBS_UP_DOWN",
-          "COLUMN_INTERNAL_PROVIDER_FLAG2",
-          "COLUMN_INTERNAL_PROVIDER_FLAG3",
-          "COLUMN_INTERNAL_PROVIDER_FLAG4",
-          "COLUMN_INTERNAL_PROVIDER_FLAG1",
-          "COLUMN_TITLE",
-          "COLUMN_POSTER_ART_URI",
-          "COLUMN_VERSION_NUMBER",
-          "COLUMN_THUMBNAIL_URI",
-          "REVIEW_RATING_STYLE_PERCENTAGE",
-          "COLUMN_EPISODE_DISPLAY_NUMBER",
-          "COLUMN_SEARCHABLE",
-          "COLUMN_VIDEO_HEIGHT",
-          "COLUMN_CANONICAL_GENRE",
-          "COLUMN_CONTENT_RATING",
-          "COLUMN_REVIEW_RATING",
-          "COLUMN_REVIEW_RATING_STYLE",
-          "COLUMN_LONG_DESCRIPTION",
-          "COLUMN_INTERNAL_PROVIDER_DATA"
-        ]
-      },
-      "android/support/v4/graphics/PaintCompat": {
-        "androidx/graphics/PaintCompat": [
-          "TOFU_STRING",
-          "sRectThreadLocal",
-          "EM_STRING"
-        ]
-      },
-      "android/support/v4/view/accessibility/AccessibilityEventCompat": {
-        "androidx/view/accessibility/AccessibilityEventCompat": [
-          "CONTENT_CHANGE_TYPE_UNDEFINED",
-          "TYPE_ANNOUNCEMENT",
-          "TYPE_TOUCH_INTERACTION_END",
-          "CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION",
-          "TYPE_TOUCH_INTERACTION_START",
-          "TYPE_TOUCH_EXPLORATION_GESTURE_END",
-          "TYPE_VIEW_HOVER_ENTER",
-          "TYPE_VIEW_ACCESSIBILITY_FOCUSED",
-          "CONTENT_CHANGE_TYPE_TEXT",
-          "TYPE_WINDOW_CONTENT_CHANGED",
-          "TYPES_ALL_MASK",
-          "TYPE_TOUCH_EXPLORATION_GESTURE_START",
-          "TYPE_WINDOWS_CHANGED",
-          "TYPE_VIEW_CONTEXT_CLICKED",
-          "TYPE_VIEW_HOVER_EXIT",
-          "CONTENT_CHANGE_TYPE_SUBTREE",
-          "TYPE_ASSIST_READING_CONTEXT",
-          "TYPE_VIEW_TEXT_SELECTION_CHANGED",
-          "TYPE_GESTURE_DETECTION_START",
-          "TYPE_VIEW_SCROLLED",
-          "TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY",
-          "TYPE_GESTURE_DETECTION_END",
-          "TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED"
-        ]
-      },
-      "android/support/v17/leanback/R$attr": {
-        "androidx/leanback/R$attr": [
-          "guidedActionContentWidthWeightTwoPanels",
-          "onboardingTheme",
-          "playbackProgressPrimaryColor",
-          "guidedActionTitleMaxLines",
-          "guidedActionPressedAnimation",
-          "playbackMediaItemNumberViewFlipperLayout",
-          "imageCardViewStyle",
-          "playbackControlsActionIcons",
-          "browseTitleViewLayout",
-          "playbackControlsIconHighlightColor",
-          "guidedStepTheme",
-          "guidedActionTitleMinLines",
-          "defaultBrandColorDark",
-          "baseCardViewStyle",
-          "browseTitleViewStyle",
-          "guidedActionVerticalPadding",
-          "guidedActionDisabledChevronAlpha",
-          "searchOrbViewStyle",
-          "defaultBrandColor",
-          "guidedStepThemeFlag",
-          "rowHeaderStyle",
-          "guidedActionDescriptionMinLines",
-          "guidedActionUnpressedAnimation",
-          "guidedActionEnabledChevronAlpha"
-        ]
-      },
-      "android/support/media/ExifInterface$ExifTag": {
-        "androidx/media/ExifInterface$ExifTag": [
-          "number",
-          "primaryFormat",
-          "name",
-          "secondaryFormat"
-        ]
-      },
-      "android/support/v4/widget/ContentLoadingProgressBar": {
-        "androidx/widget/ContentLoadingProgressBar": [
-          "MIN_DELAY",
-          "MIN_SHOW_TIME"
-        ]
-      },
-      "android/support/transition/ViewGroupUtilsApi14": {
-        "androidx/transition/ViewGroupUtilsApi14": [
-          "TAG",
-          "LAYOUT_TRANSITION_CHANGING",
-          "sEmptyLayoutTransition",
-          "sCancelMethod",
-          "sLayoutSuppressedField",
-          "sCancelMethodFetched",
-          "sLayoutSuppressedFieldFetched"
-        ]
-      },
-      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuAdapter": {
-        "androidx/design/internal/NavigationMenuPresenter$NavigationMenuAdapter": [
-          "STATE_ACTION_VIEWS",
-          "VIEW_TYPE_SEPARATOR",
-          "VIEW_TYPE_HEADER",
-          "VIEW_TYPE_SUBHEADER",
-          "VIEW_TYPE_NORMAL",
-          "STATE_CHECKED_ITEM"
-        ]
-      },
-      "android/support/v4/os/LocaleListHelper": {
-        "androidx/os/LocaleListHelper": [
-          "EN_LATN",
-          "LOCALE_EN_XA",
-          "sDefaultAdjustedLocaleList",
-          "sLock",
-          "sLastExplicitlySetLocaleList",
-          "sEmptyLocaleList",
-          "sEmptyList",
-          "NUM_PSEUDO_LOCALES",
-          "STRING_AR_XB",
-          "sDefaultLocaleList",
-          "sLastDefaultLocale",
-          "STRING_EN_XA",
-          "LOCALE_AR_XB"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$CarExtender": {
-        "androidx/app/NotificationCompat$CarExtender": [
-          "KEY_TIMESTAMP",
-          "EXTRA_LARGE_ICON",
-          "KEY_ON_READ",
-          "KEY_PARTICIPANTS",
-          "KEY_ON_REPLY",
-          "KEY_AUTHOR",
-          "KEY_REMOTE_INPUT",
-          "KEY_TEXT",
-          "KEY_MESSAGES",
-          "EXTRA_CAR_EXTENDER",
-          "EXTRA_COLOR",
-          "EXTRA_CONVERSATION"
-        ]
-      },
-      "android/support/wear/R$layout": {
-        "androidx/wear/R$layout": [
-          "ws_navigation_drawer_item_view",
-          "ws_single_page_nav_drawer_7_item",
-          "ws_single_page_nav_drawer_4_item",
-          "ws_action_drawer_item_view",
-          "ws_single_page_nav_drawer_2_item",
-          "ws_navigation_drawer_view",
-          "ws_single_page_nav_drawer_5_item",
-          "ws_wearable_drawer_view",
-          "ws_single_page_nav_drawer_3_item",
-          "ws_single_page_nav_drawer_peek_view",
-          "ws_action_drawer_title_view",
-          "ws_action_drawer_peek_view",
-          "ws_single_page_nav_drawer_1_item",
-          "ws_single_page_nav_drawer_6_item"
-        ]
-      },
-      "android/support/v4/content/pm/ActivityInfoCompat": {
-        "androidx/content/pm/ActivityInfoCompat": [
-          "CONFIG_UI_MODE"
-        ]
-      },
-      "android/support/v7/mediarouter/R$layout": {
-        "androidx/mediarouter/R$layout": [
-          "mr_chooser_dialog",
-          "mr_controller_material_dialog_b",
-          "mr_chooser_list_item",
-          "mr_controller_volume_item"
-        ]
-      },
-      "android/support/v7/app/AppCompatDelegateImplV9$PanelFeatureState": {
-        "androidx/app/AppCompatDelegateImplV9$PanelFeatureState": [
-          "x",
-          "y",
-          "frozenActionViewState",
-          "refreshDecorView",
-          "createdPanelView",
-          "frozenMenuState",
-          "qwertyMode",
-          "featureId",
-          "listPresenterContext",
-          "listMenuPresenter",
-          "decorView",
-          "isPrepared",
-          "wasLastOpen",
-          "isOpen",
-          "gravity",
-          "background",
-          "isHandled",
-          "windowAnimations",
-          "refreshMenuContent",
-          "shownPanelView",
-          "menu"
-        ]
-      },
-      "android/support/v4/graphics/TypefaceCompatBaseImpl": {
-        "androidx/graphics/TypefaceCompatBaseImpl": [
-          "TAG",
-          "CACHE_FILE_PREFIX"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$PreviewProgramColumns": {
-        "androidx/media/tv/TvContractCompat$PreviewProgramColumns": [
-          "COLUMN_DURATION_MILLIS",
-          "COLUMN_LIVE",
-          "COLUMN_OFFER_PRICE",
-          "AVAILABILITY_PURCHASED",
-          "COLUMN_INTERACTION_COUNT",
-          "INTERACTION_TYPE_FOLLOWERS",
-          "INTERACTION_TYPE_FANS",
-          "COLUMN_GENRE",
-          "INTERACTION_TYPE_LISTENS",
-          "AVAILABILITY_PAID_CONTENT",
-          "COLUMN_START_TIME_UTC_MILLIS",
-          "COLUMN_INTERACTION_TYPE",
-          "TYPE_MOVIE",
-          "TYPE_GAME",
-          "TYPE_ALBUM",
-          "TYPE_TRACK",
-          "COLUMN_POSTER_ART_ASPECT_RATIO",
-          "TYPE_EVENT",
-          "COLUMN_AVAILABILITY",
-          "COLUMN_BROWSABLE",
-          "COLUMN_INTENT_URI",
-          "COLUMN_LOGO_URI",
-          "TYPE_TV_SERIES",
-          "COLUMN_ITEM_COUNT",
-          "INTERACTION_TYPE_VIEWS",
-          "COLUMN_PREVIEW_AUDIO_URI",
-          "AVAILABILITY_FREE_WITH_SUBSCRIPTION",
-          "COLUMN_PREVIEW_VIDEO_URI",
-          "COLUMN_LAST_PLAYBACK_POSITION_MILLIS",
-          "COLUMN_END_TIME_UTC_MILLIS",
-          "ASPECT_RATIO_4_3",
-          "INTERACTION_TYPE_THUMBS",
-          "INTERACTION_TYPE_VIEWERS",
-          "COLUMN_TYPE",
-          "ASPECT_RATIO_3_2",
-          "COLUMN_AUTHOR",
-          "TYPE_TV_EPISODE",
-          "ASPECT_RATIO_1_1",
-          "ASPECT_RATIO_2_3",
-          "COLUMN_INTERNAL_PROVIDER_ID",
-          "ASPECT_RATIO_MOVIE_POSTER",
-          "TYPE_CHANNEL",
-          "COLUMN_LOGO_CONTENT_DESCRIPTION",
-          "AVAILABILITY_FREE",
-          "COLUMN_TRANSIENT",
-          "TYPE_STATION",
-          "INTERACTION_TYPE_LIKES",
-          "TYPE_TV_SEASON",
-          "AVAILABILITY_AVAILABLE",
-          "TYPE_PLAYLIST",
-          "ASPECT_RATIO_16_9",
-          "COLUMN_RELEASE_DATE",
-          "COLUMN_CONTENT_ID",
-          "TYPE_ARTIST",
-          "COLUMN_THUMBNAIL_ASPECT_RATIO",
-          "COLUMN_STARTING_PRICE",
-          "TYPE_CLIP"
-        ]
-      },
-      "android/support/wear/widget/BoxInsetLayout": {
-        "androidx/wear/widget/BoxInsetLayout": [
-          "FACTOR",
-          "DEFAULT_CHILD_GRAVITY"
-        ]
-      },
-      "android/support/v7/graphics/ColorCutQuantizer": {
-        "androidx/graphics/palette/ColorCutQuantizer": [
-          "LOG_TAG",
-          "COMPONENT_GREEN",
-          "VBOX_COMPARATOR_VOLUME",
-          "LOG_TIMINGS",
-          "COMPONENT_RED",
-          "COMPONENT_BLUE",
-          "QUANTIZE_WORD_WIDTH",
-          "QUANTIZE_WORD_MASK"
-        ]
-      },
-      "android/support/text/emoji/flatbuffer/Struct": {
-        "androidx/text/emoji/flatbuffer/Struct": [
-          "bb",
-          "bb_pos"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat": {
-        "androidx/media/session/MediaSessionCompat": [
-          "TAG",
-          "EXTRA_BINDER",
-          "ARGUMENT_MEDIA_ATTRIBUTE_VALUE",
-          "ACTION_PREPARE_FROM_MEDIA_ID",
-          "ACTION_FLAG_AS_INAPPROPRIATE",
-          "ACTION_SET_CAPTIONING_ENABLED",
-          "MEDIA_ATTRIBUTE_PLAYLIST",
-          "sMaxBitmapSize",
-          "MAX_BITMAP_SIZE_IN_DP",
-          "FLAG_HANDLES_MEDIA_BUTTONS",
-          "ACTION_ARGUMENT_CAPTIONING_ENABLED",
-          "ACTION_SET_SHUFFLE_MODE",
-          "ACTION_ARGUMENT_EXTRAS",
-          "ACTION_SKIP_AD",
-          "ACTION_ARGUMENT_REPEAT_MODE",
-          "FLAG_HANDLES_TRANSPORT_CONTROLS",
-          "ACTION_ARGUMENT_QUERY",
-          "ACTION_ARGUMENT_MEDIA_ID",
-          "ACTION_PREPARE_FROM_SEARCH",
-          "FLAG_HANDLES_QUEUE_COMMANDS",
-          "ACTION_UNFOLLOW",
-          "ACTION_ARGUMENT_RATING",
-          "ACTION_ARGUMENT_URI",
-          "ACTION_PLAY_FROM_URI",
-          "MEDIA_ATTRIBUTE_ALBUM",
-          "ACTION_SET_RATING",
-          "ACTION_SET_REPEAT_MODE",
-          "ACTION_ARGUMENT_SHUFFLE_MODE",
-          "ACTION_FOLLOW",
-          "ACTION_PREPARE_FROM_URI",
-          "ACTION_PREPARE",
-          "ARGUMENT_MEDIA_ATTRIBUTE",
-          "MEDIA_ATTRIBUTE_ARTIST"
-        ]
-      },
-      "android/support/v17/leanback/widget/GridLayoutManager": {
-        "androidx/leanback/widget/GridLayoutManager": [
-          "PREV_ROW",
-          "NEXT_ITEM",
-          "DEBUG",
-          "DEFAULT_MAX_PENDING_MOVES",
-          "TRACE",
-          "MIN_MS_SMOOTH_SCROLL_MAIN_SCREEN",
-          "sTempRect",
-          "NEXT_ROW",
-          "TAG",
-          "PREV_ITEM",
-          "sTwoInts"
-        ]
-      },
-      "android/support/v4/util/TimeUtils": {
-        "androidx/util/TimeUtils": [
-          "HUNDRED_DAY_FIELD_LEN",
-          "SECONDS_PER_MINUTE",
-          "sFormatSync",
-          "sFormatStr",
-          "SECONDS_PER_DAY",
-          "SECONDS_PER_HOUR"
-        ]
-      },
-      "android/support/v4/view/accessibility/AccessibilityWindowInfoCompat": {
-        "androidx/view/accessibility/AccessibilityWindowInfoCompat": [
-          "TYPE_APPLICATION",
-          "TYPE_SYSTEM",
-          "TYPE_ACCESSIBILITY_OVERLAY",
-          "TYPE_INPUT_METHOD",
-          "UNDEFINED",
-          "TYPE_SPLIT_SCREEN_DIVIDER"
-        ]
-      },
-      "android/support/v17/leanback/app/VerticalGridFragment": {
-        "androidx/leanback/app/VerticalGridFragment": [
-          "STATE_SET_ENTRANCE_START_STATE",
-          "EVT_ON_CREATEVIEW",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v4/app/FrameMetricsAggregator": {
-        "androidx/app/FrameMetricsAggregator": [
-          "COMMAND_INDEX",
-          "SWAP_DURATION",
-          "SYNC_INDEX",
-          "ANIMATION_INDEX",
-          "LAYOUT_MEASURE_DURATION",
-          "INPUT_INDEX",
-          "TOTAL_INDEX",
-          "LAST_INDEX",
-          "LAYOUT_MEASURE_INDEX",
-          "DELAY_DURATION",
-          "COMMAND_DURATION",
-          "DBG",
-          "INPUT_DURATION",
-          "SWAP_INDEX",
-          "SYNC_DURATION",
-          "TOTAL_DURATION",
-          "TAG",
-          "ANIMATION_DURATION",
-          "DRAW_DURATION",
-          "DRAW_INDEX",
-          "EVERY_DURATION",
-          "DELAY_INDEX"
-        ]
-      },
-      "android/support/design/widget/FloatingActionButtonImpl": {
-        "androidx/design/widget/FloatingActionButtonImpl": [
-          "PRESSED_ENABLED_STATE_SET",
-          "PRESSED_ANIM_DURATION",
-          "PRESSED_ANIM_DELAY",
-          "FOCUSED_ENABLED_STATE_SET",
-          "ANIM_STATE_NONE",
-          "EMPTY_STATE_SET",
-          "ANIM_INTERPOLATOR",
-          "ENABLED_STATE_SET",
-          "ANIM_STATE_SHOWING",
-          "SHOW_HIDE_ANIM_DURATION",
-          "ANIM_STATE_HIDING"
-        ]
-      },
-      "android/support/transition/R$id": {
-        "androidx/transition/R$id": [
-          "transition_transform",
-          "ghost_view",
-          "transition_scene_layoutid_cache",
-          "save_image_matrix",
-          "save_scale_type",
-          "transition_current_scene",
-          "transition_layout_save",
-          "parent_matrix",
-          "transition_position",
-          "save_non_transition_alpha"
-        ]
-      },
-      "android/support/v7/app/ResourcesFlusher": {
-        "androidx/app/ResourcesFlusher": [
-          "sDrawableCacheField",
-          "sThemedResourceCacheClazz",
-          "sResourcesImplFieldFetched",
-          "sDrawableCacheFieldFetched",
-          "TAG",
-          "sThemedResourceCacheClazzFetched",
-          "sResourcesImplField",
-          "sThemedResourceCache_mUnthemedEntriesFieldFetched",
-          "sThemedResourceCache_mUnthemedEntriesField"
-        ]
-      },
-      "android/support/v4/app/RemoteInput": {
-        "androidx/app/RemoteInput": [
-          "EXTRA_RESULTS_DATA",
-          "TAG",
-          "RESULTS_CLIP_LABEL",
-          "EXTRA_DATA_TYPE_RESULTS_DATA"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$Programs$Genres": {
-        "androidx/media/tv/TvContractCompat$Programs$Genres": [
-          "EDUCATION",
-          "DELIMITER",
-          "LIFE_STYLE",
-          "SPORTS",
-          "GAMING",
-          "TECH_SCIENCE",
-          "DOUBLE_QUOTE",
-          "TRAVEL",
-          "CANONICAL_GENRES",
-          "MOVIES",
-          "FAMILY_KIDS",
-          "NEWS",
-          "ENTERTAINMENT",
-          "PREMIER",
-          "ARTS",
-          "EMPTY_STRING_ARRAY",
-          "DRAMA",
-          "MUSIC",
-          "COMMA",
-          "COMEDY",
-          "SHOPPING",
-          "ANIMAL_WILDLIFE"
-        ]
-      },
-      "android/support/v4/view/GravityCompat": {
-        "androidx/view/GravityCompat": [
-          "START",
-          "END",
-          "RELATIVE_LAYOUT_DIRECTION",
-          "RELATIVE_HORIZONTAL_GRAVITY_MASK"
-        ]
-      },
-      "android/support/design/R$color": {
-        "androidx/design/R$color": [
-          "design_fab_shadow_start_color",
-          "design_bottom_navigation_shadow_color",
-          "design_fab_stroke_end_outer_color",
-          "design_fab_shadow_mid_color",
-          "design_fab_stroke_end_inner_color",
-          "design_fab_shadow_end_color",
-          "design_fab_stroke_top_inner_color",
-          "design_fab_stroke_top_outer_color"
-        ]
-      },
-      "android/support/v4/view/LayoutInflaterCompat": {
-        "androidx/view/LayoutInflaterCompat": [
-          "sLayoutInflaterFactory2Field",
-          "TAG",
-          "sCheckedField",
-          "IMPL"
-        ]
-      },
-      "android/support/v13/view/inputmethod/EditorInfoCompat": {
-        "androidx/view/inputmethod/EditorInfoCompat": [
-          "IMPL",
-          "IME_FLAG_NO_PERSONALIZED_LEARNING",
-          "EMPTY_STRING_ARRAY",
-          "IME_FLAG_FORCE_ASCII"
-        ]
-      },
-      "android/support/v17/leanback/app/OnboardingSupportFragment": {
-        "androidx/leanback/app/OnboardingSupportFragment": [
-          "KEY_ENTER_ANIMATION_FINISHED",
-          "KEY_CURRENT_PAGE_INDEX",
-          "DEBUG",
-          "HEADER_DISAPPEAR_INTERPOLATOR",
-          "sSlideDistance",
-          "LOGO_SPLASH_PAUSE_DURATION_MS",
-          "HEADER_APPEAR_DELAY_MS",
-          "HEADER_ANIMATION_DURATION_MS",
-          "TAG",
-          "HEADER_APPEAR_INTERPOLATOR",
-          "DESCRIPTION_START_DELAY_MS",
-          "SLIDE_DISTANCE",
-          "KEY_LOGO_ANIMATION_FINISHED"
-        ]
-      },
-      "android/support/v4/app/BackStackRecord": {
-        "androidx/app/BackStackRecord": [
-          "TAG",
-          "OP_SET_PRIMARY_NAV",
-          "OP_DETACH",
-          "OP_NULL",
-          "OP_UNSET_PRIMARY_NAV",
-          "OP_REMOVE",
-          "OP_HIDE",
-          "OP_SHOW",
-          "OP_ADD",
-          "OP_REPLACE",
-          "OP_ATTACH"
-        ]
-      },
-      "android/support/v7/util/DiffUtil$DiffResult": {
-        "androidx/util/DiffUtil$DiffResult": [
-          "FLAG_MOVED_CHANGED",
-          "FLAG_IGNORE",
-          "FLAG_MASK",
-          "FLAG_OFFSET",
-          "FLAG_MOVED_NOT_CHANGED",
-          "FLAG_CHANGED",
-          "FLAG_NOT_CHANGED"
-        ]
-      },
-      "android/support/wear/widget/drawer/WearableDrawerView": {
-        "androidx/wear/widget/drawer/WearableDrawerView": [
-          "STATE_DRAGGING",
-          "STATE_SETTLING",
-          "STATE_IDLE"
-        ]
-      },
-      "android/support/wear/R$string": {
-        "androidx/wear/R$string": [
-          "ws_action_drawer_content_description",
-          "ws_navigation_drawer_content_description"
-        ]
-      },
-      "android/support/design/widget/SwipeDismissBehavior": {
-        "androidx/design/widget/SwipeDismissBehavior": [
-          "DEFAULT_ALPHA_START_DISTANCE",
-          "STATE_IDLE",
-          "STATE_DRAGGING",
-          "SWIPE_DIRECTION_START_TO_END",
-          "DEFAULT_ALPHA_END_DISTANCE",
-          "DEFAULT_DRAG_DISMISS_THRESHOLD",
-          "SWIPE_DIRECTION_ANY",
-          "STATE_SETTLING",
-          "SWIPE_DIRECTION_END_TO_START"
-        ]
-      },
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewSharedElementHelper": {
-        "androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper": [
-          "DEFAULT_TIMEOUT",
-          "TAG",
-          "DEBUG"
-        ]
-      },
-      "android/support/transition/Styleable$TransitionTarget": {
-        "androidx/transition/Styleable$TransitionTarget": [
-          "EXCLUDE_CLASS",
-          "EXCLUDE_ID",
-          "TARGET_CLASS",
-          "EXCLUDE_NAME",
-          "TARGET_ID",
-          "TARGET_NAME"
-        ]
-      },
-      "android/support/v4/media/MediaDescriptionCompat": {
-        "androidx/media/MediaDescriptionCompat": [
-          "BT_FOLDER_TYPE_MIXED",
-          "CREATOR",
-          "STATUS_DOWNLOADED",
-          "STATUS_NOT_DOWNLOADED",
-          "EXTRA_BT_FOLDER_TYPE",
-          "BT_FOLDER_TYPE_GENRES",
-          "EXTRA_DOWNLOAD_STATUS",
-          "DESCRIPTION_KEY_MEDIA_URI",
-          "BT_FOLDER_TYPE_ARTISTS",
-          "DESCRIPTION_KEY_NULL_BUNDLE_FLAG",
-          "BT_FOLDER_TYPE_TITLES",
-          "STATUS_DOWNLOADING",
-          "BT_FOLDER_TYPE_YEARS",
-          "BT_FOLDER_TYPE_PLAYLISTS",
-          "BT_FOLDER_TYPE_ALBUMS"
-        ]
-      },
-      "android/support/v4/graphics/ColorUtils": {
-        "androidx/graphics/ColorUtils": [
-          "MIN_ALPHA_SEARCH_MAX_ITERATIONS",
-          "XYZ_KAPPA",
-          "MIN_ALPHA_SEARCH_PRECISION",
-          "TEMP_ARRAY",
-          "XYZ_WHITE_REFERENCE_Z",
-          "XYZ_WHITE_REFERENCE_Y",
-          "XYZ_WHITE_REFERENCE_X",
-          "XYZ_EPSILON"
-        ]
-      },
-      "android/support/v7/widget/AppCompatTextViewAutoSizeHelper": {
-        "androidx/widget/AppCompatTextViewAutoSizeHelper": [
-          "TAG",
-          "DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX",
-          "UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE",
-          "DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP",
-          "VERY_WIDE",
-          "sTextViewMethodByNameCache",
-          "DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP",
-          "TEMP_RECTF"
-        ]
-      },
-      "android/support/design/R$style": {
-        "androidx/design/R$style": [
-          "Widget_Design_ScrimInsetsFrameLayout",
-          "Widget_Design_TextInputLayout",
-          "Widget_Design_TabLayout",
-          "Widget_Design_CollapsingToolbar",
-          "Widget_Design_NavigationView",
-          "TextAppearance_Design_Tab",
-          "Widget_Design_CoordinatorLayout",
-          "Theme_Design_Light_BottomSheetDialog",
-          "Widget_Design_FloatingActionButton",
-          "Widget_Design_AppBarLayout",
-          "Widget_Design_BottomNavigationView",
-          "TextAppearance_Design_CollapsingToolbar_Expanded"
-        ]
-      },
-      "android/support/v7/widget/GridLayoutManager": {
-        "androidx/widget/GridLayoutManager": [
-          "TAG",
-          "DEFAULT_SPAN_COUNT",
-          "DEBUG"
-        ]
-      },
-      "android/support/v7/appcompat/R$dimen": {
-        "androidx/appcompat/R$dimen": [
-          "tooltip_precise_anchor_extra_offset",
-          "abc_dropdownitem_icon_width",
-          "tooltip_precise_anchor_threshold",
-          "tooltip_y_offset_non_touch",
-          "abc_config_prefDialogWidth",
-          "abc_dropdownitem_text_padding_left",
-          "abc_action_bar_stacked_max_height",
-          "abc_search_view_preferred_height",
-          "abc_cascading_menus_min_smallest_width",
-          "abc_action_bar_stacked_tab_max_width",
-          "tooltip_y_offset_touch",
-          "abc_search_view_preferred_width"
-        ]
-      },
-      "android/support/wear/internal/widget/drawer/SinglePageUi": {
-        "androidx/wear/internal/widget/drawer/SinglePageUi": [
-          "SINGLE_PAGE_LAYOUT_RES",
-          "SINGLE_PAGE_BUTTON_IDS"
-        ]
-      },
-      "android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat": {
-        "androidx/accessibilityservice/AccessibilityServiceInfoCompat": [
-          "FLAG_REQUEST_TOUCH_EXPLORATION_MODE",
-          "CAPABILITY_CAN_FILTER_KEY_EVENTS",
-          "FLAG_INCLUDE_NOT_IMPORTANT_VIEWS",
-          "CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY",
-          "CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT",
-          "FEEDBACK_BRAILLE",
-          "FEEDBACK_ALL_MASK",
-          "FLAG_REPORT_VIEW_IDS",
-          "CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION",
-          "FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY",
-          "FLAG_REQUEST_FILTER_KEY_EVENTS"
-        ]
-      },
-      "android/support/graphics/drawable/AnimatorInflaterCompat": {
-        "androidx/graphics/drawable/AnimatorInflaterCompat": [
-          "MAX_NUM_POINTS",
-          "VALUE_TYPE_INT",
-          "VALUE_TYPE_FLOAT",
-          "VALUE_TYPE_COLOR",
-          "TAG",
-          "DBG_ANIMATOR_INFLATER",
-          "VALUE_TYPE_PATH",
-          "TOGETHER",
-          "VALUE_TYPE_UNDEFINED"
-        ]
-      },
-      "android/support/wear/R$id": {
-        "androidx/wear/R$id": [
-          "ws_navigation_drawer_item_icon",
-          "ws_drawer_view_peek_container",
-          "ws_navigation_drawer_item_text",
-          "ws_action_drawer_item_text",
-          "ws_drawer_view_peek_icon",
-          "ws_nav_drawer_icon_4",
-          "ws_nav_drawer_icon_5",
-          "ws_nav_drawer_icon_6",
-          "ws_nav_drawer_icon_0",
-          "ws_nav_drawer_icon_1",
-          "ws_nav_drawer_icon_2",
-          "ws_nav_drawer_icon_3",
-          "ws_navigation_drawer_page_indicator",
-          "ws_navigation_drawer_view_pager",
-          "ws_nav_drawer_text",
-          "ws_action_drawer_expand_icon",
-          "ws_action_drawer_item_icon",
-          "ws_action_drawer_title",
-          "ws_action_drawer_peek_action_icon"
-        ]
-      },
-      "android/support/v4/view/animation/LinearOutSlowInInterpolator": {
-        "androidx/view/animation/LinearOutSlowInInterpolator": [
-          "VALUES"
-        ]
-      },
-      "android/support/v4/graphics/TypefaceCompatApi24Impl": {
-        "androidx/graphics/TypefaceCompatApi24Impl": [
-          "FONT_FAMILY_CLASS",
-          "sFontFamily",
-          "TAG",
-          "sAddFontWeightStyle",
-          "sFontFamilyCtor",
-          "sCreateFromFamiliesWithDefault",
-          "ADD_FONT_WEIGHT_STYLE_METHOD",
-          "CREATE_FROM_FAMILIES_WITH_DEFAULT_METHOD"
-        ]
-      },
-      "android/support/v7/widget/AdapterHelper": {
-        "androidx/widget/AdapterHelper": [
-          "TAG",
-          "POSITION_TYPE_NEW_OR_LAID_OUT",
-          "DEBUG",
-          "POSITION_TYPE_INVISIBLE"
-        ]
-      },
-      "android/support/v4/media/session/ParcelableVolumeInfo": {
-        "androidx/media/session/ParcelableVolumeInfo": [
-          "audioStream",
-          "currentVolume",
-          "maxVolume",
-          "volumeType",
-          "CREATOR",
-          "controlType"
-        ]
-      },
-      "android/support/text/emoji/EmojiCompat": {
-        "androidx/text/emoji/EmojiCompat": [
-          "EDITOR_INFO_REPLACE_ALL_KEY",
-          "sInstanceLock",
-          "EMOJI_COUNT_UNLIMITED",
-          "LOAD_STATE_SUCCEEDED",
-          "EDITOR_INFO_METAVERSION_KEY",
-          "sInstance",
-          "REPLACE_STRATEGY_ALL",
-          "LOAD_STATE_FAILED",
-          "REPLACE_STRATEGY_NON_EXISTENT",
-          "LOAD_STATE_LOADING",
-          "REPLACE_STRATEGY_DEFAULT"
-        ]
-      },
-      "android/support/v7/graphics/Target": {
-        "androidx/graphics/palette/Target": [
-          "TARGET_MUTED_SATURATION",
-          "MUTED",
-          "MIN_NORMAL_LUMA",
-          "MAX_DARK_LUMA",
-          "VIBRANT",
-          "TARGET_LIGHT_LUMA",
-          "TARGET_NORMAL_LUMA",
-          "MAX_NORMAL_LUMA",
-          "WEIGHT_LUMA",
-          "INDEX_WEIGHT_LUMA",
-          "TARGET_VIBRANT_SATURATION",
-          "DARK_MUTED",
-          "DARK_VIBRANT",
-          "INDEX_MAX",
-          "INDEX_MIN",
-          "MAX_MUTED_SATURATION",
-          "MIN_LIGHT_LUMA",
-          "LIGHT_VIBRANT",
-          "LIGHT_MUTED",
-          "INDEX_TARGET",
-          "INDEX_WEIGHT_POP",
-          "TARGET_DARK_LUMA",
-          "WEIGHT_POPULATION",
-          "INDEX_WEIGHT_SAT",
-          "WEIGHT_SATURATION",
-          "MIN_VIBRANT_SATURATION"
-        ]
-      },
-      "android/support/v17/leanback/media/PlaybackControlGlue": {
-        "androidx/leanback/media/PlaybackControlGlue": [
-          "MSG_UPDATE_PLAYBACK_STATE",
-          "PLAYBACK_SPEED_INVALID",
-          "ACTION_REWIND",
-          "sHandler",
-          "ACTION_FAST_FORWARD",
-          "PLAYBACK_SPEED_FAST_L2",
-          "PLAYBACK_SPEED_FAST_L3",
-          "PLAYBACK_SPEED_FAST_L4",
-          "PLAYBACK_SPEED_FAST_L0",
-          "PLAYBACK_SPEED_FAST_L1",
-          "DEBUG",
-          "PLAYBACK_SPEED_PAUSED",
-          "UPDATE_PLAYBACK_STATE_DELAY_MS",
-          "PLAYBACK_SPEED_NORMAL",
-          "TAG",
-          "ACTION_SKIP_TO_NEXT",
-          "ACTION_SKIP_TO_PREVIOUS",
-          "ACTION_CUSTOM_LEFT_FIRST",
-          "ACTION_PLAY_PAUSE",
-          "NUMBER_OF_SEEK_SPEEDS",
-          "ACTION_CUSTOM_RIGHT_FIRST"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$LayoutParams": {
-        "androidx/widget/GridLayout$LayoutParams": [
-          "bottomMargin",
-          "DEFAULT_SPAN",
-          "COLUMN_WEIGHT",
-          "leftMargin",
-          "GRAVITY",
-          "ROW_SPAN",
-          "ROW",
-          "COLUMN",
-          "topMargin",
-          "RIGHT_MARGIN",
-          "height",
-          "COLUMN_SPAN",
-          "rightMargin",
-          "width",
-          "ROW_WEIGHT",
-          "BOTTOM_MARGIN",
-          "DEFAULT_SPAN_SIZE",
-          "columnSpec",
-          "DEFAULT_ROW",
-          "DEFAULT_WIDTH",
-          "MARGIN",
-          "rowSpec",
-          "TOP_MARGIN",
-          "DEFAULT_HEIGHT",
-          "LEFT_MARGIN",
-          "DEFAULT_COLUMN",
-          "DEFAULT_MARGIN"
-        ]
-      },
-      "android/support/v17/leanback/app/DetailsSupportFragment": {
-        "androidx/leanback/app/DetailsSupportFragment": [
-          "EVT_ONSTART",
-          "STATE_ENTER_TRANSITION_CANCEL",
-          "DEBUG",
-          "STATE_SWITCH_TO_VIDEO_IN_ON_CREATE",
-          "STATE_ENTRANCE_COMPLETE",
-          "STATE_ENTER_TRANSITION_COMPLETE",
-          "STATE_ENTER_TRANSITION_ADDLISTENER",
-          "STATE_ENTRANCE_INIT",
-          "EVT_SWITCH_TO_VIDEO",
-          "STATE_START",
-          "STATE_ON_SAFE_START",
-          "STATE_ENTRANCE_PERFORM",
-          "EVT_ON_CREATEVIEW",
-          "STATE_SET_ENTRANCE_START_STATE",
-          "COND_TRANSITION_NOT_SUPPORTED",
-          "TAG",
-          "STATE_ENTER_TRANSITION_PENDING",
-          "EVT_ENTER_TRANSIITON_DONE",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "EVT_ON_CREATE",
-          "EVT_DETAILS_ROW_LOADED",
-          "STATE_ENTER_TRANSITION_INIT",
-          "EVT_NO_ENTER_TRANSITION"
-        ]
-      },
-      "android/support/v17/leanback/app/ListRowDataAdapter": {
-        "androidx/leanback/app/ListRowDataAdapter": [
-          "ON_ITEM_RANGE_INSERTED",
-          "ON_ITEM_RANGE_CHANGED",
-          "ON_ITEM_RANGE_REMOVED",
-          "ON_CHANGED"
-        ]
-      },
-      "android/support/percent/PercentLayoutHelper$PercentLayoutInfo": {
-        "androidx/PercentLayoutHelper$PercentLayoutInfo": [
-          "topMarginPercent",
-          "endMarginPercent",
-          "aspectRatio",
-          "rightMarginPercent",
-          "heightPercent",
-          "leftMarginPercent",
-          "startMarginPercent",
-          "bottomMarginPercent",
-          "widthPercent"
-        ]
-      },
-      "android/support/v17/leanback/system/Settings": {
-        "androidx/leanback/system/Settings": [
-          "OUTLINE_CLIPPING_DISABLED",
-          "PREFER_STATIC_SHADOWS",
-          "DEBUG",
-          "sInstance",
-          "ACTION_PARTNER_CUSTOMIZATION",
-          "TAG"
-        ]
-      },
-      "android/support/v4/util/SimpleArrayMap": {
-        "androidx/util/SimpleArrayMap": [
-          "BASE_SIZE",
-          "CONCURRENT_MODIFICATION_EXCEPTIONS",
-          "DEBUG",
-          "TAG",
-          "CACHE_SIZE"
-        ]
-      },
-      "android/support/v4/widget/AutoScrollHelper": {
-        "androidx/widget/AutoScrollHelper": [
-          "EDGE_TYPE_OUTSIDE",
-          "NO_MIN",
-          "NO_MAX",
-          "HORIZONTAL",
-          "EDGE_TYPE_INSIDE_EXTEND",
-          "DEFAULT_MAXIMUM_EDGE",
-          "VERTICAL",
-          "EDGE_TYPE_INSIDE",
-          "RELATIVE_UNSPECIFIED",
-          "DEFAULT_MAXIMUM_VELOCITY_DIPS",
-          "DEFAULT_RAMP_DOWN_DURATION",
-          "DEFAULT_RELATIVE_VELOCITY",
-          "DEFAULT_ACTIVATION_DELAY",
-          "DEFAULT_MINIMUM_VELOCITY_DIPS",
-          "DEFAULT_RAMP_UP_DURATION",
-          "DEFAULT_EDGE_TYPE",
-          "DEFAULT_RELATIVE_EDGE"
-        ]
-      },
-      "android/support/v7/widget/ViewInfoStore$InfoRecord": {
-        "androidx/widget/ViewInfoStore$InfoRecord": [
-          "FLAG_PRE",
-          "postInfo",
-          "FLAG_APPEAR_AND_DISAPPEAR",
-          "FLAG_PRE_AND_POST",
-          "FLAG_DISAPPEARED",
-          "preInfo",
-          "flags",
-          "FLAG_APPEAR",
-          "FLAG_APPEAR_PRE_AND_POST",
-          "FLAG_POST",
-          "sPool"
-        ]
-      },
-      "android/support/design/widget/AnimationUtils": {
-        "androidx/design/widget/AnimationUtils": [
-          "LINEAR_OUT_SLOW_IN_INTERPOLATOR",
-          "LINEAR_INTERPOLATOR",
-          "FAST_OUT_LINEAR_IN_INTERPOLATOR",
-          "FAST_OUT_SLOW_IN_INTERPOLATOR",
-          "DECELERATE_INTERPOLATOR"
-        ]
-      },
-      "android/support/design/widget/SnackbarManager$SnackbarRecord": {
-        "androidx/design/widget/SnackbarManager$SnackbarRecord": [
-          "duration",
-          "callback",
-          "paused"
-        ]
-      },
-      "android/support/transition/ChangeScroll": {
-        "androidx/transition/ChangeScroll": [
-          "PROPNAME_SCROLL_X",
-          "PROPNAME_SCROLL_Y",
-          "PROPERTIES"
-        ]
-      },
-      "android/support/design/widget/FloatingActionButtonLollipop": {
-        "androidx/design/widget/FloatingActionButtonLollipop": [
-          "EMPTY_STATE_SET",
-          "ENABLED_STATE_SET",
-          "PRESSED_ENABLED_STATE_SET",
-          "ANIM_INTERPOLATOR",
-          "FOCUSED_ENABLED_STATE_SET"
-        ]
-      },
-      "android/support/v4/graphics/TypefaceCompat": {
-        "androidx/graphics/TypefaceCompat": [
-          "sTypefaceCompatImpl",
-          "TAG",
-          "sTypefaceCache"
-        ]
-      },
-      "android/support/v7/widget/LinearSmoothScroller": {
-        "androidx/widget/LinearSmoothScroller": [
-          "MILLISECONDS_PER_PX",
-          "SNAP_TO_ANY",
-          "SNAP_TO_END",
-          "DEBUG",
-          "TAG",
-          "MILLISECONDS_PER_INCH",
-          "TARGET_SEEK_SCROLL_DISTANCE_PX",
-          "TARGET_SEEK_EXTRA_SCROLL_RATIO",
-          "SNAP_TO_START"
-        ]
-      },
-      "android/support/transition/Styleable$ChangeTransform": {
-        "androidx/transition/Styleable$ChangeTransform": [
-          "REPARENT_WITH_OVERLAY",
-          "REPARENT"
-        ]
-      },
-      "android/support/animation/DynamicAnimation": {
-        "androidx/animation/DynamicAnimation": [
-          "MIN_VISIBLE_CHANGE_ALPHA",
-          "MIN_VISIBLE_CHANGE_ROTATION_DEGREES",
-          "UNSET",
-          "ROTATION_Y",
-          "ROTATION_X",
-          "ALPHA",
-          "Z",
-          "X",
-          "Y",
-          "SCROLL_Y",
-          "SCROLL_X",
-          "TRANSLATION_Z",
-          "TRANSLATION_X",
-          "TRANSLATION_Y",
-          "THRESHOLD_MULTIPLIER",
-          "ROTATION",
-          "MIN_VISIBLE_CHANGE_SCALE",
-          "SCALE_Y",
-          "SCALE_X",
-          "MIN_VISIBLE_CHANGE_PIXELS"
-        ]
-      },
-      "android/support/constraint/solver/widgets/ConstraintWidget$DimensionBehaviour": {
-        "androidx/constraint/solver/widgets/ConstraintWidget$DimensionBehaviour": [
-          "FIXED",
-          "MATCH_PARENT",
-          "WRAP_CONTENT",
-          "MATCH_CONSTRAINT"
-        ]
-      },
-      "android/support/v17/leanback/media/PlaybackBannerControlGlue": {
-        "androidx/leanback/media/PlaybackBannerControlGlue": [
-          "PLAYBACK_SPEED_PAUSED",
-          "ACTION_SKIP_TO_PREVIOUS",
-          "ACTION_SKIP_TO_NEXT",
-          "ACTION_CUSTOM_LEFT_FIRST",
-          "TAG",
-          "ACTION_PLAY_PAUSE",
-          "PLAYBACK_SPEED_NORMAL",
-          "ACTION_CUSTOM_RIGHT_FIRST",
-          "NUMBER_OF_SEEK_SPEEDS",
-          "ACTION_REWIND",
-          "PLAYBACK_SPEED_INVALID",
-          "PLAYBACK_SPEED_FAST_L1",
-          "PLAYBACK_SPEED_FAST_L0",
-          "PLAYBACK_SPEED_FAST_L4",
-          "PLAYBACK_SPEED_FAST_L3",
-          "PLAYBACK_SPEED_FAST_L2",
-          "ACTION_FAST_FORWARD"
-        ]
-      },
-      "android/support/transition/ChangeTransform": {
-        "androidx/transition/ChangeTransform": [
-          "PROPNAME_PARENT",
-          "TRANSLATIONS_PROPERTY",
-          "PROPNAME_INTERMEDIATE_PARENT_MATRIX",
-          "PROPNAME_TRANSFORMS",
-          "PROPNAME_INTERMEDIATE_MATRIX",
-          "sTransitionProperties",
-          "PROPNAME_MATRIX",
-          "PROPNAME_PARENT_MATRIX",
-          "NON_TRANSLATIONS_PROPERTY",
-          "SUPPORTS_VIEW_REMOVAL_SUPPRESSION"
-        ]
-      },
-      "android/support/v17/leanback/R$fraction": {
-        "androidx/leanback/R$fraction": [
-          "lb_focus_zoom_factor_xsmall",
-          "lb_focus_zoom_factor_medium",
-          "lb_browse_rows_scale",
-          "lb_search_orb_focused_zoom",
-          "lb_view_active_level",
-          "lb_focus_zoom_factor_large",
-          "lb_focus_zoom_factor_small",
-          "lb_browse_header_unselect_alpha",
-          "lb_view_dimmed_level",
-          "lb_search_bar_speech_orb_max_level_zoom"
-        ]
-      },
-      "android/support/v7/widget/LinearLayoutCompat$LayoutParams": {
-        "androidx/widget/LinearLayoutCompat$LayoutParams": [
-          "height",
-          "gravity",
-          "rightMargin",
-          "width",
-          "bottomMargin",
-          "leftMargin",
-          "topMargin",
-          "weight"
-        ]
-      },
-      "android/support/v7/preference/PreferenceViewHolder": {
-        "androidx/preference/PreferenceViewHolder": [
-          "itemView"
-        ]
-      },
-      "android/support/v7/util/MessageThreadUtil$SyncQueueItem": {
-        "androidx/util/MessageThreadUtil$SyncQueueItem": [
-          "sPoolLock",
-          "what",
-          "sPool",
-          "arg2",
-          "arg1",
-          "arg4",
-          "arg3",
-          "arg5",
-          "next",
-          "data"
-        ]
-      },
-      "android/support/v14/preference/PreferenceFragment": {
-        "androidx/preference/PreferenceFragment": [
-          "PREFERENCES_TAG",
-          "DIALOG_FRAGMENT_TAG",
-          "ARG_PREFERENCE_ROOT",
-          "MSG_BIND_PREFERENCES"
-        ]
-      },
-      "android/support/v7/gridlayout/R$styleable": {
-        "androidx/gridlayout/R$styleable": [
-          "GridLayout_Layout_android_layout_margin",
-          "GridLayout_Layout_layout_gravity",
-          "GridLayout_Layout_layout_column",
-          "GridLayout_Layout_layout_columnSpan",
-          "GridLayout_Layout_layout_row",
-          "GridLayout_Layout_layout_columnWeight",
-          "GridLayout_Layout_layout_rowWeight",
-          "GridLayout_Layout",
-          "GridLayout_Layout_android_layout_marginBottom",
-          "GridLayout_rowCount",
-          "GridLayout_columnCount",
-          "GridLayout_Layout_android_layout_marginRight",
-          "GridLayout",
-          "GridLayout_useDefaultMargins",
-          "GridLayout_rowOrderPreserved",
-          "GridLayout_columnOrderPreserved",
-          "GridLayout_Layout_android_layout_marginLeft",
-          "GridLayout_alignmentMode",
-          "GridLayout_Layout_layout_rowSpan",
-          "GridLayout_orientation",
-          "GridLayout_Layout_android_layout_marginTop"
-        ]
-      },
-      "android/support/v17/leanback/app/BackgroundManager": {
-        "androidx/leanback/app/BackgroundManager": [
-          "FULL_ALPHA",
-          "DEBUG",
-          "FRAGMENT_TAG",
-          "FADE_DURATION",
-          "CHANGE_BG_DELAY_MS",
-          "TAG"
-        ]
-      },
-      "android/support/customtabs/ICustomTabsService$Stub": {
-        "androidx/browser/customtabs/ICustomTabsService$Stub": [
-          "TRANSACTION_extraCommand",
-          "TRANSACTION_requestPostMessageChannel",
-          "TRANSACTION_postMessage",
-          "TRANSACTION_validateRelationship",
-          "TRANSACTION_warmup",
-          "TRANSACTION_updateVisuals",
-          "TRANSACTION_mayLaunchUrl",
-          "TRANSACTION_newSession",
-          "DESCRIPTOR"
-        ]
-      },
-      "android/support/v7/widget/Toolbar$SavedState": {
-        "androidx/widget/Toolbar$SavedState": [
-          "isOverflowOpen",
-          "expandedMenuItemId",
-          "CREATOR"
-        ]
-      },
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter": {
-        "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter": [
-          "ALIGN_MODE_START",
-          "sTmpRect",
-          "STATE_HALF",
-          "TAG",
-          "STATE_SMALL",
-          "sHandler",
-          "ALIGN_MODE_MIDDLE",
-          "STATE_FULL",
-          "DEBUG"
-        ]
-      },
-      "android/support/v4/app/FragmentTabHost$SavedState": {
-        "androidx/app/FragmentTabHost$SavedState": [
-          "CREATOR",
-          "curTab"
-        ]
-      },
-      "android/support/v4/app/ActivityOptionsCompat": {
-        "androidx/app/ActivityOptionsCompat": [
-          "EXTRA_USAGE_TIME_REPORT",
-          "EXTRA_USAGE_TIME_REPORT_PACKAGES"
-        ]
-      },
-      "android/support/v4/widget/NestedScrollView": {
-        "androidx/widget/NestedScrollView": [
-          "MAX_SCROLL_FACTOR",
-          "SCROLLVIEW_STYLEABLE",
-          "TAG",
-          "ANIMATED_SCROLL_GAP",
-          "INVALID_POINTER",
-          "ACCESSIBILITY_DELEGATE"
-        ]
-      },
-      "android/support/v4/app/BackStackRecord$Op": {
-        "androidx/app/BackStackRecord$Op": [
-          "enterAnim",
-          "fragment",
-          "popEnterAnim",
-          "exitAnim",
-          "popExitAnim",
-          "cmd"
-        ]
-      },
-      "android/support/v17/leanback/graphics/BoundsRule": {
-        "androidx/leanback/graphics/BoundsRule": [
-          "bottom",
-          "right",
-          "left",
-          "top"
-        ]
-      },
-      "android/support/v17/leanback/app/SearchSupportFragment": {
-        "androidx/leanback/app/SearchSupportFragment": [
-          "SPEECH_RECOGNITION_DELAY_MS",
-          "TAG",
-          "AUDIO_PERMISSION_REQUEST_CODE",
-          "ARG_QUERY",
-          "RESULTS_CHANGED",
-          "ARG_TITLE",
-          "EXTRA_LEANBACK_BADGE_PRESENT",
-          "ARG_PREFIX",
-          "QUERY_COMPLETE",
-          "DEBUG"
-        ]
-      },
-      "android/support/v7/util/SortedList": {
-        "androidx/util/SortedList": [
-          "INSERTION",
-          "DELETION",
-          "MIN_CAPACITY",
-          "INVALID_POSITION",
-          "CAPACITY_GROWTH",
-          "LOOKUP"
-        ]
-      },
-      "android/support/v4/view/ViewCompat": {
-        "androidx/view/legacy/ViewCompat": [
-          "IMPL",
-          "SCROLL_AXIS_VERTICAL",
-          "SCROLL_INDICATOR_END",
-          "MEASURED_HEIGHT_STATE_SHIFT",
-          "OVER_SCROLL_ALWAYS",
-          "SCROLL_INDICATOR_RIGHT",
-          "IMPORTANT_FOR_ACCESSIBILITY_AUTO",
-          "SCROLL_INDICATOR_START",
-          "LAYOUT_DIRECTION_LOCALE",
-          "ACCESSIBILITY_LIVE_REGION_ASSERTIVE",
-          "IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS",
-          "SCROLL_INDICATOR_TOP",
-          "MEASURED_STATE_MASK",
-          "SCROLL_INDICATOR_BOTTOM",
-          "LAYOUT_DIRECTION_LTR",
-          "OVER_SCROLL_IF_CONTENT_SCROLLS",
-          "SCROLL_AXIS_NONE",
-          "OVER_SCROLL_NEVER",
-          "ACCESSIBILITY_LIVE_REGION_POLITE",
-          "TYPE_TOUCH",
-          "MEASURED_STATE_TOO_SMALL",
-          "ACCESSIBILITY_LIVE_REGION_NONE",
-          "LAYOUT_DIRECTION_INHERIT",
-          "IMPORTANT_FOR_ACCESSIBILITY_NO",
-          "LAYER_TYPE_NONE",
-          "MEASURED_SIZE_MASK",
-          "SCROLL_INDICATOR_LEFT",
-          "TAG",
-          "SCROLL_AXIS_HORIZONTAL",
-          "TYPE_NON_TOUCH",
-          "LAYER_TYPE_HARDWARE",
-          "LAYER_TYPE_SOFTWARE",
-          "IMPORTANT_FOR_ACCESSIBILITY_YES",
-          "LAYOUT_DIRECTION_RTL"
-        ]
-      },
-      "android/support/v7/media/MediaRouter": {
-        "androidx/media/MediaRouter": [
-          "AVAILABILITY_FLAG_REQUIRE_MATCH",
-          "CALLBACK_FLAG_PERFORM_ACTIVE_SCAN",
-          "CALLBACK_FLAG_FORCE_DISCOVERY",
-          "UNSELECT_REASON_DISCONNECTED",
-          "AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE",
-          "UNSELECT_REASON_ROUTE_CHANGED",
-          "sGlobal",
-          "UNSELECT_REASON_UNKNOWN",
-          "TAG",
-          "CALLBACK_FLAG_REQUEST_DISCOVERY",
-          "DEBUG",
-          "UNSELECT_REASON_STOPPED",
-          "CALLBACK_FLAG_UNFILTERED_EVENTS"
-        ]
-      },
-      "android/support/v17/leanback/graphics/CompositeDrawable$ChildDrawable": {
-        "androidx/leanback/graphics/CompositeDrawable$ChildDrawable": [
-          "adjustedBounds",
-          "BOTTOM_FRACTION",
-          "RIGHT_FRACTION",
-          "BOTTOM_ABSOLUTE",
-          "RIGHT_ABSOLUTE",
-          "LEFT_ABSOLUTE",
-          "LEFT_FRACTION",
-          "TOP_FRACTION",
-          "TOP_ABSOLUTE"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRow$RepeatAction": {
-        "androidx/leanback/widget/PlaybackControlsRow$RepeatAction": [
-          "INDEX_NONE",
-          "INDEX_ALL",
-          "ALL",
-          "NONE",
-          "ONE",
-          "INDEX_ONE"
-        ]
-      },
-      "android/support/design/R$id": {
-        "androidx/design/R$id": [
-          "touch_outside",
-          "largeLabel",
-          "textinput_error",
-          "textinput_counter",
-          "snackbar_text",
-          "snackbar_action",
-          "icon",
-          "smallLabel",
-          "view_offset_helper",
-          "design_bottom_sheet",
-          "coordinator",
-          "design_menu_item_action_area_stub",
-          "design_menu_item_text"
-        ]
-      },
-      "android/support/v7/widget/ActivityChooserModel$HistoricalRecord": {
-        "androidx/widget/ActivityChooserModel$HistoricalRecord": [
-          "activity",
-          "weight",
-          "time"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$BaseTvColumns": {
-        "androidx/media/tv/TvContractCompat$BaseTvColumns": [
-          "COLUMN_PACKAGE_NAME"
-        ]
-      },
-      "android/support/v17/leanback/media/MediaPlayerGlue": {
-        "androidx/leanback/media/MediaPlayerGlue": [
-          "FAST_FORWARD_REWIND_STEP",
-          "TAG",
-          "REPEAT_ONE",
-          "FAST_FORWARD_REWIND_REPEAT_DELAY",
-          "NO_REPEAT",
-          "REPEAT_ALL"
-        ]
-      },
-      "android/support/text/emoji/EmojiProcessor$GlyphChecker": {
-        "androidx/text/emoji/EmojiProcessor$GlyphChecker": [
-          "PAINT_TEXT_SIZE",
-          "sStringBuilder"
-        ]
-      },
-      "android/support/v4/app/FragmentManager": {
-        "androidx/app/FragmentManager": [
-          "POP_BACK_STACK_INCLUSIVE"
-        ]
-      },
-      "android/support/v4/content/LocalBroadcastManager$ReceiverRecord": {
-        "androidx/content/LocalBroadcastManager$ReceiverRecord": [
-          "broadcasting",
-          "receiver",
-          "filter",
-          "dead"
-        ]
-      },
-      "android/support/percent/R$styleable": {
-        "androidx/R$styleable": [
-          "PercentLayout_Layout_layout_marginEndPercent",
-          "PercentLayout_Layout",
-          "PercentLayout_Layout_layout_marginBottomPercent",
-          "PercentLayout_Layout_layout_aspectRatio",
-          "PercentLayout_Layout_layout_widthPercent",
-          "PercentLayout_Layout_layout_heightPercent",
-          "PercentLayout_Layout_layout_marginLeftPercent",
-          "PercentLayout_Layout_layout_marginRightPercent",
-          "PercentLayout_Layout_layout_marginStartPercent",
-          "PercentLayout_Layout_layout_marginPercent",
-          "PercentLayout_Layout_layout_marginTopPercent"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseSupportFragment": {
-        "androidx/leanback/app/BrowseSupportFragment": [
-          "STATE_ENTRANCE_ON_PREPARED_ON_CREATEVIEW",
-          "STATE_SET_ENTRANCE_START_STATE",
-          "HEADERS_ENABLED",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "HEADERS_HIDDEN",
-          "ARG_HEADERS_STATE",
-          "TAG",
-          "STATE_ENTRANCE_PERFORM",
-          "HEADER_SHOW",
-          "IS_PAGE_ROW",
-          "ARG_TITLE",
-          "LB_HEADERS_BACKSTACK",
-          "DEBUG",
-          "EVT_SCREEN_DATA_READY",
-          "CURRENT_SELECTED_POSITION",
-          "EVT_HEADER_VIEW_CREATED",
-          "EVT_MAIN_FRAGMENT_VIEW_CREATED",
-          "HEADERS_DISABLED",
-          "HEADER_STACK_INDEX"
-        ]
-      },
-      "android/support/v17/leanback/app/SearchFragment": {
-        "androidx/leanback/app/SearchFragment": [
-          "TAG",
-          "QUERY_COMPLETE",
-          "ARG_QUERY",
-          "RESULTS_CHANGED",
-          "ARG_TITLE",
-          "SPEECH_RECOGNITION_DELAY_MS",
-          "EXTRA_LEANBACK_BADGE_PRESENT",
-          "AUDIO_PERMISSION_REQUEST_CODE",
-          "DEBUG",
-          "ARG_PREFIX"
-        ]
-      },
-      "android/support/v4/graphics/drawable/IconCompat": {
-        "androidx/graphics/drawable/IconCompat": [
-          "ADAPTIVE_ICON_INSET_FACTOR",
-          "TYPE_RESOURCE",
-          "TYPE_BITMAP",
-          "ICON_DIAMETER_FACTOR",
-          "KEY_SHADOW_ALPHA",
-          "DEFAULT_VIEW_PORT_SCALE",
-          "AMBIENT_SHADOW_ALPHA",
-          "TYPE_DATA",
-          "BLUR_FACTOR",
-          "TYPE_URI",
-          "KEY_SHADOW_OFFSET_FACTOR",
-          "TYPE_ADAPTIVE_BITMAP"
-        ]
-      },
-      "android/support/v4/internal/view/SupportMenuItem": {
-        "androidx/internal/view/SupportMenuItem": [
-          "SHOW_AS_ACTION_ALWAYS",
-          "SHOW_AS_ACTION_NEVER",
-          "SHOW_AS_ACTION_WITH_TEXT",
-          "SHOW_AS_ACTION_IF_ROOM",
-          "SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW"
-        ]
-      },
-      "android/support/v7/cardview/R$dimen": {
-        "androidx/cardview/R$dimen": [
-          "cardview_compat_inset_shadow"
-        ]
-      },
-      "android/support/v4/widget/CompoundButtonCompat$CompoundButtonCompatBaseImpl": {
-        "androidx/widget/CompoundButtonCompat$CompoundButtonCompatBaseImpl": [
-          "sButtonDrawableField",
-          "sButtonDrawableFieldFetched",
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/StaggeredGridLayoutManager$LayoutParams": {
-        "androidx/widget/StaggeredGridLayoutManager$LayoutParams": [
-          "width",
-          "leftMargin",
-          "INVALID_SPAN_ID",
-          "bottomMargin",
-          "height",
-          "topMargin",
-          "rightMargin"
-        ]
-      },
-      "android/support/v17/leanback/widget/ItemAlignmentFacetHelper": {
-        "androidx/leanback/widget/ItemAlignmentFacetHelper": [
-          "sRect"
-        ]
-      },
-      "android/support/media/ExifInterface$ExifAttribute": {
-        "androidx/media/ExifInterface$ExifAttribute": [
-          "format",
-          "numberOfComponents",
-          "bytes"
-        ]
-      },
-      "android/support/compat/R$styleable": {
-        "androidx/compat/R$styleable": [
-          "FontFamily_fontProviderCerts",
-          "FontFamily_fontProviderAuthority",
-          "FontFamilyFont_fontWeight",
-          "FontFamilyFont_android_font",
-          "FontFamilyFont_android_fontStyle",
-          "FontFamilyFont_android_fontWeight",
-          "FontFamilyFont_fontStyle",
-          "FontFamilyFont",
-          "FontFamily_fontProviderFetchTimeout",
-          "FontFamily_fontProviderFetchStrategy",
-          "FontFamilyFont_font",
-          "FontFamily_fontProviderQuery",
-          "FontFamily",
-          "FontFamily_fontProviderPackage"
-        ]
-      },
-      "android/support/v7/widget/ButtonBarLayout": {
-        "androidx/widget/ButtonBarLayout": [
-          "PEEK_BUTTON_DP",
-          "ALLOW_STACKING_MIN_HEIGHT_DP"
-        ]
-      },
-      "android/support/v7/app/ActionBarDrawerToggleHoneycomb": {
-        "androidx/app/ActionBarDrawerToggleHoneycomb": [
-          "THEME_ATTRS",
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$LayoutParams": {
-        "androidx/widget/RecyclerView$LayoutParams": [
-          "topMargin",
-          "bottomMargin",
-          "width",
-          "height",
-          "rightMargin",
-          "leftMargin"
-        ]
-      },
-      "android/support/v7/util/DiffUtil$Snake": {
-        "androidx/util/DiffUtil$Snake": [
-          "size",
-          "x",
-          "y",
-          "reverse",
-          "removal"
-        ]
-      },
-      "android/support/v4/print/PrintHelper": {
-        "androidx/print/PrintHelper": [
-          "COLOR_MODE_MONOCHROME",
-          "SCALE_MODE_FILL",
-          "ORIENTATION_PORTRAIT",
-          "SCALE_MODE_FIT",
-          "COLOR_MODE_COLOR",
-          "ORIENTATION_LANDSCAPE"
-        ]
-      },
-      "android/support/v4/widget/CompoundButtonCompat": {
-        "androidx/widget/CompoundButtonCompat": [
-          "IMPL"
-        ]
-      },
-      "android/support/v7/widget/DefaultItemAnimator$MoveInfo": {
-        "androidx/widget/DefaultItemAnimator$MoveInfo": [
-          "toY",
-          "toX",
-          "fromY",
-          "fromX",
-          "holder"
-        ]
-      },
-      "android/support/v7/widget/ActionMenuView": {
-        "androidx/widget/ActionMenuView": [
-          "MIN_CELL_SIZE",
-          "TAG",
-          "GENERATED_ITEM_PADDING"
-        ]
-      },
-      "android/support/v7/widget/GapWorker$Task": {
-        "androidx/widget/GapWorker$Task": [
-          "viewVelocity",
-          "position",
-          "view",
-          "immediate",
-          "distanceToItem"
-        ]
-      },
-      "android/support/v7/util/DiffUtil": {
-        "androidx/util/DiffUtil": [
-          "SNAKE_COMPARATOR"
-        ]
-      },
-      "android/support/v4/content/res/ResourcesCompat": {
-        "androidx/content/res/ResourcesCompat": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/ActionMenuView$LayoutParams": {
-        "androidx/widget/ActionMenuView$LayoutParams": [
-          "expandable",
-          "extraPixels",
-          "isOverflowButton",
-          "gravity",
-          "rightMargin",
-          "cellsUsed",
-          "expanded",
-          "leftMargin",
-          "preventEdgeOffset"
-        ]
-      },
-      "android/support/transition/Visibility": {
-        "androidx/transition/Visibility": [
-          "PROPNAME_PARENT",
-          "PROPNAME_VISIBILITY",
-          "MODE_OUT",
-          "PROPNAME_SCREEN_LOCATION",
-          "sTransitionProperties",
-          "MODE_IN"
-        ]
-      },
-      "android/support/v4/view/ViewPager$LayoutParams": {
-        "androidx/view/ViewPager$LayoutParams": [
-          "needsMeasure",
-          "height",
-          "width",
-          "childIndex",
-          "position",
-          "widthFactor",
-          "gravity",
-          "isDecor"
-        ]
-      },
-      "android/support/v17/preference/R$layout": {
-        "androidx/leanback/preference/R$layout": [
-          "leanback_list_preference_item_multi",
-          "leanback_list_preference_fragment",
-          "leanback_settings_fragment",
-          "leanback_list_preference_item_single",
-          "leanback_preferences_list",
-          "leanback_preference_fragment"
-        ]
-      },
-      "android/support/v4/widget/CircularProgressDrawable": {
-        "androidx/widget/CircularProgressDrawable": [
-          "ANIMATION_DURATION",
-          "CENTER_RADIUS",
-          "COLOR_CHANGE_OFFSET",
-          "ARROW_WIDTH",
-          "STROKE_WIDTH",
-          "MAX_PROGRESS_ARC",
-          "GROUP_FULL_ROTATION",
-          "MIN_PROGRESS_ARC",
-          "RING_ROTATION",
-          "DEFAULT",
-          "ARROW_WIDTH_LARGE",
-          "ARROW_HEIGHT_LARGE",
-          "CENTER_RADIUS_LARGE",
-          "COLORS",
-          "STROKE_WIDTH_LARGE",
-          "MATERIAL_INTERPOLATOR",
-          "ARROW_HEIGHT",
-          "SHRINK_OFFSET",
-          "LARGE",
-          "LINEAR_INTERPOLATOR"
-        ]
-      },
-      "android/support/v7/mediarouter/R$integer": {
-        "androidx/mediarouter/R$integer": [
-          "mr_controller_volume_group_list_animation_duration_ms",
-          "mr_controller_volume_group_list_fade_in_duration_ms",
-          "mr_controller_volume_group_list_fade_out_duration_ms"
-        ]
-      },
-      "android/support/v17/leanback/widget/ShadowOverlayContainer": {
-        "androidx/leanback/widget/ShadowOverlayContainer": [
-          "SHADOW_DYNAMIC",
-          "sTempRect",
-          "SHADOW_NONE",
-          "SHADOW_STATIC"
-        ]
-      },
-      "android/support/v4/widget/SwipeRefreshLayout": {
-        "androidx/widget/SwipeRefreshLayout": [
-          "LAYOUT_ATTRS",
-          "CIRCLE_DIAMETER_LARGE",
-          "ALPHA_ANIMATION_DURATION",
-          "MAX_ALPHA",
-          "ANIMATE_TO_START_DURATION",
-          "LOG_TAG",
-          "MAX_PROGRESS_ANGLE",
-          "ANIMATE_TO_TRIGGER_DURATION",
-          "DEFAULT",
-          "SCALE_DOWN_DURATION",
-          "CIRCLE_DIAMETER",
-          "INVALID_POINTER",
-          "DRAG_RATE",
-          "CIRCLE_BG_LIGHT",
-          "DECELERATE_INTERPOLATION_FACTOR",
-          "LARGE",
-          "DEFAULT_CIRCLE_TARGET",
-          "STARTING_PROGRESS_ALPHA"
-        ]
-      },
-      "android/support/annotation/Dimension": {
-        "androidx/annotation/Dimension": [
-          "DP",
-          "SP",
-          "PX"
-        ]
-      },
-      "android/support/v7/widget/AppCompatSpinner": {
-        "androidx/widget/AppCompatSpinner": [
-          "MAX_ITEMS_MEASURED",
-          "MODE_DIALOG",
-          "ATTRS_ANDROID_SPINNERMODE",
-          "TAG",
-          "MODE_THEME",
-          "MODE_DROPDOWN"
-        ]
-      },
-      "android/support/v13/view/inputmethod/InputConnectionCompat$InputContentInfoCompatBaseImpl": {
-        "androidx/view/inputmethod/InputConnectionCompat$InputContentInfoCompatBaseImpl": [
-          "COMMIT_CONTENT_RESULT_RECEIVER",
-          "COMMIT_CONTENT_OPTS_KEY",
-          "COMMIT_CONTENT_FLAGS_KEY",
-          "COMMIT_CONTENT_LINK_URI_KEY",
-          "COMMIT_CONTENT_DESCRIPTION_KEY",
-          "COMMIT_CONTENT_ACTION",
-          "COMMIT_CONTENT_CONTENT_URI_KEY"
-        ]
-      },
-      "android/support/v7/app/TwilightCalculator": {
-        "androidx/app/TwilightCalculator": [
-          "OBLIQUITY",
-          "ALTIDUTE_CORRECTION_CIVIL_TWILIGHT",
-          "UTC_2000",
-          "DEGREES_TO_RADIANS",
-          "NIGHT",
-          "sunrise",
-          "state",
-          "DAY",
-          "J0",
-          "C1",
-          "C2",
-          "C3",
-          "sunset",
-          "sInstance"
-        ]
-      },
-      "android/support/v7/widget/LinearLayoutManager$LayoutState": {
-        "androidx/widget/LinearLayoutManager$LayoutState": [
-          "TAG",
-          "SCROLLING_OFFSET_NaN",
-          "LAYOUT_START",
-          "ITEM_DIRECTION_TAIL",
-          "INVALID_LAYOUT",
-          "LAYOUT_END",
-          "ITEM_DIRECTION_HEAD"
-        ]
-      },
-      "android/support/wear/R$drawable": {
-        "androidx/wear/R$drawable": [
-          "ws_ic_more_horiz_24dp_wht",
-          "ws_ic_more_vert_24dp_wht"
-        ]
-      },
-      "android/support/v17/leanback/widget/ControlBarPresenter$BoundData": {
-        "androidx/leanback/widget/ControlBarPresenter$BoundData": [
-          "adapter",
-          "presenter"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserServiceCompat$ConnectionRecord": {
-        "androidx/media/MediaBrowserServiceCompat$ConnectionRecord": [
-          "callbacks",
-          "pkg",
-          "subscriptions",
-          "rootHints",
-          "root"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplApi18": {
-        "androidx/media/session/MediaSessionCompat$MediaSessionImplApi18": [
-          "sIsMbrPendingIntentSupported"
-        ]
-      },
-      "android/support/v4/util/PatternsCompat": {
-        "androidx/util/PatternsCompat": [
-          "TLD_CHAR",
-          "USER_INFO",
-          "WEB_URL",
-          "AUTOLINK_WEB_URL",
-          "LABEL_CHAR",
-          "PATH_AND_QUERY",
-          "PUNYCODE_TLD",
-          "EMAIL_CHAR",
-          "STRICT_DOMAIN_NAME",
-          "STRICT_HOST_NAME",
-          "IP_ADDRESS",
-          "STRICT_TLD",
-          "WEB_URL_WITHOUT_PROTOCOL",
-          "PROTOCOL",
-          "EMAIL_ADDRESS",
-          "EMAIL_ADDRESS_LOCAL_PART",
-          "UCS_CHAR",
-          "TLD",
-          "IRI_LABEL",
-          "WEB_URL_WITH_PROTOCOL",
-          "AUTOLINK_EMAIL_ADDRESS",
-          "PORT_NUMBER",
-          "EMAIL_ADDRESS_DOMAIN",
-          "DOMAIN_NAME",
-          "HOST_NAME",
-          "IANA_TOP_LEVEL_DOMAINS",
-          "RELAXED_DOMAIN_NAME",
-          "WORD_BOUNDARY"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRow$ClosedCaptioningAction": {
-        "androidx/leanback/widget/PlaybackControlsRow$ClosedCaptioningAction": [
-          "INDEX_OFF",
-          "INDEX_ON",
-          "OFF",
-          "ON"
-        ]
-      },
-      "android/support/v4/widget/ExploreByTouchHelper": {
-        "androidx/widget/ExploreByTouchHelper": [
-          "INVALID_ID",
-          "NODE_ADAPTER",
-          "DEFAULT_CLASS_NAME",
-          "INVALID_PARENT_BOUNDS",
-          "HOST_ID",
-          "SPARSE_VALUES_ADAPTER"
-        ]
-      },
-      "android/support/v7/widget/OrientationHelper": {
-        "androidx/widget/OrientationHelper": [
-          "INVALID_SIZE",
-          "HORIZONTAL",
-          "VERTICAL"
-        ]
-      },
-      "android/support/animation/SpringForce": {
-        "androidx/animation/SpringForce": [
-          "DAMPING_RATIO_NO_BOUNCY",
-          "UNSET",
-          "DAMPING_RATIO_HIGH_BOUNCY",
-          "VELOCITY_THRESHOLD_MULTIPLIER",
-          "STIFFNESS_LOW",
-          "DAMPING_RATIO_LOW_BOUNCY",
-          "STIFFNESS_HIGH",
-          "STIFFNESS_MEDIUM",
-          "DAMPING_RATIO_MEDIUM_BOUNCY",
-          "STIFFNESS_VERY_LOW"
-        ]
-      },
-      "android/support/v7/view/menu/MenuAdapter": {
-        "androidx/view/menu/MenuAdapter": [
-          "ITEM_LAYOUT"
-        ]
-      },
-      "android/support/design/widget/ViewGroupUtils": {
-        "androidx/widget/ViewGroupUtils": [
-          "sMatrix",
-          "sRectF"
-        ]
-      },
-      "android/support/multidex/ZipUtil": {
-        "androidx/multidex/ZipUtil": [
-          "ENDSIG",
-          "ENDHDR",
-          "BUFFER_SIZE"
-        ]
-      },
-      "android/support/v7/media/MediaItemStatus": {
-        "androidx/media/MediaItemStatus": [
-          "KEY_EXTRAS",
-          "PLAYBACK_STATE_PLAYING",
-          "KEY_TIMESTAMP",
-          "KEY_CONTENT_POSITION",
-          "PLAYBACK_STATE_PENDING",
-          "PLAYBACK_STATE_FINISHED",
-          "PLAYBACK_STATE_BUFFERING",
-          "PLAYBACK_STATE_PAUSED",
-          "PLAYBACK_STATE_INVALIDATED",
-          "KEY_CONTENT_DURATION",
-          "PLAYBACK_STATE_ERROR",
-          "PLAYBACK_STATE_CANCELED",
-          "EXTRA_HTTP_RESPONSE_HEADERS",
-          "KEY_PLAYBACK_STATE",
-          "EXTRA_HTTP_STATUS_CODE"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$Recycler": {
-        "androidx/widget/RecyclerView$Recycler": [
-          "DEFAULT_CACHE_SIZE"
-        ]
-      },
-      "android/support/transition/ViewUtilsApi19": {
-        "androidx/transition/ViewUtilsApi19": [
-          "sSetTransitionAlphaMethod",
-          "sSetTransitionAlphaMethodFetched",
-          "TAG",
-          "sGetTransitionAlphaMethod",
-          "sGetTransitionAlphaMethodFetched"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserCompat": {
-        "androidx/media/MediaBrowserCompat": [
-          "EXTRA_PAGE",
-          "DEBUG",
-          "EXTRA_MEDIA_ID",
-          "EXTRA_PAGE_SIZE",
-          "CUSTOM_ACTION_DOWNLOAD",
-          "CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE",
-          "TAG",
-          "EXTRA_DOWNLOAD_PROGRESS"
-        ]
-      },
-      "android/support/v4/app/FragmentTransition$FragmentContainerTransition": {
-        "androidx/app/FragmentTransition$FragmentContainerTransition": [
-          "lastInTransaction",
-          "lastIn",
-          "lastInIsPop",
-          "firstOut",
-          "firstOutIsPop",
-          "firstOutTransaction"
-        ]
-      },
-      "android/support/v4/text/util/LinkifyCompat": {
-        "androidx/text/util/LinkifyCompat": [
-          "COMPARATOR",
-          "EMPTY_STRING"
-        ]
-      },
-      "android/support/v7/app/TwilightManager$TwilightState": {
-        "androidx/app/TwilightManager$TwilightState": [
-          "todaySunrise",
-          "todaySunset",
-          "yesterdaySunset",
-          "nextUpdate",
-          "tomorrowSunrise",
-          "isNight"
-        ]
-      },
-      "android/support/v4/content/res/FontResourcesParserCompat": {
-        "androidx/content/res/FontResourcesParserCompat": [
-          "NORMAL_WEIGHT",
-          "FETCH_STRATEGY_ASYNC",
-          "INFINITE_TIMEOUT_VALUE",
-          "DEFAULT_TIMEOUT_MILLIS",
-          "FETCH_STRATEGY_BLOCKING",
-          "ITALIC"
-        ]
-      },
-      "android/support/v7/widget/ListPopupWindow": {
-        "androidx/widget/ListPopupWindow": [
-          "sSetEpicenterBoundsMethod",
-          "WRAP_CONTENT",
-          "MATCH_PARENT",
-          "POSITION_PROMPT_BELOW",
-          "DEBUG",
-          "sGetMaxAvailableHeightMethod",
-          "INPUT_METHOD_FROM_FOCUSABLE",
-          "INPUT_METHOD_NEEDED",
-          "EXPAND_LIST_TIMEOUT",
-          "sClipToWindowEnabledMethod",
-          "POSITION_PROMPT_ABOVE",
-          "TAG",
-          "INPUT_METHOD_NOT_NEEDED"
-        ]
-      },
-      "android/support/v7/media/MediaRouteProviderProtocol": {
-        "androidx/media/MediaRouteProviderProtocol": [
-          "SERVICE_INTERFACE",
-          "CLIENT_MSG_RELEASE_ROUTE_CONTROLLER",
-          "CLIENT_DATA_ROUTE_ID",
-          "CLIENT_VERSION_CURRENT",
-          "CLIENT_VERSION_START",
-          "CLIENT_DATA_ROUTE_LIBRARY_GROUP",
-          "CLIENT_VERSION_1",
-          "CLIENT_VERSION_2",
-          "SERVICE_VERSION_CURRENT",
-          "SERVICE_MSG_CONTROL_REQUEST_SUCCEEDED",
-          "CLIENT_MSG_SELECT_ROUTE",
-          "CLIENT_MSG_UNREGISTER",
-          "CLIENT_MSG_UPDATE_ROUTE_VOLUME",
-          "SERVICE_MSG_REGISTERED",
-          "CLIENT_MSG_CREATE_ROUTE_CONTROLLER",
-          "CLIENT_MSG_ROUTE_CONTROL_REQUEST",
-          "CLIENT_DATA_UNSELECT_REASON",
-          "CLIENT_MSG_SET_DISCOVERY_REQUEST",
-          "SERVICE_MSG_CONTROL_REQUEST_FAILED",
-          "CLIENT_MSG_REGISTER",
-          "CLIENT_MSG_UNSELECT_ROUTE",
-          "SERVICE_MSG_GENERIC_FAILURE",
-          "SERVICE_MSG_GENERIC_SUCCESS",
-          "SERVICE_VERSION_1",
-          "CLIENT_DATA_VOLUME",
-          "SERVICE_DATA_ERROR",
-          "SERVICE_MSG_DESCRIPTOR_CHANGED",
-          "CLIENT_MSG_SET_ROUTE_VOLUME"
-        ]
-      },
-      "android/support/v4/app/Fragment": {
-        "androidx/app/Fragment": [
-          "CREATED",
-          "STARTED",
-          "ACTIVITY_CREATED",
-          "USE_DEFAULT_TRANSITION",
-          "RESUMED",
-          "sClassMap",
-          "INITIALIZING",
-          "STOPPED"
-        ]
-      },
-      "android/support/v7/app/AlertController$ButtonHandler": {
-        "androidx/app/AlertController$ButtonHandler": [
-          "MSG_DISMISS_DIALOG"
-        ]
-      },
-      "android/support/v4/text/BidiFormatter": {
-        "androidx/text/BidiFormatter": [
-          "DIR_LTR",
-          "DIR_UNKNOWN",
-          "DEFAULT_FLAGS",
-          "DEFAULT_LTR_INSTANCE",
-          "PDF",
-          "FLAG_STEREO_RESET",
-          "LRM_STRING",
-          "LRE",
-          "LRM",
-          "DEFAULT_TEXT_DIRECTION_HEURISTIC",
-          "DIR_RTL",
-          "DEFAULT_RTL_INSTANCE",
-          "RLM",
-          "RLE",
-          "EMPTY_STRING",
-          "RLM_STRING"
-        ]
-      },
-      "android/support/v17/leanback/widget/BaseGridView": {
-        "androidx/leanback/widget/BaseGridView": [
-          "WINDOW_ALIGN_NO_EDGE",
-          "SAVE_ALL_CHILD",
-          "WINDOW_ALIGN_BOTH_EDGE",
-          "FOCUS_SCROLL_PAGE",
-          "WINDOW_ALIGN_HIGH_EDGE",
-          "ITEM_ALIGN_OFFSET_PERCENT_DISABLED",
-          "WINDOW_ALIGN_LOW_EDGE",
-          "SAVE_ON_SCREEN_CHILD",
-          "SAVE_NO_CHILD",
-          "FOCUS_SCROLL_ALIGNED",
-          "WINDOW_ALIGN_OFFSET_PERCENT_DISABLED",
-          "FOCUS_SCROLL_ITEM",
-          "SAVE_LIMITED_CHILD"
-        ]
-      },
-      "android/support/v4/app/FragmentActivity": {
-        "androidx/app/FragmentActivity": [
-          "MSG_REALLY_STOPPED",
-          "NEXT_CANDIDATE_REQUEST_INDEX_TAG",
-          "MAX_NUM_PENDING_FRAGMENT_ACTIVITY_RESULTS",
-          "FRAGMENTS_TAG",
-          "TAG",
-          "ALLOCATED_REQUEST_INDICIES_TAG",
-          "MSG_RESUME_PENDING",
-          "REQUEST_FRAGMENT_WHO_TAG"
-        ]
-      },
-      "android/support/v7/gridlayout/R$dimen": {
-        "androidx/gridlayout/R$dimen": [
-          "default_gap"
-        ]
-      },
-      "android/support/content/ContentPager$Stats": {
-        "androidx/content/ContentPager$Stats": [
-          "EXTRA_COMPAT_PAGED",
-          "EXTRA_PROVIDER_PAGED",
-          "EXTRA_RESOLVED_QUERIES",
-          "EXTRA_TOTAL_QUERIES"
-        ]
-      },
-      "android/support/design/widget/BaseTransientBottomBar": {
-        "androidx/design/widget/BaseTransientBottomBar": [
-          "ANIMATION_DURATION",
-          "USE_OFFSET_API",
-          "LENGTH_SHORT",
-          "MSG_SHOW",
-          "MSG_DISMISS",
-          "LENGTH_LONG",
-          "sHandler",
-          "ANIMATION_FADE_DURATION",
-          "LENGTH_INDEFINITE"
-        ]
-      },
-      "android/support/v17/leanback/widget/ArrayObjectAdapter": {
-        "androidx/leanback/widget/ArrayObjectAdapter": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v4/view/AsyncLayoutInflater$InflateRequest": {
-        "androidx/view/AsyncLayoutInflater$InflateRequest": [
-          "inflater",
-          "callback",
-          "view",
-          "parent",
-          "resid"
-        ]
-      },
-      "android/support/transition/Styleable": {
-        "androidx/transition/Styleable": [
-          "TRANSITION",
-          "VISIBILITY_TRANSITION",
-          "CHANGE_TRANSFORM",
-          "SLIDE",
-          "TRANSITION_MANAGER",
-          "CHANGE_BOUNDS",
-          "TRANSITION_SET",
-          "FADE",
-          "TRANSITION_TARGET",
-          "ARC_MOTION",
-          "PATTERN_PATH_MOTION"
-        ]
-      },
-      "android/support/design/widget/Snackbar$Callback": {
-        "androidx/design/widget/Snackbar$Callback": [
-          "DISMISS_EVENT_ACTION",
-          "DISMISS_EVENT_TIMEOUT",
-          "DISMISS_EVENT_SWIPE",
-          "DISMISS_EVENT_CONSECUTIVE",
-          "DISMISS_EVENT_MANUAL"
-        ]
-      },
-      "android/support/v4/content/ModernAsyncTask$Status": {
-        "androidx/content/ModernAsyncTask$Status": [
-          "PENDING",
-          "FINISHED",
-          "RUNNING"
-        ]
-      },
-      "android/support/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter": {
-        "androidx/wear/widget/drawer/WearableActionDrawerView$ActionListAdapter": [
-          "TYPE_TITLE",
-          "TYPE_ACTION"
-        ]
-      },
-      "android/support/design/widget/AppBarLayout$Behavior": {
-        "androidx/design/widget/AppBarLayout$Behavior": [
-          "INVALID_POSITION",
-          "MAX_OFFSET_ANIMATION_DURATION"
-        ]
-      },
-      "android/support/v17/leanback/app/BaseSupportFragment": {
-        "androidx/leanback/app/BaseSupportFragment": [
-          "STATE_ENTRANCE_INIT",
-          "EVT_PREPARE_ENTRANCE",
-          "EVT_ON_CREATE",
-          "COND_TRANSITION_NOT_SUPPORTED",
-          "STATE_ENTRANCE_PERFORM",
-          "EVT_ENTRANCE_END",
-          "EVT_ON_CREATEVIEW",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "STATE_ENTRANCE_ON_PREPARED_ON_CREATEVIEW",
-          "EVT_START_ENTRANCE",
-          "STATE_ENTRANCE_ON_ENDED",
-          "STATE_START",
-          "STATE_ENTRANCE_COMPLETE"
-        ]
-      },
-      "android/support/annotation/VisibleForTesting": {
-        "androidx/annotation/VisibleForTesting": [
-          "PROTECTED",
-          "PACKAGE_PRIVATE",
-          "NONE",
-          "PRIVATE"
-        ]
-      },
-      "android/support/v17/leanback/widget/Parallax$IntProperty": {
-        "androidx/leanback/widget/Parallax$IntProperty": [
-          "UNKNOWN_AFTER",
-          "UNKNOWN_BEFORE"
-        ]
-      },
-      "android/support/v7/media/SystemMediaRouteProvider$JellybeanImpl": {
-        "androidx/media/SystemMediaRouteProvider$JellybeanImpl": [
-          "LIVE_AUDIO_CONTROL_FILTERS",
-          "LIVE_VIDEO_CONTROL_FILTERS"
-        ]
-      },
-      "android/support/constraint/ConstraintLayout": {
-        "androidx/constraint/ConstraintLayout": [
-          "VERSION",
-          "ALLOWS_EMBEDDED",
-          "SIMPLE_LAYOUT",
-          "TAG"
-        ]
-      },
-      "android/support/v4/widget/TextViewCompat": {
-        "androidx/widget/TextViewCompat": [
-          "AUTO_SIZE_TEXT_TYPE_UNIFORM",
-          "IMPL",
-          "AUTO_SIZE_TEXT_TYPE_NONE"
-        ]
-      },
-      "android/support/content/ContentPager": {
-        "androidx/content/ContentPager": [
-          "DEBUG",
-          "CURSOR_DISPOSITION",
-          "EXTRA_TOTAL_COUNT",
-          "EXTRA_HONORED_ARGS",
-          "CURSOR_DISPOSITION_REPAGED",
-          "QUERY_ARG_LIMIT",
-          "QUERY_ARG_OFFSET",
-          "EXTRA_SUGGESTED_LIMIT",
-          "EXTRA_REQUESTED_LIMIT",
-          "CURSOR_DISPOSITION_PAGED",
-          "TAG",
-          "CURSOR_DISPOSITION_WRAPPED",
-          "DEFAULT_CURSOR_CACHE_SIZE",
-          "CURSOR_DISPOSITION_COPIED"
-        ]
-      },
-      "android/support/v13/app/FragmentTabHost$SavedState": {
-        "androidx/app/legacy/FragmentTabHost$SavedState": [
-          "curTab",
-          "CREATOR"
-        ]
-      },
-      "android/support/design/widget/CollapsingToolbarLayout$LayoutParams": {
-        "androidx/design/widget/CollapsingToolbarLayout$LayoutParams": [
-          "DEFAULT_PARALLAX_MULTIPLIER",
-          "bottomMargin",
-          "COLLAPSE_MODE_PARALLAX",
-          "COLLAPSE_MODE_PIN",
-          "COLLAPSE_MODE_OFF"
-        ]
-      },
-      "android/support/v7/app/WindowDecorActionBar": {
-        "androidx/app/WindowDecorActionBar": [
-          "FADE_OUT_DURATION_MS",
-          "FADE_IN_DURATION_MS",
-          "sShowInterpolator",
-          "INVALID_POSITION",
-          "sHideInterpolator",
-          "TAG"
-        ]
-      },
-      "android/support/v4/view/PointerIconCompat": {
-        "androidx/view/PointerIconCompat": [
-          "TYPE_ZOOM_IN",
-          "TYPE_HELP",
-          "TYPE_WAIT",
-          "TYPE_VERTICAL_TEXT",
-          "TYPE_GRAB",
-          "TYPE_NULL",
-          "TYPE_CELL",
-          "TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW",
-          "TYPE_ARROW",
-          "TYPE_TEXT",
-          "TYPE_HORIZONTAL_DOUBLE_ARROW",
-          "TYPE_HAND",
-          "TYPE_DEFAULT",
-          "TYPE_VERTICAL_DOUBLE_ARROW",
-          "TYPE_NO_DROP",
-          "TYPE_COPY",
-          "TYPE_ALL_SCROLL",
-          "TYPE_GRABBING",
-          "TYPE_ALIAS",
-          "TYPE_CROSSHAIR",
-          "TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW",
-          "TYPE_ZOOM_OUT",
-          "TYPE_CONTEXT_MENU"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$Bounds": {
-        "androidx/widget/GridLayout$Bounds": [
-          "after",
-          "flexibility",
-          "before"
-        ]
-      },
-      "android/support/v4/internal/view/SupportMenu": {
-        "androidx/internal/view/SupportMenu": [
-          "USER_SHIFT",
-          "SUPPORTED_MODIFIERS_MASK",
-          "USER_MASK",
-          "CATEGORY_SHIFT",
-          "FLAG_KEEP_OPEN_ON_SUBMENU_OPENED",
-          "CATEGORY_MASK"
-        ]
-      },
-      "android/support/multidex/ZipUtil$CentralDirectory": {
-        "androidx/multidex/ZipUtil$CentralDirectory": [
-          "offset",
-          "size"
-        ]
-      },
-      "android/support/app/recommendation/ContentRecommendation": {
-        "androidx/app/recommendation/ContentRecommendation": [
-          "CONTENT_TYPE_SERIAL",
-          "CONTENT_TYPE_SPORTS",
-          "CONTENT_TYPE_APP",
-          "CONTENT_MATURITY_LOW",
-          "CONTENT_MATURITY_ALL",
-          "CONTENT_PRICING_PREORDER",
-          "INTENT_TYPE_BROADCAST",
-          "CONTENT_STATUS_AVAILABLE",
-          "CONTENT_PRICING_SUBSCRIPTION",
-          "CONTENT_TYPE_MAGAZINE",
-          "CONTENT_TYPE_VIDEO",
-          "CONTENT_MATURITY_MEDIUM",
-          "CONTENT_PRICING_PURCHASE",
-          "CONTENT_TYPE_RADIO",
-          "CONTENT_TYPE_WEBSITE",
-          "CONTENT_TYPE_MUSIC",
-          "INTENT_TYPE_ACTIVITY",
-          "CONTENT_STATUS_UNAVAILABLE",
-          "CONTENT_PRICING_FREE",
-          "CONTENT_TYPE_TRAILER",
-          "CONTENT_TYPE_GAME",
-          "CONTENT_MATURITY_HIGH",
-          "CONTENT_TYPE_NEWS",
-          "CONTENT_STATUS_READY",
-          "CONTENT_TYPE_MOVIE",
-          "CONTENT_STATUS_PENDING",
-          "INTENT_TYPE_SERVICE",
-          "CONTENT_TYPE_PODCAST",
-          "CONTENT_PRICING_RENTAL",
-          "CONTENT_TYPE_COMIC",
-          "CONTENT_TYPE_BOOK"
-        ]
-      },
-      "android/support/v4/media/app/NotificationCompat$MediaStyle": {
-        "androidx/media/app/NotificationCompat$MediaStyle": [
-          "MAX_MEDIA_BUTTONS",
-          "MAX_MEDIA_BUTTONS_IN_COMPACT"
-        ]
-      },
-      "android/support/v4/media/session/MediaControllerCompat$Callback$MessageHandler": {
-        "androidx/media/session/MediaControllerCompat$Callback$MessageHandler": [
-          "MSG_EVENT",
-          "MSG_UPDATE_QUEUE_TITLE",
-          "MSG_UPDATE_EXTRAS",
-          "MSG_UPDATE_METADATA",
-          "MSG_UPDATE_VOLUME",
-          "MSG_UPDATE_SHUFFLE_MODE",
-          "MSG_DESTROYED",
-          "MSG_SESSION_READY",
-          "MSG_UPDATE_REPEAT_MODE",
-          "MSG_UPDATE_CAPTIONING_ENABLED",
-          "MSG_UPDATE_QUEUE",
-          "MSG_UPDATE_PLAYBACK_STATE"
-        ]
-      },
-      "android/support/v7/widget/LinearLayoutManager": {
-        "androidx/widget/LinearLayoutManager": [
-          "TAG",
-          "MAX_SCROLL_FACTOR",
-          "VERTICAL",
-          "INVALID_OFFSET",
-          "DEBUG",
-          "HORIZONTAL"
-        ]
-      },
-      "android/support/v4/view/ViewParentCompat": {
-        "androidx/view/ViewParentCompat": [
-          "IMPL",
-          "TAG"
-        ]
-      },
-      "android/support/v4/widget/DrawerLayout$LayoutParams": {
-        "androidx/widget/DrawerLayout$LayoutParams": [
-          "gravity",
-          "width",
-          "FLAG_IS_OPENED",
-          "openState",
-          "onScreen",
-          "isPeeking",
-          "leftMargin",
-          "bottomMargin",
-          "FLAG_IS_OPENING",
-          "topMargin",
-          "FLAG_IS_CLOSING",
-          "height",
-          "rightMargin"
-        ]
-      },
-      "android/support/v4/graphics/drawable/DrawableWrapperApi14": {
-        "androidx/graphics/drawable/DrawableWrapperApi14": [
-          "DEFAULT_TINT_MODE"
-        ]
-      },
-      "android/support/v7/widget/GridLayoutManager$LayoutParams": {
-        "androidx/widget/GridLayoutManager$LayoutParams": [
-          "bottomMargin",
-          "rightMargin",
-          "height",
-          "topMargin",
-          "width",
-          "INVALID_SPAN_ID",
-          "leftMargin"
-        ]
-      },
-      "android/support/v4/app/NotificationManagerCompat$SideChannelManager$ListenerRecord": {
-        "androidx/app/NotificationManagerCompat$SideChannelManager$ListenerRecord": [
-          "taskQueue",
-          "service",
-          "componentName",
-          "retryCount",
-          "bound"
-        ]
-      },
-      "android/support/v17/leanback/widget/picker/DatePicker": {
-        "androidx/leanback/widget/picker/DatePicker": [
-          "DATE_FORMAT",
-          "LOG_TAG",
-          "DATE_FIELDS"
-        ]
-      },
-      "android/support/v7/widget/DrawableUtils": {
-        "androidx/widget/DrawableUtils": [
-          "INSETS_NONE",
-          "VECTOR_DRAWABLE_CLAZZ_NAME",
-          "TAG",
-          "sInsetsClazz"
-        ]
-      },
-      "android/support/v4/media/session/MediaControllerCompat$PlaybackInfo": {
-        "androidx/media/session/MediaControllerCompat$PlaybackInfo": [
-          "PLAYBACK_TYPE_LOCAL",
-          "PLAYBACK_TYPE_REMOTE"
-        ]
-      },
-      "android/support/v17/leanback/widget/SearchOrbView$Colors": {
-        "androidx/leanback/widget/SearchOrbView$Colors": [
-          "sBrightnessAlpha",
-          "brightColor",
-          "iconColor",
-          "color"
-        ]
-      },
-      "android/support/v7/widget/LayoutState": {
-        "androidx/widget/LayoutState": [
-          "TAG",
-          "LAYOUT_END",
-          "INVALID_LAYOUT",
-          "ITEM_DIRECTION_HEAD",
-          "ITEM_DIRECTION_TAIL",
-          "LAYOUT_START"
-        ]
-      },
-      "android/support/v17/leanback/app/BaseFragment": {
-        "androidx/leanback/app/BaseFragment": [
-          "STATE_ENTRANCE_COMPLETE",
-          "EVT_ON_CREATEVIEW",
-          "COND_TRANSITION_NOT_SUPPORTED",
-          "STATE_ENTRANCE_ON_PREPARED_ON_CREATEVIEW",
-          "STATE_ENTRANCE_ON_ENDED",
-          "EVT_START_ENTRANCE",
-          "EVT_PREPARE_ENTRANCE",
-          "STATE_ENTRANCE_INIT",
-          "STATE_START",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "EVT_ENTRANCE_END",
-          "STATE_ENTRANCE_PERFORM",
-          "EVT_ON_CREATE"
-        ]
-      },
-      "android/support/v7/widget/ActivityChooserView": {
-        "androidx/widget/ActivityChooserView": [
-          "LOG_TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/picker/PickerUtility$TimeConstant": {
-        "androidx/leanback/widget/picker/PickerUtility$TimeConstant": [
-          "ampm",
-          "minutes",
-          "locale",
-          "hours12",
-          "hours24"
-        ]
-      },
-      "android/support/design/widget/DrawableUtils": {
-        "androidx/design/widget/DrawableUtils": [
-          "LOG_TAG",
-          "sSetConstantStateMethod",
-          "sSetConstantStateMethodFetched"
-        ]
-      },
-      "android/support/v7/util/AsyncListUtil": {
-        "androidx/util/AsyncListUtil": [
-          "TAG",
-          "DEBUG"
-        ]
-      },
-      "android/support/v7/widget/ActivityChooserView$ActivityChooserViewAdapter": {
-        "androidx/widget/ActivityChooserView$ActivityChooserViewAdapter": [
-          "ITEM_VIEW_TYPE_COUNT",
-          "MAX_ACTIVITY_COUNT_DEFAULT",
-          "ITEM_VIEW_TYPE_ACTIVITY",
-          "ITEM_VIEW_TYPE_FOOTER",
-          "MAX_ACTIVITY_COUNT_UNLIMITED"
-        ]
-      },
-      "android/support/v17/leanback/widget/ControlBarPresenter": {
-        "androidx/leanback/widget/ControlBarPresenter": [
-          "sChildMarginDefault",
-          "MAX_CONTROLS",
-          "sControlIconWidth"
-        ]
-      },
-      "android/support/v4/app/FragmentTransaction": {
-        "androidx/app/FragmentTransaction": [
-          "TRANSIT_FRAGMENT_CLOSE",
-          "TRANSIT_EXIT_MASK",
-          "TRANSIT_FRAGMENT_OPEN",
-          "TRANSIT_UNSET",
-          "TRANSIT_FRAGMENT_FADE",
-          "TRANSIT_NONE",
-          "TRANSIT_ENTER_MASK"
-        ]
-      },
-      "android/support/design/widget/BottomSheetBehavior": {
-        "androidx/design/widget/BottomSheetBehavior": [
-          "STATE_COLLAPSED",
-          "HIDE_THRESHOLD",
-          "STATE_SETTLING",
-          "STATE_HIDDEN",
-          "STATE_DRAGGING",
-          "HIDE_FRICTION",
-          "STATE_EXPANDED",
-          "PEEK_HEIGHT_AUTO"
-        ]
-      },
-      "android/support/v17/leanback/app/VerticalGridSupportFragment": {
-        "androidx/leanback/app/VerticalGridSupportFragment": [
-          "DEBUG",
-          "STATE_ENTRANCE_ON_PREPARED",
-          "EVT_ON_CREATEVIEW",
-          "STATE_SET_ENTRANCE_START_STATE",
-          "TAG"
-        ]
-      },
-      "android/support/v7/media/MediaItemMetadata": {
-        "androidx/media/MediaItemMetadata": [
-          "KEY_ALBUM_TITLE",
-          "KEY_DURATION",
-          "KEY_YEAR",
-          "KEY_TRACK_NUMBER",
-          "KEY_AUTHOR",
-          "KEY_DISC_NUMBER",
-          "KEY_ALBUM_ARTIST",
-          "KEY_COMPOSER",
-          "KEY_ARTIST",
-          "KEY_ARTWORK_URI",
-          "KEY_TITLE"
-        ]
-      },
-      "android/support/v7/appcompat/R$bool": {
-        "androidx/appcompat/R$bool": [
-          "abc_config_showMenuShortcutsWhenKeyboardPresent",
-          "abc_action_bar_embed_tabs"
-        ]
-      },
-      "android/support/transition/ViewUtilsApi21": {
-        "androidx/transition/ViewUtilsApi21": [
-          "sTransformMatrixToGlobalMethodFetched",
-          "sTransformMatrixToLocalMethodFetched",
-          "TAG",
-          "sSetAnimationMatrixMethod",
-          "sTransformMatrixToGlobalMethod",
-          "sTransformMatrixToLocalMethod",
-          "sSetAnimationMatrixMethodFetched"
-        ]
-      },
-      "android/support/v4/util/Pair": {
-        "androidx/util/Pair": [
-          "first",
-          "second"
-        ]
-      },
-      "android/support/v7/preference/SeekBarPreference$SavedState": {
-        "androidx/preference/SeekBarPreference$SavedState": [
-          "min",
-          "max",
-          "CREATOR",
-          "seekBarValue"
-        ]
-      },
-      "android/support/v7/mediarouter/R$attr": {
-        "androidx/mediarouter/R$attr": [
-          "mediaRouteTheme",
-          "mediaRouteTvIconDrawable",
-          "mediaRouteButtonStyle",
-          "mediaRouteStopDrawable",
-          "mediaRoutePauseDrawable",
-          "mediaRouteSpeakerGroupIconDrawable",
-          "mediaRouteSpeakerIconDrawable",
-          "mediaRouteDefaultIconDrawable",
-          "mediaRoutePlayDrawable"
-        ]
-      },
-      "android/support/v7/view/SupportMenuInflater": {
-        "androidx/view/SupportMenuInflater": [
-          "XML_ITEM",
-          "XML_GROUP",
-          "LOG_TAG",
-          "ACTION_VIEW_CONSTRUCTOR_SIGNATURE",
-          "XML_MENU",
-          "ACTION_PROVIDER_CONSTRUCTOR_SIGNATURE",
-          "NO_ID"
-        ]
-      },
-      "android/support/v4/view/AsyncLayoutInflater$InflateThread": {
-        "androidx/view/AsyncLayoutInflater$InflateThread": [
-          "sInstance"
-        ]
-      },
-      "android/support/design/widget/CollapsingTextHelper": {
-        "androidx/design/widget/CollapsingTextHelper": [
-          "DEBUG_DRAW",
-          "USE_SCALING_TEXTURE",
-          "DEBUG_DRAW_PAINT"
-        ]
-      },
-      "android/support/v4/app/FragmentTabHost$TabInfo": {
-        "androidx/app/FragmentTabHost$TabInfo": [
-          "tag",
-          "fragment",
-          "args",
-          "clss"
-        ]
-      },
-      "android/support/v17/leanback/app/VideoFragment": {
-        "androidx/leanback/app/VideoFragment": [
-          "SURFACE_NOT_CREATED",
-          "SURFACE_CREATED"
-        ]
-      },
-      "android/support/text/emoji/bundled/BundledEmojiCompatConfig$InitRunnable": {
-        "androidx/text/emoji/bundled/BundledEmojiCompatConfig$InitRunnable": [
-          "FONT_NAME"
-        ]
-      },
-      "android/support/mediacompat/R$layout": {
-        "androidx/mediacompat/R$layout": [
-          "notification_template_big_media_custom",
-          "notification_template_media",
-          "notification_media_action",
-          "notification_template_big_media_narrow_custom",
-          "notification_template_media_custom",
-          "notification_template_big_media",
-          "notification_template_big_media_narrow"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$MessagingStyle$Message": {
-        "androidx/app/NotificationCompat$MessagingStyle$Message": [
-          "KEY_DATA_URI",
-          "KEY_EXTRAS_BUNDLE",
-          "KEY_DATA_MIME_TYPE",
-          "KEY_TIMESTAMP",
-          "KEY_SENDER",
-          "KEY_TEXT"
-        ]
-      },
-      "android/support/v4/media/session/MediaControllerCompat": {
-        "androidx/media/session/MediaControllerCompat": [
-          "COMMAND_GET_EXTRA_BINDER",
-          "COMMAND_REMOVE_QUEUE_ITEM_AT",
-          "COMMAND_ARGUMENT_INDEX",
-          "COMMAND_ARGUMENT_MEDIA_DESCRIPTION",
-          "COMMAND_ADD_QUEUE_ITEM_AT",
-          "COMMAND_ADD_QUEUE_ITEM",
-          "COMMAND_REMOVE_QUEUE_ITEM",
-          "TAG"
-        ]
-      },
-      "android/support/v4/text/TextDirectionHeuristicsCompat$AnyStrong": {
-        "androidx/text/TextDirectionHeuristicsCompat$AnyStrong": [
-          "INSTANCE_RTL",
-          "INSTANCE_LTR"
-        ]
-      },
-      "android/support/wear/widget/ProgressDrawable": {
-        "androidx/wear/widget/ProgressDrawable": [
-          "FULL_CIRCLE",
-          "LEVEL",
-          "CORRECTION_ANGLE",
-          "GROW_SHRINK_RATIO",
-          "MAX_LEVEL",
-          "sInterpolator",
-          "NUMBER_OF_SEGMENTS",
-          "STARTING_ANGLE",
-          "MAX_SWEEP",
-          "ANIMATION_DURATION",
-          "LEVELS_PER_SEGMENT"
-        ]
-      },
-      "android/support/v7/app/MediaRouteControllerDialog$FetchArtTask": {
-        "androidx/app/MediaRouteControllerDialog$FetchArtTask": [
-          "SHOW_ANIM_TIME_THRESHOLD_MILLIS"
-        ]
-      },
-      "android/support/v17/leanback/transition/SlideKitkat": {
-        "androidx/leanback/transition/SlideKitkat": [
-          "sCalculateRight",
-          "sCalculateStart",
-          "sAccelerate",
-          "sDecelerate",
-          "sCalculateTop",
-          "sCalculateEnd",
-          "sCalculateLeft",
-          "sCalculateBottom",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/ImageCardView": {
-        "androidx/leanback/widget/ImageCardView": [
-          "CARD_TYPE_FLAG_CONTENT",
-          "ALPHA",
-          "CARD_TYPE_FLAG_ICON_RIGHT",
-          "CARD_TYPE_FLAG_TITLE",
-          "CARD_TYPE_FLAG_IMAGE_ONLY",
-          "CARD_TYPE_FLAG_ICON_LEFT"
-        ]
-      },
-      "android/support/v17/leanback/app/VideoSupportFragment": {
-        "androidx/leanback/app/VideoSupportFragment": [
-          "SURFACE_NOT_CREATED",
-          "SURFACE_CREATED"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRow$PlayPauseAction": {
-        "androidx/leanback/widget/PlaybackControlsRow$PlayPauseAction": [
-          "INDEX_PAUSE",
-          "PLAY",
-          "INDEX_PLAY",
-          "PAUSE"
-        ]
-      },
-      "android/support/v7/widget/SearchView$AutoCompleteTextViewReflector": {
-        "androidx/widget/SearchView$AutoCompleteTextViewReflector": [
-          "showSoftInputUnchecked",
-          "doAfterTextChanged",
-          "ensureImeVisible",
-          "doBeforeTextChanged"
-        ]
-      },
-      "android/support/text/emoji/R$styleable": {
-        "androidx/text/emoji/R$styleable": [
-          "EmojiExtractTextLayout",
-          "EmojiEditText_maxEmojiCount",
-          "EmojiExtractTextLayout_emojiReplaceStrategy",
-          "EmojiEditText"
-        ]
-      },
-      "android/support/v4/view/animation/PathInterpolatorApi14": {
-        "androidx/view/animation/PathInterpolatorApi14": [
-          "PRECISION"
-        ]
-      },
-      "android/support/v4/app/FragmentTransition": {
-        "androidx/app/FragmentTransition": [
-          "PLATFORM_IMPL",
-          "INVERSE_OPS",
-          "SUPPORT_IMPL"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$Spec": {
-        "androidx/widget/GridLayout$Spec": [
-          "weight",
-          "alignment",
-          "UNDEFINED",
-          "startDefined",
-          "span",
-          "DEFAULT_WEIGHT"
-        ]
-      },
-      "android/support/v4/app/INotificationSideChannel$Stub": {
-        "androidx/app/INotificationSideChannel$Stub": [
-          "TRANSACTION_notify",
-          "TRANSACTION_cancel",
-          "TRANSACTION_cancelAll",
-          "DESCRIPTOR"
-        ]
-      },
-      "android/support/v4/app/FragmentManagerImpl": {
-        "androidx/app/FragmentManagerImpl": [
-          "sAnimationListenerField",
-          "TAG",
-          "ANIM_DUR",
-          "ANIM_STYLE_FADE_EXIT",
-          "DEBUG",
-          "ACCELERATE_QUINT",
-          "TARGET_REQUEST_CODE_STATE_TAG",
-          "ANIM_STYLE_OPEN_EXIT",
-          "ANIM_STYLE_OPEN_ENTER",
-          "TARGET_STATE_TAG",
-          "USER_VISIBLE_HINT_TAG",
-          "ANIM_STYLE_FADE_ENTER",
-          "VIEW_STATE_TAG",
-          "DECELERATE_QUINT",
-          "DECELERATE_CUBIC",
-          "ANIM_STYLE_CLOSE_ENTER",
-          "ACCELERATE_CUBIC",
-          "ANIM_STYLE_CLOSE_EXIT"
-        ]
-      },
-      "android/support/v7/app/MediaRouteButton": {
-        "androidx/app/MediaRouteButton": [
-          "TAG",
-          "sRemoteIndicatorCache",
-          "CHECKED_STATE_SET",
-          "CHECKABLE_STATE_SET",
-          "CONTROLLER_FRAGMENT_TAG",
-          "CHOOSER_FRAGMENT_TAG"
-        ]
-      },
-      "android/support/v7/widget/VectorEnabledTintResources": {
-        "androidx/widget/VectorEnabledTintResources": [
-          "MAX_SDK_WHERE_REQUIRED"
-        ]
-      },
-      "android/support/v7/view/menu/MenuItemImpl": {
-        "androidx/view/menu/MenuItemImpl": [
-          "NO_ICON",
-          "HIDDEN",
-          "sEnterShortcutLabel",
-          "CHECKABLE",
-          "SHOW_AS_ACTION_MASK",
-          "sSpaceShortcutLabel",
-          "EXCLUSIVE",
-          "CHECKED",
-          "TAG",
-          "sDeleteShortcutLabel",
-          "IS_ACTION",
-          "ENABLED",
-          "sPrependShortcutLabel"
-        ]
-      },
-      "android/support/content/InMemoryCursor": {
-        "androidx/content/InMemoryCursor": [
-          "NUM_TYPES"
-        ]
-      },
-      "android/support/v4/app/FragmentPagerAdapter": {
-        "androidx/app/FragmentPagerAdapter": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v4/text/ICUCompat": {
-        "androidx/text/ICUCompat": [
-          "TAG",
-          "sAddLikelySubtagsMethod",
-          "sGetScriptMethod"
-        ]
-      },
-      "android/support/v4/media/session/MediaControllerCompatApi21$PlaybackInfo": {
-        "androidx/media/session/MediaControllerCompatApi21$PlaybackInfo": [
-          "FLAG_SCO",
-          "STREAM_BLUETOOTH_SCO",
-          "STREAM_SYSTEM_ENFORCED"
-        ]
-      },
-      "android/support/text/emoji/R$id": {
-        "androidx/text/emoji/R$id": [
-          "inputExtractAccessories",
-          "inputExtractAction"
-        ]
-      },
-      "android/support/v17/leanback/R$animator": {
-        "androidx/leanback/R$animator": [
-          "lb_onboarding_page_indicator_fade_in",
-          "lb_onboarding_page_indicator_fade_out",
-          "lb_onboarding_start_button_fade_in",
-          "lb_playback_controls_fade_in",
-          "lb_playback_controls_fade_out",
-          "lb_onboarding_logo_enter",
-          "lb_onboarding_start_button_fade_out",
-          "lb_onboarding_page_indicator_enter",
-          "lb_playback_bg_fade_out",
-          "lb_onboarding_title_enter",
-          "lb_onboarding_description_enter",
-          "lb_playback_bg_fade_in",
-          "lb_onboarding_logo_exit"
-        ]
-      },
-      "android/support/transition/TransitionInflater": {
-        "androidx/transition/TransitionInflater": [
-          "CONSTRUCTOR_SIGNATURE",
-          "CONSTRUCTORS"
-        ]
-      },
-      "android/support/v4/media/RatingCompat": {
-        "androidx/media/RatingCompat": [
-          "RATING_THUMB_UP_DOWN",
-          "RATING_5_STARS",
-          "RATING_HEART",
-          "RATING_PERCENTAGE",
-          "CREATOR",
-          "RATING_4_STARS",
-          "RATING_NONE",
-          "RATING_NOT_RATED",
-          "TAG",
-          "RATING_3_STARS"
-        ]
-      },
-      "android/support/v17/leanback/transition/FadeAndShortSlide": {
-        "androidx/leanback/transition/FadeAndShortSlide": [
-          "sCalculateTopBottom",
-          "sCalculateStartEnd",
-          "sCalculateEnd",
-          "sCalculateBottom",
-          "PROPNAME_SCREEN_POSITION",
-          "sDecelerate",
-          "sCalculateStart",
-          "sCalculateTop"
-        ]
-      },
-      "android/support/design/R$attr": {
-        "androidx/design/R$attr": [
-          "state_collapsible",
-          "state_collapsed",
-          "bottomSheetDialogTheme"
-        ]
-      },
-      "android/support/graphics/drawable/PathInterpolatorCompat": {
-        "androidx/graphics/drawable/PathInterpolatorCompat": [
-          "EPSILON",
-          "PRECISION",
-          "MAX_NUM_POINTS"
-        ]
-      },
-      "android/support/animation/SpringAnimation": {
-        "androidx/animation/SpringAnimation": [
-          "UNSET"
-        ]
-      },
-      "android/support/v7/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState": {
-        "androidx/app/AppCompatDelegateImplV9$PanelFeatureState$SavedState": [
-          "featureId",
-          "menuState",
-          "CREATOR",
-          "isOpen"
-        ]
-      },
-      "android/support/v7/view/menu/MenuBuilder": {
-        "androidx/view/menu/MenuBuilder": [
-          "EXPANDED_ACTION_VIEW_ID",
-          "TAG",
-          "PRESENTER_KEY",
-          "ACTION_VIEW_STATES_KEY",
-          "sCategoryToOrder"
-        ]
-      },
-      "android/support/v4/view/ViewGroupCompat": {
-        "androidx/view/ViewGroupCompat": [
-          "LAYOUT_MODE_OPTICAL_BOUNDS",
-          "LAYOUT_MODE_CLIP_BOUNDS",
-          "IMPL"
-        ]
-      },
-      "android/support/v14/preference/MultiSelectListPreferenceDialogFragment": {
-        "androidx/preference/MultiSelectListPreferenceDialogFragment": [
-          "SAVE_STATE_ENTRY_VALUES",
-          "SAVE_STATE_VALUES",
-          "SAVE_STATE_ENTRIES",
-          "SAVE_STATE_CHANGED"
-        ]
-      },
-      "android/support/v4/print/PrintHelper$PrintHelperApi19": {
-        "androidx/print/PrintHelper$PrintHelperApi19": [
-          "MAX_PRINT_SIZE",
-          "LOG_TAG"
-        ]
-      },
-      "android/support/v7/widget/AdapterHelper$UpdateOp": {
-        "androidx/widget/AdapterHelper$UpdateOp": [
-          "positionStart",
-          "payload",
-          "MOVE",
-          "REMOVE",
-          "ADD",
-          "UPDATE",
-          "cmd",
-          "POOL_SIZE",
-          "itemCount"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseFragment$SetSelectionRunnable": {
-        "androidx/leanback/app/BrowseFragment$SetSelectionRunnable": [
-          "TYPE_INTERNAL_SYNC",
-          "TYPE_USER_REQUEST",
-          "TYPE_INVALID"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseSupportFragment$ExpandPreLayout": {
-        "androidx/leanback/app/BrowseSupportFragment$ExpandPreLayout": [
-          "STATE_SECOND_DRAW",
-          "STATE_INIT",
-          "STATE_FIRST_DRAW",
-          "mainFragmentAdapter"
-        ]
-      },
-      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatBaseImpl": {
-        "androidx/widget/PopupWindowCompat$PopupWindowCompatBaseImpl": [
-          "sGetWindowLayoutTypeMethodAttempted",
-          "sGetWindowLayoutTypeMethod",
-          "sSetWindowLayoutTypeMethod",
-          "sSetWindowLayoutTypeMethodAttempted"
-        ]
-      },
-      "android/support/v7/widget/SwitchCompat": {
-        "androidx/widget/SwitchCompat": [
-          "MONOSPACE",
-          "CHECKED_STATE_SET",
-          "TOUCH_MODE_DRAGGING",
-          "TOUCH_MODE_DOWN",
-          "THUMB_POS",
-          "TOUCH_MODE_IDLE",
-          "SERIF",
-          "THUMB_ANIMATION_DURATION",
-          "ACCESSIBILITY_EVENT_CLASS_NAME",
-          "SANS"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$LayoutManager$Properties": {
-        "androidx/widget/RecyclerView$LayoutManager$Properties": [
-          "reverseLayout",
-          "stackFromEnd",
-          "spanCount",
-          "orientation"
-        ]
-      },
-      "android/support/v4/app/NotificationManagerCompat$SideChannelManager": {
-        "androidx/app/NotificationManagerCompat$SideChannelManager": [
-          "MSG_QUEUE_TASK",
-          "MSG_RETRY_LISTENER_QUEUE",
-          "MSG_SERVICE_CONNECTED",
-          "MSG_SERVICE_DISCONNECTED"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseSupportFragment$MainFragmentAdapterRegistry": {
-        "androidx/leanback/app/BrowseSupportFragment$MainFragmentAdapterRegistry": [
-          "sDefaultFragmentFactory"
-        ]
-      },
-      "android/support/v7/preference/PreferenceFragmentCompat": {
-        "androidx/preference/PreferenceFragmentCompat": [
-          "MSG_BIND_PREFERENCES",
-          "PREFERENCES_TAG",
-          "ARG_PREFERENCE_ROOT",
-          "DIALOG_FRAGMENT_TAG"
-        ]
-      },
-      "android/support/v7/widget/SearchView": {
-        "androidx/widget/SearchView": [
-          "ENABLED_STATE_SET",
-          "EMPTY_STATE_SET",
-          "FOCUSED_STATE_SET",
-          "DBG",
-          "IME_OPTION_NO_MICROPHONE",
-          "LOG_TAG",
-          "HIDDEN_METHOD_INVOKER"
-        ]
-      },
-      "android/support/v4/view/AsyncLayoutInflater$BasicInflater": {
-        "androidx/view/AsyncLayoutInflater$BasicInflater": [
-          "sClassPrefixList"
-        ]
-      },
-      "android/support/v7/widget/DividerItemDecoration": {
-        "androidx/widget/DividerItemDecoration": [
-          "VERTICAL",
-          "HORIZONTAL",
-          "ATTRS",
-          "TAG"
-        ]
-      },
-      "android/support/wear/widget/SwipeDismissFrameLayout": {
-        "androidx/wear/widget/SwipeDismissFrameLayout": [
-          "DEFAULT_INTERPOLATION_FACTOR",
-          "TRANSLATION_MIN_ALPHA",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/app/HeadersFragment": {
-        "androidx/leanback/app/HeadersFragment": [
-          "sHeaderPresenter",
-          "sLayoutChangeListener"
-        ]
-      },
-      "android/support/customtabs/CustomTabsService": {
-        "androidx/browser/customtabs/CustomTabsService": [
-          "RESULT_FAILURE_MESSAGING_ERROR",
-          "RESULT_SUCCESS",
-          "RESULT_FAILURE_REMOTE_ERROR",
-          "ACTION_CUSTOM_TABS_CONNECTION",
-          "KEY_URL",
-          "RESULT_FAILURE_DISALLOWED",
-          "RELATION_HANDLE_ALL_URLS",
-          "RELATION_USE_AS_ORIGIN"
-        ]
-      },
-      "android/support/v17/leanback/app/GuidedStepFragment": {
-        "androidx/leanback/app/GuidedStepFragment": [
-          "IS_FRAMEWORK_FRAGMENT",
-          "entranceTransitionType",
-          "ENTRY_NAME_ENTRANCE",
-          "TAG_LEAN_BACK_ACTIONS_FRAGMENT",
-          "UI_STYLE_REPLACE",
-          "EXTRA_BUTTON_ACTION_PREFIX",
-          "UI_STYLE_DEFAULT",
-          "DEBUG",
-          "SLIDE_FROM_BOTTOM",
-          "UI_STYLE_ENTRANCE",
-          "SLIDE_FROM_SIDE",
-          "TAG",
-          "EXTRA_UI_STYLE",
-          "EXTRA_ACTION_PREFIX",
-          "ENTRY_NAME_REPLACE",
-          "UI_STYLE_ACTIVITY_ROOT"
-        ]
-      },
-      "android/support/v17/leanback/util/StateMachine": {
-        "androidx/leanback/util/StateMachine": [
-          "STATUS_ZERO",
-          "STATUS_INVOKED",
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/compat/R$drawable": {
-        "androidx/compat/R$drawable": [
-          "notification_template_icon_bg",
-          "notification_bg",
-          "notification_icon_background",
-          "notification_template_icon_low_bg",
-          "notification_bg_low"
-        ]
-      },
-      "android/support/v4/provider/DocumentsContractApi19": {
-        "androidx/provider/DocumentsContractApi19": [
-          "TAG",
-          "FLAG_VIRTUAL_DOCUMENT"
-        ]
-      },
-      "android/support/v4/app/JobIntentService": {
-        "androidx/app/JobIntentService": [
-          "TAG",
-          "sClassWorkEnqueuer",
-          "DEBUG",
-          "sLock"
-        ]
-      },
-      "android/support/v4/graphics/TypefaceCompatUtil": {
-        "androidx/graphics/TypefaceCompatUtil": [
-          "CACHE_FILE_PREFIX",
-          "TAG"
-        ]
-      },
-      "android/support/transition/Explode": {
-        "androidx/transition/Explode": [
-          "PROPNAME_SCREEN_BOUNDS",
-          "sDecelerate",
-          "sAccelerate"
-        ]
-      },
-      "android/support/v4/view/AccessibilityDelegateCompat": {
-        "androidx/view/AccessibilityDelegateCompat": [
-          "DEFAULT_DELEGATE",
-          "IMPL"
-        ]
-      },
-      "android/support/v4/view/MenuItemCompat": {
-        "androidx/view/MenuItemCompat": [
-          "IMPL",
-          "SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW",
-          "SHOW_AS_ACTION_WITH_TEXT",
-          "SHOW_AS_ACTION_NEVER",
-          "SHOW_AS_ACTION_ALWAYS",
-          "SHOW_AS_ACTION_IF_ROOM",
-          "TAG"
-        ]
-      },
-      "android/support/v4/widget/CircleImageView": {
-        "androidx/widget/CircleImageView": [
-          "SHADOW_RADIUS",
-          "Y_OFFSET",
-          "X_OFFSET",
-          "KEY_SHADOW_COLOR",
-          "SHADOW_ELEVATION",
-          "FILL_SHADOW_COLOR"
-        ]
-      },
-      "android/support/v7/widget/SuggestionsAdapter": {
-        "androidx/widget/SuggestionsAdapter": [
-          "REFINE_NONE",
-          "LOG_TAG",
-          "REFINE_ALL",
-          "INVALID_INDEX",
-          "DBG",
-          "QUERY_LIMIT",
-          "REFINE_BY_ENTRY"
-        ]
-      },
-      "android/support/wear/widget/drawer/WearableActionDrawerView$ActionItemViewHolder": {
-        "androidx/wear/widget/drawer/WearableActionDrawerView$ActionItemViewHolder": [
-          "view",
-          "iconView",
-          "textView"
-        ]
-      },
-      "android/support/v14/preference/PreferenceDialogFragment": {
-        "androidx/preference/PreferenceDialogFragment": [
-          "SAVE_STATE_POSITIVE_TEXT",
-          "SAVE_STATE_TITLE",
-          "SAVE_STATE_ICON",
-          "ARG_KEY",
-          "SAVE_STATE_MESSAGE",
-          "SAVE_STATE_NEGATIVE_TEXT",
-          "SAVE_STATE_LAYOUT"
-        ]
-      },
-      "android/support/v4/media/session/IMediaControllerCallback$Stub": {
-        "androidx/media/session/IMediaControllerCallback$Stub": [
-          "TRANSACTION_onSessionDestroyed",
-          "TRANSACTION_onMetadataChanged",
-          "TRANSACTION_onEvent",
-          "TRANSACTION_onQueueChanged",
-          "TRANSACTION_onSessionReady",
-          "TRANSACTION_onCaptioningEnabledChanged",
-          "TRANSACTION_onVolumeInfoChanged",
-          "TRANSACTION_onShuffleModeChangedRemoved",
-          "TRANSACTION_onRepeatModeChanged",
-          "TRANSACTION_onPlaybackStateChanged",
-          "TRANSACTION_onQueueTitleChanged",
-          "TRANSACTION_onShuffleModeChanged",
-          "DESCRIPTOR",
-          "TRANSACTION_onExtrasChanged"
-        ]
-      },
-      "android/support/v7/preference/EditTextPreference$SavedState": {
-        "androidx/preference/EditTextPreference$SavedState": [
-          "text",
-          "CREATOR"
-        ]
-      },
-      "android/support/v17/leanback/widget/PagingIndicator$Dot": {
-        "androidx/leanback/widget/PagingIndicator$Dot": [
-          "LEFT",
-          "LTR",
-          "RIGHT",
-          "RTL"
-        ]
-      },
-      "android/support/v7/widget/ScrollingTabContainerView$TabView": {
-        "androidx/widget/ScrollingTabContainerView$TabView": [
-          "BG_ATTRS"
-        ]
-      },
-      "android/support/wear/ambient/SharedLibraryVersion$PresenceHolder": {
-        "androidx/wear/ambient/SharedLibraryVersion$PresenceHolder": [
-          "PRESENT"
-        ]
-      },
-      "android/support/v4/graphics/BitmapCompat": {
-        "androidx/graphics/BitmapCompat": [
-          "IMPL"
-        ]
-      },
-      "android/support/wear/R$fraction": {
-        "androidx/wear/R$fraction": [
-          "ws_action_drawer_item_right_padding",
-          "ws_action_drawer_item_last_item_bottom_padding",
-          "ws_action_drawer_item_left_padding",
-          "ws_action_drawer_item_first_item_top_padding"
-        ]
-      },
-      "android/support/v7/media/MediaSessionStatus": {
-        "androidx/media/MediaSessionStatus": [
-          "KEY_TIMESTAMP",
-          "SESSION_STATE_INVALIDATED",
-          "KEY_EXTRAS",
-          "KEY_QUEUE_PAUSED",
-          "KEY_SESSION_STATE",
-          "SESSION_STATE_ENDED",
-          "SESSION_STATE_ACTIVE"
-        ]
-      },
-      "android/support/v4/app/NotificationManagerCompat$CancelTask": {
-        "androidx/app/NotificationManagerCompat$CancelTask": [
-          "tag",
-          "all",
-          "id",
-          "packageName"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserCompat$MediaBrowserImplBase": {
-        "androidx/media/MediaBrowserCompat$MediaBrowserImplBase": [
-          "CONNECT_STATE_DISCONNECTED",
-          "CONNECT_STATE_CONNECTED",
-          "CONNECT_STATE_CONNECTING",
-          "CONNECT_STATE_SUSPENDED",
-          "CONNECT_STATE_DISCONNECTING"
-        ]
-      },
-      "android/support/wear/widget/WearableRecyclerView": {
-        "androidx/wear/widget/WearableRecyclerView": [
-          "TAG",
-          "NO_VALUE"
-        ]
-      },
-      "android/support/app/recommendation/RecommendationExtender": {
-        "androidx/app/recommendation/RecommendationExtender": [
-          "KEY_CONTENT_RUN_LENGTH",
-          "KEY_CONTENT_GENRES",
-          "KEY_CONTENT_TYPE",
-          "TAG",
-          "EXTRA_CONTENT_INFO_EXTENDER",
-          "KEY_CONTENT_MATURITY_RATING",
-          "KEY_CONTENT_STATUS",
-          "KEY_CONTENT_PRICING_VALUE",
-          "KEY_CONTENT_PRICING_TYPE"
-        ]
-      },
-      "android/support/v7/widget/ThemeUtils": {
-        "androidx/widget/ThemeUtils": [
-          "TEMP_ARRAY",
-          "DISABLED_STATE_SET",
-          "ACTIVATED_STATE_SET",
-          "NOT_PRESSED_OR_FOCUSED_STATE_SET",
-          "FOCUSED_STATE_SET",
-          "SELECTED_STATE_SET",
-          "CHECKED_STATE_SET",
-          "PRESSED_STATE_SET",
-          "EMPTY_STATE_SET",
-          "TL_TYPED_VALUE"
-        ]
-      },
-      "android/support/media/ExifInterface$ByteOrderedDataInputStream": {
-        "androidx/media/ExifInterface$ByteOrderedDataInputStream": [
-          "BIG_ENDIAN",
-          "LITTLE_ENDIAN"
-        ]
-      },
-      "android/support/v7/widget/helper/ItemTouchHelper$Callback": {
-        "androidx/widget/helper/ItemTouchHelper$Callback": [
-          "ABS_HORIZONTAL_DIR_FLAGS",
-          "sDragScrollInterpolator",
-          "DRAG_SCROLL_ACCELERATION_LIMIT_TIME_MS",
-          "DEFAULT_DRAG_ANIMATION_DURATION",
-          "RELATIVE_DIR_FLAGS",
-          "DEFAULT_SWIPE_ANIMATION_DURATION",
-          "sDragViewScrollCapInterpolator",
-          "sUICallback"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserServiceCompat$BrowserRoot": {
-        "androidx/media/MediaBrowserServiceCompat$BrowserRoot": [
-          "EXTRA_SUGGESTION_KEYWORDS",
-          "EXTRA_SUGGESTED",
-          "EXTRA_OFFLINE",
-          "EXTRA_RECENT"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsPresenter": {
-        "androidx/leanback/widget/PlaybackControlsPresenter": [
-          "sChildMarginBigger",
-          "sChildMarginBiggest"
-        ]
-      },
-      "android/support/v7/preference/PreferenceDialogFragmentCompat": {
-        "androidx/preference/PreferenceDialogFragmentCompat": [
-          "SAVE_STATE_LAYOUT",
-          "ARG_KEY",
-          "SAVE_STATE_ICON",
-          "SAVE_STATE_MESSAGE",
-          "SAVE_STATE_TITLE",
-          "SAVE_STATE_NEGATIVE_TEXT",
-          "SAVE_STATE_POSITIVE_TEXT"
-        ]
-      },
-      "android/support/v7/app/TwilightManager": {
-        "androidx/app/TwilightManager": [
-          "SUNRISE",
-          "SUNSET",
-          "TAG",
-          "sInstance"
-        ]
-      },
-      "android/support/v4/graphics/drawable/DrawableCompat": {
-        "androidx/graphics/drawable/DrawableCompat": [
-          "sSetLayoutDirectionMethod",
-          "sGetLayoutDirectionMethodFetched",
-          "sGetLayoutDirectionMethod",
-          "TAG",
-          "sSetLayoutDirectionMethodFetched"
-        ]
-      },
-      "android/support/v4/graphics/drawable/RoundedBitmapDrawableFactory": {
-        "androidx/graphics/drawable/RoundedBitmapDrawableFactory": [
-          "TAG"
-        ]
-      },
-      "android/support/transition/GhostViewApi21": {
-        "androidx/transition/GhostViewApi21": [
-          "sAddGhostMethod",
-          "TAG",
-          "sRemoveGhostMethod",
-          "sAddGhostMethodFetched",
-          "sRemoveGhostMethodFetched",
-          "sGhostViewClassFetched",
-          "sGhostViewClass"
-        ]
-      },
-      "android/support/v7/app/ActionBar": {
-        "androidx/app/ActionBar": [
-          "NAVIGATION_MODE_TABS",
-          "NAVIGATION_MODE_LIST",
-          "DISPLAY_SHOW_TITLE",
-          "DISPLAY_SHOW_CUSTOM",
-          "DISPLAY_USE_LOGO",
-          "NAVIGATION_MODE_STANDARD",
-          "DISPLAY_HOME_AS_UP",
-          "DISPLAY_SHOW_HOME"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$WatchNextPrograms": {
-        "androidx/media/tv/TvContractCompat$WatchNextPrograms": [
-          "WATCH_NEXT_TYPE_WATCHLIST",
-          "WATCH_NEXT_TYPE_CONTINUE",
-          "WATCH_NEXT_TYPE_NEXT",
-          "COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS",
-          "CONTENT_URI",
-          "WATCH_NEXT_TYPE_NEW",
-          "CONTENT_TYPE",
-          "COLUMN_WATCH_NEXT_TYPE",
-          "CONTENT_ITEM_TYPE"
-        ]
-      },
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat": {
-        "androidx/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat": [
-          "SELECTION_MODE_MULTIPLE",
-          "SELECTION_MODE_SINGLE",
-          "SELECTION_MODE_NONE"
-        ]
-      },
-      "android/support/v17/preference/R$id": {
-        "androidx/leanback/preference/R$id": [
-          "button",
-          "settings_preference_fragment_container",
-          "main_frame",
-          "container",
-          "decor_title",
-          "settings_dialog_container"
-        ]
-      },
-      "android/support/wear/R$style": {
-        "androidx/wear/R$style": [
-          "Widget_Wear_WearableDrawerView",
-          "WsPageIndicatorViewStyle"
-        ]
-      },
-      "android/support/v17/leanback/widget/GuidedActionAdapterGroup": {
-        "androidx/leanback/widget/GuidedActionAdapterGroup": [
-          "TAG_EDIT",
-          "DEBUG_EDIT"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$PackedMap": {
-        "androidx/widget/GridLayout$PackedMap": [
-          "values",
-          "index",
-          "keys"
-        ]
-      },
-      "android/support/v7/widget/ActionBarOverlayLayout": {
-        "androidx/widget/ActionBarOverlayLayout": [
-          "TAG",
-          "ATTRS",
-          "ACTION_BAR_ANIMATE_DELAY"
-        ]
-      },
-      "android/support/v4/app/NavUtils": {
-        "androidx/app/NavUtils": [
-          "TAG",
-          "PARENT_ACTIVITY"
-        ]
-      },
-      "android/support/v7/media/RemotePlaybackClient$ActionReceiver": {
-        "androidx/media/RemotePlaybackClient$ActionReceiver": [
-          "ACTION_ITEM_STATUS_CHANGED",
-          "ACTION_MESSAGE_RECEIVED",
-          "ACTION_SESSION_STATUS_CHANGED"
-        ]
-      },
-      "android/support/v4/app/JobIntentService$JobServiceEngineImpl": {
-        "androidx/app/JobIntentService$JobServiceEngineImpl": [
-          "TAG",
-          "DEBUG"
-        ]
-      },
-      "android/support/v4/app/FragmentActivity$NonConfigurationInstances": {
-        "androidx/app/FragmentActivity$NonConfigurationInstances": [
-          "custom",
-          "fragments",
-          "loaders"
-        ]
-      },
-      "android/support/text/emoji/flatbuffer/FlatBufferBuilder": {
-        "androidx/text/emoji/flatbuffer/FlatBufferBuilder": [
-          "encoder",
-          "vtable_in_use",
-          "minalign",
-          "vtables",
-          "num_vtables",
-          "force_defaults",
-          "space",
-          "bb",
-          "object_start",
-          "vtable",
-          "dst",
-          "vector_num_elems",
-          "nested",
-          "finished",
-          "utf8charset"
-        ]
-      },
-      "android/support/v7/mediarouter/R$interpolator": {
-        "androidx/mediarouter/R$interpolator": [
-          "mr_fast_out_slow_in",
-          "mr_linear_out_slow_in"
-        ]
-      },
-      "android/support/v7/recyclerview/R$dimen": {
-        "androidx/recyclerview/R$dimen": [
-          "item_touch_helper_max_drag_scroll_per_frame",
-          "fastscroll_minimum_range",
-          "item_touch_helper_swipe_escape_max_velocity",
-          "fastscroll_default_thickness",
-          "item_touch_helper_swipe_escape_velocity",
-          "fastscroll_margin"
-        ]
-      },
-      "android/support/v4/app/ShareCompat": {
-        "androidx/app/ShareCompat": [
-          "EXTRA_CALLING_PACKAGE",
-          "HISTORY_FILENAME_PREFIX",
-          "EXTRA_CALLING_ACTIVITY"
-        ]
-      },
-      "android/support/v4/media/AudioAttributesCompatApi21": {
-        "androidx/media/AudioAttributesCompatApi21": [
-          "TAG",
-          "sAudioAttributesToLegacyStreamType"
-        ]
-      },
-      "android/support/customtabs/CustomTabsCallback": {
-        "androidx/browser/customtabs/CustomTabsCallback": [
-          "NAVIGATION_FINISHED",
-          "NAVIGATION_ABORTED",
-          "NAVIGATION_FAILED",
-          "NAVIGATION_STARTED",
-          "TAB_HIDDEN",
-          "TAB_SHOWN"
-        ]
-      },
-      "android/support/wear/widget/CircularProgressLayout": {
-        "androidx/wear/widget/CircularProgressLayout": [
-          "DEFAULT_ROTATION",
-          "DEFAULT_UPDATE_INTERVAL"
-        ]
-      },
-      "android/support/v17/leanback/widget/ListRowPresenter": {
-        "androidx/leanback/widget/ListRowPresenter": [
-          "DEBUG",
-          "TAG",
-          "sExpandedSelectedRowTopPadding",
-          "DEFAULT_RECYCLED_POOL_SIZE",
-          "sExpandedRowNoHovercardBottomPadding",
-          "sSelectedRowTopPadding"
-        ]
-      },
-      "android/support/v7/preference/PreferenceGroupAdapter$PreferenceLayout": {
-        "androidx/preference/PreferenceGroupAdapter$PreferenceLayout": [
-          "widgetResId",
-          "resId",
-          "name"
-        ]
-      },
-      "android/support/transition/Styleable$Transition": {
-        "androidx/transition/Styleable$Transition": [
-          "MATCH_ORDER",
-          "START_DELAY",
-          "DURATION",
-          "INTERPOLATOR"
-        ]
-      },
-      "android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat": {
-        "androidx/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat": [
-          "RANGE_TYPE_PERCENT",
-          "RANGE_TYPE_INT",
-          "RANGE_TYPE_FLOAT"
-        ]
-      },
-      "android/support/transition/Styleable$Fade": {
-        "androidx/transition/Styleable$Fade": [
-          "FADING_MODE"
-        ]
-      },
-      "android/support/v4/app/SharedElementCallback": {
-        "androidx/app/SharedElementCallback": [
-          "BUNDLE_SNAPSHOT_BITMAP",
-          "BUNDLE_SNAPSHOT_IMAGE_MATRIX",
-          "BUNDLE_SNAPSHOT_IMAGE_SCALETYPE",
-          "MAX_IMAGE_SIZE"
-        ]
-      },
-      "android/support/design/widget/ThemeUtils": {
-        "androidx/design/widget/ThemeUtils": [
-          "APPCOMPAT_CHECK_ATTRS"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$Programs": {
-        "androidx/media/tv/TvContractCompat$Programs": [
-          "COLUMN_BROADCAST_GENRE",
-          "COLUMN_CHANNEL_ID",
-          "COLUMN_START_TIME_UTC_MILLIS",
-          "CONTENT_ITEM_TYPE",
-          "CONTENT_TYPE",
-          "COLUMN_EPISODE_NUMBER",
-          "COLUMN_END_TIME_UTC_MILLIS",
-          "COLUMN_RECORDING_PROHIBITED",
-          "CONTENT_URI",
-          "COLUMN_SEASON_NUMBER"
-        ]
-      },
-      "android/support/v17/leanback/R$integer": {
-        "androidx/leanback/R$integer": [
-          "lb_details_description_body_min_lines",
-          "lb_search_orb_pulse_duration_ms",
-          "lb_search_bar_speech_mode_background_alpha",
-          "lb_search_bar_text_mode_background_alpha",
-          "lb_details_description_body_max_lines",
-          "lb_card_activated_animation_duration",
-          "lb_card_selected_animation_duration",
-          "lb_search_orb_scale_duration_ms",
-          "lb_browse_rows_anim_duration",
-          "lb_playback_controls_show_time_ms",
-          "lb_card_selected_animation_delay"
-        ]
-      },
-      "android/support/mediacompat/R$id": {
-        "androidx/mediacompat/R$id": [
-          "action0",
-          "media_actions",
-          "cancel_action",
-          "status_bar_latest_event_content",
-          "end_padder"
-        ]
-      },
-      "android/support/v17/leanback/widget/Row": {
-        "androidx/leanback/widget/Row": [
-          "FLAG_ID_USE_HEADER",
-          "FLAG_ID_USE_ID",
-          "FLAG_ID_USE_MASK"
-        ]
-      },
-      "android/support/compat/R$layout": {
-        "androidx/compat/R$layout": [
-          "notification_action_tombstone",
-          "notification_template_custom_big",
-          "notification_action"
-        ]
-      },
-      "android/support/v4/app/FragmentManagerImpl$AnimationOrAnimator": {
-        "androidx/app/FragmentManagerImpl$AnimationOrAnimator": [
-          "animator",
-          "animation"
-        ]
-      },
-      "android/support/transition/VisibilityPropagation": {
-        "androidx/transition/VisibilityPropagation": [
-          "PROPNAME_VISIBILITY",
-          "PROPNAME_VIEW_CENTER",
-          "VISIBILITY_PROPAGATION_VALUES"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$Action$WearableExtender": {
-        "androidx/app/NotificationCompat$Action$WearableExtender": [
-          "KEY_FLAGS",
-          "KEY_CONFIRM_LABEL",
-          "KEY_CANCEL_LABEL",
-          "FLAG_HINT_LAUNCHES_ACTIVITY",
-          "KEY_IN_PROGRESS_LABEL",
-          "EXTRA_WEARABLE_EXTENSIONS",
-          "FLAG_AVAILABLE_OFFLINE",
-          "FLAG_HINT_DISPLAY_INLINE",
-          "DEFAULT_FLAGS"
-        ]
-      },
-      "android/support/v4/view/ViewPager$ItemInfo": {
-        "androidx/view/ViewPager$ItemInfo": [
-          "offset",
-          "object",
-          "position",
-          "widthFactor",
-          "scrolling"
-        ]
-      },
-      "android/support/v17/leanback/transition/TransitionHelper": {
-        "androidx/leanback/transition/TransitionHelper": [
-          "SLIDE_RIGHT",
-          "sImpl",
-          "SLIDE_BOTTOM",
-          "FADE_OUT",
-          "SLIDE_TOP",
-          "FADE_IN",
-          "SLIDE_LEFT"
-        ]
-      },
-      "android/support/v4/widget/AutoSizeableTextView": {
-        "androidx/widget/AutoSizeableTextView": [
-          "PLATFORM_SUPPORTS_AUTOSIZE"
-        ]
-      },
-      "android/support/v7/widget/SimpleItemAnimator": {
-        "androidx/widget/SimpleItemAnimator": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/transition/TransitionManager": {
-        "androidx/transition/TransitionManager": [
-          "sPendingTransitions",
-          "sRunningTransitions",
-          "sDefaultTransition",
-          "LOG_TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/WindowAlignment$Axis": {
-        "androidx/leanback/widget/WindowAlignment$Axis": [
-          "PF_KEYLINE_OVER_HIGH_EDGE",
-          "PF_KEYLINE_OVER_LOW_EDGE"
-        ]
-      },
-      "android/support/v7/widget/AppCompatPopupWindow": {
-        "androidx/widget/AppCompatPopupWindow": [
-          "COMPAT_OVERLAP_ANCHOR"
-        ]
-      },
-      "android/support/constraint/solver/widgets/ConstraintAnchor$Type": {
-        "androidx/constraint/solver/widgets/ConstraintAnchor$Type": [
-          "RIGHT",
-          "TOP",
-          "BOTTOM",
-          "LEFT",
-          "BASELINE"
-        ]
-      },
-      "android/support/wear/widget/drawer/WearableDrawerLayout": {
-        "androidx/wear/widget/drawer/WearableDrawerLayout": [
-          "TAG",
-          "UP",
-          "OPENED_PERCENT_THRESHOLD",
-          "NESTED_SCROLL_SLOP_DP",
-          "GRAVITY_UNDEFINED",
-          "DOWN",
-          "PEEK_FADE_DURATION_MS",
-          "PEEK_AUTO_CLOSE_DELAY_MS"
-        ]
-      },
-      "android/support/v17/leanback/widget/ShadowOverlayHelper$Builder": {
-        "androidx/leanback/widget/ShadowOverlayHelper$Builder": [
-          "options",
-          "needsRoundedCorner",
-          "keepForegroundDrawable",
-          "preferZOrder",
-          "needsOverlay",
-          "needsShadow"
-        ]
-      },
-      "android/support/v7/media/MediaRouteProvider": {
-        "androidx/media/MediaRouteProvider": [
-          "MSG_DELIVER_DESCRIPTOR_CHANGED",
-          "MSG_DELIVER_DISCOVERY_REQUEST_CHANGED"
-        ]
-      },
-      "android/support/design/widget/AppBarLayout$LayoutParams": {
-        "androidx/design/widget/AppBarLayout$LayoutParams": [
-          "SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED",
-          "bottomMargin",
-          "topMargin",
-          "SCROLL_FLAG_EXIT_UNTIL_COLLAPSED",
-          "SCROLL_FLAG_SCROLL",
-          "COLLAPSIBLE_FLAGS",
-          "FLAG_SNAP",
-          "SCROLL_FLAG_SNAP",
-          "FLAG_QUICK_RETURN",
-          "SCROLL_FLAG_ENTER_ALWAYS"
-        ]
-      },
-      "android/support/v7/media/MediaRouterJellybean": {
-        "androidx/media/MediaRouterJellybean": [
-          "TAG",
-          "DEVICE_OUT_BLUETOOTH",
-          "ROUTE_TYPE_LIVE_AUDIO",
-          "ROUTE_TYPE_USER",
-          "ROUTE_TYPE_LIVE_VIDEO",
-          "ALL_ROUTE_TYPES"
-        ]
-      },
-      "android/support/content/LoaderQueryRunner": {
-        "androidx/content/LoaderQueryRunner": [
-          "TAG",
-          "CONTENT_URI_KEY",
-          "DEBUG"
-        ]
-      },
-      "android/support/v17/leanback/app/BackgroundManager$BackgroundContinuityService": {
-        "androidx/leanback/app/BackgroundManager$BackgroundContinuityService": [
-          "DEBUG",
-          "TAG",
-          "sService"
-        ]
-      },
-      "android/support/design/internal/NavigationMenuPresenter": {
-        "androidx/design/internal/NavigationMenuPresenter": [
-          "STATE_HEADER",
-          "STATE_ADAPTER",
-          "STATE_HIERARCHY"
-        ]
-      },
-      "android/support/v17/leanback/widget/RowPresenter$ViewHolder": {
-        "androidx/leanback/widget/RowPresenter$ViewHolder": [
-          "ACTIVATED_NOT_ASSIGNED",
-          "NOT_ACTIVATED",
-          "ACTIVATED",
-          "view"
-        ]
-      },
-      "android/support/v7/widget/AppCompatCheckedTextView": {
-        "androidx/widget/AppCompatCheckedTextView": [
-          "TINT_ATTRS"
-        ]
-      },
-      "android/support/transition/ChangeImageTransform": {
-        "androidx/transition/ChangeImageTransform": [
-          "PROPNAME_BOUNDS",
-          "NULL_MATRIX_EVALUATOR",
-          "ANIMATED_TRANSFORM_PROPERTY",
-          "sTransitionProperties",
-          "PROPNAME_MATRIX"
-        ]
-      },
-      "android/support/design/widget/AppBarLayout$Behavior$SavedState": {
-        "androidx/design/widget/AppBarLayout$Behavior$SavedState": [
-          "firstVisibleChildIndex",
-          "firstVisibleChildPercentageShown",
-          "firstVisibleChildAtMinimumHeight",
-          "CREATOR"
-        ]
-      },
-      "android/support/design/widget/Snackbar": {
-        "androidx/design/widget/Snackbar": [
-          "LENGTH_SHORT",
-          "LENGTH_INDEFINITE",
-          "LENGTH_LONG"
-        ]
-      },
-      "android/support/v7/app/ActionBarDrawerToggleHoneycomb$SetIndicatorInfo": {
-        "androidx/app/ActionBarDrawerToggleHoneycomb$SetIndicatorInfo": [
-          "setHomeActionContentDescription",
-          "setHomeAsUpIndicator",
-          "upIndicatorView"
-        ]
-      },
-      "android/support/v17/leanback/widget/Grid": {
-        "androidx/leanback/widget/Grid": [
-          "START_DEFAULT"
-        ]
-      },
-      "android/support/media/tv/WatchNextProgram": {
-        "androidx/media/tv/WatchNextProgram": [
-          "PROJECTION",
-          "INVALID_INT_VALUE",
-          "INVALID_LONG_VALUE"
-        ]
-      },
-      "android/support/v7/widget/TintContextWrapper": {
-        "androidx/widget/TintContextWrapper": [
-          "CACHE_LOCK",
-          "sCache"
-        ]
-      },
-      "android/support/text/emoji/flatbuffer/Constants": {
-        "androidx/text/emoji/flatbuffer/Constants": [
-          "SIZEOF_INT",
-          "SIZEOF_FLOAT",
-          "SIZEOF_LONG",
-          "FILE_IDENTIFIER_LENGTH",
-          "SIZEOF_SHORT",
-          "SIZEOF_BYTE",
-          "SIZEOF_DOUBLE"
-        ]
-      },
-      "android/support/wear/widget/CurvingLayoutCallback": {
-        "androidx/wear/widget/CurvingLayoutCallback": [
-          "EPSILON"
-        ]
-      },
-      "android/support/v4/app/AppOpsManagerCompat": {
-        "androidx/app/AppOpsManagerCompat": [
-          "MODE_IGNORED",
-          "MODE_DEFAULT",
-          "MODE_ALLOWED"
-        ]
-      },
-      "android/support/v4/widget/CursorAdapter": {
-        "androidx/widget/CursorAdapter": [
-          "FLAG_AUTO_REQUERY",
-          "FLAG_REGISTER_CONTENT_OBSERVER"
-        ]
-      },
-      "android/support/v17/leanback/app/DetailsBackgroundVideoHelper": {
-        "androidx/leanback/app/DetailsBackgroundVideoHelper": [
-          "NO_VIDEO",
-          "CROSSFADE_DELAY",
-          "INITIAL",
-          "BACKGROUND_CROSS_FADE_DURATION",
-          "PLAY_VIDEO"
-        ]
-      },
-      "android/support/transition/ChangeBounds": {
-        "androidx/transition/ChangeBounds": [
-          "PROPNAME_BOUNDS",
-          "POSITION_PROPERTY",
-          "sRectEvaluator",
-          "BOTTOM_RIGHT_PROPERTY",
-          "BOTTOM_RIGHT_ONLY_PROPERTY",
-          "DRAWABLE_ORIGIN_PROPERTY",
-          "sTransitionProperties",
-          "TOP_LEFT_ONLY_PROPERTY",
-          "PROPNAME_PARENT",
-          "TOP_LEFT_PROPERTY",
-          "PROPNAME_CLIP",
-          "PROPNAME_WINDOW_X",
-          "PROPNAME_WINDOW_Y"
-        ]
-      },
-      "android/support/v4/widget/SwipeProgressBar": {
-        "androidx/widget/SwipeProgressBar": [
-          "INTERPOLATOR",
-          "ANIMATION_DURATION_MS",
-          "FINISH_ANIMATION_DURATION_MS",
-          "COLOR2",
-          "COLOR1",
-          "COLOR4",
-          "COLOR3"
-        ]
-      },
-      "android/support/v17/leanback/media/PlaybackTransportControlGlue": {
-        "androidx/leanback/media/PlaybackTransportControlGlue": [
-          "UPDATE_PLAYBACK_STATE_DELAY_MS",
-          "sHandler",
-          "TAG",
-          "DEBUG",
-          "MSG_UPDATE_PLAYBACK_STATE"
-        ]
-      },
-      "android/support/media/tv/BasePreviewProgram": {
-        "androidx/media/tv/BasePreviewProgram": [
-          "IS_LIVE",
-          "IS_TRANSIENT",
-          "PROJECTION",
-          "INVALID_LONG_VALUE",
-          "INVALID_INT_VALUE",
-          "IS_BROWSABLE"
-        ]
-      },
-      "android/support/v4/widget/TextViewCompat$TextViewCompatBaseImpl": {
-        "androidx/widget/TextViewCompat$TextViewCompatBaseImpl": [
-          "sMaxModeFieldFetched",
-          "sMinimumFieldFetched",
-          "sMinModeField",
-          "sMaximumField",
-          "sMinModeFieldFetched",
-          "sMaxModeField",
-          "sMinimumField",
-          "LOG_TAG",
-          "sMaximumFieldFetched",
-          "LINES"
-        ]
-      },
-      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl$VolumeChangeReceiver": {
-        "androidx/media/SystemMediaRouteProvider$LegacyImpl$VolumeChangeReceiver": [
-          "EXTRA_VOLUME_STREAM_TYPE",
-          "VOLUME_CHANGED_ACTION",
-          "EXTRA_VOLUME_STREAM_VALUE"
-        ]
-      },
-      "android/support/transition/Styleable$ChangeBounds": {
-        "androidx/transition/Styleable$ChangeBounds": [
-          "RESIZE_CLIP"
-        ]
-      },
-      "android/support/v7/widget/ActivityChooserModel": {
-        "androidx/widget/ActivityChooserModel": [
-          "DEFAULT_ACTIVITY_INFLATION",
-          "ATTRIBUTE_TIME",
-          "TAG_HISTORICAL_RECORD",
-          "DEFAULT_HISTORY_FILE_NAME",
-          "HISTORY_FILE_EXTENSION",
-          "TAG_HISTORICAL_RECORDS",
-          "ATTRIBUTE_ACTIVITY",
-          "ATTRIBUTE_WEIGHT",
-          "DEBUG",
-          "INVALID_INDEX",
-          "DEFAULT_HISTORICAL_RECORD_WEIGHT",
-          "sDataModelRegistry",
-          "sRegistryLock",
-          "DEFAULT_HISTORY_MAX_LENGTH",
-          "LOG_TAG"
-        ]
-      },
-      "android/support/v7/widget/ViewUtils": {
-        "androidx/widget/ViewUtils": [
-          "TAG",
-          "sComputeFitSystemWindowsMethod"
-        ]
-      },
-      "android/support/v14/preference/ListPreferenceDialogFragment": {
-        "androidx/preference/ListPreferenceDialogFragment": [
-          "SAVE_STATE_ENTRIES",
-          "SAVE_STATE_INDEX",
-          "SAVE_STATE_ENTRY_VALUES"
-        ]
-      },
-      "android/support/v17/leanback/widget/RoundedRectHelper": {
-        "androidx/leanback/widget/RoundedRectHelper": [
-          "sInstance"
-        ]
-      },
-      "android/support/transition/Styleable$TransitionManager": {
-        "androidx/transition/Styleable$TransitionManager": [
-          "FROM_SCENE",
-          "TRANSITION",
-          "TO_SCENE"
-        ]
-      },
-      "android/support/v17/leanback/R$style": {
-        "androidx/leanback/R$style": [
-          "TextAppearance_Leanback_SearchTextEdit",
-          "Widget_Leanback_ImageCardView"
-        ]
-      },
-      "android/support/v7/widget/ShareActionProvider": {
-        "androidx/widget/ShareActionProvider": [
-          "DEFAULT_SHARE_HISTORY_FILE_NAME",
-          "DEFAULT_INITIAL_ACTIVITY_COUNT"
-        ]
-      },
-      "android/support/v4/app/ListFragment": {
-        "androidx/app/ListFragment": [
-          "INTERNAL_EMPTY_ID",
-          "INTERNAL_PROGRESS_CONTAINER_ID",
-          "INTERNAL_LIST_CONTAINER_ID"
-        ]
-      },
-      "android/support/design/widget/BottomSheetBehavior$SavedState": {
-        "androidx/design/widget/BottomSheetBehavior$SavedState": [
-          "state",
-          "CREATOR"
-        ]
-      },
-      "android/support/v7/appcompat/R$color": {
-        "androidx/appcompat/R$color": [
-          "abc_tint_switch_track",
-          "abc_tint_edittext",
-          "abc_tint_btn_checkable",
-          "abc_tint_default",
-          "abc_tint_spinner",
-          "abc_tint_seek_thumb",
-          "error_color_material",
-          "abc_input_method_navigation_guard"
-        ]
-      },
-      "android/support/v17/leanback/R$raw": {
-        "androidx/leanback/R$raw": [
-          "lb_voice_no_input",
-          "lb_voice_failure",
-          "lb_voice_success",
-          "lb_voice_open"
-        ]
-      },
-      "android/support/v7/util/DiffUtil$PostponedUpdate": {
-        "androidx/util/DiffUtil$PostponedUpdate": [
-          "posInOwnerList",
-          "removal",
-          "currentPos"
-        ]
-      },
-      "android/support/v7/graphics/drawable/DrawerArrowDrawable": {
-        "androidx/graphics/drawable/DrawerArrowDrawable": [
-          "ARROW_DIRECTION_LEFT",
-          "ARROW_HEAD_ANGLE",
-          "ARROW_DIRECTION_RIGHT",
-          "ARROW_DIRECTION_END",
-          "ARROW_DIRECTION_START"
-        ]
-      },
-      "android/support/v4/os/IResultReceiver$Stub": {
-        "androidx/os/IResultReceiver$Stub": [
-          "TRANSACTION_send",
-          "DESCRIPTOR"
-        ]
-      },
-      "android/support/v7/util/DiffUtil$Range": {
-        "androidx/util/DiffUtil$Range": [
-          "newListEnd",
-          "oldListEnd",
-          "newListStart",
-          "oldListStart"
-        ]
-      },
-      "android/support/v7/widget/ActionMenuPresenter$SavedState": {
-        "androidx/widget/ActionMenuPresenter$SavedState": [
-          "CREATOR",
-          "openSubMenuId"
-        ]
-      },
-      "android/support/v17/leanback/widget/GuidedActionAdapter": {
-        "androidx/leanback/widget/GuidedActionAdapter": [
-          "DEBUG",
-          "DEBUG_EDIT",
-          "TAG_EDIT",
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/AppCompatMultiAutoCompleteTextView": {
-        "androidx/widget/AppCompatMultiAutoCompleteTextView": [
-          "TINT_ATTRS"
-        ]
-      },
-      "android/support/compat/R$dimen": {
-        "androidx/compat/R$dimen": [
-          "notification_small_icon_background_padding",
-          "notification_top_pad_large_text",
-          "notification_large_icon_width",
-          "notification_small_icon_size_as_large",
-          "notification_big_circle_margin",
-          "notification_subtext_size",
-          "notification_top_pad",
-          "notification_right_icon_size"
-        ]
-      },
-      "android/support/customtabs/CustomTabsSessionToken": {
-        "androidx/browser/customtabs/CustomTabsSessionToken": [
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/StaggeredGrid$Location": {
-        "androidx/leanback/widget/StaggeredGrid$Location": [
-          "row",
-          "offset",
-          "size"
-        ]
-      },
-      "android/support/compat/R$color": {
-        "androidx/compat/R$color": [
-          "notification_action_color_filter"
-        ]
-      },
-      "android/support/v7/widget/DefaultItemAnimator$ChangeInfo": {
-        "androidx/widget/DefaultItemAnimator$ChangeInfo": [
-          "toY",
-          "toX",
-          "oldHolder",
-          "newHolder",
-          "fromY",
-          "fromX"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsPresenter$ViewHolder": {
-        "androidx/leanback/widget/PlaybackControlsPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v4/app/DialogFragment": {
-        "androidx/app/DialogFragment": [
-          "SAVED_SHOWS_DIALOG",
-          "STYLE_NORMAL",
-          "STYLE_NO_INPUT",
-          "SAVED_CANCELABLE",
-          "SAVED_THEME",
-          "SAVED_DIALOG_STATE_TAG",
-          "STYLE_NO_TITLE",
-          "SAVED_BACK_STACK_ID",
-          "STYLE_NO_FRAME",
-          "SAVED_STYLE"
-        ]
-      },
-      "android/support/v17/leanback/widget/BaseCardView$LayoutParams": {
-        "androidx/leanback/widget/BaseCardView$LayoutParams": [
-          "VIEW_TYPE_INFO",
-          "VIEW_TYPE_MAIN",
-          "VIEW_TYPE_EXTRA",
-          "viewType"
-        ]
-      },
-      "android/support/wear/ambient/WearableControllerProvider": {
-        "androidx/wear/ambient/WearableControllerProvider": [
-          "TAG",
-          "sAmbientCallbacksVerifiedPresent"
-        ]
-      },
-      "android/support/design/R$anim": {
-        "androidx/design/R$anim": [
-          "design_snackbar_out",
-          "design_snackbar_in"
-        ]
-      },
-      "android/support/wear/ambient/AmbientMode": {
-        "androidx/wear/ambient/AmbientMode": [
-          "FRAGMENT_TAG",
-          "EXTRA_BURN_IN_PROTECTION",
-          "EXTRA_LOWBIT_AMBIENT"
-        ]
-      },
-      "android/support/text/emoji/flatbuffer/MetadataItem": {
-        "androidx/text/emoji/flatbuffer/MetadataItem": [
-          "bb_pos",
-          "bb"
-        ]
-      },
-      "android/support/v13/app/FragmentStatePagerAdapter": {
-        "androidx/app/legacy/FragmentStatePagerAdapter": [
-          "TAG",
-          "DEBUG"
-        ]
-      },
-      "android/support/v17/leanback/transition/LeanbackTransitionHelper": {
-        "androidx/leanback/transition/LeanbackTransitionHelper": [
-          "sImpl"
-        ]
-      },
-      "android/support/v7/view/menu/MenuItemWrapperICS": {
-        "androidx/view/menu/MenuItemWrapperICS": [
-          "LOG_TAG"
-        ]
-      },
-      "android/support/v4/content/IntentCompat": {
-        "androidx/content/IntentCompat": [
-          "EXTRA_HTML_TEXT",
-          "CATEGORY_LEANBACK_LAUNCHER",
-          "EXTRA_START_PLAYBACK"
-        ]
-      },
-      "android/support/graphics/drawable/AnimatedVectorDrawableCompat": {
-        "androidx/graphics/drawable/AnimatedVectorDrawableCompat": [
-          "LOGTAG",
-          "TARGET",
-          "ANIMATED_VECTOR",
-          "DBG_ANIMATION_VECTOR_DRAWABLE"
-        ]
-      },
-      "android/support/v7/appcompat/R$style": {
-        "androidx/appcompat/R$style": [
-          "Base_Widget_AppCompat_DrawerArrowToggle",
-          "Theme_AppCompat_Light",
-          "TextAppearance_AppCompat_Caption",
-          "Theme_AppCompat_CompactMenu",
-          "TextAppearance_AppCompat_Widget_ActionBar_Title",
-          "Animation_AppCompat_Tooltip"
-        ]
-      },
-      "android/support/media/instantvideo/widget/InstantVideoView": {
-        "androidx/media/instantvideo/widget/InstantVideoView": [
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/transition/Scale": {
-        "androidx/leanback/transition/Scale": [
-          "PROPNAME_SCALE"
-        ]
-      },
-      "android/support/v4/content/WakefulBroadcastReceiver": {
-        "androidx/content/WakefulBroadcastReceiver": [
-          "EXTRA_WAKE_LOCK_ID",
-          "sActiveWakeLocks"
-        ]
-      },
-      "android/support/v17/leanback/widget/VerticalGridPresenter": {
-        "androidx/leanback/widget/VerticalGridPresenter": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/PersistentFocusWrapper": {
-        "androidx/leanback/widget/PersistentFocusWrapper": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v4/provider/SelfDestructiveThread": {
-        "androidx/provider/SelfDestructiveThread": [
-          "MSG_DESTRUCTION",
-          "MSG_INVOKE_RUNNABLE"
-        ]
-      },
-      "android/support/customtabs/TrustedWebUtils": {
-        "androidx/browser/customtabs/TrustedWebUtils": [
-          "EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY"
-        ]
-      },
-      "android/support/v17/leanback/app/RowsSupportFragment": {
-        "androidx/leanback/app/RowsSupportFragment": [
-          "TAG",
-          "ALIGN_TOP_NOT_SET",
-          "DEBUG"
-        ]
-      },
-      "android/support/v17/leanback/widget/ScaleFrameLayout": {
-        "androidx/leanback/widget/ScaleFrameLayout": [
-          "DEFAULT_CHILD_GRAVITY"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserCompat$MediaItem": {
-        "androidx/media/MediaBrowserCompat$MediaItem": [
-          "CREATOR",
-          "FLAG_PLAYABLE",
-          "FLAG_BROWSABLE"
-        ]
-      },
-      "android/support/v4/provider/FontsContractCompat$FontRequestCallback": {
-        "androidx/provider/FontsContractCompat$FontRequestCallback": [
-          "FAIL_REASON_WRONG_CERTIFICATES",
-          "FAIL_REASON_FONT_UNAVAILABLE",
-          "FAIL_REASON_MALFORMED_QUERY",
-          "FAIL_REASON_SECURITY_VIOLATION",
-          "FAIL_REASON_FONT_LOAD_ERROR",
-          "RESULT_OK",
-          "FAIL_REASON_FONT_NOT_FOUND",
-          "FAIL_REASON_PROVIDER_NOT_FOUND"
-        ]
-      },
-      "android/support/v4/widget/NestedScrollView$SavedState": {
-        "androidx/widget/NestedScrollView$SavedState": [
-          "CREATOR",
-          "scrollPosition"
-        ]
-      },
-      "android/support/text/emoji/R$layout": {
-        "androidx/text/emoji/R$layout": [
-          "input_method_extract_view"
-        ]
-      },
-      "android/support/v4/app/FragmentManagerImpl$FragmentTag": {
-        "androidx/app/FragmentManagerImpl$FragmentTag": [
-          "Fragment",
-          "Fragment_tag",
-          "Fragment_name",
-          "Fragment_id"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$Assoc": {
-        "androidx/widget/GridLayout$Assoc": [
-          "keyType",
-          "valueType"
-        ]
-      },
-      "android/support/v4/app/LoaderManagerImpl": {
-        "androidx/app/LoaderManagerImpl": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v7/appcompat/R$string": {
-        "androidx/appcompat/R$string": [
-          "abc_action_bar_up_description",
-          "abc_searchview_description_search",
-          "abc_activity_chooser_view_see_all",
-          "abc_shareactionprovider_share_with",
-          "abc_shareactionprovider_share_with_application",
-          "abc_activitychooserview_choose_application"
-        ]
-      },
-      "android/support/v7/widget/AppCompatAutoCompleteTextView": {
-        "androidx/widget/AppCompatAutoCompleteTextView": [
-          "TINT_ATTRS"
-        ]
-      },
-      "android/support/v7/widget/ChildHelper": {
-        "androidx/widget/ChildHelper": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/wear/ambient/SharedLibraryVersion$VersionHolder": {
-        "androidx/wear/ambient/SharedLibraryVersion$VersionHolder": [
-          "VERSION"
-        ]
-      },
-      "android/support/media/tv/BaseProgram": {
-        "androidx/media/tv/BaseProgram": [
-          "INVALID_LONG_VALUE",
-          "PROJECTION",
-          "IS_SEARCHABLE",
-          "INVALID_INT_VALUE"
-        ]
-      },
-      "android/support/transition/TransitionUtils": {
-        "androidx/transition/TransitionUtils": [
-          "MAX_IMAGE_SIZE"
-        ]
-      },
-      "android/support/v17/leanback/widget/ItemAlignment": {
-        "androidx/leanback/widget/ItemAlignment": [
-          "horizontal",
-          "vertical"
-        ]
-      },
-      "android/support/design/widget/NavigationView$SavedState": {
-        "androidx/design/widget/NavigationView$SavedState": [
-          "CREATOR",
-          "menuState"
-        ]
-      },
-      "android/support/v17/leanback/widget/WindowAlignment": {
-        "androidx/leanback/widget/WindowAlignment": [
-          "horizontal",
-          "vertical"
-        ]
-      },
-      "android/support/design/internal/BottomNavigationMenuView": {
-        "androidx/design/internal/BottomNavigationMenuView": [
-          "ACTIVE_ANIMATION_DURATION_MS"
-        ]
-      },
-      "android/support/transition/Slide": {
-        "androidx/transition/Slide": [
-          "sDecelerate",
-          "PROPNAME_SCREEN_POSITION",
-          "sCalculateTop",
-          "sCalculateBottom",
-          "sCalculateRight",
-          "sAccelerate",
-          "sCalculateStart",
-          "sCalculateEnd",
-          "sCalculateLeft"
-        ]
-      },
-      "android/support/text/emoji/MetadataRepo": {
-        "androidx/text/emoji/MetadataRepo": [
-          "DEFAULT_ROOT_SIZE"
-        ]
-      },
-      "android/support/v7/app/AppCompatDelegateImplBase": {
-        "androidx/app/AppCompatDelegateImplBase": [
-          "EXCEPTION_HANDLER_MESSAGE_SUFFIX",
-          "sInstalledExceptionHandler",
-          "sWindowBackgroundStyleable",
-          "DEBUG",
-          "SHOULD_INSTALL_EXCEPTION_HANDLER"
-        ]
-      },
-      "android/support/v7/widget/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem": {
-        "androidx/widget/StaggeredGridLayoutManager$LazySpanLookup$FullSpanItem": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v17/leanback/R$anim": {
-        "androidx/leanback/R$anim": [
-          "lb_decelerator_4"
-        ]
-      },
-      "android/support/v17/leanback/widget/PagingIndicator": {
-        "androidx/leanback/widget/PagingIndicator": [
-          "DURATION_DIAMETER",
-          "DURATION_TRANSLATION_X",
-          "DECELERATE_INTERPOLATOR",
-          "DOT_DIAMETER",
-          "DURATION_ALPHA",
-          "DOT_TRANSLATION_X",
-          "DOT_ALPHA"
-        ]
-      },
-      "android/support/v7/widget/ScrollingTabContainerView": {
-        "androidx/widget/ScrollingTabContainerView": [
-          "sAlphaInterpolator",
-          "TAG",
-          "FADE_DURATION"
-        ]
-      },
-      "android/support/v4/text/TextDirectionHeuristicsCompat$FirstStrong": {
-        "androidx/text/TextDirectionHeuristicsCompat$FirstStrong": [
-          "INSTANCE"
-        ]
-      },
-      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuTextItem": {
-        "androidx/design/internal/NavigationMenuPresenter$NavigationMenuTextItem": [
-          "needsEmptyIcon"
-        ]
-      },
-      "android/support/v17/leanback/widget/Presenter$ViewHolder": {
-        "androidx/leanback/widget/Presenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/customtabs/IPostMessageService$Stub": {
-        "androidx/browser/customtabs/IPostMessageService$Stub": [
-          "TRANSACTION_onPostMessage",
-          "DESCRIPTOR",
-          "TRANSACTION_onMessageChannelReady"
-        ]
-      },
-      "android/support/v4/view/ViewPropertyAnimatorCompat": {
-        "androidx/view/ViewPropertyAnimatorCompat": [
-          "LISTENER_TAG_ID",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/AbstractMediaItemPresenter": {
-        "androidx/leanback/widget/AbstractMediaItemPresenter": [
-          "PLAY_STATE_PLAYING",
-          "PLAY_STATE_PAUSED",
-          "sTempRect",
-          "PLAY_STATE_INITIAL"
-        ]
-      },
-      "android/support/v4/media/session/MediaControllerCompat$TransportControls": {
-        "androidx/media/session/MediaControllerCompat$TransportControls": [
-          "EXTRA_LEGACY_STREAM_TYPE"
-        ]
-      },
-      "android/support/v4/view/WindowCompat": {
-        "androidx/view/WindowCompat": [
-          "FEATURE_ACTION_MODE_OVERLAY",
-          "FEATURE_ACTION_BAR",
-          "FEATURE_ACTION_BAR_OVERLAY"
-        ]
-      },
-      "android/support/v4/content/PermissionChecker": {
-        "androidx/content/PermissionChecker": [
-          "PERMISSION_GRANTED",
-          "PERMISSION_DENIED",
-          "PERMISSION_DENIED_APP_OP"
-        ]
-      },
-      "android/support/v4/text/TextUtilsCompat": {
-        "androidx/text/TextUtilsCompat": [
-          "ROOT",
-          "ARAB_SCRIPT_SUBTAG",
-          "HEBR_SCRIPT_SUBTAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter": {
-        "androidx/leanback/widget/DetailsOverviewRowPresenter": [
-          "MORE_ACTIONS_FADE_MS",
-          "DEBUG",
-          "TAG",
-          "DEFAULT_TIMEOUT"
-        ]
-      },
-      "android/support/design/widget/TextInputLayout": {
-        "androidx/design/widget/TextInputLayout": [
-          "LOG_TAG",
-          "INVALID_MAX_LENGTH",
-          "ANIMATION_DURATION"
-        ]
-      },
-      "android/support/v7/media/RemotePlaybackClient": {
-        "androidx/media/RemotePlaybackClient": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/ListRowPresenter$ViewHolder": {
-        "androidx/leanback/widget/ListRowPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v7/content/res/AppCompatColorStateListInflater": {
-        "androidx/content/res/AppCompatColorStateListInflater": [
-          "DEFAULT_COLOR"
-        ]
-      },
-      "android/support/v7/view/menu/ExpandedMenuView": {
-        "androidx/view/menu/ExpandedMenuView": [
-          "TINT_ATTRS"
-        ]
-      },
-      "android/support/v7/widget/PositionMap$ContainerHelpers": {
-        "androidx/widget/PositionMap$ContainerHelpers": [
-          "EMPTY_BOOLEANS",
-          "EMPTY_INTS",
-          "EMPTY_OBJECTS",
-          "EMPTY_LONGS"
-        ]
-      },
-      "android/support/design/widget/TextInputLayout$SavedState": {
-        "androidx/design/widget/TextInputLayout$SavedState": [
-          "error",
-          "isPasswordToggledVisible",
-          "CREATOR"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$MutableInt": {
-        "androidx/widget/GridLayout$MutableInt": [
-          "value"
-        ]
-      },
-      "android/support/wear/R$dimen": {
-        "androidx/wear/R$dimen": [
-          "ws_action_drawer_item_icon_right_margin",
-          "ws_action_drawer_item_bottom_padding",
-          "ws_wearable_drawer_view_elevation",
-          "circular_progress_layout_stroke_width",
-          "ws_wrv_curve_default_x_offset",
-          "ws_action_drawer_item_top_padding"
-        ]
-      },
-      "android/support/wear/widget/drawer/WearableNavigationDrawerView": {
-        "androidx/wear/widget/drawer/WearableNavigationDrawerView": [
-          "MULTI_PAGE",
-          "SINGLE_PAGE",
-          "AUTO_CLOSE_DRAWER_DELAY_MS",
-          "TAG",
-          "DEFAULT_STYLE"
-        ]
-      },
-      "android/support/v7/graphics/Palette": {
-        "androidx/graphics/palette/Palette": [
-          "DEFAULT_CALCULATE_NUMBER_COLORS",
-          "MIN_CONTRAST_BODY_TEXT",
-          "LOG_TIMINGS",
-          "DEFAULT_FILTER",
-          "LOG_TAG",
-          "MIN_CONTRAST_TITLE_TEXT",
-          "DEFAULT_RESIZE_BITMAP_AREA"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$State": {
-        "androidx/widget/RecyclerView$State": [
-          "STEP_ANIMATIONS",
-          "STEP_LAYOUT",
-          "STEP_START"
-        ]
-      },
-      "android/support/design/widget/AppBarLayout": {
-        "androidx/design/widget/AppBarLayout": [
-          "PENDING_ACTION_FORCE",
-          "PENDING_ACTION_NONE",
-          "PENDING_ACTION_COLLAPSED",
-          "INVALID_SCROLL_RANGE",
-          "PENDING_ACTION_EXPANDED",
-          "PENDING_ACTION_ANIMATE_ENABLED"
-        ]
-      },
-      "android/support/design/widget/ViewUtilsLollipop": {
-        "androidx/design/widget/ViewUtilsLollipop": [
-          "STATE_LIST_ANIM_ATTRS"
-        ]
-      },
-      "android/support/v4/provider/FontsContractCompat": {
-        "androidx/provider/FontsContractCompat": [
-          "sByteArrayComparator",
-          "sBackgroundThread",
-          "BACKGROUND_THREAD_KEEP_ALIVE_DURATION_MS",
-          "sTypefaceCache",
-          "RESULT_CODE_WRONG_CERTIFICATES",
-          "RESULT_CODE_PROVIDER_NOT_FOUND",
-          "PARCEL_FONT_RESULTS",
-          "sPendingReplies",
-          "TAG",
-          "sLock"
-        ]
-      },
-      "android/support/media/tv/TvContractUtils": {
-        "androidx/media/tv/TvContractUtils": [
-          "DEBUG",
-          "EMPTY",
-          "TAG",
-          "DELIMITER"
-        ]
-      },
-      "android/support/v17/leanback/widget/RoundedRectHelperApi21": {
-        "androidx/leanback/widget/RoundedRectHelperApi21": [
-          "sRoundedRectProvider",
-          "MAX_CACHED_PROVIDER"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseFragment$MainFragmentAdapterRegistry": {
-        "androidx/leanback/app/BrowseFragment$MainFragmentAdapterRegistry": [
-          "sDefaultFragmentFactory"
-        ]
-      },
-      "android/support/v7/util/BatchingListUpdateCallback": {
-        "androidx/util/BatchingListUpdateCallback": [
-          "TYPE_CHANGE",
-          "TYPE_REMOVE",
-          "TYPE_NONE",
-          "TYPE_ADD"
-        ]
-      },
-      "android/support/v4/widget/DrawerLayout$SavedState": {
-        "androidx/widget/DrawerLayout$SavedState": [
-          "lockModeLeft",
-          "lockModeEnd",
-          "CREATOR",
-          "lockModeStart",
-          "openDrawerGravity",
-          "lockModeRight"
-        ]
-      },
-      "android/support/design/internal/NavigationMenuItemView": {
-        "androidx/design/internal/NavigationMenuItemView": [
-          "CHECKED_STATE_SET",
-          "EMPTY_STATE_SET"
-        ]
-      },
-      "android/support/text/emoji/EmojiProcessor$ProcessorSm": {
-        "androidx/text/emoji/EmojiProcessor$ProcessorSm": [
-          "STATE_DEFAULT",
-          "STATE_WALKING"
-        ]
-      },
-      "android/support/v7/widget/ActivityChooserModel$DefaultSorter": {
-        "androidx/widget/ActivityChooserModel$DefaultSorter": [
-          "WEIGHT_DECAY_COEFFICIENT"
-        ]
-      },
-      "android/support/v4/content/pm/ShortcutManagerCompat": {
-        "androidx/content/pm/ShortcutManagerCompat": [
-          "ACTION_INSTALL_SHORTCUT",
-          "INSTALL_SHORTCUT_PERMISSION"
-        ]
-      },
-      "android/support/media/tv/TvContractCompat$Channels$Logo": {
-        "androidx/media/tv/TvContractCompat$Channels$Logo": [
-          "CONTENT_DIRECTORY"
-        ]
-      },
-      "android/support/v4/view/ViewCompat$ViewCompatBaseImpl": {
-        "androidx/view/legacy/ViewCompat$ViewCompatBaseImpl": [
-          "sChildrenDrawingOrderMethod",
-          "sMinHeightField",
-          "sMinHeightFieldFetched",
-          "sTransitionNameMap",
-          "sAccessibilityDelegateCheckFailed",
-          "sMinWidthField",
-          "sMinWidthFieldFetched",
-          "sAccessibilityDelegateField"
-        ]
-      },
-      "android/support/v4/content/res/TypedArrayUtils": {
-        "androidx/content/res/TypedArrayUtils": [
-          "NAMESPACE"
-        ]
-      },
-      "android/support/annotation/RestrictTo$Scope": {
-        "androidx/annotation/RestrictTo$Scope": [
-          "GROUP_ID",
-          "TESTS",
-          "LIBRARY",
-          "SUBCLASSES",
-          "LIBRARY_GROUP"
-        ]
-      },
-      "android/support/media/tv/ChannelLogoUtils": {
-        "androidx/media/tv/ChannelLogoUtils": [
-          "TAG",
-          "CONNECTION_TIMEOUT_MS_FOR_URLCONNECTION",
-          "READ_TIMEOUT_MS_FOR_URLCONNECTION"
-        ]
-      },
-      "android/support/text/emoji/EmojiProcessor": {
-        "androidx/text/emoji/EmojiProcessor": [
-          "ACTION_FLUSH",
-          "ACTION_ADVANCE_BOTH",
-          "ACTION_ADVANCE_END"
-        ]
-      },
-      "android/support/design/R$layout": {
-        "androidx/design/R$layout": [
-          "design_navigation_item",
-          "design_navigation_menu_item",
-          "design_navigation_item_separator",
-          "design_navigation_item_subheader",
-          "design_navigation_item_header",
-          "design_bottom_navigation_item",
-          "design_text_input_password_icon",
-          "design_layout_snackbar_include",
-          "design_layout_tab_text",
-          "design_layout_snackbar",
-          "design_bottom_sheet_dialog",
-          "design_layout_tab_icon",
-          "design_navigation_menu"
-        ]
-      },
-      "android/support/v4/app/NotificationCompatExtras": {
-        "androidx/app/NotificationCompatExtras": [
-          "EXTRA_ACTION_EXTRAS",
-          "EXTRA_GROUP_KEY",
-          "EXTRA_SORT_KEY",
-          "EXTRA_REMOTE_INPUTS",
-          "EXTRA_LOCAL_ONLY",
-          "EXTRA_GROUP_SUMMARY"
-        ]
-      },
-      "android/support/v17/leanback/widget/GridLayoutManager$SavedState": {
-        "androidx/leanback/widget/GridLayoutManager$SavedState": [
-          "CREATOR",
-          "index",
-          "childStates"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$ItemAnimator": {
-        "androidx/widget/RecyclerView$ItemAnimator": [
-          "FLAG_CHANGED",
-          "FLAG_REMOVED",
-          "FLAG_APPEARED_IN_PRE_LAYOUT",
-          "FLAG_INVALIDATED",
-          "FLAG_MOVED"
-        ]
-      },
-      "android/support/v17/leanback/widget/Grid$Location": {
-        "androidx/leanback/widget/Grid$Location": [
-          "row"
-        ]
-      },
-      "android/support/v17/leanback/media/MediaControllerGlue": {
-        "androidx/leanback/media/MediaControllerGlue": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v17/preference/LeanbackListPreferenceDialogFragment": {
-        "androidx/leanback/preference/LeanbackListPreferenceDialogFragment": [
-          "SAVE_STATE_ENTRY_VALUES",
-          "SAVE_STATE_TITLE",
-          "SAVE_STATE_INITIAL_SELECTIONS",
-          "SAVE_STATE_IS_MULTI",
-          "SAVE_STATE_ENTRIES",
-          "SAVE_STATE_INITIAL_SELECTION",
-          "SAVE_STATE_MESSAGE"
-        ]
-      },
-      "android/support/v4/app/ServiceCompat": {
-        "androidx/app/ServiceCompat": [
-          "STOP_FOREGROUND_DETACH",
-          "START_STICKY",
-          "STOP_FOREGROUND_REMOVE"
-        ]
-      },
-      "android/support/wear/widget/SwipeDismissLayout": {
-        "androidx/wear/widget/SwipeDismissLayout": [
-          "TAG",
-          "DEFAULT_DISMISS_DRAG_WIDTH_RATIO",
-          "EDGE_SWIPE_THRESHOLD"
-        ]
-      },
-      "android/support/v4/os/LocaleListCompat": {
-        "androidx/os/LocaleListCompat": [
-          "sEmptyLocaleList",
-          "IMPL"
-        ]
-      },
-      "android/support/v7/preference/Preference$BaseSavedState": {
-        "androidx/preference/Preference$BaseSavedState": [
-          "CREATOR",
-          "EMPTY_STATE"
-        ]
-      },
-      "android/support/v7/media/MediaRouteProviderService": {
-        "androidx/media/MediaRouteProviderService": [
-          "TAG",
-          "SERVICE_INTERFACE",
-          "DEBUG",
-          "PRIVATE_MSG_CLIENT_DIED"
-        ]
-      },
-      "android/support/v7/view/menu/CascadingMenuPopup$CascadingMenuInfo": {
-        "androidx/view/menu/CascadingMenuPopup$CascadingMenuInfo": [
-          "position",
-          "menu",
-          "window"
-        ]
-      },
-      "android/support/v7/widget/ToolbarWidgetWrapper": {
-        "androidx/widget/ToolbarWidgetWrapper": [
-          "DEFAULT_FADE_DURATION_MS",
-          "AFFECTS_LOGO_MASK",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$ViewHolder": {
-        "androidx/leanback/widget/PlaybackTransportRowPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v7/widget/DefaultItemAnimator": {
-        "androidx/widget/DefaultItemAnimator": [
-          "DEBUG",
-          "sDefaultInterpolator"
-        ]
-      },
-      "android/support/v4/widget/PopupWindowCompat$PopupWindowCompatApi21Impl": {
-        "androidx/widget/PopupWindowCompat$PopupWindowCompatApi21Impl": [
-          "sOverlapAnchorField",
-          "TAG"
-        ]
-      },
-      "android/support/v17/preference/LeanbackSettingsFragment": {
-        "androidx/leanback/preference/LeanbackSettingsFragment": [
-          "PREFERENCE_FRAGMENT_TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/ParallaxTarget$PropertyValuesHolderTarget": {
-        "androidx/leanback/widget/ParallaxTarget$PropertyValuesHolderTarget": [
-          "PSEUDO_DURATION"
-        ]
-      },
-      "android/support/design/widget/SnackbarManager": {
-        "androidx/design/widget/SnackbarManager": [
-          "MSG_TIMEOUT",
-          "sSnackbarManager",
-          "LONG_DURATION_MS",
-          "SHORT_DURATION_MS"
-        ]
-      },
-      "android/support/v17/leanback/app/BaseRowSupportFragment": {
-        "androidx/leanback/app/BaseRowSupportFragment": [
-          "CURRENT_SELECTED_POSITION"
-        ]
-      },
-      "android/support/v7/app/MediaRouteVolumeSlider": {
-        "androidx/app/MediaRouteVolumeSlider": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/util/AsyncListUtil$ViewCallback": {
-        "androidx/util/AsyncListUtil$ViewCallback": [
-          "HINT_SCROLL_DESC",
-          "HINT_SCROLL_NONE",
-          "HINT_SCROLL_ASC"
-        ]
-      },
-      "android/support/multidex/MultiDexExtractor$ExtractedDex": {
-        "androidx/multidex/MultiDexExtractor$ExtractedDex": [
-          "crc"
-        ]
-      },
-      "android/support/transition/AnimatorUtils": {
-        "androidx/transition/AnimatorUtils": [
-          "IMPL"
-        ]
-      },
-      "android/support/v7/app/AppCompatDelegateImplV14": {
-        "androidx/app/AppCompatDelegateImplV14": [
-          "KEY_LOCAL_NIGHT_MODE"
-        ]
-      },
-      "android/support/transition/Styleable$PatternPathMotion": {
-        "androidx/transition/Styleable$PatternPathMotion": [
-          "PATTERN_PATH_DATA"
-        ]
-      },
-      "android/support/v7/media/SystemMediaRouteProvider": {
-        "androidx/media/SystemMediaRouteProvider": [
-          "TAG",
-          "DEFAULT_ROUTE_ID",
-          "PACKAGE_NAME"
-        ]
-      },
-      "android/support/design/internal/BottomNavigationItemView": {
-        "androidx/design/internal/BottomNavigationItemView": [
-          "CHECKED_STATE_SET",
-          "INVALID_ITEM_POSITION"
-        ]
-      },
-      "android/support/wear/widget/ScrollManager": {
-        "androidx/wear/widget/ScrollManager": [
-          "ONE_SEC_IN_MS",
-          "FLING_EDGE_RATIO",
-          "VELOCITY_MULTIPLIER"
-        ]
-      },
-      "android/support/v7/widget/AppCompatTextHelper": {
-        "androidx/widget/AppCompatTextHelper": [
-          "MONOSPACE",
-          "SANS",
-          "SERIF"
-        ]
-      },
-      "android/support/v17/leanback/app/DetailsSupportFragment$WaitEnterTransitionTimeout": {
-        "androidx/leanback/app/DetailsSupportFragment$WaitEnterTransitionTimeout": [
-          "WAIT_ENTERTRANSITION_START"
-        ]
-      },
-      "android/support/v7/media/MediaRouteProviderDescriptor": {
-        "androidx/media/MediaRouteProviderDescriptor": [
-          "KEY_ROUTES"
-        ]
-      },
-      "android/support/v17/leanback/widget/TitleView": {
-        "androidx/leanback/widget/TitleView": [
-          "flags"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$QueueItem": {
-        "androidx/media/session/MediaSessionCompat$QueueItem": [
-          "CREATOR",
-          "UNKNOWN_ID"
-        ]
-      },
-      "android/support/v7/mediarouter/R$styleable": {
-        "androidx/mediarouter/R$styleable": [
-          "MediaRouteButton_android_minHeight",
-          "MediaRouteButton_mediaRouteButtonTint",
-          "MediaRouteButton_android_minWidth",
-          "MediaRouteButton_externalRouteEnabledDrawable",
-          "MediaRouteButton"
-        ]
-      },
-      "android/support/v7/view/menu/ActionMenuItemView": {
-        "androidx/view/menu/ActionMenuItemView": [
-          "TAG",
-          "MAX_ICON_SIZE"
-        ]
-      },
-      "android/support/v4/app/FragmentStatePagerAdapter": {
-        "androidx/app/FragmentStatePagerAdapter": [
-          "TAG",
-          "DEBUG"
-        ]
-      },
-      "android/support/wear/widget/drawer/ScrollViewFlingWatcher": {
-        "androidx/wear/widget/drawer/ScrollViewFlingWatcher": [
-          "MAX_WAIT_TIME_MS"
-        ]
-      },
-      "android/support/transition/MatrixUtils": {
-        "androidx/transition/MatrixUtils": [
-          "IDENTITY_MATRIX"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$Action": {
-        "androidx/app/NotificationCompat$Action": [
-          "icon",
-          "title",
-          "actionIntent"
-        ]
-      },
-      "android/support/v4/os/ResultReceiver": {
-        "androidx/os/ResultReceiver": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v7/widget/AppCompatTextView": {
-        "androidx/widget/AppCompatTextView": [
-          "PLATFORM_SUPPORTS_AUTOSIZE"
-        ]
-      },
-      "android/support/v7/widget/StaggeredGridLayoutManager": {
-        "androidx/widget/StaggeredGridLayoutManager": [
-          "GAP_HANDLING_LAZY",
-          "GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS",
-          "TAG",
-          "VERTICAL",
-          "INVALID_OFFSET",
-          "MAX_SCROLL_FACTOR",
-          "GAP_HANDLING_NONE",
-          "DEBUG",
-          "HORIZONTAL"
-        ]
-      },
-      "android/support/design/widget/BottomNavigationView$SavedState": {
-        "androidx/design/widget/BottomNavigationView$SavedState": [
-          "CREATOR",
-          "menuPresenterState"
-        ]
-      },
-      "android/support/v7/widget/RoundRectDrawableWithShadow": {
-        "androidx/widget/RoundRectDrawableWithShadow": [
-          "sRoundRectHelper",
-          "COS_45",
-          "SHADOW_MULTIPLIER"
-        ]
-      },
-      "android/support/v7/preference/PreferenceCategory": {
-        "androidx/preference/PreferenceCategory": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$ItemAnimator$ItemHolderInfo": {
-        "androidx/widget/RecyclerView$ItemAnimator$ItemHolderInfo": [
-          "left",
-          "changeFlags",
-          "top",
-          "right",
-          "bottom"
-        ]
-      },
-      "android/support/v7/preference/ListPreference$SavedState": {
-        "androidx/preference/ListPreference$SavedState": [
-          "CREATOR",
-          "value"
-        ]
-      },
-      "android/support/v7/widget/TooltipPopup": {
-        "androidx/widget/TooltipPopup": [
-          "TAG"
-        ]
-      },
-      "android/support/v4/net/ConnectivityManagerCompat": {
-        "androidx/net/ConnectivityManagerCompat": [
-          "RESTRICT_BACKGROUND_STATUS_ENABLED",
-          "RESTRICT_BACKGROUND_STATUS_WHITELISTED",
-          "RESTRICT_BACKGROUND_STATUS_DISABLED"
-        ]
-      },
-      "android/support/v7/widget/MenuPopupWindow": {
-        "androidx/widget/MenuPopupWindow": [
-          "sSetTouchModalMethod",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/app/RowsFragment": {
-        "androidx/leanback/app/RowsFragment": [
-          "TAG",
-          "ALIGN_TOP_NOT_SET",
-          "DEBUG"
-        ]
-      },
-      "android/support/v17/leanback/app/ProgressBarManager": {
-        "androidx/leanback/app/ProgressBarManager": [
-          "runnable",
-          "rootView",
-          "DEFAULT_PROGRESS_BAR_DELAY"
-        ]
-      },
-      "android/support/v7/media/RegisteredMediaRouteProvider": {
-        "androidx/media/RegisteredMediaRouteProvider": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/design/widget/CheckableImageButton": {
-        "androidx/design/widget/CheckableImageButton": [
-          "DRAWABLE_STATE_CHECKED"
-        ]
-      },
-      "android/support/transition/ImageViewUtils": {
-        "androidx/transition/ImageViewUtils": [
-          "IMPL"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRow$HighQualityAction": {
-        "androidx/leanback/widget/PlaybackControlsRow$HighQualityAction": [
-          "INDEX_OFF",
-          "INDEX_ON",
-          "OFF",
-          "ON"
-        ]
-      },
-      "android/support/wear/widget/drawer/PageIndicatorView": {
-        "androidx/wear/widget/drawer/PageIndicatorView": [
-          "TAG"
-        ]
-      },
-      "android/support/transition/TransitionValues": {
-        "androidx/transition/TransitionValues": [
-          "view",
-          "values"
-        ]
-      },
-      "android/support/v17/leanback/app/BaseRowFragment": {
-        "androidx/leanback/app/BaseRowFragment": [
-          "CURRENT_SELECTED_POSITION"
-        ]
-      },
-      "android/support/v7/mediarouter/R$drawable": {
-        "androidx/mediarouter/R$drawable": [
-          "mr_group_collapse",
-          "mr_group_expand"
-        ]
-      },
-      "android/support/transition/ViewUtils": {
-        "androidx/transition/ViewUtils": [
-          "sViewFlagsField",
-          "TRANSITION_ALPHA",
-          "IMPL",
-          "sViewFlagsFieldFetched",
-          "TAG",
-          "CLIP_BOUNDS",
-          "VISIBILITY_MASK"
-        ]
-      },
-      "android/support/v7/preference/AndroidResources": {
-        "androidx/preference/AndroidResources": [
-          "ANDROID_R_ICON_FRAME",
-          "ANDROID_R_SWITCH_WIDGET",
-          "ANDROID_R_PREFERENCE_FRAGMENT_STYLE",
-          "ANDROID_R_LIST_CONTAINER",
-          "ANDROID_R_EDITTEXT_PREFERENCE_STYLE"
-        ]
-      },
-      "android/support/v4/net/DatagramSocketWrapper$DatagramSocketImplWrapper": {
-        "androidx/net/DatagramSocketWrapper$DatagramSocketImplWrapper": [
-          "localport",
-          "fd"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$BoundData": {
-        "androidx/leanback/widget/PlaybackControlsRowPresenter$BoundData": [
-          "secondaryActionsAdapter",
-          "presenter",
-          "adapter"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter$ViewHolder": {
-        "androidx/leanback/widget/PlaybackControlsRowPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v17/leanback/widget/Parallax$FloatProperty": {
-        "androidx/leanback/widget/Parallax$FloatProperty": [
-          "UNKNOWN_AFTER",
-          "UNKNOWN_BEFORE"
-        ]
-      },
-      "android/support/v17/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder": {
-        "androidx/leanback/widget/AbstractDetailsDescriptionPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/design/R$string": {
-        "androidx/design/R$string": [
-          "character_counter_pattern"
-        ]
-      },
-      "android/support/wear/ambient/AmbientDelegate": {
-        "androidx/wear/ambient/AmbientDelegate": [
-          "TAG",
-          "sInitAutoResumeEnabledMethod",
-          "sHasAutoResumeEnabledMethod"
-        ]
-      },
-      "android/support/v17/leanback/app/PlaybackFragment": {
-        "androidx/leanback/app/PlaybackFragment": [
-          "ANIMATION_MULTIPLIER",
-          "BG_DARK",
-          "BG_NONE",
-          "DEBUG",
-          "BUNDLE_CONTROL_VISIBLE_ON_CREATEVIEW",
-          "BG_LIGHT",
-          "TAG",
-          "ANIMATING",
-          "IDLE",
-          "START_FADE_OUT"
-        ]
-      },
-      "android/support/v7/widget/ActionBarOverlayLayout$LayoutParams": {
-        "androidx/widget/ActionBarOverlayLayout$LayoutParams": [
-          "topMargin",
-          "rightMargin",
-          "bottomMargin",
-          "leftMargin"
-        ]
-      },
-      "android/support/v4/os/EnvironmentCompat": {
-        "androidx/os/EnvironmentCompat": [
-          "MEDIA_UNKNOWN",
-          "TAG"
-        ]
-      },
-      "android/support/compat/R$string": {
-        "androidx/compat/R$string": [
-          "status_bar_notification_info_overflow"
-        ]
-      },
-      "android/support/v7/widget/PositionMap": {
-        "androidx/widget/PositionMap": [
-          "DELETED"
-        ]
-      },
-      "android/support/media/tv/Program": {
-        "androidx/media/tv/Program": [
-          "INVALID_LONG_VALUE",
-          "PROJECTION",
-          "IS_RECORDING_PROHIBITED"
-        ]
-      },
-      "android/support/v7/widget/ActionBarContextView": {
-        "androidx/widget/ActionBarContextView": [
-          "TAG"
-        ]
-      },
-      "android/support/v4/media/VolumeProviderCompat": {
-        "androidx/media/VolumeProviderCompat": [
-          "VOLUME_CONTROL_RELATIVE",
-          "VOLUME_CONTROL_FIXED",
-          "VOLUME_CONTROL_ABSOLUTE"
-        ]
-      },
-      "android/support/v7/view/menu/CascadingMenuPopup": {
-        "androidx/view/menu/CascadingMenuPopup": [
-          "SUBMENU_TIMEOUT_MS",
-          "HORIZ_POSITION_LEFT",
-          "HORIZ_POSITION_RIGHT"
-        ]
-      },
-      "android/support/v4/app/NotificationManagerCompat$ServiceConnectedEvent": {
-        "androidx/app/NotificationManagerCompat$ServiceConnectedEvent": [
-          "componentName",
-          "iBinder"
-        ]
-      },
-      "android/support/v7/app/AlertDialog": {
-        "androidx/app/AlertDialog": [
-          "LAYOUT_HINT_NONE",
-          "LAYOUT_HINT_SIDE"
-        ]
-      },
-      "android/support/v17/leanback/widget/picker/PickerUtility$DateConstant": {
-        "androidx/leanback/widget/picker/PickerUtility$DateConstant": [
-          "months",
-          "days",
-          "locale"
-        ]
-      },
-      "android/support/v7/app/MediaRouteChooserDialogFragment": {
-        "androidx/app/MediaRouteChooserDialogFragment": [
-          "ARGUMENT_SELECTOR"
-        ]
-      },
-      "android/support/design/widget/CoordinatorLayout$SavedState": {
-        "androidx/design/widget/CoordinatorLayout$SavedState": [
-          "behaviorStates",
-          "CREATOR"
-        ]
-      },
-      "android/support/v7/media/MediaRouteDiscoveryRequest": {
-        "androidx/media/MediaRouteDiscoveryRequest": [
-          "KEY_ACTIVE_SCAN",
-          "KEY_SELECTOR"
-        ]
-      },
-      "android/support/v17/leanback/widget/StaticShadowHelper": {
-        "androidx/leanback/widget/StaticShadowHelper": [
-          "sInstance"
-        ]
-      },
-      "android/support/design/widget/ShadowDrawableWrapper": {
-        "androidx/design/widget/ShadowDrawableWrapper": [
-          "SHADOW_MULTIPLIER",
-          "SHADOW_TOP_SCALE",
-          "COS_45",
-          "SHADOW_HORIZ_SCALE",
-          "SHADOW_BOTTOM_SCALE"
-        ]
-      },
-      "android/support/v13/app/FragmentCompat": {
-        "androidx/app/FragmentCompat": [
-          "sDelegate",
-          "IMPL"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$Arc": {
-        "androidx/widget/GridLayout$Arc": [
-          "span",
-          "valid",
-          "value"
-        ]
-      },
-      "android/support/v4/content/AsyncTaskLoader": {
-        "androidx/content/AsyncTaskLoader": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/text/emoji/flatbuffer/MetadataList": {
-        "androidx/text/emoji/flatbuffer/MetadataList": [
-          "bb_pos",
-          "bb"
-        ]
-      },
-      "android/support/text/emoji/widget/EditTextAttributeHelper": {
-        "androidx/text/emoji/widget/EditTextAttributeHelper": [
-          "MAX_EMOJI_COUNT"
-        ]
-      },
-      "android/support/v7/widget/ChildHelper$Bucket": {
-        "androidx/widget/ChildHelper$Bucket": [
-          "LAST_BIT",
-          "BITS_PER_WORD"
-        ]
-      },
-      "android/support/v4/content/LocalBroadcastManager": {
-        "androidx/content/LocalBroadcastManager": [
-          "DEBUG",
-          "MSG_EXEC_PENDING_BROADCASTS",
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/TooltipCompat": {
-        "androidx/widget/TooltipCompat": [
-          "IMPL"
-        ]
-      },
-      "android/support/media/tv/PreviewProgram": {
-        "androidx/media/tv/PreviewProgram": [
-          "INVALID_INT_VALUE",
-          "PROJECTION",
-          "INVALID_LONG_VALUE"
-        ]
-      },
-      "android/support/v7/preference/ListPreferenceDialogFragmentCompat": {
-        "androidx/preference/ListPreferenceDialogFragmentCompat": [
-          "SAVE_STATE_INDEX",
-          "SAVE_STATE_ENTRIES",
-          "SAVE_STATE_ENTRY_VALUES"
-        ]
-      },
-      "android/support/v7/widget/ViewInfoStore": {
-        "androidx/widget/ViewInfoStore": [
-          "DEBUG"
-        ]
-      },
-      "android/support/v7/widget/ActivityChooserModel$ActivityResolveInfo": {
-        "androidx/widget/ActivityChooserModel$ActivityResolveInfo": [
-          "weight",
-          "resolveInfo"
-        ]
-      },
-      "android/support/v7/preference/SeekBarPreference": {
-        "androidx/preference/SeekBarPreference": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/ActivityChooserView$InnerLayout": {
-        "androidx/widget/ActivityChooserView$InnerLayout": [
-          "TINT_ATTRS"
-        ]
-      },
-      "android/support/v7/app/AppCompatDelegateImplV9": {
-        "androidx/app/AppCompatDelegateImplV9": [
-          "IS_PRE_LOLLIPOP"
-        ]
-      },
-      "android/support/v7/media/SystemMediaRouteProvider$LegacyImpl": {
-        "androidx/media/SystemMediaRouteProvider$LegacyImpl": [
-          "PLAYBACK_STREAM",
-          "CONTROL_FILTERS"
-        ]
-      },
-      "android/support/transition/ViewUtilsApi22": {
-        "androidx/transition/ViewUtilsApi22": [
-          "sSetLeftTopRightBottomMethod",
-          "TAG",
-          "sSetLeftTopRightBottomMethodFetched"
-        ]
-      },
-      "android/support/v17/leanback/widget/ObjectAdapter": {
-        "androidx/leanback/widget/ObjectAdapter": [
-          "NO_ID"
-        ]
-      },
-      "android/support/content/Query": {
-        "androidx/content/Query": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/media/MediaControllerAdapter": {
-        "androidx/leanback/media/MediaControllerAdapter": [
-          "TAG",
-          "DEBUG"
-        ]
-      },
-      "android/support/v7/recyclerview/R$id": {
-        "androidx/recyclerview/R$id": [
-          "item_touch_helper_previous_elevation"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$Callback$CallbackHandler": {
-        "androidx/media/session/MediaSessionCompat$Callback$CallbackHandler": [
-          "MSG_MEDIA_PLAY_PAUSE_KEY_DOUBLE_TAP_TIMEOUT"
-        ]
-      },
-      "android/support/design/widget/FloatingActionButton": {
-        "androidx/design/widget/FloatingActionButton": [
-          "LOG_TAG",
-          "AUTO_MINI_LARGEST_SCREEN_WIDTH",
-          "SIZE_AUTO",
-          "SIZE_NORMAL",
-          "SIZE_MINI"
-        ]
-      },
-      "android/support/v17/leanback/widget/DetailsOverviewSharedElementHelper": {
-        "androidx/leanback/widget/DetailsOverviewSharedElementHelper": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v7/app/AlertDialog$Builder": {
-        "androidx/app/AlertDialog$Builder": [
-          "P"
-        ]
-      },
-      "android/support/wear/internal/widget/drawer/SinglePagePresenter": {
-        "androidx/wear/internal/widget/drawer/SinglePagePresenter": [
-          "DRAWER_CLOSE_DELAY_MS"
-        ]
-      },
-      "android/support/v17/leanback/app/BrowseSupportFragment$SetSelectionRunnable": {
-        "androidx/leanback/app/BrowseSupportFragment$SetSelectionRunnable": [
-          "TYPE_INTERNAL_SYNC",
-          "TYPE_USER_REQUEST",
-          "TYPE_INVALID"
-        ]
-      },
-      "android/support/media/tv/BasePreviewProgram$Builder": {
-        "androidx/media/tv/BasePreviewProgram$Builder": [
-          "sFormat"
-        ]
-      },
-      "android/support/v4/widget/SlidingPaneLayout": {
-        "androidx/widget/SlidingPaneLayout": [
-          "DEFAULT_OVERHANG_SIZE",
-          "IMPL",
-          "DEFAULT_FADE_COLOR",
-          "TAG",
-          "MIN_FLING_VELOCITY"
-        ]
-      },
-      "android/support/v7/app/MediaRouteChooserDialog": {
-        "androidx/app/MediaRouteChooserDialog": [
-          "UPDATE_ROUTES_DELAY_MS",
-          "TAG",
-          "MSG_UPDATE_ROUTES"
-        ]
-      },
-      "android/support/v4/app/ShareCompat$IntentReader": {
-        "androidx/app/ShareCompat$IntentReader": [
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/ItemBridgeAdapter$ViewHolder": {
-        "androidx/leanback/widget/ItemBridgeAdapter$ViewHolder": [
-          "itemView"
-        ]
-      },
-      "android/support/v17/leanback/app/BrandedFragment": {
-        "androidx/leanback/app/BrandedFragment": [
-          "TITLE_SHOW"
-        ]
-      },
-      "android/support/v17/leanback/widget/SearchEditText": {
-        "androidx/leanback/widget/SearchEditText": [
-          "DEBUG",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/PersistentFocusWrapper$SavedState": {
-        "androidx/leanback/widget/PersistentFocusWrapper$SavedState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/percent/PercentFrameLayout$LayoutParams": {
-        "androidx/PercentFrameLayout$LayoutParams": [
-          "gravity"
-        ]
-      },
-      "android/support/text/emoji/widget/EmojiEditableFactory": {
-        "androidx/text/emoji/widget/EmojiEditableFactory": [
-          "sWatcherClass",
-          "sInstanceLock",
-          "sInstance"
-        ]
-      },
-      "android/support/v4/view/ViewPager$SavedState": {
-        "androidx/view/ViewPager$SavedState": [
-          "position",
-          "adapterState",
-          "CREATOR",
-          "loader"
-        ]
-      },
-      "android/support/v17/leanback/widget/RowPresenter": {
-        "androidx/leanback/widget/RowPresenter": [
-          "SYNC_ACTIVATED_TO_SELECTED",
-          "SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED",
-          "SYNC_ACTIVATED_CUSTOM",
-          "SYNC_ACTIVATED_TO_EXPANDED"
-        ]
-      },
-      "android/support/v7/preference/EditTextPreferenceDialogFragmentCompat": {
-        "androidx/preference/EditTextPreferenceDialogFragmentCompat": [
-          "SAVE_STATE_TEXT"
-        ]
-      },
-      "android/support/v17/leanback/graphics/ColorFilterCache": {
-        "androidx/leanback/graphics/ColorFilterCache": [
-          "sColorToFiltersMap"
-        ]
-      },
-      "android/support/v7/view/menu/ListMenuPresenter": {
-        "androidx/view/menu/ListMenuPresenter": [
-          "VIEWS_TAG",
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/VerticalGridPresenter$ViewHolder": {
-        "androidx/leanback/widget/VerticalGridPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v4/app/TaskStackBuilder": {
-        "androidx/app/TaskStackBuilder": [
-          "TAG",
-          "IMPL"
-        ]
-      },
-      "android/support/v7/content/res/AppCompatResources": {
-        "androidx/content/res/AppCompatResources": [
-          "LOG_TAG",
-          "sColorStateCaches",
-          "TL_TYPED_VALUE",
-          "sColorStateCacheLock"
-        ]
-      },
-      "android/support/v4/hardware/display/DisplayManagerCompat": {
-        "androidx/hardware/display/DisplayManagerCompat": [
-          "DISPLAY_CATEGORY_PRESENTATION",
-          "sInstances"
-        ]
-      },
-      "android/support/v7/widget/ActionMenuPresenter": {
-        "androidx/widget/ActionMenuPresenter": [
-          "TAG"
-        ]
-      },
-      "android/support/v4/app/NotificationManagerCompat$NotifyTask": {
-        "androidx/app/NotificationManagerCompat$NotifyTask": [
-          "notif",
-          "id",
-          "tag",
-          "packageName"
-        ]
-      },
-      "android/support/text/emoji/FontRequestEmojiCompatConfig": {
-        "androidx/text/emoji/FontRequestEmojiCompatConfig": [
-          "DEFAULT_FONTS_CONTRACT"
-        ]
-      },
-      "android/support/v17/leanback/widget/ShadowHelperApi21": {
-        "androidx/leanback/widget/ShadowHelperApi21": [
-          "sOutlineProvider"
-        ]
-      },
-      "android/support/v17/leanback/widget/ItemBridgeAdapter": {
-        "androidx/leanback/widget/ItemBridgeAdapter": [
-          "TAG",
-          "DEBUG"
-        ]
-      },
-      "android/support/wear/utils/MetadataConstants": {
-        "androidx/wear/utils/MetadataConstants": [
-          "STANDALONE_METADATA_NAME",
-          "WATCH_FACE_PREVIEW_CIRCULAR_METADATA_NAME",
-          "NOTIFICATION_BRIDGE_MODE_NO_BRIDGING",
-          "NOTIFICATION_BRIDGE_MODE_BRIDGING",
-          "WATCH_FACE_PREVIEW_METADATA_NAME",
-          "NOTIFICATION_BRIDGE_MODE_METADATA_NAME"
-        ]
-      },
-      "android/support/transition/GhostViewUtils": {
-        "androidx/transition/GhostViewUtils": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v17/leanback/widget/AbstractMediaListHeaderPresenter$ViewHolder": {
-        "androidx/leanback/widget/AbstractMediaListHeaderPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsRowPresenter": {
-        "androidx/leanback/widget/PlaybackControlsRowPresenter": [
-          "sShadowZ"
-        ]
-      },
-      "android/support/v7/widget/CardView": {
-        "androidx/widget/CardView": [
-          "COLOR_BACKGROUND_ATTR",
-          "IMPL"
-        ]
-      },
-      "android/support/v7/app/ActionBar$Tab": {
-        "androidx/app/ActionBar$Tab": [
-          "INVALID_POSITION"
-        ]
-      },
-      "android/support/v7/app/MediaRouterThemeHelper": {
-        "androidx/app/MediaRouterThemeHelper": [
-          "MIN_CONTRAST",
-          "COLOR_WHITE_ON_DARK_BACKGROUND",
-          "COLOR_DARK_ON_LIGHT_BACKGROUND"
-        ]
-      },
-      "android/support/transition/ChangeClipBounds": {
-        "androidx/transition/ChangeClipBounds": [
-          "PROPNAME_CLIP",
-          "PROPNAME_BOUNDS",
-          "sTransitionProperties"
-        ]
-      },
-      "android/support/transition/Styleable$Slide": {
-        "androidx/transition/Styleable$Slide": [
-          "SLIDE_EDGE"
-        ]
-      },
-      "android/support/transition/TransitionSet": {
-        "androidx/transition/TransitionSet": [
-          "ORDERING_TOGETHER",
-          "ORDERING_SEQUENTIAL"
-        ]
-      },
-      "android/support/v7/widget/SearchView$SavedState": {
-        "androidx/widget/SearchView$SavedState": [
-          "CREATOR",
-          "isIconified"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackControlsPresenter$BoundData": {
-        "androidx/leanback/widget/PlaybackControlsPresenter$BoundData": [
-          "secondaryActionsAdapter"
-        ]
-      },
-      "android/support/v4/content/LocalBroadcastManager$BroadcastRecord": {
-        "androidx/content/LocalBroadcastManager$BroadcastRecord": [
-          "intent",
-          "receivers"
-        ]
-      },
-      "android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat": {
-        "androidx/preference/MultiSelectListPreferenceDialogFragmentCompat": [
-          "SAVE_STATE_ENTRIES",
-          "SAVE_STATE_CHANGED",
-          "SAVE_STATE_ENTRY_VALUES",
-          "SAVE_STATE_VALUES"
-        ]
-      },
-      "android/support/transition/ViewGroupUtils": {
-        "androidx/transition/ViewGroupUtils": [
-          "IMPL"
-        ]
-      },
-      "android/support/v17/leanback/widget/ControlBarPresenter$ViewHolder": {
-        "androidx/leanback/widget/ControlBarPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v17/leanback/R$transition": {
-        "androidx/leanback/R$transition": [
-          "lb_title_in",
-          "lb_browse_headers_out",
-          "lb_title_out",
-          "lb_browse_entrance_transition",
-          "lb_details_enter_transition",
-          "lb_vertical_grid_entrance_transition",
-          "lb_browse_headers_in"
-        ]
-      },
-      "android/support/design/R$drawable": {
-        "androidx/design/R$drawable": [
-          "navigation_empty_icon",
-          "design_bottom_navigation_item_background"
-        ]
-      },
-      "android/support/wear/widget/drawer/NestedScrollViewFlingWatcher": {
-        "androidx/wear/widget/drawer/NestedScrollViewFlingWatcher": [
-          "MAX_WAIT_TIME_MS"
-        ]
-      },
-      "android/support/v17/leanback/app/HeadersSupportFragment": {
-        "androidx/leanback/app/HeadersSupportFragment": [
-          "sHeaderPresenter",
-          "sLayoutChangeListener"
-        ]
-      },
-      "android/support/v17/leanback/widget/ShadowHelper": {
-        "androidx/leanback/widget/ShadowHelper": [
-          "sInstance"
-        ]
-      },
-      "android/support/percent/PercentLayoutHelper": {
-        "androidx/PercentLayoutHelper": [
-          "TAG",
-          "VERBOSE",
-          "DEBUG"
-        ]
-      },
-      "android/support/design/internal/BottomNavigationMenu": {
-        "androidx/design/internal/BottomNavigationMenu": [
-          "MAX_ITEM_COUNT"
-        ]
-      },
-      "android/support/design/internal/TextScale": {
-        "androidx/design/internal/TextScale": [
-          "PROPNAME_SCALE"
-        ]
-      },
-      "android/support/v17/leanback/widget/PlaybackTransportRowPresenter$BoundData": {
-        "androidx/leanback/widget/PlaybackTransportRowPresenter$BoundData": [
-          "adapter",
-          "presenter"
-        ]
-      },
-      "android/support/v13/view/inputmethod/EditorInfoCompat$EditorInfoCompatBaseImpl": {
-        "androidx/view/inputmethod/EditorInfoCompat$EditorInfoCompatBaseImpl": [
-          "CONTENT_MIME_TYPES_KEY"
-        ]
-      },
-      "android/support/v17/leanback/widget/ViewsStateBundle": {
-        "androidx/leanback/widget/ViewsStateBundle": [
-          "UNLIMITED",
-          "LIMIT_DEFAULT"
-        ]
-      },
-      "android/support/v4/content/ContextCompat": {
-        "androidx/content/ContextCompat": [
-          "sLock",
-          "TAG",
-          "sTempValue"
-        ]
-      },
-      "android/support/v4/util/SparseArrayCompat": {
-        "androidx/util/SparseArrayCompat": [
-          "DELETED"
-        ]
-      },
-      "android/support/transition/Styleable$VisibilityTransition": {
-        "androidx/transition/Styleable$VisibilityTransition": [
-          "TRANSITION_VISIBILITY_MODE"
-        ]
-      },
-      "android/support/v14/preference/MultiSelectListPreference$SavedState": {
-        "androidx/preference/MultiSelectListPreference$SavedState": [
-          "CREATOR",
-          "values"
-        ]
-      },
-      "android/support/v17/leanback/app/DetailsFragment$WaitEnterTransitionTimeout": {
-        "androidx/leanback/app/DetailsFragment$WaitEnterTransitionTimeout": [
-          "WAIT_ENTERTRANSITION_START"
-        ]
-      },
-      "android/support/text/emoji/MetadataListReader$OpenTypeReader": {
-        "androidx/text/emoji/MetadataListReader$OpenTypeReader": [
-          "UINT16_BYTE_COUNT",
-          "UINT32_BYTE_COUNT"
-        ]
-      },
-      "android/support/v7/preference/TwoStatePreference$SavedState": {
-        "androidx/preference/TwoStatePreference$SavedState": [
-          "checked",
-          "CREATOR"
-        ]
-      },
-      "android/support/v17/leanback/widget/Action": {
-        "androidx/leanback/widget/Action": [
-          "NO_ID"
-        ]
-      },
-      "android/support/v7/widget/Toolbar": {
-        "androidx/widget/Toolbar": [
-          "TAG"
-        ]
-      },
-      "android/support/v17/preference/LeanbackPreferenceDialogFragment": {
-        "androidx/leanback/preference/LeanbackPreferenceDialogFragment": [
-          "ARG_KEY"
-        ]
-      },
-      "android/support/v4/content/SharedPreferencesCompat$EditorCompat": {
-        "androidx/content/SharedPreferencesCompat$EditorCompat": [
-          "sInstance"
-        ]
-      },
-      "android/support/v17/leanback/widget/RowPresenter$ContainerViewHolder": {
-        "androidx/leanback/widget/RowPresenter$ContainerViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v7/app/MediaRouteChooserDialog$RouteComparator": {
-        "androidx/app/MediaRouteChooserDialog$RouteComparator": [
-          "sInstance"
-        ]
-      },
-      "android/support/v4/widget/PopupWindowCompat": {
-        "androidx/widget/PopupWindowCompat": [
-          "IMPL"
-        ]
-      },
-      "android/support/v4/widget/ImageViewCompat": {
-        "androidx/widget/ImageViewCompat": [
-          "IMPL"
-        ]
-      },
-      "android/support/v17/leanback/widget/GuidedActionsStylist$ViewHolder": {
-        "androidx/leanback/widget/GuidedActionsStylist$ViewHolder": [
-          "itemView"
-        ]
-      },
-      "android/support/v4/view/ActionProvider": {
-        "androidx/view/ActionProvider": [
-          "TAG"
-        ]
-      },
-      "android/support/v4/view/ViewConfigurationCompat": {
-        "androidx/view/ViewConfigurationCompat": [
-          "TAG",
-          "sGetScaledScrollFactorMethod"
-        ]
-      },
-      "android/support/customtabs/CustomTabsSession": {
-        "androidx/browser/customtabs/CustomTabsSession": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/mediarouter/R$style": {
-        "androidx/mediarouter/R$style": [
-          "Theme_MediaRouter_LightControlPanel",
-          "Theme_MediaRouter_Light",
-          "Theme_MediaRouter_Light_DarkControlPanel",
-          "Theme_MediaRouter"
-        ]
-      },
-      "android/support/text/emoji/EmojiProcessor$CodepointIndexFinder": {
-        "androidx/text/emoji/EmojiProcessor$CodepointIndexFinder": [
-          "INVALID_INDEX"
-        ]
-      },
-      "android/support/v17/leanback/widget/NonOverlappingLinearLayoutWithForeground": {
-        "androidx/leanback/widget/NonOverlappingLinearLayoutWithForeground": [
-          "VERSION_M"
-        ]
-      },
-      "android/support/v4/view/ViewCompat$ViewCompatApi21Impl": {
-        "androidx/view/legacy/ViewCompat$ViewCompatApi21Impl": [
-          "sThreadLocalRect"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$DecoratedCustomViewStyle": {
-        "androidx/app/NotificationCompat$DecoratedCustomViewStyle": [
-          "MAX_ACTION_BUTTONS"
-        ]
-      },
-      "android/support/v7/widget/PagerSnapHelper": {
-        "androidx/widget/PagerSnapHelper": [
-          "MAX_SCROLL_ON_FLING_DURATION"
-        ]
-      },
-      "android/support/wear/widget/CircledImageView": {
-        "androidx/wear/widget/CircledImageView": [
-          "SQUARE_DIMEN_WIDTH",
-          "SQUARE_DIMEN_NONE",
-          "SQUARE_DIMEN_HEIGHT",
-          "ARGB_EVALUATOR"
-        ]
-      },
-      "android/support/v7/widget/RtlSpacingHelper": {
-        "androidx/widget/RtlSpacingHelper": [
-          "UNDEFINED"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserServiceCompatApi26": {
-        "androidx/media/MediaBrowserServiceCompatApi26": [
-          "sResultFlags",
-          "TAG"
-        ]
-      },
-      "android/support/text/emoji/EmojiMetadata": {
-        "androidx/text/emoji/EmojiMetadata": [
-          "HAS_GLYPH_EXISTS",
-          "HAS_GLYPH_ABSENT",
-          "HAS_GLYPH_UNKNOWN",
-          "sMetadataItem"
-        ]
-      },
-      "android/support/mediacompat/R$integer": {
-        "androidx/mediacompat/R$integer": [
-          "cancel_button_image_alpha"
-        ]
-      },
-      "android/support/v7/content/res/AppCompatResources$ColorStateListCacheEntry": {
-        "androidx/content/res/AppCompatResources$ColorStateListCacheEntry": [
-          "value",
-          "configuration"
-        ]
-      },
-      "android/support/v17/leanback/widget/DetailsOverviewRowPresenter$ViewHolder": {
-        "androidx/leanback/widget/DetailsOverviewRowPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/wear/R$color": {
-        "androidx/wear/R$color": [
-          "circular_progress_layout_background_color"
-        ]
-      },
-      "android/support/v17/leanback/widget/ItemAlignmentFacet": {
-        "androidx/leanback/widget/ItemAlignmentFacet": [
-          "ITEM_ALIGN_OFFSET_PERCENT_DISABLED"
-        ]
-      },
-      "android/support/wear/ambient/AmbientMode$AmbientController": {
-        "androidx/wear/ambient/AmbientMode$AmbientController": [
-          "TAG"
-        ]
-      },
-      "android/support/v13/view/inputmethod/InputConnectionCompat": {
-        "androidx/view/inputmethod/InputConnectionCompat": [
-          "INPUT_CONTENT_GRANT_READ_URI_PERMISSION",
-          "IMPL"
-        ]
-      },
-      "android/support/wear/widget/BezierSCurveInterpolator": {
-        "androidx/wear/widget/BezierSCurveInterpolator": [
-          "STEP_SIZE",
-          "VALUES",
-          "INSTANCE"
-        ]
-      },
-      "android/support/v4/graphics/PathParser": {
-        "androidx/graphics/PathParser": [
-          "LOGTAG"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$RecycledViewPool": {
-        "androidx/widget/RecyclerView$RecycledViewPool": [
-          "DEFAULT_MAX_SCRAP"
-        ]
-      },
-      "android/support/v7/media/MediaRouteSelector": {
-        "androidx/media/MediaRouteSelector": [
-          "KEY_CONTROL_CATEGORIES",
-          "EMPTY"
-        ]
-      },
-      "android/support/transition/PropertyValuesHolderUtils": {
-        "androidx/transition/PropertyValuesHolderUtils": [
-          "IMPL"
-        ]
-      },
-      "android/support/graphics/drawable/VectorDrawableCompat$VFullPath": {
-        "androidx/graphics/drawable/VectorDrawableCompat$VFullPath": [
-          "FILL_TYPE_WINDING"
-        ]
-      },
-      "android/support/mediacompat/R$color": {
-        "androidx/mediacompat/R$color": [
-          "notification_material_background_media_default_color"
-        ]
-      },
-      "android/support/v17/leanback/widget/RowHeaderPresenter$ViewHolder": {
-        "androidx/leanback/widget/RowHeaderPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/design/widget/CollapsingToolbarLayout": {
-        "androidx/design/widget/CollapsingToolbarLayout": [
-          "DEFAULT_SCRIM_ANIMATION_DURATION"
-        ]
-      },
-      "android/support/v17/leanback/app/BrandedSupportFragment": {
-        "androidx/leanback/app/BrandedSupportFragment": [
-          "TITLE_SHOW"
-        ]
-      },
-      "android/support/design/internal/BottomNavigationPresenter$SavedState": {
-        "androidx/design/internal/BottomNavigationPresenter$SavedState": [
-          "CREATOR",
-          "selectedItemId"
-        ]
-      },
-      "android/support/v4/app/BackStackState": {
-        "androidx/app/BackStackState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v4/provider/FontsContractCompat$FontFamilyResult": {
-        "androidx/provider/FontsContractCompat$FontFamilyResult": [
-          "STATUS_WRONG_CERTIFICATES",
-          "STATUS_OK",
-          "STATUS_UNEXPECTED_DATA_PROVIDED"
-        ]
-      },
-      "android/support/v4/app/FragmentManagerState": {
-        "androidx/app/FragmentManagerState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/media/ExifInterface$Rational": {
-        "androidx/media/ExifInterface$Rational": [
-          "denominator",
-          "numerator"
-        ]
-      },
-      "android/support/text/emoji/TypefaceEmojiSpan": {
-        "androidx/text/emoji/TypefaceEmojiSpan": [
-          "sDebugPaint"
-        ]
-      },
-      "android/support/design/widget/FloatingActionButton$Behavior": {
-        "androidx/design/widget/FloatingActionButton$Behavior": [
-          "AUTO_HIDE_DEFAULT"
-        ]
-      },
-      "android/support/graphics/drawable/ArgbEvaluator": {
-        "androidx/graphics/drawable/ArgbEvaluator": [
-          "sInstance"
-        ]
-      },
-      "android/support/v4/util/ContainerHelpers": {
-        "androidx/util/ContainerHelpers": [
-          "EMPTY_INTS",
-          "EMPTY_LONGS",
-          "EMPTY_OBJECTS"
-        ]
-      },
-      "android/support/v7/media/MediaRouterJellybeanMr1": {
-        "androidx/media/MediaRouterJellybeanMr1": [
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/ActionPresenterSelector$ActionViewHolder": {
-        "androidx/leanback/widget/ActionPresenterSelector$ActionViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v4/app/FragmentState": {
-        "androidx/app/FragmentState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v7/widget/LinearSnapHelper": {
-        "androidx/widget/LinearSnapHelper": [
-          "INVALID_DISTANCE"
-        ]
-      },
-      "android/support/v17/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder": {
-        "androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/constraint/solver/widgets/ConstraintAnchor$Strength": {
-        "androidx/constraint/solver/widgets/ConstraintAnchor$Strength": [
-          "STRONG"
-        ]
-      },
-      "android/support/design/widget/HeaderBehavior": {
-        "androidx/design/widget/HeaderBehavior": [
-          "INVALID_POINTER"
-        ]
-      },
-      "android/support/v7/widget/LinearLayoutManager$SavedState": {
-        "androidx/widget/LinearLayoutManager$SavedState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v7/widget/GridLayout$Interval": {
-        "androidx/widget/GridLayout$Interval": [
-          "min",
-          "max"
-        ]
-      },
-      "android/support/v4/widget/SlidingPaneLayout$SavedState": {
-        "androidx/widget/SlidingPaneLayout$SavedState": [
-          "CREATOR",
-          "isOpen"
-        ]
-      },
-      "android/support/v17/leanback/widget/DetailsOverviewLogoPresenter$ViewHolder": {
-        "androidx/leanback/widget/DetailsOverviewLogoPresenter$ViewHolder": [
-          "view"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompatApi24": {
-        "androidx/media/session/MediaSessionCompatApi24": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/app/MediaRouteActionProvider": {
-        "androidx/app/MediaRouteActionProvider": [
-          "TAG"
-        ]
-      },
-      "android/support/v4/media/session/MediaButtonReceiver": {
-        "androidx/media/session/MediaButtonReceiver": [
-          "TAG"
-        ]
-      },
-      "android/support/v4/content/AsyncTaskLoader$LoadTask": {
-        "androidx/content/AsyncTaskLoader$LoadTask": [
-          "waiting"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompatApi21": {
-        "androidx/media/session/MediaSessionCompatApi21": [
-          "TAG"
-        ]
-      },
-      "android/support/design/internal/NavigationMenuPresenter$ViewHolder": {
-        "androidx/design/internal/NavigationMenuPresenter$ViewHolder": [
-          "itemView"
-        ]
-      },
-      "android/support/v7/widget/AppCompatButton": {
-        "androidx/widget/AppCompatButton": [
-          "PLATFORM_SUPPORTS_AUTOSIZE"
-        ]
-      },
-      "android/support/v17/leanback/widget/CheckableImageView": {
-        "androidx/leanback/widget/CheckableImageView": [
-          "CHECKED_STATE_SET"
-        ]
-      },
-      "android/support/v4/view/animation/FastOutLinearInInterpolator": {
-        "androidx/view/animation/FastOutLinearInInterpolator": [
-          "VALUES"
-        ]
-      },
-      "android/support/v7/app/MediaRouteDiscoveryFragment": {
-        "androidx/app/MediaRouteDiscoveryFragment": [
-          "ARGUMENT_SELECTOR"
-        ]
-      },
-      "android/support/v4/graphics/TypefaceCompatApi21Impl": {
-        "androidx/graphics/TypefaceCompatApi21Impl": [
-          "TAG"
-        ]
-      },
-      "android/support/v17/leanback/widget/FocusHighlightHelper$BrowseItemFocusHighlight": {
-        "androidx/leanback/widget/FocusHighlightHelper$BrowseItemFocusHighlight": [
-          "DURATION_MS"
-        ]
-      },
-      "android/support/transition/ImageViewUtilsApi21": {
-        "androidx/transition/ImageViewUtilsApi21": [
-          "TAG",
-          "sAnimateTransformMethodFetched",
-          "sAnimateTransformMethod"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$SmoothScroller$Action": {
-        "androidx/widget/RecyclerView$SmoothScroller$Action": [
-          "UNDEFINED_DURATION"
-        ]
-      },
-      "android/support/v4/media/session/PlaybackStateCompat$CustomAction": {
-        "androidx/media/session/PlaybackStateCompat$CustomAction": [
-          "CREATOR"
-        ]
-      },
-      "android/support/design/R$integer": {
-        "androidx/design/R$integer": [
-          "app_bar_elevation_anim_duration"
-        ]
-      },
-      "android/support/v4/provider/DocumentFile": {
-        "androidx/provider/DocumentFile": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/widget/StaggeredGridLayoutManager$SavedState": {
-        "androidx/widget/StaggeredGridLayoutManager$SavedState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/animation/FlingAnimation$DragForce": {
-        "androidx/animation/FlingAnimation$DragForce": [
-          "VELOCITY_THRESHOLD_MULTIPLIER",
-          "DEFAULT_FRICTION"
-        ]
-      },
-      "android/support/v17/leanback/transition/ParallaxTransition": {
-        "androidx/leanback/transition/ParallaxTransition": [
-          "sInterpolator"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$MessagingStyle": {
-        "androidx/app/NotificationCompat$MessagingStyle": [
-          "MAXIMUM_RETAINED_MESSAGES"
-        ]
-      },
-      "android/support/v7/widget/RecyclerView$SavedState": {
-        "androidx/widget/RecyclerView$SavedState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v17/leanback/widget/ResizingTextView": {
-        "androidx/leanback/widget/ResizingTextView": [
-          "TRIGGER_MAX_LINES"
-        ]
-      },
-      "android/support/v7/widget/StaggeredGridLayoutManager$LazySpanLookup": {
-        "androidx/widget/StaggeredGridLayoutManager$LazySpanLookup": [
-          "MIN_SIZE"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$MediaSessionImplBase": {
-        "androidx/media/session/MediaSessionCompat$MediaSessionImplBase": [
-          "RCC_PLAYSTATE_NONE"
-        ]
-      },
-      "android/support/v4/util/LongSparseArray": {
-        "androidx/util/LongSparseArray": [
-          "DELETED"
-        ]
-      },
-      "android/support/v4/view/accessibility/AccessibilityNodeProviderCompat": {
-        "androidx/view/accessibility/AccessibilityNodeProviderCompat": [
-          "HOST_VIEW_ID"
-        ]
-      },
-      "android/support/v4/view/AsyncLayoutInflater": {
-        "androidx/view/AsyncLayoutInflater": [
-          "TAG"
-        ]
-      },
-      "android/support/graphics/drawable/VectorDrawableCompat$VPathRenderer": {
-        "androidx/graphics/drawable/VectorDrawableCompat$VPathRenderer": [
-          "IDENTITY_MATRIX"
-        ]
-      },
-      "android/support/v13/view/DragAndDropPermissionsCompat": {
-        "androidx/view/DragAndDropPermissionsCompat": [
-          "IMPL"
-        ]
-      },
-      "android/support/v4/media/MediaBrowserCompatApi21": {
-        "androidx/media/MediaBrowserCompatApi21": [
-          "NULL_MEDIA_ITEM_ID"
-        ]
-      },
-      "android/support/v4/view/animation/FastOutSlowInInterpolator": {
-        "androidx/view/animation/FastOutSlowInInterpolator": [
-          "VALUES"
-        ]
-      },
-      "android/support/v7/widget/AppCompatProgressBarHelper": {
-        "androidx/widget/AppCompatProgressBarHelper": [
-          "TINT_ATTRS"
-        ]
-      },
-      "android/support/v4/media/ParceledListSliceAdapterApi21": {
-        "androidx/media/ParceledListSliceAdapterApi21": [
-          "sConstructor"
-        ]
-      },
-      "android/support/compat/R$integer": {
-        "androidx/compat/R$integer": [
-          "status_bar_notification_info_maxnum"
-        ]
-      },
-      "android/support/v14/preference/EditTextPreferenceDialogFragment": {
-        "androidx/preference/EditTextPreferenceDialogFragment": [
-          "SAVE_STATE_TEXT"
-        ]
-      },
-      "android/support/wear/R$array": {
-        "androidx/wear/R$array": [
-          "circular_progress_layout_color_scheme_colors"
-        ]
-      },
-      "android/support/v7/cardview/R$style": {
-        "androidx/cardview/R$style": [
-          "CardView"
-        ]
-      },
-      "android/support/design/internal/ParcelableSparseArray": {
-        "androidx/design/internal/ParcelableSparseArray": [
-          "CREATOR"
-        ]
-      },
-      "android/support/design/widget/CircularBorderDrawable": {
-        "androidx/design/widget/CircularBorderDrawable": [
-          "DRAW_STROKE_WIDTH_MULTIPLE"
-        ]
-      },
-      "android/support/transition/ObjectAnimatorUtils": {
-        "androidx/transition/ObjectAnimatorUtils": [
-          "IMPL"
-        ]
-      },
-      "android/support/v4/app/ActivityCompat": {
-        "androidx/app/legacy/ActivityCompat": [
-          "sDelegate"
-        ]
-      },
-      "android/support/wear/internal/widget/drawer/MultiPageUi": {
-        "androidx/wear/internal/widget/drawer/MultiPageUi": [
-          "TAG"
-        ]
-      },
-      "android/support/transition/ViewOverlayApi14$OverlayViewGroup": {
-        "androidx/transition/ViewOverlayApi14$OverlayViewGroup": [
-          "sInvalidateChildInParentFastMethod"
-        ]
-      },
-      "android/support/v4/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicLocale": {
-        "androidx/text/TextDirectionHeuristicsCompat$TextDirectionHeuristicLocale": [
-          "INSTANCE"
-        ]
-      },
-      "android/support/v7/preference/Preference": {
-        "androidx/preference/Preference": [
-          "DEFAULT_ORDER"
-        ]
-      },
-      "android/support/v4/graphics/drawable/RoundedBitmapDrawable": {
-        "androidx/graphics/drawable/RoundedBitmapDrawable": [
-          "DEFAULT_PAINT_FLAGS"
-        ]
-      },
-      "android/support/design/widget/TabLayout$Tab": {
-        "androidx/design/widget/TabLayout$Tab": [
-          "INVALID_POSITION"
-        ]
-      },
-      "android/support/v7/widget/SnapHelper": {
-        "androidx/widget/SnapHelper": [
-          "MILLISECONDS_PER_INCH"
-        ]
-      },
-      "android/support/v7/widget/AbsActionBarView": {
-        "androidx/widget/AbsActionBarView": [
-          "FADE_DURATION"
-        ]
-      },
-      "android/support/v17/leanback/graphics/FitWidthBitmapDrawable": {
-        "androidx/leanback/graphics/FitWidthBitmapDrawable": [
-          "PROPERTY_VERTICAL_OFFSET"
-        ]
-      },
-      "android/support/v4/media/session/MediaSessionCompat$ResultReceiverWrapper": {
-        "androidx/media/session/MediaSessionCompat$ResultReceiverWrapper": [
-          "CREATOR"
-        ]
-      },
-      "android/support/v7/view/SupportMenuInflater$InflatedOnMenuItemClickListener": {
-        "androidx/view/SupportMenuInflater$InflatedOnMenuItemClickListener": [
-          "PARAM_TYPES"
-        ]
-      },
-      "android/support/v4/widget/EdgeEffectCompat": {
-        "androidx/widget/EdgeEffectCompat": [
-          "IMPL"
-        ]
-      },
-      "android/support/v7/app/MediaRouteDialogFactory": {
-        "androidx/app/MediaRouteDialogFactory": [
-          "sDefault"
-        ]
-      },
-      "android/support/v4/app/Fragment$SavedState": {
-        "androidx/app/Fragment$SavedState": [
-          "CREATOR"
-        ]
-      },
-      "android/support/transition/Styleable$TransitionSet": {
-        "androidx/transition/Styleable$TransitionSet": [
-          "TRANSITION_ORDERING"
-        ]
-      },
-      "android/support/v7/preference/PreferenceGroupAdapter": {
-        "androidx/preference/PreferenceGroupAdapter": [
-          "TAG"
-        ]
-      },
-      "android/support/v7/view/menu/MenuPopupHelper": {
-        "androidx/view/menu/MenuPopupHelper": [
-          "TOUCH_EPICENTER_SIZE_DP"
-        ]
-      },
-      "android/support/v4/app/NotificationCompat$Builder": {
-        "androidx/app/NotificationCompat$Builder": [
-          "MAX_CHARSEQUENCE_LENGTH"
-        ]
-      }
+      "android/support/text/emoji/R$id": "androidx/text/emoji/R$id",
+      "android/support/text/emoji/widget/ExtractButtonCompat": "androidx/text/emoji/widget/ExtractButtonCompat",
+      "android/support/text/emoji/widget/EmojiInputFilter$InitCallbackImpl": "androidx/text/emoji/widget/EmojiInputFilter$InitCallbackImpl",
+      "android/support/text/emoji/widget/EmojiInputFilter": "androidx/text/emoji/widget/EmojiInputFilter",
+      "android/support/text/emoji/widget/EmojiTextView": "androidx/text/emoji/widget/EmojiTextView",
+      "android/support/text/emoji/widget/EmojiTextViewHelper$1": "androidx/text/emoji/widget/EmojiTextViewHelper$1",
+      "android/support/text/emoji/widget/EmojiTextViewHelper$HelperInternal": "androidx/text/emoji/widget/EmojiTextViewHelper$HelperInternal",
+      "android/support/text/emoji/widget/EmojiTextViewHelper$HelperInternal19": "androidx/text/emoji/widget/EmojiTextViewHelper$HelperInternal19",
+      "android/support/text/emoji/widget/EmojiTransformationMethod": "androidx/text/emoji/widget/EmojiTransformationMethod",
+      "android/support/text/emoji/widget/EmojiTextWatcher$InitCallbackImpl": "androidx/text/emoji/widget/EmojiTextWatcher$InitCallbackImpl",
+      "android/support/text/emoji/widget/SpannableBuilder$WatcherWrapper": "androidx/text/emoji/widget/SpannableBuilder$WatcherWrapper",
+      "android/support/customtabs/CustomTabsCallback": "androidx/browser/customtabs/CustomTabsCallback",
+      "android/support/customtabs/CustomTabsClient$1": "androidx/browser/customtabs/CustomTabsClient$1",
+      "android/support/customtabs/CustomTabsServiceConnection": "androidx/browser/customtabs/CustomTabsServiceConnection",
+      "android/support/customtabs/CustomTabsClient": "androidx/browser/customtabs/CustomTabsClient",
+      "android/support/customtabs/CustomTabsClient$2$1": "androidx/browser/customtabs/CustomTabsClient$2$1",
+      "android/support/customtabs/CustomTabsClient$2": "androidx/browser/customtabs/CustomTabsClient$2",
+      "android/support/customtabs/CustomTabsClient$2$2": "androidx/browser/customtabs/CustomTabsClient$2$2",
+      "android/support/customtabs/CustomTabsClient$2$3": "androidx/browser/customtabs/CustomTabsClient$2$3",
+      "android/support/customtabs/CustomTabsClient$2$4": "androidx/browser/customtabs/CustomTabsClient$2$4",
+      "android/support/customtabs/CustomTabsClient$2$5": "androidx/browser/customtabs/CustomTabsClient$2$5",
+      "android/support/customtabs/ICustomTabsCallback$Stub": "androidx/browser/customtabs/ICustomTabsCallback$Stub",
+      "android/support/customtabs/CustomTabsSession": "androidx/browser/customtabs/CustomTabsSession",
+      "android/support/customtabs/ICustomTabsCallback": "androidx/browser/customtabs/ICustomTabsCallback",
+      "android/support/customtabs/ICustomTabsService": "androidx/browser/customtabs/ICustomTabsService",
+      "android/support/customtabs/CustomTabsIntent$1": "androidx/browser/customtabs/CustomTabsIntent$1",
+      "android/support/customtabs/CustomTabsIntent": "androidx/browser/customtabs/CustomTabsIntent",
+      "android/support/customtabs/CustomTabsIntent$Builder": "androidx/browser/customtabs/CustomTabsIntent$Builder",
+      "android/support/customtabs/CustomTabsService$1$1": "androidx/browser/customtabs/CustomTabsService$1$1",
+      "android/support/customtabs/CustomTabsService$1": "androidx/browser/customtabs/CustomTabsService$1",
+      "android/support/customtabs/CustomTabsSessionToken": "androidx/browser/customtabs/CustomTabsSessionToken",
+      "android/support/customtabs/CustomTabsService": "androidx/browser/customtabs/CustomTabsService",
+      "android/support/customtabs/ICustomTabsService$Stub": "androidx/browser/customtabs/ICustomTabsService$Stub",
+      "android/support/customtabs/CustomTabsService$Relation": "androidx/browser/customtabs/CustomTabsService$Relation",
+      "android/support/customtabs/CustomTabsService$Result": "androidx/browser/customtabs/CustomTabsService$Result",
+      "android/support/customtabs/CustomTabsServiceConnection$1": "androidx/browser/customtabs/CustomTabsServiceConnection$1",
+      "android/support/customtabs/CustomTabsSessionToken$MockCallback": "androidx/browser/customtabs/CustomTabsSessionToken$MockCallback",
+      "android/support/customtabs/CustomTabsSessionToken$1": "androidx/browser/customtabs/CustomTabsSessionToken$1",
+      "android/support/customtabs/ICustomTabsCallback$Stub$Proxy": "androidx/browser/customtabs/ICustomTabsCallback$Stub$Proxy",
+      "android/support/customtabs/ICustomTabsService$Stub$Proxy": "androidx/browser/customtabs/ICustomTabsService$Stub$Proxy",
+      "android/support/customtabs/IPostMessageService$Stub$Proxy": "androidx/browser/customtabs/IPostMessageService$Stub$Proxy",
+      "android/support/customtabs/IPostMessageService": "androidx/browser/customtabs/IPostMessageService",
+      "android/support/customtabs/IPostMessageService$Stub": "androidx/browser/customtabs/IPostMessageService$Stub",
+      "android/support/customtabs/PostMessageService$1": "androidx/browser/customtabs/PostMessageService$1",
+      "android/support/customtabs/PostMessageService": "androidx/browser/customtabs/PostMessageService",
+      "android/support/customtabs/PostMessageServiceConnection": "androidx/browser/customtabs/PostMessageServiceConnection",
+      "android/support/customtabs/TrustedWebUtils": "androidx/browser/customtabs/TrustedWebUtils",
+      "android/support/media/ExifInterface$1": "androidx/media/ExifInterface$1",
+      "android/support/media/ExifInterface": "androidx/media/ExifInterface",
+      "android/support/media/ExifInterface$ByteOrderedDataInputStream": "androidx/media/ExifInterface$ByteOrderedDataInputStream",
+      "android/support/media/ExifInterface$ByteOrderedDataOutputStream": "androidx/media/ExifInterface$ByteOrderedDataOutputStream",
+      "android/support/media/ExifInterface$ExifAttribute": "androidx/media/ExifInterface$ExifAttribute",
+      "android/support/media/ExifInterface$Rational": "androidx/media/ExifInterface$Rational",
+      "android/support/media/ExifInterface$ExifTag": "androidx/media/ExifInterface$ExifTag",
+      "android/support/media/ExifInterface$IfdType": "androidx/media/ExifInterface$IfdType",
+      "android/arch/persistence/room/RoomDatabase$Callback": "androidx/persistence/room/RoomDatabase$Callback",
+      "android/arch/persistence/room/EntityDeletionOrUpdateAdapter": "androidx/persistence/room/EntityDeletionOrUpdateAdapter",
+      "android/arch/persistence/room/SharedSQLiteStatement": "androidx/persistence/room/SharedSQLiteStatement",
+      "android/arch/persistence/room/EntityInsertionAdapter": "androidx/persistence/room/EntityInsertionAdapter",
+      "android/arch/persistence/room/InvalidationTracker$1": "androidx/persistence/room/InvalidationTracker$1",
+      "android/arch/persistence/room/InvalidationTracker$ObservedTableTracker": "androidx/persistence/room/InvalidationTracker$ObservedTableTracker",
+      "android/arch/persistence/room/InvalidationTracker$2": "androidx/persistence/room/InvalidationTracker$2",
+      "android/arch/persistence/room/InvalidationTracker$ObserverWrapper": "androidx/persistence/room/InvalidationTracker$ObserverWrapper",
+      "android/arch/persistence/room/InvalidationTracker$WeakObserver": "androidx/persistence/room/InvalidationTracker$WeakObserver",
+      "android/arch/persistence/room/Room": "androidx/persistence/room/Room",
+      "android/arch/persistence/room/RoomDatabase$Builder": "androidx/persistence/room/RoomDatabase$Builder",
+      "android/arch/persistence/room/RoomSQLiteQuery": "androidx/persistence/room/RoomSQLiteQuery",
+      "android/arch/persistence/room/paging/LimitOffsetDataSource$1": "androidx/persistence/room/paging/LimitOffsetDataSource$1",
+      "android/arch/persistence/room/paging/LimitOffsetDataSource": "androidx/persistence/room/paging/LimitOffsetDataSource",
+      "android/arch/persistence/room/util/StringUtil": "androidx/persistence/room/util/StringUtil",
+      "android/arch/persistence/room/ColumnInfo$SQLiteTypeAffinity": "androidx/persistence/room/ColumnInfo$SQLiteTypeAffinity",
+      "android/arch/persistence/room/util/TableInfo$ForeignKeyWithSequence": "androidx/persistence/room/util/TableInfo$ForeignKeyWithSequence",
+      "android/support/design/internal/BaselineLayout": "androidx/design/internal/BaselineLayout",
+      "android/support/design/internal/BottomNavigationItemView": "androidx/design/internal/BottomNavigationItemView",
+      "android/support/design/R$dimen": "androidx/design/R$dimen",
+      "android/support/design/R": "androidx/design/R",
+      "android/support/design/R$layout": "androidx/design/R$layout",
+      "android/support/design/R$drawable": "androidx/design/R$drawable",
+      "android/support/design/R$id": "androidx/design/R$id",
+      "android/support/design/internal/BottomNavigationMenu": "androidx/design/internal/BottomNavigationMenu",
+      "android/support/design/internal/BottomNavigationMenuView$1": "androidx/design/internal/BottomNavigationMenuView$1",
+      "android/support/design/internal/BottomNavigationMenuView": "androidx/design/internal/BottomNavigationMenuView",
+      "android/support/design/internal/BottomNavigationPresenter": "androidx/design/internal/BottomNavigationPresenter",
+      "android/support/design/internal/TextScale": "androidx/design/internal/TextScale",
+      "android/support/design/internal/BottomNavigationPresenter$SavedState$1": "androidx/design/internal/BottomNavigationPresenter$SavedState$1",
+      "android/support/design/internal/BottomNavigationPresenter$SavedState": "androidx/design/internal/BottomNavigationPresenter$SavedState",
+      "android/support/design/internal/ForegroundLinearLayout": "androidx/design/internal/ForegroundLinearLayout",
+      "android/support/design/R$styleable": "androidx/design/R$styleable",
+      "android/support/design/internal/NavigationMenu": "androidx/design/internal/NavigationMenu",
+      "android/support/design/internal/NavigationSubMenu": "androidx/design/internal/NavigationSubMenu",
+      "android/support/design/internal/NavigationMenuItemView$1": "androidx/design/internal/NavigationMenuItemView$1",
+      "android/support/design/internal/NavigationMenuItemView": "androidx/design/internal/NavigationMenuItemView",
+      "android/support/design/internal/NavigationMenuPresenter$1": "androidx/design/internal/NavigationMenuPresenter$1",
+      "android/support/design/internal/NavigationMenuPresenter": "androidx/design/internal/NavigationMenuPresenter",
+      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuAdapter": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuAdapter",
+      "android/support/design/internal/NavigationMenuPresenter$HeaderViewHolder": "androidx/design/internal/NavigationMenuPresenter$HeaderViewHolder",
+      "android/support/design/internal/NavigationMenuPresenter$ViewHolder": "androidx/design/internal/NavigationMenuPresenter$ViewHolder",
+      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuItem",
+      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuTextItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuTextItem",
+      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuSeparatorItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuSeparatorItem",
+      "android/support/design/internal/NavigationMenuPresenter$NavigationMenuHeaderItem": "androidx/design/internal/NavigationMenuPresenter$NavigationMenuHeaderItem",
+      "android/support/design/internal/NavigationMenuPresenter$NormalViewHolder": "androidx/design/internal/NavigationMenuPresenter$NormalViewHolder",
+      "android/support/design/internal/NavigationMenuPresenter$SubheaderViewHolder": "androidx/design/internal/NavigationMenuPresenter$SubheaderViewHolder",
+      "android/support/design/internal/NavigationMenuPresenter$SeparatorViewHolder": "androidx/design/internal/NavigationMenuPresenter$SeparatorViewHolder",
+      "android/support/design/internal/ParcelableSparseArray": "androidx/design/internal/ParcelableSparseArray",
+      "android/support/design/internal/NavigationMenuView": "androidx/design/internal/NavigationMenuView",
+      "android/support/design/internal/ParcelableSparseArray$1": "androidx/design/internal/ParcelableSparseArray$1",
+      "android/support/design/internal/ScrimInsetsFrameLayout$1": "androidx/design/internal/ScrimInsetsFrameLayout$1",
+      "android/support/design/internal/ScrimInsetsFrameLayout": "androidx/design/internal/ScrimInsetsFrameLayout",
+      "android/support/design/R$style": "androidx/design/R$style",
+      "android/support/design/internal/SnackbarContentLayout": "androidx/design/internal/SnackbarContentLayout",
+      "android/support/design/widget/BaseTransientBottomBar$ContentViewCallback": "androidx/design/widget/BaseTransientBottomBar$ContentViewCallback",
+      "android/support/design/widget/BaseTransientBottomBar": "androidx/design/widget/BaseTransientBottomBar",
+      "android/support/design/internal/TextScale$1": "androidx/design/internal/TextScale$1",
+      "android/support/design/widget/AnimationUtils": "androidx/design/widget/AnimationUtils",
+      "android/support/design/widget/AppBarLayout$1": "androidx/design/widget/AppBarLayout$1",
+      "android/support/design/widget/AppBarLayout": "androidx/design/widget/AppBarLayout",
+      "android/support/design/widget/AppBarLayout$Behavior$1": "androidx/design/widget/AppBarLayout$Behavior$1",
+      "android/support/design/widget/AppBarLayout$Behavior": "androidx/design/widget/AppBarLayout$Behavior",
+      "android/support/design/widget/AppBarLayout$Behavior$DragCallback": "androidx/design/widget/AppBarLayout$Behavior$DragCallback",
+      "android/support/design/widget/AppBarLayout$Behavior$SavedState$1": "androidx/design/widget/AppBarLayout$Behavior$SavedState$1",
+      "android/support/design/widget/AppBarLayout$Behavior$SavedState": "androidx/design/widget/AppBarLayout$Behavior$SavedState",
+      "android/support/design/widget/HeaderBehavior": "androidx/design/widget/HeaderBehavior",
+      "android/support/design/widget/AppBarLayout$LayoutParams": "androidx/design/widget/AppBarLayout$LayoutParams",
+      "android/support/design/widget/AppBarLayout$ScrollingViewBehavior": "androidx/design/widget/AppBarLayout$ScrollingViewBehavior",
+      "android/support/design/widget/AppBarLayout$LayoutParams$ScrollFlags": "androidx/design/widget/AppBarLayout$LayoutParams$ScrollFlags",
+      "android/support/design/widget/AppBarLayout$OnOffsetChangedListener": "androidx/design/widget/AppBarLayout$OnOffsetChangedListener",
+      "android/support/design/widget/HeaderScrollingViewBehavior": "androidx/design/widget/HeaderScrollingViewBehavior",
+      "android/support/design/R$attr": "androidx/design/R$attr",
+      "android/support/design/widget/ThemeUtils": "androidx/design/widget/ThemeUtils",
+      "android/support/design/widget/ViewUtilsLollipop": "androidx/design/widget/ViewUtilsLollipop",
+      "android/support/design/widget/BaseTransientBottomBar$1": "androidx/design/widget/BaseTransientBottomBar$1",
+      "android/support/design/widget/BaseTransientBottomBar$10": "androidx/design/widget/BaseTransientBottomBar$10",
+      "android/support/design/widget/BaseTransientBottomBar$11": "androidx/design/widget/BaseTransientBottomBar$11",
+      "android/support/design/widget/BaseTransientBottomBar$SnackbarBaseLayout": "androidx/design/widget/BaseTransientBottomBar$SnackbarBaseLayout",
+      "android/support/design/widget/BaseTransientBottomBar$12": "androidx/design/widget/BaseTransientBottomBar$12",
+      "android/support/design/widget/BaseTransientBottomBar$2": "androidx/design/widget/BaseTransientBottomBar$2",
+      "android/support/design/widget/BaseTransientBottomBar$3": "androidx/design/widget/BaseTransientBottomBar$3",
+      "android/support/design/widget/SnackbarManager$Callback": "androidx/design/widget/SnackbarManager$Callback",
+      "android/support/design/widget/SnackbarManager": "androidx/design/widget/SnackbarManager",
+      "android/support/design/widget/BaseTransientBottomBar$4": "androidx/design/widget/BaseTransientBottomBar$4",
+      "android/support/design/widget/SwipeDismissBehavior$OnDismissListener": "androidx/design/widget/SwipeDismissBehavior$OnDismissListener",
+      "android/support/design/widget/BaseTransientBottomBar$BaseCallback": "androidx/design/widget/BaseTransientBottomBar$BaseCallback",
+      "android/support/design/widget/SwipeDismissBehavior": "androidx/design/widget/SwipeDismissBehavior",
+      "android/support/design/widget/BaseTransientBottomBar$5$1": "androidx/design/widget/BaseTransientBottomBar$5$1",
+      "android/support/design/widget/BaseTransientBottomBar$5": "androidx/design/widget/BaseTransientBottomBar$5",
+      "android/support/design/widget/BaseTransientBottomBar$OnAttachStateChangeListener": "androidx/design/widget/BaseTransientBottomBar$OnAttachStateChangeListener",
+      "android/support/design/widget/BaseTransientBottomBar$6": "androidx/design/widget/BaseTransientBottomBar$6",
+      "android/support/design/widget/BaseTransientBottomBar$OnLayoutChangeListener": "androidx/design/widget/BaseTransientBottomBar$OnLayoutChangeListener",
+      "android/support/design/widget/BaseTransientBottomBar$7": "androidx/design/widget/BaseTransientBottomBar$7",
+      "android/support/design/widget/BaseTransientBottomBar$8": "androidx/design/widget/BaseTransientBottomBar$8",
+      "android/support/design/widget/BaseTransientBottomBar$9": "androidx/design/widget/BaseTransientBottomBar$9",
+      "android/support/design/widget/BaseTransientBottomBar$BaseCallback$DismissEvent": "androidx/design/widget/BaseTransientBottomBar$BaseCallback$DismissEvent",
+      "android/support/design/widget/BaseTransientBottomBar$Behavior": "androidx/design/widget/BaseTransientBottomBar$Behavior",
+      "android/support/design/widget/BaseTransientBottomBar$Duration": "androidx/design/widget/BaseTransientBottomBar$Duration",
+      "android/support/design/R$anim": "androidx/design/R$anim",
+      "android/support/design/widget/BottomNavigationView$1": "androidx/design/widget/BottomNavigationView$1",
+      "android/support/design/widget/BottomNavigationView": "androidx/design/widget/BottomNavigationView",
+      "android/support/design/widget/BottomNavigationView$OnNavigationItemReselectedListener": "androidx/design/widget/BottomNavigationView$OnNavigationItemReselectedListener",
+      "android/support/design/widget/BottomNavigationView$OnNavigationItemSelectedListener": "androidx/design/widget/BottomNavigationView$OnNavigationItemSelectedListener",
+      "android/support/design/widget/BottomNavigationView$SavedState$1": "androidx/design/widget/BottomNavigationView$SavedState$1",
+      "android/support/design/widget/BottomNavigationView$SavedState": "androidx/design/widget/BottomNavigationView$SavedState",
+      "android/support/design/R$color": "androidx/design/R$color",
+      "android/support/design/widget/BottomSheetBehavior$1": "androidx/design/widget/BottomSheetBehavior$1",
+      "android/support/design/widget/BottomSheetBehavior": "androidx/design/widget/BottomSheetBehavior",
+      "android/support/design/widget/BottomSheetBehavior$2": "androidx/design/widget/BottomSheetBehavior$2",
+      "android/support/design/widget/BottomSheetBehavior$SettleRunnable": "androidx/design/widget/BottomSheetBehavior$SettleRunnable",
+      "android/support/design/widget/BottomSheetBehavior$BottomSheetCallback": "androidx/design/widget/BottomSheetBehavior$BottomSheetCallback",
+      "android/support/design/widget/BottomSheetBehavior$SavedState$1": "androidx/design/widget/BottomSheetBehavior$SavedState$1",
+      "android/support/design/widget/BottomSheetBehavior$SavedState": "androidx/design/widget/BottomSheetBehavior$SavedState",
+      "android/support/design/widget/BottomSheetBehavior$State": "androidx/design/widget/BottomSheetBehavior$State",
+      "android/support/design/widget/BottomSheetDialog$1": "androidx/design/widget/BottomSheetDialog$1",
+      "android/support/design/widget/BottomSheetDialog": "androidx/design/widget/BottomSheetDialog",
+      "android/support/design/widget/BottomSheetDialog$2": "androidx/design/widget/BottomSheetDialog$2",
+      "android/support/design/widget/BottomSheetDialog$3": "androidx/design/widget/BottomSheetDialog$3",
+      "android/support/design/widget/BottomSheetDialog$4": "androidx/design/widget/BottomSheetDialog$4",
+      "android/support/design/widget/BottomSheetDialogFragment": "androidx/design/widget/BottomSheetDialogFragment",
+      "android/support/design/widget/CheckableImageButton$1": "androidx/design/widget/CheckableImageButton$1",
+      "android/support/design/widget/CheckableImageButton": "androidx/design/widget/CheckableImageButton",
+      "android/support/design/widget/CircularBorderDrawable": "androidx/design/widget/CircularBorderDrawable",
+      "android/support/design/widget/CircularBorderDrawableLollipop": "androidx/design/widget/CircularBorderDrawableLollipop",
+      "android/support/design/widget/CollapsingTextHelper": "androidx/design/widget/CollapsingTextHelper",
+      "android/support/design/widget/CollapsingToolbarLayout$1": "androidx/design/widget/CollapsingToolbarLayout$1",
+      "android/support/design/widget/CollapsingToolbarLayout": "androidx/design/widget/CollapsingToolbarLayout",
+      "android/support/design/widget/CollapsingToolbarLayout$2": "androidx/design/widget/CollapsingToolbarLayout$2",
+      "android/support/design/widget/CollapsingToolbarLayout$LayoutParams$CollapseMode": "androidx/design/widget/CollapsingToolbarLayout$LayoutParams$CollapseMode",
+      "android/support/design/widget/CollapsingToolbarLayout$LayoutParams": "androidx/design/widget/CollapsingToolbarLayout$LayoutParams",
+      "android/support/design/widget/CollapsingToolbarLayout$OffsetUpdateListener": "androidx/design/widget/CollapsingToolbarLayout$OffsetUpdateListener",
+      "android/support/design/widget/ViewOffsetHelper": "androidx/design/widget/ViewOffsetHelper",
+      "android/support/design/widget/DrawableUtils": "androidx/design/widget/DrawableUtils",
+      "android/support/design/widget/FloatingActionButton$1": "androidx/design/widget/FloatingActionButton$1",
+      "android/support/design/widget/FloatingActionButtonImpl$InternalVisibilityChangedListener": "androidx/design/widget/FloatingActionButtonImpl$InternalVisibilityChangedListener",
+      "android/support/design/widget/FloatingActionButton": "androidx/design/widget/FloatingActionButton",
+      "android/support/design/widget/FloatingActionButton$OnVisibilityChangedListener": "androidx/design/widget/FloatingActionButton$OnVisibilityChangedListener",
+      "android/support/design/widget/FloatingActionButtonImpl": "androidx/design/widget/FloatingActionButtonImpl",
+      "android/support/design/widget/FloatingActionButton$Behavior": "androidx/design/widget/FloatingActionButton$Behavior",
+      "android/support/design/widget/FloatingActionButton$ShadowDelegateImpl": "androidx/design/widget/FloatingActionButton$ShadowDelegateImpl",
+      "android/support/design/widget/ShadowViewDelegate": "androidx/design/widget/ShadowViewDelegate",
+      "android/support/design/widget/FloatingActionButton$Size": "androidx/design/widget/FloatingActionButton$Size",
+      "android/support/design/widget/VisibilityAwareImageButton": "androidx/design/widget/VisibilityAwareImageButton",
+      "android/support/design/widget/ViewUtils": "androidx/design/widget/ViewUtils",
+      "android/support/design/widget/FloatingActionButtonLollipop": "androidx/design/widget/FloatingActionButtonLollipop",
+      "android/support/design/widget/FloatingActionButtonImpl$1": "androidx/design/widget/FloatingActionButtonImpl$1",
+      "android/support/design/widget/FloatingActionButtonImpl$2": "androidx/design/widget/FloatingActionButtonImpl$2",
+      "android/support/design/widget/FloatingActionButtonImpl$3": "androidx/design/widget/FloatingActionButtonImpl$3",
+      "android/support/design/widget/FloatingActionButtonImpl$DisabledElevationAnimation": "androidx/design/widget/FloatingActionButtonImpl$DisabledElevationAnimation",
+      "android/support/design/widget/FloatingActionButtonImpl$ShadowAnimatorImpl": "androidx/design/widget/FloatingActionButtonImpl$ShadowAnimatorImpl",
+      "android/support/design/widget/FloatingActionButtonImpl$ElevateToTranslationZAnimation": "androidx/design/widget/FloatingActionButtonImpl$ElevateToTranslationZAnimation",
+      "android/support/design/widget/FloatingActionButtonImpl$ResetElevationAnimation": "androidx/design/widget/FloatingActionButtonImpl$ResetElevationAnimation",
+      "android/support/design/widget/ShadowDrawableWrapper": "androidx/design/widget/ShadowDrawableWrapper",
+      "android/support/design/widget/StateListAnimator": "androidx/design/widget/StateListAnimator",
+      "android/support/design/widget/FloatingActionButtonLollipop$AlwaysStatefulGradientDrawable": "androidx/design/widget/FloatingActionButtonLollipop$AlwaysStatefulGradientDrawable",
+      "android/support/design/widget/HeaderBehavior$FlingRunnable": "androidx/design/widget/HeaderBehavior$FlingRunnable",
+      "android/support/design/widget/ViewOffsetBehavior": "androidx/design/widget/ViewOffsetBehavior",
+      "android/support/design/widget/NavigationView$1": "androidx/design/widget/NavigationView$1",
+      "android/support/design/widget/NavigationView": "androidx/design/widget/NavigationView",
+      "android/support/design/widget/NavigationView$OnNavigationItemSelectedListener": "androidx/design/widget/NavigationView$OnNavigationItemSelectedListener",
+      "android/support/design/widget/NavigationView$SavedState$1": "androidx/design/widget/NavigationView$SavedState$1",
+      "android/support/design/widget/NavigationView$SavedState": "androidx/design/widget/NavigationView$SavedState",
+      "android/support/design/widget/Snackbar$1": "androidx/design/widget/Snackbar$1",
+      "android/support/design/widget/Snackbar": "androidx/design/widget/Snackbar",
+      "android/support/design/widget/Snackbar$Callback": "androidx/design/widget/Snackbar$Callback",
+      "android/support/design/widget/Snackbar$SnackbarLayout": "androidx/design/widget/Snackbar$SnackbarLayout",
+      "android/support/design/widget/SnackbarManager$1": "androidx/design/widget/SnackbarManager$1",
+      "android/support/design/widget/SnackbarManager$SnackbarRecord": "androidx/design/widget/SnackbarManager$SnackbarRecord",
+      "android/support/design/widget/StateListAnimator$1": "androidx/design/widget/StateListAnimator$1",
+      "android/support/design/widget/StateListAnimator$Tuple": "androidx/design/widget/StateListAnimator$Tuple",
+      "android/support/design/widget/SwipeDismissBehavior$1": "androidx/design/widget/SwipeDismissBehavior$1",
+      "android/support/design/widget/SwipeDismissBehavior$SettleRunnable": "androidx/design/widget/SwipeDismissBehavior$SettleRunnable",
+      "android/support/design/widget/SwipeDismissBehavior$SwipeDirection": "androidx/design/widget/SwipeDismissBehavior$SwipeDirection",
+      "android/support/design/widget/TabItem": "androidx/design/widget/TabItem",
+      "android/support/design/widget/TabLayout$1": "androidx/design/widget/TabLayout$1",
+      "android/support/design/widget/TabLayout": "androidx/design/widget/TabLayout",
+      "android/support/design/widget/TabLayout$AdapterChangeListener": "androidx/design/widget/TabLayout$AdapterChangeListener",
+      "android/support/design/widget/TabLayout$Mode": "androidx/design/widget/TabLayout$Mode",
+      "android/support/design/widget/TabLayout$OnTabSelectedListener": "androidx/design/widget/TabLayout$OnTabSelectedListener",
+      "android/support/design/widget/TabLayout$Tab": "androidx/design/widget/TabLayout$Tab",
+      "android/support/design/widget/TabLayout$PagerAdapterObserver": "androidx/design/widget/TabLayout$PagerAdapterObserver",
+      "android/support/design/widget/TabLayout$SlidingTabStrip$1": "androidx/design/widget/TabLayout$SlidingTabStrip$1",
+      "android/support/design/widget/TabLayout$SlidingTabStrip": "androidx/design/widget/TabLayout$SlidingTabStrip",
+      "android/support/design/widget/TabLayout$SlidingTabStrip$2": "androidx/design/widget/TabLayout$SlidingTabStrip$2",
+      "android/support/design/widget/TabLayout$TabView": "androidx/design/widget/TabLayout$TabView",
+      "android/support/design/widget/TabLayout$TabGravity": "androidx/design/widget/TabLayout$TabGravity",
+      "android/support/design/widget/TabLayout$TabLayoutOnPageChangeListener": "androidx/design/widget/TabLayout$TabLayoutOnPageChangeListener",
+      "android/support/design/widget/TabLayout$ViewPagerOnTabSelectedListener": "androidx/design/widget/TabLayout$ViewPagerOnTabSelectedListener",
+      "android/support/design/widget/TextInputEditText": "androidx/design/widget/TextInputEditText",
+      "android/support/design/widget/TextInputLayout$1": "androidx/design/widget/TextInputLayout$1",
+      "android/support/design/widget/TextInputLayout": "androidx/design/widget/TextInputLayout",
+      "android/support/design/widget/TextInputLayout$2": "androidx/design/widget/TextInputLayout$2",
+      "android/support/design/widget/TextInputLayout$3": "androidx/design/widget/TextInputLayout$3",
+      "android/support/design/widget/TextInputLayout$4": "androidx/design/widget/TextInputLayout$4",
+      "android/support/design/widget/TextInputLayout$5": "androidx/design/widget/TextInputLayout$5",
+      "android/support/design/widget/TextInputLayout$SavedState$1": "androidx/design/widget/TextInputLayout$SavedState$1",
+      "android/support/design/widget/TextInputLayout$SavedState": "androidx/design/widget/TextInputLayout$SavedState",
+      "android/support/design/widget/TextInputLayout$TextInputAccessibilityDelegate": "androidx/design/widget/TextInputLayout$TextInputAccessibilityDelegate",
+      "android/support/design/R$string": "androidx/design/R$string",
+      "android/support/design/R$integer": "androidx/design/R$integer",
+      "android/support/text/emoji/bundled/BundledEmojiCompatConfig$1": "androidx/text/emoji/bundled/BundledEmojiCompatConfig$1",
+      "android/support/text/emoji/bundled/BundledEmojiCompatConfig": "androidx/text/emoji/bundled/BundledEmojiCompatConfig",
+      "android/support/text/emoji/bundled/BundledEmojiCompatConfig$BundledMetadataLoader": "androidx/text/emoji/bundled/BundledEmojiCompatConfig$BundledMetadataLoader",
+      "android/support/text/emoji/bundled/BundledEmojiCompatConfig$InitRunnable": "androidx/text/emoji/bundled/BundledEmojiCompatConfig$InitRunnable",
+      "android/arch/lifecycle/AndroidViewModel": "androidx/lifecycle/AndroidViewModel",
+      "android/arch/lifecycle/ViewModel": "androidx/lifecycle/ViewModel",
+      "android/arch/lifecycle/ViewModelProvider$NewInstanceFactory": "androidx/lifecycle/ViewModelProvider$NewInstanceFactory",
+      "android/arch/persistence/room/ForeignKey": "androidx/persistence/room/ForeignKey",
+      "android/arch/persistence/room/ForeignKey$Action": "androidx/persistence/room/ForeignKey$Action",
+      "android/arch/persistence/room/OnConflictStrategy": "androidx/persistence/room/OnConflictStrategy",
+      "android/arch/persistence/room/Index": "androidx/persistence/room/Index",
+      "android/arch/persistence/room/ColumnInfo$Collate": "androidx/persistence/room/ColumnInfo$Collate",
+      "android/arch/persistence/room/RoomWarnings": "androidx/persistence/room/RoomWarnings",
+      "android/support/v4/app/NotificationCompat$Action$SemanticAction": "androidx/app/NotificationCompat$Action$SemanticAction",
+      "android/support/v4/graphics/TypefaceCompatApi28Impl": "androidx/graphics/TypefaceCompatApi28Impl",
+      "android/support/v7/util/AdapterListUpdateCallback": "androidx/widget/recyclerview/AdapterListUpdateCallback",
+      "android/support/v7/recyclerview/extensions/ListAdapterConfig$Builder$MainThreadExecutor": "androidx/widget/recyclerview/ListAdapterConfig$Builder$MainThreadExecutor"
     }
   },
   "proGuardMap": {
-    "rules": {}
+    "rules": {
+      "android/support/transition/ChangeBounds$*": "androidx/transition/ChangeBounds$*",
+      "android/support/graphics/drawable/VectorDrawableCompat$*": "androidx/graphics/drawable/VectorDrawableCompat$*"
+    }
   }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/config/ConfigParserTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/config/ConfigParserTest.kt
index 4a03ef3..97cfc2f 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/config/ConfigParserTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/config/ConfigParserTest.kt
@@ -44,7 +44,12 @@
                 "                {groupId: \"g\", artifactId: \"a\", version: \"2.0\"} \n" +
                 "            ]\n" +
                 "        }\n" +
-                "    ]\n" +
+                "    ],\n" +
+                "   proGuardMap: {\n" +
+                "       rules: {\n" +
+                "           \"android/support/**\": \"androidx/**\"\n" +
+                "       }\n" +
+                "    }" +
                 "}"
 
         val config = ConfigParser.parseFromString(confStr)
@@ -52,6 +57,7 @@
         Truth.assertThat(config).isNotNull()
         Truth.assertThat(config!!.restrictToPackagePrefixes[0]).isEqualTo("android/support/")
         Truth.assertThat(config.rewriteRules.size).isEqualTo(2)
+        Truth.assertThat(config.proGuardMap.rules.size).isEqualTo(1)
     }
 }
 
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/map/MapGenerationTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/map/MapGenerationTest.kt
index ecf9ccf..6f4eb59 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/map/MapGenerationTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/map/MapGenerationTest.kt
@@ -17,7 +17,6 @@
 package android.support.tools.jetifier.core.map
 
 import android.support.tools.jetifier.core.config.Config
-import android.support.tools.jetifier.core.rules.JavaField
 import android.support.tools.jetifier.core.rules.JavaType
 import android.support.tools.jetifier.core.rules.RewriteRule
 import android.support.tools.jetifier.core.transform.proguard.ProGuardTypesMap
@@ -40,8 +39,6 @@
             .mapInto(
                 types = mapOf(
                     "android/support/v7/pref/Preference" to "android/test/pref/Preference"
-                ),
-                fields = mapOf(
                 )
             )
             .andIsComplete()
@@ -63,8 +60,6 @@
             .mapInto(
                 types = mapOf(
                     "android/support/v7/pref/Preference" to "android/test/pref/Preference"
-                ),
-                fields = mapOf(
                 )
             )
             .andIsComplete()
@@ -89,8 +84,6 @@
                     "android/support/v7/pref/Preference" to "android/test/pref/Preference",
                     "android/support/v14/pref/PreferenceDialog"
                         to "android/test/pref/PreferenceDialog"
-                ),
-                fields = mapOf(
                 )
             )
             .andIsComplete()
@@ -114,166 +107,16 @@
                     "android/support/v7/pref/Preference" to "android/fallback/v7/pref/Preference",
                     "android/support/v14/pref/PreferenceDialog"
                         to "android/test/pref/PreferenceDialog"
-                ),
-                fields = mapOf(
                 )
             )
             .andIsComplete()
     }
 
-    @Test fun mapTwoFields_usingOneTypeRule() {
-        ScanTester
-            .testThatRules(
-                RewriteRule("android/support/v7/(.*)", "android/test/{0}")
-            )
-            .withAllowedPrefixes(
-                "android/support/"
-            )
-            .forGivenFields(
-                JavaField("android/support/v7/pref/Preference", "count"),
-                JavaField("android/support/v7/pref/Preference", "min")
-            )
-            .mapInto(
-                types = mapOf(
-                ),
-                fields = mapOf(
-                    "android/support/v7/pref/Preference" to mapOf(
-                        "android/test/pref/Preference" to listOf(
-                            "count",
-                            "min"
-                        )
-                    )
-                )
-            )
-            .andIsComplete()
-    }
-
-    @Test fun mapFieldInInnerClass_usingOneTypeRule() {
-        ScanTester
-            .testThatRules(
-                RewriteRule("android/support/v7/(.*)", "android/test/{0}")
-            )
-            .withAllowedPrefixes(
-                "android/support/"
-            )
-            .forGivenFields(
-                JavaField("android/support/v7/pref/R\$attr", "border")
-            )
-            .mapInto(
-                types = mapOf(
-                ),
-                fields = mapOf(
-                    "android/support/v7/pref/R\$attr" to mapOf(
-                        "android/test/pref/R\$attr" to listOf(
-                            "border"
-                        )
-                    )
-                )
-            )
-            .andIsComplete()
-    }
-
-    @Test fun mapPrivateFields_shouldIgnore() {
-        ScanTester
-            .testThatRules(
-                RewriteRule("android/support/v7/(.*)", "android/test/{0}")
-            )
-            .withAllowedPrefixes(
-                "android/support/"
-            )
-            .forGivenFields(
-                JavaField("android/support/v7/pref/Preference", "mCount"),
-                JavaField("android/support/v7/pref/Preference", "this$0")
-            )
-            .mapInto(
-                types = mapOf(
-                ),
-                fields = mapOf(
-                )
-            )
-            .andIsComplete()
-    }
-
-    @Test fun mapType_usingFieldSelector_shouldNotApply() {
-        ScanTester
-            .testThatRules(
-                RewriteRule("android/support/v7/(.*)", "android/test/{0}", listOf("count"))
-            )
-            .withAllowedPrefixes(
-                "android/support/"
-            )
-            .forGivenTypes(
-                JavaType("android/support/v7/pref/Preference")
-            )
-            .mapInto(
-                types = mapOf(
-                    "android/support/v7/pref/Preference" to "android/support/v7/pref/Preference"
-                ),
-                fields = mapOf(
-                )
-            )
-            .andIsNotComplete()
-    }
-
-    @Test fun mapField_noApplicableRule() {
-        ScanTester
-            .testThatRules(
-                RewriteRule("android/support/v7/(.*)", "android/test/{0}", listOf("count2"))
-            )
-            .withAllowedPrefixes(
-                "android/support/"
-            )
-            .forGivenFields(
-                JavaField("android/support/v7/pref/Preference", "count")
-            )
-            .mapInto(
-                types = mapOf(
-                ),
-                fields = mapOf(
-                    "android/support/v7/pref/Preference" to mapOf(
-                        "android/support/v7/pref/Preference" to listOf(
-                            "count"
-                        )
-                    )
-                )
-            )
-            .andIsNotComplete()
-    }
-
-    @Test fun mapTwoFields_usingTwoFieldsSelectors() {
-        ScanTester
-            .testThatRules(
-                RewriteRule("android/support/v7/(.*)", "android/test/{0}", listOf("count")),
-                RewriteRule("android/support/v7/(.*)", "android/test2/{0}", listOf("size"))
-            )
-            .withAllowedPrefixes(
-                "android/support/"
-            )
-            .forGivenFields(
-                JavaField("android/support/v7/pref/Preference", "count"),
-                JavaField("android/support/v7/pref/Preference", "size")
-            )
-            .mapInto(
-                types = mapOf(
-                ),
-                fields = mapOf(
-                    "android/support/v7/pref/Preference" to mapOf(
-                        "android/test/pref/Preference" to listOf(
-                            "count"
-                        ),
-                        "android/test2/pref/Preference" to listOf(
-                            "size"
-                        )
-                    )
-                )
-            )
-            .andIsComplete()
-    }
-
-    @Test fun mapTwoTypes_shouldIgnoreOne() {
+    @Test fun mapTwoTypes_shouldIgnoreFirstTwo() {
         ScanTester
             .testThatRules(
                 RewriteRule("android/support/v7/(.*)", "ignore"),
+                RewriteRule("android/support/v8/(.*)", "ignoreInPreprocessorOnly"),
                 RewriteRule("android/support/v14/(.*)", "android/test/{0}")
             )
             .withAllowedPrefixes(
@@ -281,40 +124,12 @@
             )
             .forGivenTypes(
                 JavaType("android/support/v7/pref/Preference"),
+                JavaType("android/support/v8/pref/Preference"),
                 JavaType("android/support/v14/pref/Preference")
             )
             .mapInto(
                 types = mapOf(
                     "android/support/v14/pref/Preference" to "android/test/pref/Preference"
-                ),
-                fields = mapOf(
-                )
-            )
-            .andIsComplete()
-    }
-
-    @Test fun mapTwoFields_shouldIgnoreOne() {
-        ScanTester
-            .testThatRules(
-                RewriteRule("android/support/v7/(.*)", "ignore"),
-                RewriteRule("android/support/v14/(.*)", "android/test/{0}")
-            )
-            .withAllowedPrefixes(
-                "android/support/"
-            )
-            .forGivenFields(
-                JavaField("android/support/v7/pref/Preference", "count"),
-                JavaField("android/support/v14/pref/Preference", "size")
-            )
-            .mapInto(
-                types = mapOf(
-                ),
-                fields = mapOf(
-                    "android/support/v14/pref/Preference" to mapOf(
-                        "android/test/pref/Preference" to listOf(
-                            "size"
-                        )
-                    )
                 )
             )
             .andIsComplete()
@@ -333,7 +148,6 @@
             class Step2(private val rules: List<RewriteRule>, private val prefixes: List<String>) {
 
                 private val allTypes: MutableList<JavaType> = mutableListOf()
-                private val allFields: MutableList<JavaField> = mutableListOf()
                 private var wasMapIncomplete = false
 
 
@@ -342,29 +156,23 @@
                     return this
                 }
 
-                fun forGivenFields(vararg fields: JavaField): Step2 {
-                    allFields.addAll(fields)
-                    return this
-                }
 
-                fun mapInto(types: Map<String, String>,
-                            fields: Map<String, Map<String, List<String>>>): Step2 {
+                fun mapInto(types: Map<String, String>): Step2 {
                     val config = Config(
                         restrictToPackagePrefixes = prefixes,
                         rewriteRules = rules,
+                        slRules = emptyList(),
                         pomRewriteRules = emptyList(),
                         typesMap = TypesMap.EMPTY,
                         proGuardMap = ProGuardTypesMap.EMPTY)
                     val scanner = MapGeneratorRemapper(config)
 
                     allTypes.forEach { scanner.rewriteType(it) }
-                    allFields.forEach { scanner.rewriteField(it) }
 
                     val typesMap = scanner.createTypesMap().toJson()
                     wasMapIncomplete = scanner.isMapNotComplete
 
                     Truth.assertThat(typesMap.types).containsExactlyEntriesIn(types)
-                    Truth.assertThat(typesMap.fields).containsExactlyEntriesIn(fields)
                     return this
                 }
 
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/RewriteRuleTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/RewriteRuleTest.kt
index 298d46c..ebb48dd 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/RewriteRuleTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/RewriteRuleTest.kt
@@ -1,3 +1,4 @@
+
 /*
  * Copyright (C) 2017 The Android Open Source Project
  *
@@ -16,13 +17,11 @@
 
 package android.support.tools.jetifier.core.transform
 
-import android.support.tools.jetifier.core.rules.JavaField
 import android.support.tools.jetifier.core.rules.JavaType
 import android.support.tools.jetifier.core.rules.RewriteRule
 import com.google.common.truth.Truth
 import org.junit.Test
 
-
 class RewriteRuleTest {
 
     @Test fun noRegEx_shouldRewrite() {
@@ -53,14 +52,6 @@
             .into("A/C\$D")
     }
 
-    @Test fun fieldRule_noRegEx_shouldRewrite() {
-        RuleTester
-            .testThatRule("A/B", "A/C")
-            .withFieldSelector("MyField")
-            .rewritesField("A/B", "MyField")
-            .into("A/C", "MyField")
-    }
-
     @Test fun fieldRule_innerClass_groupRegEx_shouldRewrite() {
         RuleTester
             .testThatRule("A/B$(.*)", "A/C\${0}")
@@ -68,13 +59,19 @@
             .into("A/C\$D")
     }
 
-    @Test fun noFieldRule_shouldRewriteEvenWithField() {
+    @Test fun typeRewrite_ignore() {
         RuleTester
-            .testThatRule("A/B", "A/C")
-            .rewritesField("A/B", "test")
-            .into("A/C", "test")
+            .testThatRule("A/B", "ignore")
+            .rewritesType("A/B")
+            .isIgnored()
     }
 
+    @Test fun typeRewrite_ignoreInPreprocessor() {
+        RuleTester
+            .testThatRule("A/B", "ignoreInPreprocessorOnly")
+            .rewritesType("A/B")
+            .isIgnored()
+    }
 
     object RuleTester {
 
@@ -82,53 +79,31 @@
 
         class RuleTesterStep1(val from: String, val to: String) {
 
-            val fieldSelectors: MutableList<String> = mutableListOf()
-
-            fun withFieldSelector(input: String): RuleTesterStep1 {
-                fieldSelectors.add(input)
-                return this
-            }
-
-            fun rewritesField(inputType: String, inputField: String)
-                    = RuleTesterFinalFieldStep(from, to, inputType, inputField, fieldSelectors)
-
             fun rewritesType(inputType: String)
-                    = RuleTesterFinalTypeStep(from, to, inputType, fieldSelectors)
-        }
-
-        class RuleTesterFinalFieldStep(val fromType: String,
-                                       val toType: String,
-                                       val inputType: String,
-                                       val inputField: String,
-                                       val fieldSelectors: List<String>) {
-
-            fun into(expectedTypeName: String, expectedFieldName: String) {
-                val fieldRule = RewriteRule(fromType, toType, fieldSelectors)
-                val result = fieldRule.apply(JavaField(inputType, inputField))
-                Truth.assertThat(result).isNotNull()
-
-                Truth.assertThat(result.result!!.owner.fullName).isEqualTo(expectedTypeName)
-                Truth.assertThat(result.result!!.name).isEqualTo(expectedFieldName)
-            }
-
+                    = RuleTesterFinalTypeStep(from, to, inputType)
         }
 
         class RuleTesterFinalTypeStep(val fromType: String,
                                       val toType: String,
-                                      val inputType: String,
-                                      val fieldSelectors: List<String>) {
+                                      val inputType: String) {
 
             fun into(expectedResult: String) {
-                val fieldRule = RewriteRule(fromType, toType, fieldSelectors)
+                val fieldRule = RewriteRule(fromType, toType)
                 val result = fieldRule.apply(JavaType(inputType))
-                Truth.assertThat(result).isNotNull()
 
                 Truth.assertThat(result).isNotNull()
                 Truth.assertThat(result.result!!.fullName).isEqualTo(expectedResult)
             }
 
-        }
-    }
+            fun isIgnored() {
+                val fieldRule = RewriteRule(fromType, toType)
+                val result = fieldRule.apply(JavaType(inputType))
 
+                Truth.assertThat(result).isNotNull()
+                Truth.assertThat(result.isIgnored).isTrue()
+            }
+        }
+
+    }
 }
 
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/bytecode/ClassFilesMoveTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/bytecode/ClassFilesMoveTest.kt
new file mode 100644
index 0000000..3b189e6
--- /dev/null
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/bytecode/ClassFilesMoveTest.kt
@@ -0,0 +1,200 @@
+package android.support.tools.jetifier.core.transform.bytecode
+
+import android.support.tools.jetifier.core.Processor
+import android.support.tools.jetifier.core.archive.Archive
+import android.support.tools.jetifier.core.archive.ArchiveFile
+import android.support.tools.jetifier.core.archive.ArchiveItemVisitor
+import android.support.tools.jetifier.core.config.Config
+import android.support.tools.jetifier.core.map.TypesMap
+import android.support.tools.jetifier.core.rules.JavaType
+import android.support.tools.jetifier.core.rules.RewriteRule
+import android.support.tools.jetifier.core.transform.proguard.ProGuardTypesMap
+import com.google.common.truth.Truth
+import org.junit.Test
+import java.io.File
+
+/**
+ * Tests that individual files were moved properly due to their owner types rewrites.
+ */
+class ClassFilesMoveTest {
+
+    companion object {
+        private val TEST_CONFIG = Config(
+            restrictToPackagePrefixes = listOf("android/support"),
+            rewriteRules = listOf(
+                RewriteRule("android/support/annotation/(.*)", "ignore"),
+                RewriteRule("android/support/v7/preference/R(.*)", "ignore"),
+                RewriteRule("android/support/v4/(.*)", "ignore")
+            ),
+            slRules = listOf(
+                RewriteRule("android/support/annotation/(.*)", "ignore"),
+                RewriteRule("android/support/v7/preference/R(.*)", "ignore"),
+                RewriteRule("android/support/v4/(.*)", "ignore")
+            ),
+            pomRewriteRules = emptyList(),
+            typesMap = TypesMap(mapOf(
+                "android/support/v7/preference/Preference"
+                    to "androidx/support/preference/Preference",
+                "android/support/v7/preference/Preference\$1"
+                    to "androidx/support/preference/Preference\$1",
+                "android/support/v7/preference/TwoStatePreference"
+                    to "androidx/support/preference/TwoStatePreference",
+                "android/support/v7/preference/PreferenceGroup"
+                    to "androidx/support/preference/PreferenceGroup",
+                "android/support/v7/preference/Preference\$OnPreferenceChangeListener"
+                    to "androidx/support/preference/Preference\$OnPreferenceChangeListener",
+                "android/support/v7/preference/Preference\$OnPreferenceClickListener"
+                    to "androidx/support/preference/Preference\$OnPreferenceClickListener",
+                "android/support/v7/preference/Preference\$OnPreferenceChangeInternalListener"
+                    to "androidx/support/preference/Preference\$OnPreferenceChangeInternalListener",
+                "android/support/v7/preference/PreferenceManager\$OnPreferenceTreeClickListener"
+                    to "androidx/support/preference/PreferenceManager\$OnPreferenceTreeClickLisnr",
+                "android/support/v7/preference/PreferenceViewHolder"
+                    to "androidx/support/preference/PreferenceViewHolder",
+                "android/support/v7/preference/PreferenceManager"
+                    to "androidx/support/preference/PreferenceManager",
+                "android/support/v14/preference/SwitchPreference"
+                    to "androidx/support/preference/SwitchPreference",
+                "android/support/v14/preference/SwitchPreference\$1"
+                    to "androidx/support/preference/SwitchPreference\$1",
+                "android/support/v14/preference/SwitchPreference\$Listener"
+                    to "androidx/support/preference/SwitchPreference\$Listener",
+                "android/support/v7/preference/PreferenceDataStore"
+                    to "androidx/support/preference/PreferenceDataStore",
+                "android/support/v7/preference/Preference\$BaseSavedState"
+                    to "androidx/support/preference/Preference\$BaseSavedState"
+            ).map { JavaType(it.key) to JavaType(it.value) }.toMap()),
+            proGuardMap = ProGuardTypesMap.EMPTY
+        )
+    }
+
+    /**
+     * Tests that after rewrite of a input archive the internal classes are properly moved to new
+     * locations (based on the rewrite rules) which is compared with the expected archive.
+     *
+     * Note: The expected archive does not contain rewritten classes - they were only manually
+     * moved. Which is fine because this test validates only files locations.
+     *
+     * Note: This runs in support library rewrite mode which allows to move classes around.
+     */
+    @Test fun fileMove_forwardRewrite_shouldMoveFilesProperly() {
+        val inputZipPath = "/fileRenameTest/inputTestLib.zip"
+        val expectedZipPath = "/fileRenameTest/expectedTestLib.zip"
+
+        val processor = Processor.createProcessor(TEST_CONFIG, rewritingSupportLib = true)
+        val inputFile = File(javaClass.getResource(inputZipPath).file)
+
+        val tempDir = createTempDir()
+        val result = processor.transform(setOf(inputFile), tempDir.toPath(), true)
+
+        Truth.assertThat(result.filesToAdd).hasSize(1)
+        testArchivesAreSame(result.filesToAdd.first(),
+            File(javaClass.getResource(expectedZipPath).file))
+
+        tempDir.delete()
+    }
+
+    /**
+     * Does exactly the same as [fileMove_forwardRewrite_nestedArchive_shouldMoveFilesProperly] but
+     * the files are in a nested archive e.g. archive.zip/classes.jar/some files.
+     */
+    @Test fun fileMove_forwardRewrite_nestedArchive_shouldMoveFilesProperly() {
+        val inputZipPath = "/fileRenameTest/inputTestLibNested.zip"
+        val expectedZipPath = "/fileRenameTest/expectedTestLibNested.zip"
+
+        val processor = Processor.createProcessor(TEST_CONFIG, rewritingSupportLib = true)
+        val inputFile = File(javaClass.getResource(inputZipPath).file)
+
+        val tempDir = createTempDir()
+        val result = processor.transform(setOf(inputFile), tempDir.toPath(), true)
+
+        Truth.assertThat(result.filesToAdd).hasSize(1)
+        testArchivesAreSame(result.filesToAdd.first(),
+            File(javaClass.getResource(expectedZipPath).file))
+
+        tempDir.delete()
+    }
+
+    /**
+     * Rewrites the input archive and then applies reversed mode to rewrite it back. The final
+     * produced archive has to have the same directory structure as the input one.
+     *
+     * Note: This runs in support library rewrite mode which allows to move classes around.
+     */
+    @Test fun fileMove_forwardRewrite_backwardsRewrite_shouldKeepFilesProperly() {
+        val inputZipPath = "/fileRenameTest/inputTestLib.zip"
+
+        // Transform forward
+        val processor = Processor.createProcessor(TEST_CONFIG,
+            rewritingSupportLib = true)
+        val inputFile = File(javaClass.getResource(inputZipPath).file)
+        val tempDir = createTempDir()
+        val result = processor.transform(setOf(inputFile), tempDir.toPath(), true)
+
+        // Take previous result & reverse it
+        val processor2 = Processor.createProcessor(TEST_CONFIG,
+            rewritingSupportLib = true,
+            reversedMode = true)
+        val result2 = processor2.transform(setOf(result.filesToAdd.first()), tempDir.toPath(), true)
+
+        testArchivesAreSame(result2.filesToAdd.first(),
+            File(javaClass.getResource(inputZipPath).file))
+
+        tempDir.delete()
+    }
+
+    /**
+     * Runs the rewrite but with support library rewrite mode off which means that none of the files
+     * should be moved.
+     */
+    @Test fun fileMove_forwardRewrite_noSupportLibMode_noFilesMove() {
+        val inputZipPath = "/fileRenameTest/inputTestLib.zip"
+
+        val processor = Processor.createProcessor(TEST_CONFIG, rewritingSupportLib = false)
+        val inputFile = File(javaClass.getResource(inputZipPath).file)
+
+        val tempDir = createTempDir()
+        val result = processor.transform(setOf(inputFile), tempDir.toPath(), true)
+
+        Truth.assertThat(result.filesToAdd).hasSize(1)
+        testArchivesAreSame(result.filesToAdd.first(),
+            File(javaClass.getResource(inputZipPath).file))
+
+        tempDir.delete()
+    }
+
+    fun testArchivesAreSame(givenZip: File, expectedZip: File) {
+        testArchivesAreSame(Archive.Builder.extract(givenZip), Archive.Builder.extract(expectedZip))
+    }
+
+    fun testArchivesAreSame(givenZip: Archive, expectedZip: Archive) {
+        val givenFiles = ArchiveBrowser.grabAllPathsIn(givenZip)
+        val expectedFiles = ArchiveBrowser.grabAllPathsIn(expectedZip)
+        Truth.assertThat(givenFiles).containsExactlyElementsIn(expectedFiles)
+    }
+
+    /**
+     * Just a helper utility to get all file paths in the archive.
+     */
+    class ArchiveBrowser : ArchiveItemVisitor {
+
+        companion object {
+            fun grabAllPathsIn(archive: Archive): MutableSet<String> {
+                val grabber = ArchiveBrowser()
+                archive.accept(grabber)
+                return grabber.allPaths
+            }
+        }
+
+        val allPaths = mutableSetOf<String>()
+
+        override fun visit(archiveFile: ArchiveFile) {
+            allPaths.add(archiveFile.relativePath.toString())
+            println("Visited ${archiveFile.relativePath}")
+        }
+
+        override fun visit(archive: Archive) {
+            archive.files.forEach { it.accept(this) }
+        }
+    }
+}
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/metainf/MetaInfTransformerTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/metainf/MetaInfTransformerTest.kt
new file mode 100644
index 0000000..db6cd21
--- /dev/null
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/metainf/MetaInfTransformerTest.kt
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2018 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.tools.jetifier.core.transform.metainf
+
+import android.support.tools.jetifier.core.archive.ArchiveFile
+import android.support.tools.jetifier.core.config.Config
+import android.support.tools.jetifier.core.map.TypesMap
+import android.support.tools.jetifier.core.transform.PackageMap
+import android.support.tools.jetifier.core.transform.TransformationContext
+import android.support.tools.jetifier.core.transform.proguard.ProGuardTypesMap
+import com.google.common.truth.Truth
+import org.junit.Test
+import java.nio.charset.Charset
+import java.nio.file.Path
+import java.nio.file.Paths
+
+class MetaInfTransformerTest {
+
+    @Test
+    fun rewriteVersion_forward() {
+        testRewrite(
+            given = "28.0.0-SNAPSHOT",
+            expected = "1.0.0-SNAPSHOT",
+            filePath = Paths.get("something/META-INF", "support_preference-v7.version"),
+            reverseMode = false
+        )
+    }
+
+    @Test
+    fun rewriteVersion_reversed() {
+        testRewrite(
+            given = "1.0.0-SNAPSHOT",
+            expected = "28.0.0-SNAPSHOT",
+            filePath = Paths.get("something/META-INF", "support_preference-v7.version"),
+            reverseMode = true
+        )
+    }
+
+    @Test
+    fun rewriteVersion_notSLRewrite_shouldSkip() {
+        testRewrite(
+            given = "28.0.0-SNAPSHOT",
+            expected = "28.0.0-SNAPSHOT",
+            filePath = Paths.get("something/META-INF", "support_preference-v7.version"),
+            reverseMode = false,
+            rewritingSupportLib = false,
+            expectedCanTransform = false
+        )
+    }
+
+    @Test
+    fun rewriteVersion_notMatchingVersion_shouldNoOp() {
+        testRewrite(
+            given = "test",
+            expected = "test",
+            filePath = Paths.get("something/META-INF", "support_preference-v7.version")
+        )
+    }
+
+    @Test
+    fun rewriteVersion_notValidSuffix_shouldSkip() {
+        testRewrite(
+            given = "28.0.0-SNAPSHOT",
+            expected = "28.0.0-SNAPSHOT",
+            filePath = Paths.get("something/META-INF", "support_preference-v7.none"),
+            expectedCanTransform = false
+        )
+    }
+
+    @Test
+    fun rewriteVersion_notInMetaInfDir_shouldSkip() {
+        testRewrite(
+            given = "28.0.0-SNAPSHOT",
+            expected = "28.0.0-SNAPSHOT",
+            filePath = Paths.get("something/else", "support_preference-v7.version"),
+            expectedCanTransform = false
+        )
+    }
+
+    private fun testRewrite(
+        given: String,
+        expected: String,
+        filePath: Path,
+        reverseMode: Boolean = false,
+        expectedCanTransform: Boolean = true,
+        rewritingSupportLib: Boolean = true
+    ) {
+        val config = Config(
+            restrictToPackagePrefixes = emptyList(),
+            rewriteRules = emptyList(),
+            slRules = emptyList(),
+            pomRewriteRules = emptyList(),
+            packageMap = PackageMap.EMPTY,
+            typesMap = TypesMap.EMPTY,
+            proGuardMap = ProGuardTypesMap.EMPTY
+        )
+        val context = TransformationContext(config,
+            rewritingSupportLib = rewritingSupportLib,
+            isInReversedMode = reverseMode)
+        val transformer = MetaInfTransformer(context)
+
+        val file = ArchiveFile(filePath, given.toByteArray())
+
+        val canTransform = transformer.canTransform(file)
+        if (canTransform) {
+            transformer.runTransform(file)
+        }
+
+        val strResult = file.data.toString(Charset.defaultCharset())
+
+        Truth.assertThat(canTransform).isEqualTo(expectedCanTransform)
+        Truth.assertThat(strResult).isEqualTo(expected)
+    }
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassFilterTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassFilterTest.kt
index 2c7d7e2..86b1599 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassFilterTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassFilterTest.kt
@@ -21,7 +21,7 @@
 class ClassFilterTest {
 
     @Test fun proGuard_classFilter() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -38,7 +38,7 @@
     }
 
     @Test fun proGuard_classFilter_newLineIgnored() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -57,7 +57,7 @@
     }
 
     @Test fun proGuard_classFilter_spacesRespected() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -74,7 +74,7 @@
     }
 
     @Test fun proGuard_classFilter_negation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest.kt
index e64590f..dc3e470 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest.kt
@@ -21,7 +21,7 @@
 class ClassSpecTest {
 
     @Test fun proGuard_classSpec_simple() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -39,7 +39,7 @@
     }
 
     @Test fun proGuard_classSpec_allExistingRules() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -71,7 +71,7 @@
     }
 
     @Test fun proGuard_classSpec_rulesModifiers() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -99,7 +99,7 @@
     }
 
     @Test fun proGuard_classSpec_extends() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -119,7 +119,7 @@
     }
 
     @Test fun proGuard_classSpec_modifiers_extends() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -137,7 +137,7 @@
     }
 
     @Test fun proGuard_classSpec_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -157,7 +157,7 @@
     }
 
     @Test fun proGuard_classSpec_annotation_extends() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -177,7 +177,7 @@
     }
 
     @Test fun proGuard_classSpec_annotation_extends_spaces() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -193,5 +193,4 @@
                 "-keep \t @test.Annotation \t public  class  *  extends test.Activity"
             )
     }
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldTypeSelector.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldTypeSelector.kt
index 2832385..d08bbbe 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldTypeSelector.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldTypeSelector.kt
@@ -21,7 +21,7 @@
 class ClassSpecTest_FieldTypeSelector {
 
     @Test fun proGuard_fieldTypeSelector() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -46,7 +46,7 @@
     }
 
     @Test fun proGuard_fieldTypeSelector_modifiers() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -71,7 +71,7 @@
     }
 
     @Test fun proGuard_fieldTypeSelector_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -95,7 +95,7 @@
     }
 
     @Test fun proGuard_fieldTypeSelector_modifiers_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -121,7 +121,7 @@
     }
 
     @Test fun proGuard_fieldTypeSelector_modifiers_annotation_spaces() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -141,5 +141,4 @@
                 "}"
             )
     }
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldsSelector.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldsSelector.kt
index 6f6a1f9..2a0f752 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldsSelector.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_FieldsSelector.kt
@@ -21,7 +21,7 @@
 class ClassSpecTest_FieldsSelector {
 
     @Test fun proGuard_fieldsSelector_minimal() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -41,7 +41,7 @@
     }
 
     @Test fun proGuard_fieldsSelector_modifiers() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
             )
             .forGivenTypesMap(
@@ -63,7 +63,7 @@
     }
 
     @Test fun proGuard_fieldsSelector_modifiers_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -87,7 +87,7 @@
     }
 
     @Test fun proGuard_fieldsSelector_modifiers_annotation_spaces() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodInitSelector.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodInitSelector.kt
index 9a792cf..d681bda 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodInitSelector.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodInitSelector.kt
@@ -21,7 +21,7 @@
 class ClassSpecTest_MethodInitSelector {
 
     @Test fun proGuard_methodsInitSelector() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
             )
             .forGivenTypesMap(
@@ -39,7 +39,7 @@
     }
 
     @Test fun proGuard_methodsInitSelector_modifiers() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
             )
             .forGivenTypesMap(
@@ -63,7 +63,7 @@
     }
 
     @Test fun proGuard_methodsInitSelector_modifiers_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -89,7 +89,7 @@
     }
 
     @Test fun proGuard_methodInitSelector() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -118,7 +118,7 @@
     }
 
     @Test fun proGuard_methodInitSelector_modifiers() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -147,7 +147,7 @@
     }
 
     @Test fun proGuard_methodInitSelector_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -162,7 +162,8 @@
                 "  @support.Annotation <init>(*); \n" +
                 "  @support.Annotation <init>(...); \n" +
                 "  @keep.Me <init>(support.Activity); \n" +
-                "  @support.Annotation <init>(support.Activity, support.Fragment, keep.Please); \n" +
+                "  @support.Annotation <init>(support.Activity, support.Fragment, keep.Please);" +
+                " \n" +
                 "}"
             )
             .rewritesTo(
@@ -177,7 +178,7 @@
     }
 
     @Test fun proGuard_methodInitSelector_modifiers_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -192,7 +193,8 @@
                 "  @support.Annotation public static <init>(*); \n" +
                 "  @support.Annotation !public !static <init>(...); \n" +
                 "  @support.Annotation !private static <init>(support.Activity); \n" +
-                "  @support.Annotation public !abstract <init>(support.Activity, support.Fragment, keep.Please); \n" +
+                "  @support.Annotation public !abstract <init>(support.Activity, support.Fragment" +
+                ", keep.Please); \n" +
                 "}"
             )
             .rewritesTo(
@@ -201,13 +203,14 @@
                 "  @test.Annotation public static <init>(*); \n" +
                 "  @test.Annotation !public !static <init>(...); \n" +
                 "  @test.Annotation !private static <init>(test.Activity); \n" +
-                "  @test.Annotation public !abstract <init>(test.Activity, test.Fragment, keep.Please); \n" +
+                "  @test.Annotation public !abstract <init>(test.Activity, test.Fragment, " +
+                "keep.Please); \n" +
                 "}"
             )
     }
 
     @Test fun proGuard_methodInitSelector_modifiers_annotation_test() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -218,12 +221,14 @@
             )
             .testThatGivenProGuard(
                 "-keep public class * { \n" +
-                "  @support.Annotation  public  !abstract \t <init> ( support.Activity , support.Fragment, keep.Please); \n" +
+                "  @support.Annotation  public  !abstract \t <init> ( support.Activity , " +
+                "support.Fragment, keep.Please); \n" +
                 "}"
             )
             .rewritesTo(
                 "-keep public class * { \n" +
-                "  @test.Annotation  public  !abstract \t <init> (test.Activity, test.Fragment, keep.Please); \n" +
+                "  @test.Annotation  public  !abstract \t <init> (test.Activity, test.Fragment, " +
+                "keep.Please); \n" +
                 "}"
             )
     }
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodSelectorWithReturnType.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodSelectorWithReturnType.kt
index d9960b4..1cee765 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodSelectorWithReturnType.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_MethodSelectorWithReturnType.kt
@@ -21,7 +21,7 @@
 class ClassSpecTest_MethodSelectorWithReturnType {
 
     @Test fun proGuard_methodReturnTypeSelector() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -54,7 +54,7 @@
     }
 
     @Test fun proGuard_methodReturnTypeSelector_voidResult() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -83,7 +83,7 @@
     }
 
     @Test fun proGuard_methodReturnTypeSelector_starResult() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -112,7 +112,7 @@
     }
 
     @Test fun proGuard_methodReturnTypeSelector_typeResult() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -141,7 +141,7 @@
     }
 
     @Test fun proGuard_methodReturnTypeSelector_typeResult_wildcards() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -170,7 +170,7 @@
     }
 
     @Test fun proGuard_methodReturnTypeSelector_typeResult_modifiers() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -184,7 +184,8 @@
                 "  public static support.Fragment get(...); \n" +
                 "  !public !static support.Fragment get(*); \n" +
                 "  private support.Fragment get(support.Activity); \n" +
-                "  public abstract support.Fragment get(support.Activity, support.Fragment, keep.Please); \n" +
+                "  public abstract support.Fragment get(support.Activity, support.Fragment, " +
+                "keep.Please); \n" +
                 "}"
             )
             .rewritesTo(
@@ -193,13 +194,14 @@
                 "  public static test.Fragment get(...); \n" +
                 "  !public !static test.Fragment get(*); \n" +
                 "  private test.Fragment get(test.Activity); \n" +
-                "  public abstract test.Fragment get(test.Activity, test.Fragment, keep.Please); \n" +
+                "  public abstract test.Fragment get(test.Activity, test.Fragment, keep.Please); " +
+                "\n" +
                 "}"
             )
     }
 
     @Test fun proGuard_methodReturnTypeSelector_typeResult_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -214,7 +216,8 @@
                 "  @support.Annotation support.Fragment get(...); \n" +
                 "  @support.Annotation support.Fragment get(*); \n" +
                 "  @keep.Me support.Fragment get(support.Activity); \n" +
-                "  @support.Annotation support.Fragment get(support.Activity, support.Fragment, keep.Please); \n" +
+                "  @support.Annotation support.Fragment get(support.Activity, support.Fragment, " +
+                "keep.Please); \n" +
                 "}"
             )
             .rewritesTo(
@@ -223,13 +226,14 @@
                 "  @test.Annotation test.Fragment get(...); \n" +
                 "  @test.Annotation test.Fragment get(*); \n" +
                 "  @keep.Me test.Fragment get(test.Activity); \n" +
-                "  @test.Annotation test.Fragment get(test.Activity, test.Fragment, keep.Please); \n" +
+                "  @test.Annotation test.Fragment get(test.Activity, test.Fragment, keep.Please" +
+                "); \n" +
                 "}"
             )
     }
 
     @Test fun proGuard_methodReturnTypeSelector_typeResult_modifiers_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -244,7 +248,8 @@
                 "  @support.Annotation public static support.Fragment get(...); \n" +
                 "  @support.Annotation !public !static support.Fragment get(*); \n" +
                 "  @support.Annotation private support.Fragment get(support.Activity); \n" +
-                "  @support.Annotation public abstract support.Fragment get(support.Activity, support.Fragment,  keep.Please); \n" +
+                "  @support.Annotation public abstract support.Fragment get(support.Activity, " +
+                "support.Fragment,  keep.Please); \n" +
                 "}"
             )
             .rewritesTo(
@@ -253,13 +258,14 @@
                 "  @test.Annotation public static test.Fragment get(...); \n" +
                 "  @test.Annotation !public !static test.Fragment get(*); \n" +
                 "  @test.Annotation private test.Fragment get(test.Activity); \n" +
-                "  @test.Annotation public abstract test.Fragment get(test.Activity, test.Fragment, keep.Please); \n" +
+                "  @test.Annotation public abstract test.Fragment get(test.Activity, " +
+                "test.Fragment, keep.Please); \n" +
                 "}"
             )
     }
 
     @Test fun proGuard_methodReturnTypeSelector_typeResult_modifiers_annotation_spaces() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -270,12 +276,14 @@
             )
             .testThatGivenProGuard(
                 "-keep public class * { \n" +
-                "  @support.Annotation  support.Fragment \t get(support.Activity ,  support.Fragment ,  keep.Please) ; \n" +
+                "  @support.Annotation  support.Fragment \t get(support.Activity ,  " +
+                "support.Fragment ,  keep.Please) ; \n" +
                 "}"
             )
             .rewritesTo(
                 "-keep public class * { \n" +
-                "  @test.Annotation  test.Fragment \t get(test.Activity, test.Fragment, keep.Please) ; \n" +
+                "  @test.Annotation  test.Fragment \t get(test.Activity, test.Fragment, " +
+                "keep.Please) ; \n" +
                 "}"
             )
     }
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_NamedCtorSelector.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_NamedCtorSelector.kt
index 21b8b8c..671be61 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_NamedCtorSelector.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ClassSpecTest_NamedCtorSelector.kt
@@ -21,7 +21,7 @@
 class ClassSpecTest_NamedCtorSelector {
 
     @Test fun proGuard_ctorSelector() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -50,7 +50,7 @@
     }
 
     @Test fun proGuard_ctorSelector_modifiers() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -64,7 +64,8 @@
                 "  public static support.Activity(...); \n" +
                 "  !private support.Activity(*); \n" +
                 "  !public !static support.Activity(support.Activity); \n" +
-                "  !protected support.Activity(support.Activity, support.Fragment, keep.Please); \n" +
+                "  !protected support.Activity(support.Activity, support.Fragment, keep.Please);" +
+                " \n" +
                 "}"
             )
             .rewritesTo(
@@ -79,7 +80,7 @@
     }
 
     @Test fun proGuard_ctorSelector_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -94,7 +95,8 @@
                 "  @support.Annotation support.Activity(...); \n" +
                 "  @support.Annotation support.Activity(*); \n" +
                 "  @support.Annotation support.Activity(support.Activity); \n" +
-                "  @support.Annotation support.Activity(support.Activity, support.Fragment, keep.Please); \n" +
+                "  @support.Annotation support.Activity(support.Activity, support.Fragment, " +
+                "keep.Please); \n" +
                 "}"
             )
             .rewritesTo(
@@ -109,7 +111,7 @@
     }
 
     @Test fun proGuard_ctorSelector_modifiers_annotation() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -124,7 +126,8 @@
                 "  @support.Annotation public static support.Activity(...); \n" +
                 "  @support.Annotation !private support.Activity(*); \n" +
                 "  @support.Annotation !public !static support.Activity(support.Activity); \n" +
-                "  @support.Annotation !protected support.Activity(support.Activity, support.Fragment, keep.Please); \n" +
+                "  @support.Annotation !protected support.Activity(support.Activity, " +
+                "support.Fragment, keep.Please); \n" +
                 "}"
             )
             .rewritesTo(
@@ -133,13 +136,14 @@
                 "  @test.Annotation public static test.Activity(...); \n" +
                 "  @test.Annotation !private test.Activity(*); \n" +
                 "  @test.Annotation !public !static test.Activity(test.Activity); \n" +
-                "  @test.Annotation !protected test.Activity(test.Activity, test.Fragment, keep.Please); \n" +
+                "  @test.Annotation !protected test.Activity(test.Activity, test.Fragment, " +
+                "keep.Please); \n" +
                 "}"
             )
     }
 
     @Test fun proGuard_ctorSelector_modifiers_annotation_spaces() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTester.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTester.kt
index cae21d0..37075d3 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTester.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTester.kt
@@ -20,62 +20,68 @@
 import android.support.tools.jetifier.core.config.Config
 import android.support.tools.jetifier.core.map.TypesMap
 import android.support.tools.jetifier.core.rules.JavaType
+import android.support.tools.jetifier.core.rules.RewriteRule
 import android.support.tools.jetifier.core.transform.TransformationContext
 import com.google.common.truth.Truth
 import java.nio.charset.StandardCharsets
 import java.nio.file.Paths
 
-
 /**
  * Helper to test ProGuard rewriting logic using lightweight syntax.
  */
-object ProGuardTester {
+class ProGuardTester {
 
     private var javaTypes = emptyList<Pair<String, String>>()
+    private var rewriteRules = emptyList<Pair<String, String>>()
     private var proGuardTypes = emptyList<Pair<ProGuardType, ProGuardType>>()
     private var prefixes = emptyList<String>()
 
-    fun forGivenPrefixes(vararg prefixes: String) : ProGuardTester {
+    fun forGivenPrefixes(vararg prefixes: String): ProGuardTester {
         this.prefixes = prefixes.toList()
         return this
     }
 
-    fun forGivenTypesMap(vararg rules: Pair<String, String>) : ProGuardTester {
-        this.javaTypes = rules.toList()
+    fun forGivenTypesMap(vararg types: Pair<String, String>): ProGuardTester {
+        this.javaTypes = types.toList()
         return this
     }
 
-    fun forGivenProGuardMap(vararg rules: Pair<String, String>) : ProGuardTester {
+    fun forGivenRules(vararg rules: Pair<String, String>): ProGuardTester {
+        this.rewriteRules = rules.toList()
+        return this
+    }
+
+    fun forGivenProGuardMap(vararg rules: Pair<String, String>): ProGuardTester {
         this.proGuardTypes = rules.map {
             ProGuardType.fromDotNotation(it.first) to ProGuardType.fromDotNotation(it.second) }
             .toList()
         return this
     }
 
-    fun testThatGivenType(givenType: String) : ProGuardTesterForType {
+    fun testThatGivenType(givenType: String): ProGuardTesterForType {
         return ProGuardTesterForType(createConfig(), givenType)
     }
 
-    fun testThatGivenArguments(givenArgs: String) : ProGuardTesterForArgs {
+    fun testThatGivenArguments(givenArgs: String): ProGuardTesterForArgs {
         return ProGuardTesterForArgs(createConfig(), givenArgs)
     }
 
-    fun testThatGivenProGuard(given: String) : ProGuardTesterForFile {
+    fun testThatGivenProGuard(given: String): ProGuardTesterForFile {
         return ProGuardTesterForFile(createConfig(), given)
     }
 
-    private fun createConfig() : Config {
+    private fun createConfig(): Config {
         return Config(
             restrictToPackagePrefixes = prefixes,
-            rewriteRules = emptyList(),
-            pomRewriteRules =  emptyList(),
+            rewriteRules = rewriteRules.map { RewriteRule(it.first, it.second) },
+            slRules = emptyList(),
+            pomRewriteRules = emptyList(),
             typesMap = TypesMap(
-                types = javaTypes.map { JavaType(it.first) to JavaType(it.second) }.toMap(),
-                fields = emptyMap()),
+                types = javaTypes.map { JavaType(it.first) to JavaType(it.second) }.toMap()
+            ),
             proGuardMap = ProGuardTypesMap(proGuardTypes.toMap()))
     }
 
-
     class ProGuardTesterForFile(private val config: Config, private val given: String) {
 
         fun rewritesTo(expected: String) {
@@ -87,8 +93,8 @@
             val result = file.data.toString(StandardCharsets.UTF_8)
 
             Truth.assertThat(result).isEqualTo(expected)
+            Truth.assertThat(context.errorsTotal()).isEqualTo(0)
         }
-
     }
 
     class ProGuardTesterForType(private val config: Config, private val given: String) {
@@ -99,8 +105,8 @@
             val result = mapper.replaceType(given)
 
             Truth.assertThat(result).isEqualTo(expectedType)
+            Truth.assertThat(context.errorsTotal()).isEqualTo(0)
         }
-
     }
 
     class ProGuardTesterForArgs(private val config: Config, private val given: String) {
@@ -111,8 +117,7 @@
             val result = mapper.replaceMethodArgs(given)
 
             Truth.assertThat(result).isEqualTo(expectedArguments)
+            Truth.assertThat(context.errorsTotal()).isEqualTo(0)
         }
     }
-
-}
-
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapperTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapperTest.kt
index 5e12aff..b1da4e2 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapperTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapperTest.kt
@@ -21,25 +21,25 @@
 class ProGuardTypesMapperTest {
 
     @Test fun proGuard_typeMapper_wildcard_simple() {
-        ProGuardTester
+        ProGuardTester()
             .testThatGivenType("*")
             .getsRewrittenTo("*")
     }
 
     @Test fun proGuard_typeMapper_wildcard_double() {
-        ProGuardTester
+        ProGuardTester()
             .testThatGivenType("**")
             .getsRewrittenTo("**")
     }
 
     @Test fun proGuard_typeMapper_wildcard_composed() {
-        ProGuardTester
+        ProGuardTester()
             .testThatGivenType("**/*")
             .getsRewrittenTo("**/*")
     }
 
     @Test fun proGuard_typeMapper_wildcard_viaMap() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -51,7 +51,7 @@
     }
 
     @Test fun proGuard_typeMapper_wildcard_viaMap2() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -63,7 +63,7 @@
     }
 
     @Test fun proGuard_typeMapper_wildcard_viaTypesMap() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -75,7 +75,7 @@
     }
 
     @Test fun proGuard_typeMapper_wildcard_notFoundInMap() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -87,7 +87,7 @@
     }
 
     @Test fun proGuard_typeMapper_differentPrefix_notRewritten() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -99,7 +99,7 @@
     }
 
     @Test fun proGuard_typeMapper_differentPrefix_wildcard_getsRewritten() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -111,7 +111,7 @@
     }
 
     @Test fun proGuard_typeMapper_innerClass() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -123,7 +123,7 @@
     }
 
     @Test fun proGuard_typeMapper_innerClass_wildcard() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -135,25 +135,25 @@
     }
 
     @Test fun proGuard_argsMapper_tripleDots() {
-        ProGuardTester
+        ProGuardTester()
             .testThatGivenArguments("...")
             .getRewrittenTo("...")
     }
 
     @Test fun proGuard_argsMapper_wildcard() {
-        ProGuardTester
+        ProGuardTester()
             .testThatGivenArguments("*")
             .getRewrittenTo("*")
     }
 
     @Test fun proGuard_argsMapper_wildcards() {
-        ProGuardTester
+        ProGuardTester()
             .testThatGivenArguments("**, **")
             .getRewrittenTo("**, **")
     }
 
     @Test fun proGuard_argsMapper_viaMaps() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -168,7 +168,7 @@
     }
 
     @Test fun proGuard_argsMapper_viaMaps_spaces() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -182,4 +182,41 @@
             .getRewrittenTo("test.Activity, test.v7.**, keep.Me")
     }
 
+    @Test fun proGuard_shouldIgnore() {
+        ProGuardTester()
+            .forGivenPrefixes(
+                "support/"
+            )
+            .forGivenRules(
+                "support/v7/Activity" to "ignore"
+            )
+            .testThatGivenType("support.v7.Activity")
+            .getsRewrittenTo("support.v7.Activity")
+    }
+
+    @Test fun proGuard_shouldIgnore_withWildcard() {
+        ProGuardTester()
+            .forGivenPrefixes(
+                "support/"
+            )
+            .forGivenRules(
+                "support/v7/(.*)" to "ignore"
+            )
+            .testThatGivenType("support.v7.**")
+            .getsRewrittenTo("support.v7.**")
+    }
+
+
+    @Test(expected = AssertionError::class)
+    fun proGuard_shouldNotIgnore() {
+        ProGuardTester()
+            .forGivenPrefixes(
+                "support/"
+            )
+            .forGivenRules(
+                "support/v7/Activity" to "ignoreInPreprocessor"
+            )
+            .testThatGivenType("support.v7.Activity")
+            .getsRewrittenTo("support.v7.Activity")
+    }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProguardSamplesTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProguardSamplesTest.kt
index 0542e7d..f9554f1 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProguardSamplesTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/proguard/ProguardSamplesTest.kt
@@ -21,7 +21,7 @@
 class ProguardSamplesTest {
 
     @Test fun proGuard_sample() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "android/app/",
                 "android/view/",
@@ -39,51 +39,51 @@
                 "android/webkit/JavascriptInterface" to "test/webkit/JavascriptInterface"
             )
             .testThatGivenProGuard(
-               "-injars      bin/classes \n" +
-               "-injars      libs \n" +
-               "-outjars     bin/classes-processed.jar \n" +
-               "-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar \n" +
-               "\n" +
-               "-dontpreverify \n" +
-               "-repackageclasses '' \n" +
-               "-allowaccessmodification \n" +
-               "-optimizations !code/simplification/arithmetic \n" +
-               "-keepattributes *Annotation* \n" +
-               "\n" +
-               "-keep public class * extends android.app.Activity \n" +
-               "-keep public class * extends android.app.Application \n" +
-               " \n" +
-               "-keep public class * extends android.view.View { \n" +
-               "      public <init>(android.content.Context); \n" +
-               "      public <init>(android.content.Context, android.util.AttributeSet); \n" +
-               "      public <init>(android.content.Context, android.util.AttributeSet, int); \n" +
-               "      public void set*(...); \n" +
-               "} \n" +
-               "\n" +
-               "-keepclasseswithmembers class * { \n" +
-               "    public <init>(android.content.Context, android.util.AttributeSet); \n" +
-               "} \n" +
-               "\n" +
-               "-keepclasseswithmembers class * { \n" +
-               "    public <init>(android.content.Context, android.util.AttributeSet, int); \n" +
-               "} \n" +
-               "\n" +
-               "-keepclassmembers class * extends android.content.Context { \n" +
-               "    public void *(android.view.View); \n" +
-               "    public void *(android.view.MenuItem); \n" +
-               "} \n" +
-               "\n" +
-               "-keepclassmembers class * implements android.os.Parcelable { \n" +
-               "    static ** CREATOR; \n" +
-               "} \n" +
-               "\n" +
-               "-keepclassmembers class **.R\$* { \n" +
-               "    public static <fields>; \n" +
-               "} \n" +
-               "\n" +
-               "-keepclassmembers class * { \n" +
-               "    @android.webkit.JavascriptInterface <methods>; \n" +
-               "} "
+                "-injars      bin/classes \n" +
+                "-injars      libs \n" +
+                "-outjars     bin/classes-processed.jar \n" +
+                "-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar \n" +
+                "\n" +
+                "-dontpreverify \n" +
+                "-repackageclasses '' \n" +
+                "-allowaccessmodification \n" +
+                "-optimizations !code/simplification/arithmetic \n" +
+                "-keepattributes *Annotation* \n" +
+                "\n" +
+                "-keep public class * extends android.app.Activity \n" +
+                "-keep public class * extends android.app.Application \n" +
+                " \n" +
+                "-keep public class * extends android.view.View { \n" +
+                "      public <init>(android.content.Context); \n" +
+                "      public <init>(android.content.Context, android.util.AttributeSet); \n" +
+                "      public <init>(android.content.Context, android.util.AttributeSet, int); \n" +
+                "      public void set*(...); \n" +
+                "} \n" +
+                "\n" +
+                "-keepclasseswithmembers class * { \n" +
+                "    public <init>(android.content.Context, android.util.AttributeSet); \n" +
+                "} \n" +
+                "\n" +
+                "-keepclasseswithmembers class * { \n" +
+                "    public <init>(android.content.Context, android.util.AttributeSet, int); \n" +
+                "} \n" +
+                "\n" +
+                "-keepclassmembers class * extends android.content.Context { \n" +
+                "    public void *(android.view.View); \n" +
+                "    public void *(android.view.MenuItem); \n" +
+                "} \n" +
+                "\n" +
+                "-keepclassmembers class * implements android.os.Parcelable { \n" +
+                "    static ** CREATOR; \n" +
+                "} \n" +
+                "\n" +
+                "-keepclassmembers class **.R\$* { \n" +
+                "    public static <fields>; \n" +
+                "} \n" +
+                "\n" +
+                "-keepclassmembers class * { \n" +
+                "    @android.webkit.JavascriptInterface <methods>; \n" +
+                "} "
             )
             .rewritesTo(
                 "-injars      bin/classes \n" +
@@ -135,7 +135,7 @@
     }
 
     @Test fun proGuard_sample2() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "android/support/v7/"
             )
@@ -161,7 +161,7 @@
     }
 
     @Test fun proGuard_sample3() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "android/support/design/",
                 "android/support/v7/"
@@ -191,7 +191,7 @@
     }
 
     @Test fun proGuard_sample4() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "android/support/design/",
                 "android/support/v7/",
@@ -238,7 +238,7 @@
     }
 
     @Test fun proGuard_sample5() {
-        ProGuardTester
+        ProGuardTester()
             .forGivenPrefixes(
                 "support/"
             )
@@ -270,5 +270,4 @@
                 "}"
             )
     }
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformerTest.kt b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformerTest.kt
index 5788b40..4aaaae0 100644
--- a/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformerTest.kt
+++ b/jetifier/jetifier/core/src/test/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformerTest.kt
@@ -16,14 +16,17 @@
 
 package android.support.tools.jetifier.core.transform.resource
 
+import android.support.tools.jetifier.core.archive.ArchiveFile
 import android.support.tools.jetifier.core.config.Config
 import android.support.tools.jetifier.core.rules.JavaType
 import android.support.tools.jetifier.core.map.TypesMap
+import android.support.tools.jetifier.core.transform.PackageMap
 import android.support.tools.jetifier.core.transform.TransformationContext
 import android.support.tools.jetifier.core.transform.proguard.ProGuardTypesMap
 import com.google.common.truth.Truth
 import org.junit.Test
 import java.nio.charset.Charset
+import java.nio.file.Paths
 
 class XmlResourcesTransformerTest {
 
@@ -45,7 +48,8 @@
                 "<android.support.v7.preference.Preference>\n" +
                 "</android.support.v7.preference.Preference>",
             prefixes = listOf("android/support/v7/"),
-            map = mapOf()
+            map = mapOf(),
+            errorsExpected = true
         )
     }
 
@@ -81,7 +85,8 @@
             prefixes = listOf("android/support/"),
             map = mapOf(
                 "android/support2/v7/preference/Preference" to "android/test/pref/Preference"
-            )
+            ),
+            errorsExpected = true
         )
     }
 
@@ -92,7 +97,7 @@
             expectedXml =
                 "<android.test.pref.Preference/>",
             prefixes = listOf("android/support/"),
-            map = mapOf(
+            typesMap = mapOf(
                 "android/support/v7/preference/Preference" to "android/test/pref/Preference"
             )
         )
@@ -107,7 +112,7 @@
                 "<android.test.pref.Preference \n" +
                 "    someAttribute=\"android.support.v7.preference.Preference\"/>",
             prefixes = listOf("android/support/"),
-            map =  mapOf(
+            typesMap = mapOf(
                 "android/support/v7/preference/Preference" to "android/test/pref/Preference"
             )
         )
@@ -122,7 +127,7 @@
                 "<android.test.pref.Preference>\n" +
                 "</android.test.pref.Preference>",
             prefixes = listOf("android/support/"),
-            map = mapOf(
+            typesMap = mapOf(
                 "android/support/v7/preference/Preference" to "android/test/pref/Preference"
             )
         )
@@ -135,7 +140,7 @@
             expectedXml =
                 "<view class=\"android.test.pref.Preference\">",
             prefixes = listOf("android/support/"),
-            map = mapOf(
+            typesMap = mapOf(
                 "android/support/v7/preference/Preference" to "android/test/pref/Preference"
             )
         )
@@ -152,7 +157,7 @@
                 "      class=\"android.test.pref.Preference\"" +
                 "      ignoreMe=\"android.support.v7.preference.Preference\">",
             prefixes = listOf("android/support/"),
-            map = mapOf(
+            typesMap = mapOf(
                 "android/support/v7/preference/Preference" to "android/test/pref/Preference"
             )
         )
@@ -178,8 +183,9 @@
                 "<android.support.v7.preference.Preference>\n" +
                 "</android.support.v7.preference.Preference>",
             prefixes = listOf("android/support/"),
-            map = mapOf(
-                "android/support/v7/preference/Preference" to "android/support/v7/preference/Preference"
+            typesMap = mapOf(
+                "android/support/v7/preference/Preference"
+                    to "android/support/v7/preference/Preference"
             )
         )
     }
@@ -214,25 +220,98 @@
                 "android/support/v7/",
                 "android/support/v14/"
             ),
-            map = mapOf(
-                "android/support/v7/preference/ListPreference" to "android/test/pref/ListPref",
-                "android/support/v7/preference/Preference" to "android/test/pref/Preference",
-                "android/support/v14/preference/DialogPreference" to "android/test14/pref/DialogPreference",
-                "android/support/v21/preference/DialogPreference" to "android/test21/pref/DialogPreference"
+            typesMap = mapOf(
+                "android/support/v7/preference/ListPreference"
+                    to "android/test/pref/ListPref",
+                "android/support/v7/preference/Preference"
+                    to "android/test/pref/Preference",
+                "android/support/v14/preference/DialogPreference"
+                    to "android/test14/pref/DialogPreference",
+                "android/support/v21/preference/DialogPreference"
+                    to "android/test21/pref/DialogPreference"
             )
         )
     }
 
-    private fun testRewriteToTheSame(givenAndExpectedXml: String,
-                                     prefixes: List<String>,
-                                     map: Map<String, String>) {
-        testRewrite(givenAndExpectedXml, givenAndExpectedXml, prefixes, map)
+    @Test fun manifestFile_packageRewrite() {
+        testRewrite(
+            givenXml =
+                "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+                "          package=\"android.support.v7.preference\">\n" +
+                "    <uses-sdk android:minSdkVersion=\"14\"/>\n" +
+                "</manifest>",
+            expectedXml =
+                "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+                "          package=\"androidx.preference\">\n" +
+                "    <uses-sdk android:minSdkVersion=\"14\"/>\n" +
+                "</manifest>",
+            prefixes = listOf(
+            ),
+            typesMap = mapOf(
+            ),
+            packageMap = PackageMap(listOf(
+                PackageMap.PackageRule(
+                    from = "android/support/v7/preference",
+                    to = "androidx/preference")
+            )),
+            rewritingSupportLib = true,
+            isManifestFile = true
+        )
     }
 
-    private fun testRewrite(givenXml : String,
-                            expectedXml : String,
-                            prefixes: List<String>,
-                            map: Map<String, String>) {
+    @Test fun manifestFile_packageRewrite_chooseBasedOnArtifactName() {
+        testRewrite(
+            givenXml =
+            "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+                "          package=\"androidx.preference\">\n" +
+                "    <uses-sdk android:minSdkVersion=\"14\"/>\n" +
+                "</manifest>",
+            expectedXml =
+            "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+                "          package=\"android.support.v14.preference\">\n" +
+                "    <uses-sdk android:minSdkVersion=\"14\"/>\n" +
+                "</manifest>",
+            prefixes = listOf(
+            ),
+            typesMap = mapOf(
+            ),
+            packageMap = PackageMap(listOf(
+                PackageMap.PackageRule(
+                    from = "androidx/preference",
+                    to = "android/support/v7/preference",
+                    filePrefix = "preference-7"),
+                PackageMap.PackageRule(
+                    from = "androidx/preference",
+                    to = "android/support/v14/preference",
+                    filePrefix = "preference-v14")
+            )),
+            rewritingSupportLib = true,
+            isManifestFile = true,
+            libraryName = "preference-v14-28.0.0-123.aar"
+        )
+    }
+
+    private fun testRewriteToTheSame(
+        givenAndExpectedXml: String,
+        prefixes: List<String>,
+        map: Map<String, String>,
+        errorsExpected: Boolean = false
+    ) {
+        testRewrite(givenAndExpectedXml, givenAndExpectedXml, prefixes, map,
+            errorsExpected = errorsExpected)
+    }
+
+    private fun testRewrite(
+        givenXml: String,
+        expectedXml: String,
+        prefixes: List<String>,
+        typesMap: Map<String, String>,
+        packageMap: PackageMap = PackageMap.EMPTY,
+        rewritingSupportLib: Boolean = false,
+        isManifestFile: Boolean = false,
+        libraryName: String = "",
+        errorsExpected: Boolean = false
+    ) {
         val given =
             "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
             "$givenXml\n"
@@ -241,15 +320,35 @@
             "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
             "$expectedXml\n"
 
-        val typesMap = TypesMap(map.map{ JavaType(it.key) to JavaType(it.value) }.toMap(),
-            emptyMap())
-        val config = Config(prefixes, emptyList(), emptyList(), typesMap, ProGuardTypesMap.EMPTY)
-        val context = TransformationContext(config)
+        val typeMap = TypesMap(typesMap.map { JavaType(it.key) to JavaType(it.value) }.toMap())
+        val config = Config(
+            restrictToPackagePrefixes = prefixes,
+            rewriteRules = emptyList(),
+            slRules = emptyList(),
+            pomRewriteRules = emptyList(),
+            typesMap = typeMap,
+            proGuardMap = ProGuardTypesMap.EMPTY,
+            packageMap = packageMap
+        )
+        val context = TransformationContext(config, rewritingSupportLib = rewritingSupportLib)
+        context.libraryName = libraryName
         val processor = XmlResourcesTransformer(context)
-        val result = processor.transform(given.toByteArray())
-        val strResult = result.toString(Charset.defaultCharset())
+        val fileName = if (isManifestFile) {
+            Paths.get("AndroidManifest.xml")
+        } else {
+            Paths.get("random.xml")
+        }
+        val file = ArchiveFile(fileName, given.toByteArray())
+        processor.runTransform(file)
+        val strResult = file.data.toString(Charset.defaultCharset())
 
         Truth.assertThat(strResult).isEqualTo(expected)
+
+        if (errorsExpected) {
+            Truth.assertThat(context.errorsTotal()).isAtLeast(1)
+        } else {
+            Truth.assertThat(context.errorsTotal()).isEqualTo(0)
+        }
     }
 }
 
diff --git a/jetifier/jetifier/core/src/test/resources/fileRenameTest/expectedTestLib.zip b/jetifier/jetifier/core/src/test/resources/fileRenameTest/expectedTestLib.zip
new file mode 100644
index 0000000..7ee64b7
--- /dev/null
+++ b/jetifier/jetifier/core/src/test/resources/fileRenameTest/expectedTestLib.zip
Binary files differ
diff --git a/jetifier/jetifier/core/src/test/resources/fileRenameTest/expectedTestLibNested.zip b/jetifier/jetifier/core/src/test/resources/fileRenameTest/expectedTestLibNested.zip
new file mode 100644
index 0000000..11c328d
--- /dev/null
+++ b/jetifier/jetifier/core/src/test/resources/fileRenameTest/expectedTestLibNested.zip
Binary files differ
diff --git a/jetifier/jetifier/core/src/test/resources/fileRenameTest/inputTestLib.zip b/jetifier/jetifier/core/src/test/resources/fileRenameTest/inputTestLib.zip
new file mode 100644
index 0000000..239baa1
--- /dev/null
+++ b/jetifier/jetifier/core/src/test/resources/fileRenameTest/inputTestLib.zip
Binary files differ
diff --git a/jetifier/jetifier/core/src/test/resources/fileRenameTest/inputTestLibNested.zip b/jetifier/jetifier/core/src/test/resources/fileRenameTest/inputTestLibNested.zip
new file mode 100644
index 0000000..e722db1
--- /dev/null
+++ b/jetifier/jetifier/core/src/test/resources/fileRenameTest/inputTestLibNested.zip
Binary files differ
diff --git a/jetifier/jetifier/gradle b/jetifier/jetifier/gradle
deleted file mode 120000
index 1ce6c4c..0000000
--- a/jetifier/jetifier/gradle
+++ /dev/null
@@ -1 +0,0 @@
-../../gradle
\ No newline at end of file
diff --git a/jetifier/jetifier/gradle-plugin/build.gradle b/jetifier/jetifier/gradle-plugin/build.gradle
index 3b001f8..4a8d0fb 100644
--- a/jetifier/jetifier/gradle-plugin/build.gradle
+++ b/jetifier/jetifier/gradle-plugin/build.gradle
@@ -14,30 +14,29 @@
  * limitations under the License
  */
 
-apply plugin: 'maven'
+import static android.support.dependencies.DependenciesKt.KOTLIN_STDLIB
 
-version '0.2'
+import android.support.LibraryGroups
+import android.support.LibraryVersions
+
+plugins {
+  id("SupportKotlinLibraryPlugin")
+}
 
 dependencies {
-    compile project(':core')
+    compile project(':jetifier-core')
+    compile(KOTLIN_STDLIB)
     compileOnly gradleApi()
 }
 
-// Task to create a jar with all the required dependencies bundled inside
-task fatJar(type: Jar) {
-    baseName = project.name + '-all'
-    destinationDir = rootProject.ext.distDir
-    from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } }
-    with jar
+
+supportLibrary {
+    name = "Android Jetifier Gradle Plugin"
+    publish = true
+    mavenVersion = LibraryVersions.JETIFIER
+    mavenGroup = LibraryGroups.JETIFIER
+    generateDocs = false
+    inceptionYear = "2017"
+    description = "Android Jetifier Gradle Plugin"
 }
 
-uploadArchives {
-    repositories {
-        mavenDeployer {
-            repository(url: rootProject.ext.repoDir)
-        }
-    }
-}
-
-rootProject.mainUpload.dependsOn tasks["uploadArchives"]
-tasks["uploadArchives"].dependsOn rootProject.prepareRepo
\ No newline at end of file
diff --git a/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/JetifierExtension.kt b/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/JetifierExtension.kt
index 7b516ec..e0eb60c 100644
--- a/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/JetifierExtension.kt
+++ b/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/JetifierExtension.kt
@@ -16,6 +16,7 @@
 
 package android.support.tools.jetifier.plugin.gradle
 
+import groovy.lang.Closure
 import org.gradle.api.Project
 import org.gradle.api.artifacts.Configuration
 import org.gradle.api.artifacts.Dependency
@@ -31,7 +32,6 @@
     /**
      * Adds dependency defined via string notation to be processed by jetifyLibs task.
      *
-     *
      * Example usage in Gradle:
      * dependencies {
      *   compile jetifier.process('groupId:artifactId:1.0')
@@ -42,21 +42,20 @@
     }
 
     /**
-     * Adds dependency defined via string notation to be processed by jetifyLibs task while also
-     * applying the given exclude rules.
-     *
+     * Adds dependency defined via string notation to be processed by jetifyLibs task. This version
+     * supports Gradle's configuration closure that is passed to the Gradle's DependencyHandler.
      *
      * Example usage in Gradle:
      * dependencies {
-     *   compile jetifier.processAndExclude('groupId:artifactId:1.0',
-     *     [group: 'some.package', module: 'moduleName'])
+     *   compile jetifier.process('groupId:artifactId:1.0') {
+     *     exclude group: 'groupId'
+     *
+     *     transitive = false
+     *   }
      * }
      */
-    fun processAndExclude(
-        dependencyNotation: String,
-        vararg excludes: Map<String, String>
-    ): FileCollection {
-        return processAndExclude(project.dependencies.create(dependencyNotation), *excludes)
+    fun process(dependencyNotation: String, closure: Closure<Any>): FileCollection {
+        return process(project.dependencies.create(dependencyNotation, closure))
     }
 
     /**
@@ -69,20 +68,6 @@
     }
 
     /**
-     * Adds dependency to be processed by jetifyLibs task while also applying the given excludes
-     * rules.
-     */
-    fun processAndExclude(
-        dependency: Dependency,
-        vararg excludes: Map<String, String>
-    ): FileCollection {
-        val configuration = project.configurations.detachedConfiguration()
-        configuration.dependencies.add(dependency)
-        excludes.forEach { configuration.exclude(it) }
-        return process(configuration)
-    }
-
-    /**
      * Adds dependencies defined via file collection to be processed by jetifyLibs task.
      *
      * Example usage in Gradle for a single file:
diff --git a/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/TasksCommon.kt b/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/TasksCommon.kt
index dcc6375..082034fb 100644
--- a/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/TasksCommon.kt
+++ b/jetifier/jetifier/gradle-plugin/src/main/kotlin/android/support/tools/jetifier/plugin/gradle/TasksCommon.kt
@@ -31,8 +31,10 @@
 
         var configFilePath: Path? = null
 
-
-        fun processFiles(config: Config, filesToProcess: Set<File>, logger: Logger, outputDir: File) : TransformationResult {
+        fun processFiles(config: Config,
+                         filesToProcess: Set<File>,
+                         logger: Logger,
+                         outputDir: File): TransformationResult {
             outputDir.mkdirs()
 
             logger.log(LogLevel.DEBUG, "Jetifier will now process the following files:")
@@ -43,15 +45,14 @@
             // Hook to the gradle logger
             Log.logConsumer = JetifierLoggerAdapter(logger)
 
-            val processor = Processor(config)
-            return processor.transform(filesToProcess, outputDir.toPath())
+            val processor = Processor.createProcessor(config)
+            return processor.transform(filesToProcess, outputDir.toPath(), true)
         }
 
-        fun shouldSkipArtifact(artifactId: String, groupId: String?, config: Config) : Boolean {
+        fun shouldSkipArtifact(artifactId: String, groupId: String?, config: Config): Boolean {
             return config.pomRewriteRules.any {
                 it.from.artifactId == artifactId && it.from.groupId == groupId
             }
         }
     }
-
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/gradlew b/jetifier/jetifier/gradlew
deleted file mode 120000
index 343e0d2..0000000
--- a/jetifier/jetifier/gradlew
+++ /dev/null
@@ -1 +0,0 @@
-../../gradlew
\ No newline at end of file
diff --git a/jetifier/jetifier/preprocessor/build.gradle b/jetifier/jetifier/preprocessor/build.gradle
index b688a9d..a2b9eb2 100644
--- a/jetifier/jetifier/preprocessor/build.gradle
+++ b/jetifier/jetifier/preprocessor/build.gradle
@@ -14,13 +14,16 @@
  * limitations under the License
  */
 
-version '1.0'
+plugins {
+    id("SupportKotlinLibraryPlugin")
+    id("application")
+}
 
-apply plugin: "application"
+version '1.0'
 
 mainClassName = "android.support.tools.jetifier.preprocessor.MainKt"
 
 dependencies {
-    compile project(':core')
+    compile project(':jetifier-core')
     compile group: 'commons-cli', name: 'commons-cli', version: '1.3.1'
-}
\ No newline at end of file
+}
diff --git a/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh b/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh
old mode 100644
new mode 100755
index 2b61811..5ddc2df
--- a/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh
+++ b/jetifier/jetifier/preprocessor/scripts/processDefaultConfig.sh
@@ -18,6 +18,8 @@
 # Grabs all the support libraries and runs them through a preprocessor
 # using the default Jetifier config to generate the final mappings.
 
+set -e
+
 ROOT_DIR=$(dirname $(readlink -f $0))
 OUT_DIR="$ROOT_DIR/out"
 TEMP_LOG="$OUT_DIR/tempLog"
@@ -28,15 +30,16 @@
 GENERATED_CONFIG="$JETIFIER_DIR/core/src/main/resources/default.generated.config"
 PREPROCESSOR_DISTRO_PATH="$BUILD_DIR/preprocessor/build/distributions/preprocessor-1.0.zip"
 PREPROCESSOR_BIN_PATH="$OUT_DIR/preprocessor-1.0/bin/preprocessor"
-SUPPORT_LIBS_DOWNLOADED="$OUT_DIR/supportLibs"
+SUPPORT_LIBS_BUILD_NUMBER="4560478"
+SUPPORT_LIBS_DOWNLOADED="$OUT_DIR/supportLibs/downloaded"
+SUPPORT_LIBS_UNPACKED="$OUT_DIR/supportLibs/unpacked"
 
 GREEN='\033[0;32m'
 RED='\033[0;31m'
 NC='\033[0m' # No Color
 
-function exitAndFail() {
-	cat $TEMP_LOG
-	echo -e "${RED}FAILED${NC}"
+function die() {
+	echo "$@"
 	exit 1
 }
 
@@ -53,16 +56,38 @@
 
 function buildProjectUsingGradle() {
 	cd $1
-	sh gradlew clean build $2 > $TEMP_LOG --stacktrace || exitAndFail 2>&1
+	sh gradlew clean build $2 > $TEMP_LOG --stacktrace
 }
 
 
-rm -r $OUT_DIR
+rm -rf $OUT_DIR
 mkdir $OUT_DIR
 echo "OUT dir is at '$OUT_DIR'"
 
-printSectionStart "Downloading all affected support libraries"
-wget -nd -i $ROOT_DIR/repo-links -P $SUPPORT_LIBS_DOWNLOADED
+function getPreRenamedSupportLib() {
+	INPUT_FILENAME="top-of-tree-m2repository-$SUPPORT_LIBS_BUILD_NUMBER.zip"
+	printSectionStart "Downloading all affected support libraries"
+	mkdir -p "$SUPPORT_LIBS_DOWNLOADED"
+
+	if [ "$FETCH_ARTIFACT" == "" ]; then
+		if which fetch_artifact; then
+			FETCH_ARTIFACT="$(which fetch_artifact)"
+		fi
+	fi
+	if [ ! -f "$FETCH_ARTIFACT" ]; then
+		die "fetch_artifact not found. Please set the environment variable FETCH_ARTIFACT equal to the path of fetch_artifact and try again"
+	fi
+
+	cd "$SUPPORT_LIBS_DOWNLOADED"
+	"$FETCH_ARTIFACT" --bid "$SUPPORT_LIBS_BUILD_NUMBER" --target support_library "$INPUT_FILENAME" "$SUPPORT_LIBS_DOWNLOADED/support-lib-${SUPPORT_LIBS_BUILD_NUMBER}.zip"
+	"$FETCH_ARTIFACT" --bid "$SUPPORT_LIBS_BUILD_NUMBER" --target support_library_app_toolkit "$INPUT_FILENAME" "$SUPPORT_LIBS_DOWNLOADED/arch-${SUPPORT_LIBS_BUILD_NUMBER}.zip"
+	cd -
+
+
+	unzip -oj "$SUPPORT_LIBS_DOWNLOADED/support-lib-${SUPPORT_LIBS_BUILD_NUMBER}.zip" -d "$SUPPORT_LIBS_UNPACKED"
+	unzip -oj "$SUPPORT_LIBS_DOWNLOADED/arch-${SUPPORT_LIBS_BUILD_NUMBER}.zip" -d "$SUPPORT_LIBS_UNPACKED"
+}
+getPreRenamedSupportLib
 
 printSectionStart "Preparing Jetifier"
 buildProjectUsingGradle $JETIFIER_DIR
@@ -72,7 +97,7 @@
 echo "[OK] Copied & unziped jetifier preprocessor"
 
 printSectionStart "Preprocessing mappings on support libraries"
-sh $PREPROCESSOR_BIN_PATH -i "$SUPPORT_LIBS_DOWNLOADED" -o "$GENERATED_CONFIG" -c "$DEFAULT_CONFIG" -l verbose || exitAndFail
+sh $PREPROCESSOR_BIN_PATH -i "$SUPPORT_LIBS_UNPACKED" -o "$GENERATED_CONFIG" -c "$DEFAULT_CONFIG" -l verbose || exitAndFail
 echo "[OK] Done, config generated into $GENERATED_CONFIG"
 
 printSuccess
diff --git a/jetifier/jetifier/preprocessor/scripts/repo-links b/jetifier/jetifier/preprocessor/scripts/repo-links
deleted file mode 100644
index 961c149..0000000
--- a/jetifier/jetifier/preprocessor/scripts/repo-links
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (C) 2017 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
-
-https://maven.google.com/com/android/support/animated-vector-drawable/27.0.1/animated-vector-drawable-27.0.1.aar
-https://maven.google.com/com/android/support/appcompat-v7/27.0.1/appcompat-v7-27.0.1.aar
-https://maven.google.com/com/android/support/cardview-v7/27.0.1/cardview-v7-27.0.1.aar
-https://maven.google.com/com/android/support/customtabs/27.0.1/customtabs-27.0.1.aar
-https://maven.google.com/com/android/support/design/27.0.1/design-27.0.1.aar
-https://maven.google.com/com/android/support/exifinterface/27.0.1/exifinterface-27.0.1.aar
-https://maven.google.com/com/android/support/gridlayout-v7/27.0.1/gridlayout-v7-27.0.1.aar
-https://maven.google.com/com/android/support/instantvideo/26.0.0-alpha1/instantvideo-26.0.0-alpha1.aar
-https://maven.google.com/com/android/support/leanback-v17/27.0.1/leanback-v17-27.0.1.aar
-https://maven.google.com/com/android/support/mediarouter-v7/27.0.1/mediarouter-v7-27.0.1.aar
-https://maven.google.com/com/android/support/multidex/1.0.2/multidex-1.0.2.aar
-https://maven.google.com/com/android/support/multidex-instrumentation/1.0.2/multidex-instrumentation-1.0.2.aar
-https://maven.google.com/com/android/support/palette-v7/27.0.1/palette-v7-27.0.1.aar
-https://maven.google.com/com/android/support/percent/27.0.1/percent-27.0.1.aar
-https://maven.google.com/com/android/support/preference-leanback-v17/27.0.1/preference-leanback-v17-27.0.1.aar
-https://maven.google.com/com/android/support/preference-v14/27.0.1/preference-v14-27.0.1.aar
-https://maven.google.com/com/android/support/preference-v7/27.0.1/preference-v7-27.0.1.aar
-https://maven.google.com/com/android/support/recommendation/27.0.1/recommendation-27.0.1.aar
-https://maven.google.com/com/android/support/recyclerview-v7/27.0.1/recyclerview-v7-27.0.1.aar
-https://maven.google.com/com/android/support/support-annotations/27.0.1/support-annotations-27.0.1.jar
-https://maven.google.com/com/android/support/support-compat/27.0.1/support-compat-27.0.1.aar
-https://maven.google.com/com/android/support/support-content/27.0.1/support-content-27.0.1.aar
-https://maven.google.com/com/android/support/support-core-ui/27.0.1/support-core-ui-27.0.1.aar
-https://maven.google.com/com/android/support/support-core-utils/27.0.1/support-core-utils-27.0.1.aar
-https://maven.google.com/com/android/support/support-dynamic-animation/27.0.1/support-dynamic-animation-27.0.1.aar
-https://maven.google.com/com/android/support/support-emoji/27.0.1/support-emoji-27.0.1.aar
-https://maven.google.com/com/android/support/support-emoji-appcompat/27.0.1/support-emoji-appcompat-27.0.1.aar
-https://maven.google.com/com/android/support/support-emoji-bundled/27.0.1/support-emoji-bundled-27.0.1.aar
-https://maven.google.com/com/android/support/support-fragment/27.0.1/support-fragment-27.0.1.aar
-https://maven.google.com/com/android/support/support-media-compat/27.0.1/support-media-compat-27.0.1.aar
-https://maven.google.com/com/android/support/support-tv-provider/27.0.1/support-tv-provider-27.0.1.aar
-https://maven.google.com/com/android/support/support-v13/27.0.1/support-v13-27.0.1.aar
-https://maven.google.com/com/android/support/support-v4/27.0.1/support-v4-27.0.1.aar
-https://maven.google.com/com/android/support/support-vector-drawable/27.0.1/support-vector-drawable-27.0.1.aar
-https://maven.google.com/com/android/support/transition/27.0.1/transition-27.0.1.aar
-https://maven.google.com/com/android/support/wear/27.0.1/wear-27.0.1.aar
-https://maven.google.com/com/android/support/wearable/27.0.1/wearable-27.0.1.aar
-https://maven.google.com/com/android/support/constraint/constraint-layout/1.0.2/constraint-layout-1.0.2.aar
diff --git a/jetifier/jetifier/preprocessor/src/main/kotlin/android/support/tools/jetifier/preprocessor/ConfigGenerator.kt b/jetifier/jetifier/preprocessor/src/main/kotlin/android/support/tools/jetifier/preprocessor/ConfigGenerator.kt
index ec12ac8..3f79553 100644
--- a/jetifier/jetifier/preprocessor/src/main/kotlin/android/support/tools/jetifier/preprocessor/ConfigGenerator.kt
+++ b/jetifier/jetifier/preprocessor/src/main/kotlin/android/support/tools/jetifier/preprocessor/ConfigGenerator.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2018 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.tools.jetifier.preprocessor
 
 import android.support.tools.jetifier.core.archive.Archive
@@ -11,7 +27,7 @@
 
     companion object {
         private const val LEGAL_NOTICE =
-            "# Copyright (C) 2017 The Android Open Source Project\n" +
+            "# Copyright (C) 2018 The Android Open Source Project\n" +
             "#\n" +
             "# Licensed under the Apache License, Version 2.0 (the \"License\");\n" +
             "# you may not use this file except in compliance with the License.\n" +
@@ -49,13 +65,14 @@
             }
         }
 
-        val map = mapper.generateMap()
+        val map = mapper.generateMap().mergetWith(config.typesMap)
+        map.reverseMapOrDie() // Check that map can be reversed
         val newConfig = config.setNewMap(map)
 
         saveConfigToFile(newConfig, outputConfigPath.toFile())
     }
 
-    private fun saveConfigToFile(configToSave: Config, outputFile : File) {
+    private fun saveConfigToFile(configToSave: Config, outputFile: File) {
         val sb = StringBuilder()
         sb.append(LEGAL_NOTICE)
         sb.append("\n")
diff --git a/jetifier/jetifier/settings.gradle b/jetifier/jetifier/settings.gradle
deleted file mode 100644
index 7d13b73..0000000
--- a/jetifier/jetifier/settings.gradle
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2017 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
- */
-
-rootProject.name = 'jetifier'
-include 'core'
-include 'gradle-plugin'
-include 'standalone'
-include 'preprocessor'
-
diff --git a/jetifier/jetifier/standalone/build.gradle b/jetifier/jetifier/standalone/build.gradle
index 8814d50..8e1d9b9 100644
--- a/jetifier/jetifier/standalone/build.gradle
+++ b/jetifier/jetifier/standalone/build.gradle
@@ -14,14 +14,17 @@
  * limitations under the License
  */
 
-version '1.0'
+plugins {
+    id("SupportKotlinLibraryPlugin")
+    id("application")
+}
 
-apply plugin: "application"
+version '1.0'
 
 mainClassName = "android.support.tools.jetifier.standalone.MainKt"
 
 dependencies {
-    compile project(':core')
+    compile project(':jetifier-core')
     compile group: 'commons-cli', name: 'commons-cli', version: '1.3.1'
 }
 
diff --git a/jetifier/jetifier/standalone/src/main/kotlin/android/support/tools/jetifier/standalone/Main.kt b/jetifier/jetifier/standalone/src/main/kotlin/android/support/tools/jetifier/standalone/Main.kt
index de310e4..8fdb78e 100644
--- a/jetifier/jetifier/standalone/src/main/kotlin/android/support/tools/jetifier/standalone/Main.kt
+++ b/jetifier/jetifier/standalone/src/main/kotlin/android/support/tools/jetifier/standalone/Main.kt
@@ -27,6 +27,7 @@
 import org.apache.commons.cli.Options
 import org.apache.commons.cli.ParseException
 import java.io.File
+import java.nio.file.Path
 import java.nio.file.Paths
 
 class Main {
@@ -37,16 +38,27 @@
 
         val OPTIONS = Options()
         val OPTION_INPUT = createOption("i", "Input libraries paths", multiple = true)
-        val OPTION_OUTPUT = createOption("o", "Output config path")
+        val OPTION_OUTPUT_DIR = createOption("outputdir", "Output directory path",
+                isRequired = false)
+        val OPTION_OUTPUT_FILE = createOption("outputfile", "Output file", isRequired = false)
         val OPTION_CONFIG = createOption("c", "Input config path", isRequired = false)
-        val OPTION_LOG_LEVEL = createOption("l", "Logging level. debug, verbose, default",
+        val OPTION_LOG_LEVEL = createOption("l", "Logging level. debug, verbose, error, info " +
+            "(default)", isRequired = false)
+        val OPTION_REVERSED = createOption("r", "Run reversed process", hasArgs = false,
             isRequired = false)
+        val OPTION_REWRITE_SUPPORT_LIB = createOption("s", "If set, all libraries being rewritten" +
+            " are assumed to be part of Support Library. Otherwise only general dependencies are" +
+            " expected.",
+            hasArgs = false, isRequired = false)
 
-        private fun createOption(argName: String,
-                                 desc: String,
-                                 isRequired: Boolean = true,
-                                 multiple: Boolean = false) : Option {
-            val op = Option(argName, true, desc)
+        private fun createOption(
+            argName: String,
+            desc: String,
+            hasArgs: Boolean = true,
+            isRequired: Boolean = true,
+            multiple: Boolean = false
+        ): Option {
+            val op = Option(argName, hasArgs, desc)
             op.isRequired = isRequired
             if (multiple) {
                 op.args = Option.UNLIMITED_VALUES
@@ -56,7 +68,7 @@
         }
     }
 
-    fun run(args : Array<String>) {
+    fun run(args: Array<String>) {
         val cmd = parseCmdLine(args)
         if (cmd == null) {
             System.exit(1)
@@ -66,9 +78,31 @@
         Log.setLevel(cmd.getOptionValue(OPTION_LOG_LEVEL.opt))
 
         val inputLibraries = cmd.getOptionValues(OPTION_INPUT.opt).map { File(it) }.toSet()
-        val outputPath = Paths.get(cmd.getOptionValue(OPTION_OUTPUT.opt))
+        val outputDir = cmd.getOptionValue(OPTION_OUTPUT_DIR.opt)
+        val outputFile = cmd.getOptionValue(OPTION_OUTPUT_FILE.opt)
+        if (outputDir == null && outputFile == null) {
+            throw IllegalArgumentException("Must specify -outputdir or -outputfile")
+        }
+        if (outputDir != null && outputFile != null) {
+            throw IllegalArgumentException("Cannot specify both -outputdir and -outputfile")
+        }
+        if (inputLibraries.size > 1 && outputFile != null) {
+            throw IllegalArgumentException(
+                    "Cannot specify -outputfile when multiple input libraries are given")
+        }
 
-        val config : Config?
+        var outputIsDir = false
+        fun chooseOutputPath(): Path {
+            if (outputFile == null) {
+                outputIsDir = true
+                return Paths.get(outputDir)
+            } else {
+                return Paths.get(outputFile)
+            }
+        }
+        val outputPath = chooseOutputPath()
+
+        val config: Config?
         if (cmd.hasOption(OPTION_CONFIG.opt)) {
             val configPath = Paths.get(cmd.getOptionValue(OPTION_CONFIG.opt))
             config = ConfigParser.loadFromFile(configPath)
@@ -82,11 +116,16 @@
             return
         }
 
-        val processor = Processor(config)
-        processor.transform(inputLibraries, outputPath)
+        val isReversed = cmd.hasOption(OPTION_REVERSED.opt)
+        val rewriteSupportLib = cmd.hasOption(OPTION_REWRITE_SUPPORT_LIB.opt)
+        val processor = Processor.createProcessor(
+            config = config,
+            reversedMode = isReversed,
+            rewritingSupportLib = rewriteSupportLib)
+        processor.transform(inputLibraries, outputPath, outputIsDir)
     }
 
-    private fun parseCmdLine(args : Array<String>) : CommandLine? {
+    private fun parseCmdLine(args: Array<String>): CommandLine? {
         try {
             return DefaultParser().parse(OPTIONS, args)
         } catch (e: ParseException) {
@@ -95,10 +134,8 @@
         }
         return null
     }
-
 }
 
-
-fun main(args : Array<String>) {
+fun main(args: Array<String>) {
     Main().run(args)
 }
\ No newline at end of file
diff --git a/leanback/Android.mk b/leanback/Android.mk
deleted file mode 100644
index e39261f..0000000
--- a/leanback/Android.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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.
-
-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-v17-leanback \
-#       android-support-v7-recyclerview \
-#       android-support-v4
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_AAPT2_ONLY := true
-LOCAL_MODULE := android-support-v17-leanback
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, common) \
-    $(call all-java-files-under, jbmr2) \
-    $(call all-java-files-under, kitkat) \
-    $(call all-java-files-under, api21) \
-    $(call all-java-files-under, src)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v7-recyclerview \
-    android-support-compat \
-    android-support-core-ui \
-    android-support-media-compat \
-    android-support-fragment
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/leanback/api/27.1.0.txt b/leanback/api/27.1.0.txt
new file mode 100644
index 0000000..3a5a22b
--- /dev/null
+++ b/leanback/api/27.1.0.txt
@@ -0,0 +1,3104 @@
+package android.support.v17.leanback.app {
+
+  public final class BackgroundManager {
+    method public void attach(android.view.Window);
+    method public void attachToView(android.view.View);
+    method public void clearDrawable();
+    method public int getColor();
+    method public deprecated android.graphics.drawable.Drawable getDefaultDimLayer();
+    method public deprecated android.graphics.drawable.Drawable getDimLayer();
+    method public android.graphics.drawable.Drawable getDrawable();
+    method public static android.support.v17.leanback.app.BackgroundManager getInstance(android.app.Activity);
+    method public boolean isAttached();
+    method public boolean isAutoReleaseOnStop();
+    method public void release();
+    method public void setAutoReleaseOnStop(boolean);
+    method public void setBitmap(android.graphics.Bitmap);
+    method public void setColor(int);
+    method public deprecated void setDimLayer(android.graphics.drawable.Drawable);
+    method public void setDrawable(android.graphics.drawable.Drawable);
+    method public void setThemeDrawableResourceId(int);
+  }
+
+  public deprecated class BaseFragment extends android.support.v17.leanback.app.BrandedFragment {
+    method protected java.lang.Object createEntranceTransition();
+    method public final android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+    method protected void onEntranceTransitionEnd();
+    method protected void onEntranceTransitionPrepare();
+    method protected void onEntranceTransitionStart();
+    method public void prepareEntranceTransition();
+    method protected void runEntranceTransition(java.lang.Object);
+    method public void startEntranceTransition();
+  }
+
+  public class BaseSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+    method protected java.lang.Object createEntranceTransition();
+    method public final android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+    method protected void onEntranceTransitionEnd();
+    method protected void onEntranceTransitionPrepare();
+    method protected void onEntranceTransitionStart();
+    method public void prepareEntranceTransition();
+    method protected void runEntranceTransition(java.lang.Object);
+    method public void startEntranceTransition();
+  }
+
+  public deprecated class BrandedFragment extends android.app.Fragment {
+    ctor public BrandedFragment();
+    method public android.graphics.drawable.Drawable getBadgeDrawable();
+    method public int getSearchAffordanceColor();
+    method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+    method public java.lang.CharSequence getTitle();
+    method public android.view.View getTitleView();
+    method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+    method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public final boolean isShowingTitle();
+    method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+    method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+    method public void setSearchAffordanceColor(int);
+    method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setTitle(java.lang.CharSequence);
+    method public void setTitleView(android.view.View);
+    method public void showTitle(boolean);
+    method public void showTitle(int);
+  }
+
+  public class BrandedSupportFragment extends android.support.v4.app.Fragment {
+    ctor public BrandedSupportFragment();
+    method public android.graphics.drawable.Drawable getBadgeDrawable();
+    method public int getSearchAffordanceColor();
+    method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+    method public java.lang.CharSequence getTitle();
+    method public android.view.View getTitleView();
+    method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+    method public void installTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public final boolean isShowingTitle();
+    method public android.view.View onInflateTitleView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+    method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+    method public void setSearchAffordanceColor(int);
+    method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setTitle(java.lang.CharSequence);
+    method public void setTitleView(android.view.View);
+    method public void showTitle(boolean);
+    method public void showTitle(int);
+  }
+
+  public deprecated class BrowseFragment extends android.support.v17.leanback.app.BaseFragment {
+    ctor public BrowseFragment();
+    method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+    method public void enableMainFragmentScaling(boolean);
+    method public deprecated void enableRowScaling(boolean);
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public int getBrandColor();
+    method public android.support.v17.leanback.app.HeadersFragment getHeadersFragment();
+    method public int getHeadersState();
+    method public android.app.Fragment getMainFragment();
+    method public final android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+    method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+    method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+    method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+    method public int getSelectedPosition();
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+    method public final boolean isHeadersTransitionOnBackEnabled();
+    method public boolean isInHeadersTransition();
+    method public boolean isShowingHeaders();
+    method public android.support.v17.leanback.app.HeadersFragment onCreateHeadersFragment();
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setBrandColor(int);
+    method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseFragment.BrowseTransitionListener);
+    method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+    method public void setHeadersState(int);
+    method public final void setHeadersTransitionOnBackEnabled(boolean);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSelectedPosition(int);
+    method public void setSelectedPosition(int, boolean);
+    method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+    method public void startHeadersTransition(boolean);
+    field public static final int HEADERS_DISABLED = 3; // 0x3
+    field public static final int HEADERS_ENABLED = 1; // 0x1
+    field public static final int HEADERS_HIDDEN = 2; // 0x2
+  }
+
+  public static deprecated class BrowseFragment.BrowseTransitionListener {
+    ctor public BrowseFragment.BrowseTransitionListener();
+    method public void onHeadersTransitionStart(boolean);
+    method public void onHeadersTransitionStop(boolean);
+  }
+
+  public static abstract deprecated class BrowseFragment.FragmentFactory<T extends android.app.Fragment> {
+    ctor public BrowseFragment.FragmentFactory();
+    method public abstract T createFragment(java.lang.Object);
+  }
+
+  public static abstract deprecated interface BrowseFragment.FragmentHost {
+    method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+    method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter);
+    method public abstract void showTitleView(boolean);
+  }
+
+  public static deprecated class BrowseFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseFragment.FragmentFactory {
+    ctor public BrowseFragment.ListRowFragmentFactory();
+    method public android.support.v17.leanback.app.RowsFragment createFragment(java.lang.Object);
+  }
+
+  public static deprecated class BrowseFragment.MainFragmentAdapter<T extends android.app.Fragment> {
+    ctor public BrowseFragment.MainFragmentAdapter(T);
+    method public final T getFragment();
+    method public final android.support.v17.leanback.app.BrowseFragment.FragmentHost getFragmentHost();
+    method public boolean isScalingEnabled();
+    method public boolean isScrolling();
+    method public void onTransitionEnd();
+    method public boolean onTransitionPrepare();
+    method public void onTransitionStart();
+    method public void setAlignment(int);
+    method public void setEntranceTransitionState(boolean);
+    method public void setExpand(boolean);
+    method public void setScalingEnabled(boolean);
+  }
+
+  public static abstract deprecated interface BrowseFragment.MainFragmentAdapterProvider {
+    method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+  }
+
+  public static final deprecated class BrowseFragment.MainFragmentAdapterRegistry {
+    ctor public BrowseFragment.MainFragmentAdapterRegistry();
+    method public android.app.Fragment createFragment(java.lang.Object);
+    method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseFragment.FragmentFactory);
+  }
+
+  public static deprecated class BrowseFragment.MainFragmentRowsAdapter<T extends android.app.Fragment> {
+    ctor public BrowseFragment.MainFragmentRowsAdapter(T);
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+    method public final T getFragment();
+    method public int getSelectedPosition();
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+    method public void setSelectedPosition(int, boolean);
+  }
+
+  public static abstract deprecated interface BrowseFragment.MainFragmentRowsAdapterProvider {
+    method public abstract android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+  }
+
+  public class BrowseSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+    ctor public BrowseSupportFragment();
+    method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, int);
+    method public void enableMainFragmentScaling(boolean);
+    method public deprecated void enableRowScaling(boolean);
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public int getBrandColor();
+    method public int getHeadersState();
+    method public android.support.v17.leanback.app.HeadersSupportFragment getHeadersSupportFragment();
+    method public android.support.v4.app.Fragment getMainFragment();
+    method public final android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterRegistry getMainFragmentRegistry();
+    method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+    method public android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+    method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+    method public int getSelectedPosition();
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getSelectedRowViewHolder();
+    method public final boolean isHeadersTransitionOnBackEnabled();
+    method public boolean isInHeadersTransition();
+    method public boolean isShowingHeaders();
+    method public android.support.v17.leanback.app.HeadersSupportFragment onCreateHeadersSupportFragment();
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setBrandColor(int);
+    method public void setBrowseTransitionListener(android.support.v17.leanback.app.BrowseSupportFragment.BrowseTransitionListener);
+    method public void setHeaderPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+    method public void setHeadersState(int);
+    method public final void setHeadersTransitionOnBackEnabled(boolean);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSelectedPosition(int);
+    method public void setSelectedPosition(int, boolean);
+    method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+    method public void startHeadersTransition(boolean);
+    field public static final int HEADERS_DISABLED = 3; // 0x3
+    field public static final int HEADERS_ENABLED = 1; // 0x1
+    field public static final int HEADERS_HIDDEN = 2; // 0x2
+  }
+
+  public static class BrowseSupportFragment.BrowseTransitionListener {
+    ctor public BrowseSupportFragment.BrowseTransitionListener();
+    method public void onHeadersTransitionStart(boolean);
+    method public void onHeadersTransitionStop(boolean);
+  }
+
+  public static abstract class BrowseSupportFragment.FragmentFactory<T extends android.support.v4.app.Fragment> {
+    ctor public BrowseSupportFragment.FragmentFactory();
+    method public abstract T createFragment(java.lang.Object);
+  }
+
+  public static abstract interface BrowseSupportFragment.FragmentHost {
+    method public abstract void notifyDataReady(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+    method public abstract void notifyViewCreated(android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter);
+    method public abstract void showTitleView(boolean);
+  }
+
+  public static class BrowseSupportFragment.ListRowFragmentFactory extends android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory {
+    ctor public BrowseSupportFragment.ListRowFragmentFactory();
+    method public android.support.v17.leanback.app.RowsSupportFragment createFragment(java.lang.Object);
+  }
+
+  public static class BrowseSupportFragment.MainFragmentAdapter<T extends android.support.v4.app.Fragment> {
+    ctor public BrowseSupportFragment.MainFragmentAdapter(T);
+    method public final T getFragment();
+    method public final android.support.v17.leanback.app.BrowseSupportFragment.FragmentHost getFragmentHost();
+    method public boolean isScalingEnabled();
+    method public boolean isScrolling();
+    method public void onTransitionEnd();
+    method public boolean onTransitionPrepare();
+    method public void onTransitionStart();
+    method public void setAlignment(int);
+    method public void setEntranceTransitionState(boolean);
+    method public void setExpand(boolean);
+    method public void setScalingEnabled(boolean);
+  }
+
+  public static abstract interface BrowseSupportFragment.MainFragmentAdapterProvider {
+    method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+  }
+
+  public static final class BrowseSupportFragment.MainFragmentAdapterRegistry {
+    ctor public BrowseSupportFragment.MainFragmentAdapterRegistry();
+    method public android.support.v4.app.Fragment createFragment(java.lang.Object);
+    method public void registerFragment(java.lang.Class, android.support.v17.leanback.app.BrowseSupportFragment.FragmentFactory);
+  }
+
+  public static class BrowseSupportFragment.MainFragmentRowsAdapter<T extends android.support.v4.app.Fragment> {
+    ctor public BrowseSupportFragment.MainFragmentRowsAdapter(T);
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+    method public final T getFragment();
+    method public int getSelectedPosition();
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+    method public void setSelectedPosition(int, boolean);
+  }
+
+  public static abstract interface BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+    method public abstract android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+  }
+
+  public deprecated class DetailsFragment extends android.support.v17.leanback.app.BaseFragment {
+    ctor public DetailsFragment();
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+    method public android.support.v17.leanback.widget.DetailsParallax getParallax();
+    method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+    method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+    method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+    method public void setSelectedPosition(int);
+    method public void setSelectedPosition(int, boolean);
+    method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+    method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+  }
+
+  public deprecated class DetailsFragmentBackgroundController {
+    ctor public DetailsFragmentBackgroundController(android.support.v17.leanback.app.DetailsFragment);
+    method public boolean canNavigateToVideoFragment();
+    method public void enableParallax();
+    method public void enableParallax(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.support.v17.leanback.widget.ParallaxTarget.PropertyValuesHolderTarget);
+    method public final android.app.Fragment findOrCreateVideoFragment();
+    method public final android.graphics.drawable.Drawable getBottomDrawable();
+    method public final android.graphics.Bitmap getCoverBitmap();
+    method public final android.graphics.drawable.Drawable getCoverDrawable();
+    method public final int getParallaxDrawableMaxOffset();
+    method public final android.support.v17.leanback.media.PlaybackGlue getPlaybackGlue();
+    method public final int getSolidColor();
+    method public android.support.v17.leanback.media.PlaybackGlueHost onCreateGlueHost();
+    method public android.app.Fragment onCreateVideoFragment();
+    method public final void setCoverBitmap(android.graphics.Bitmap);
+    method public final void setParallaxDrawableMaxOffset(int);
+    method public final void setSolidColor(int);
+    method public void setupVideoPlayback(android.support.v17.leanback.media.PlaybackGlue);
+    method public final void switchToRows();
+    method public final void switchToVideo();
+  }
+
+  public class DetailsSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+    ctor public DetailsSupportFragment();
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+    method public android.support.v17.leanback.widget.DetailsParallax getParallax();
+    method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+    method protected deprecated android.view.View inflateTitle(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method protected void onSetDetailsOverviewRowStatus(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, int, int);
+    method protected void onSetRowStatus(android.support.v17.leanback.widget.RowPresenter, android.support.v17.leanback.widget.RowPresenter.ViewHolder, int, int, int);
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+    method public void setSelectedPosition(int);
+    method public void setSelectedPosition(int, boolean);
+    method protected void setupDetailsOverviewRowPresenter(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+    method protected void setupPresenter(android.support.v17.leanback.widget.Presenter);
+  }
+
+  public class DetailsSupportFragmentBackgroundController {
+    ctor public DetailsSupportFragmentBackgroundController(android.support.v17.leanback.app.DetailsSupportFragment);
+    method public boolean canNavigateToVideoSupportFragment();
+    method public void enableParallax();
+    method public void enableParallax(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.support.v17.leanback.widget.ParallaxTarget.PropertyValuesHolderTarget);
+    method public final android.support.v4.app.Fragment findOrCreateVideoSupportFragment();
+    method public final android.graphics.drawable.Drawable getBottomDrawable();
+    method public final android.graphics.Bitmap getCoverBitmap();
+    method public final android.graphics.drawable.Drawable getCoverDrawable();
+    method public final int getParallaxDrawableMaxOffset();
+    method public final android.support.v17.leanback.media.PlaybackGlue getPlaybackGlue();
+    method public final int getSolidColor();
+    method public android.support.v17.leanback.media.PlaybackGlueHost onCreateGlueHost();
+    method public android.support.v4.app.Fragment onCreateVideoSupportFragment();
+    method public final void setCoverBitmap(android.graphics.Bitmap);
+    method public final void setParallaxDrawableMaxOffset(int);
+    method public final void setSolidColor(int);
+    method public void setupVideoPlayback(android.support.v17.leanback.media.PlaybackGlue);
+    method public final void switchToRows();
+    method public final void switchToVideo();
+  }
+
+  public deprecated class ErrorFragment extends android.support.v17.leanback.app.BrandedFragment {
+    ctor public ErrorFragment();
+    method public android.graphics.drawable.Drawable getBackgroundDrawable();
+    method public android.view.View.OnClickListener getButtonClickListener();
+    method public java.lang.String getButtonText();
+    method public android.graphics.drawable.Drawable getImageDrawable();
+    method public java.lang.CharSequence getMessage();
+    method public boolean isBackgroundTranslucent();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setButtonClickListener(android.view.View.OnClickListener);
+    method public void setButtonText(java.lang.String);
+    method public void setDefaultBackground(boolean);
+    method public void setImageDrawable(android.graphics.drawable.Drawable);
+    method public void setMessage(java.lang.CharSequence);
+  }
+
+  public class ErrorSupportFragment extends android.support.v17.leanback.app.BrandedSupportFragment {
+    ctor public ErrorSupportFragment();
+    method public android.graphics.drawable.Drawable getBackgroundDrawable();
+    method public android.view.View.OnClickListener getButtonClickListener();
+    method public java.lang.String getButtonText();
+    method public android.graphics.drawable.Drawable getImageDrawable();
+    method public java.lang.CharSequence getMessage();
+    method public boolean isBackgroundTranslucent();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setButtonClickListener(android.view.View.OnClickListener);
+    method public void setButtonText(java.lang.String);
+    method public void setDefaultBackground(boolean);
+    method public void setImageDrawable(android.graphics.drawable.Drawable);
+    method public void setMessage(java.lang.CharSequence);
+  }
+
+  public deprecated class GuidedStepFragment extends android.app.Fragment {
+    ctor public GuidedStepFragment();
+    method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment);
+    method public static int add(android.app.FragmentManager, android.support.v17.leanback.app.GuidedStepFragment, int);
+    method public static int addAsRoot(android.app.Activity, android.support.v17.leanback.app.GuidedStepFragment, int);
+    method public void collapseAction(boolean);
+    method public void collapseSubActions();
+    method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+    method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+    method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+    method public int findActionPositionById(long);
+    method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+    method public int findButtonActionPositionById(long);
+    method public void finishGuidedStepFragments();
+    method public android.view.View getActionItemView(int);
+    method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+    method public android.view.View getButtonActionItemView(int);
+    method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+    method public static android.support.v17.leanback.app.GuidedStepFragment getCurrentGuidedStepFragment(android.app.FragmentManager);
+    method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+    method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+    method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+    method public int getSelectedActionPosition();
+    method public int getSelectedButtonActionPosition();
+    method public int getUiStyle();
+    method public boolean isExpanded();
+    method public boolean isFocusOutEndAllowed();
+    method public boolean isFocusOutStartAllowed();
+    method public boolean isSubActionsExpanded();
+    method public void notifyActionChanged(int);
+    method public void notifyButtonActionChanged(int);
+    method protected void onAddSharedElementTransition(android.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepFragment);
+    method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+    method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+    method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+    method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+    method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+    method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+    method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+    method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+    method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+    method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+    method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+    method protected void onProvideFragmentTransitions();
+    method public int onProvideTheme();
+    method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+    method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+    method public void popBackStackToGuidedStepFragment(java.lang.Class, int);
+    method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+    method public void setActionsDiffCallback(android.support.v17.leanback.widget.DiffCallback<android.support.v17.leanback.widget.GuidedAction>);
+    method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+    method public void setSelectedActionPosition(int);
+    method public void setSelectedButtonActionPosition(int);
+    method public void setUiStyle(int);
+    field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+    field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+    field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+    field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+    field public static final int UI_STYLE_REPLACE = 0; // 0x0
+  }
+
+  public class GuidedStepSupportFragment extends android.support.v4.app.Fragment {
+    ctor public GuidedStepSupportFragment();
+    method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment);
+    method public static int add(android.support.v4.app.FragmentManager, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+    method public static int addAsRoot(android.support.v4.app.FragmentActivity, android.support.v17.leanback.app.GuidedStepSupportFragment, int);
+    method public void collapseAction(boolean);
+    method public void collapseSubActions();
+    method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+    method public void expandSubActions(android.support.v17.leanback.widget.GuidedAction);
+    method public android.support.v17.leanback.widget.GuidedAction findActionById(long);
+    method public int findActionPositionById(long);
+    method public android.support.v17.leanback.widget.GuidedAction findButtonActionById(long);
+    method public int findButtonActionPositionById(long);
+    method public void finishGuidedStepSupportFragments();
+    method public android.view.View getActionItemView(int);
+    method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getActions();
+    method public android.view.View getButtonActionItemView(int);
+    method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getButtonActions();
+    method public static android.support.v17.leanback.app.GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(android.support.v4.app.FragmentManager);
+    method public android.support.v17.leanback.widget.GuidanceStylist getGuidanceStylist();
+    method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedActionsStylist();
+    method public android.support.v17.leanback.widget.GuidedActionsStylist getGuidedButtonActionsStylist();
+    method public int getSelectedActionPosition();
+    method public int getSelectedButtonActionPosition();
+    method public int getUiStyle();
+    method public boolean isExpanded();
+    method public boolean isFocusOutEndAllowed();
+    method public boolean isFocusOutStartAllowed();
+    method public boolean isSubActionsExpanded();
+    method public void notifyActionChanged(int);
+    method public void notifyButtonActionChanged(int);
+    method protected void onAddSharedElementTransition(android.support.v4.app.FragmentTransaction, android.support.v17.leanback.app.GuidedStepSupportFragment);
+    method public void onCreateActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+    method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateActionsStylist();
+    method public android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public void onCreateButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>, android.os.Bundle);
+    method public android.support.v17.leanback.widget.GuidedActionsStylist onCreateButtonActionsStylist();
+    method public android.support.v17.leanback.widget.GuidanceStylist.Guidance onCreateGuidance(android.os.Bundle);
+    method public android.support.v17.leanback.widget.GuidanceStylist onCreateGuidanceStylist();
+    method public void onGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+    method public void onGuidedActionEditCanceled(android.support.v17.leanback.widget.GuidedAction);
+    method public deprecated void onGuidedActionEdited(android.support.v17.leanback.widget.GuidedAction);
+    method public long onGuidedActionEditedAndProceed(android.support.v17.leanback.widget.GuidedAction);
+    method public void onGuidedActionFocused(android.support.v17.leanback.widget.GuidedAction);
+    method protected void onProvideFragmentTransitions();
+    method public int onProvideTheme();
+    method public boolean onSubGuidedActionClicked(android.support.v17.leanback.widget.GuidedAction);
+    method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+    method public void popBackStackToGuidedStepSupportFragment(java.lang.Class, int);
+    method public void setActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+    method public void setActionsDiffCallback(android.support.v17.leanback.widget.DiffCallback<android.support.v17.leanback.widget.GuidedAction>);
+    method public void setButtonActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+    method public void setSelectedActionPosition(int);
+    method public void setSelectedButtonActionPosition(int);
+    method public void setUiStyle(int);
+    field public static final java.lang.String EXTRA_UI_STYLE = "uiStyle";
+    field public static final int UI_STYLE_ACTIVITY_ROOT = 2; // 0x2
+    field public static final deprecated int UI_STYLE_DEFAULT = 0; // 0x0
+    field public static final int UI_STYLE_ENTRANCE = 1; // 0x1
+    field public static final int UI_STYLE_REPLACE = 0; // 0x0
+  }
+
+  public deprecated class HeadersFragment extends android.app.Fragment {
+    ctor public HeadersFragment();
+    method public boolean isScrolling();
+    method public void onTransitionEnd();
+    method public void onTransitionStart();
+    method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderClickedListener);
+    method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersFragment.OnHeaderViewSelectedListener);
+  }
+
+  public static abstract deprecated interface HeadersFragment.OnHeaderClickedListener {
+    method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+  }
+
+  public static abstract deprecated interface HeadersFragment.OnHeaderViewSelectedListener {
+    method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+  }
+
+  public class HeadersSupportFragment extends android.support.v4.app.Fragment {
+    ctor public HeadersSupportFragment();
+    method public boolean isScrolling();
+    method public void onTransitionEnd();
+    method public void onTransitionStart();
+    method public void setOnHeaderClickedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderClickedListener);
+    method public void setOnHeaderViewSelectedListener(android.support.v17.leanback.app.HeadersSupportFragment.OnHeaderViewSelectedListener);
+  }
+
+  public static abstract interface HeadersSupportFragment.OnHeaderClickedListener {
+    method public abstract void onHeaderClicked(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+  }
+
+  public static abstract interface HeadersSupportFragment.OnHeaderViewSelectedListener {
+    method public abstract void onHeaderSelected(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, android.support.v17.leanback.widget.Row);
+  }
+
+  public abstract deprecated class OnboardingFragment extends android.app.Fragment {
+    ctor public OnboardingFragment();
+    method public final int getArrowBackgroundColor();
+    method public final int getArrowColor();
+    method protected final int getCurrentPageIndex();
+    method public final int getDescriptionViewTextColor();
+    method public final int getDotBackgroundColor();
+    method public final int getIconResourceId();
+    method public final int getLogoResourceId();
+    method protected abstract int getPageCount();
+    method protected abstract java.lang.CharSequence getPageDescription(int);
+    method protected abstract java.lang.CharSequence getPageTitle(int);
+    method public final java.lang.CharSequence getStartButtonText();
+    method public final int getTitleViewTextColor();
+    method protected final boolean isLogoAnimationFinished();
+    method protected void moveToNextPage();
+    method protected void moveToPreviousPage();
+    method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+    method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+    method protected android.animation.Animator onCreateDescriptionAnimator();
+    method protected android.animation.Animator onCreateEnterAnimation();
+    method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+    method protected android.animation.Animator onCreateLogoAnimation();
+    method protected android.animation.Animator onCreateTitleAnimator();
+    method protected void onFinishFragment();
+    method protected void onLogoAnimationFinished();
+    method protected void onPageChanged(int, int);
+    method public int onProvideTheme();
+    method public void setArrowBackgroundColor(int);
+    method public void setArrowColor(int);
+    method public void setDescriptionViewTextColor(int);
+    method public void setDotBackgroundColor(int);
+    method public final void setIconResouceId(int);
+    method public final void setLogoResourceId(int);
+    method public void setStartButtonText(java.lang.CharSequence);
+    method public void setTitleViewTextColor(int);
+    method protected final void startEnterAnimation(boolean);
+  }
+
+  public abstract class OnboardingSupportFragment extends android.support.v4.app.Fragment {
+    ctor public OnboardingSupportFragment();
+    method public final int getArrowBackgroundColor();
+    method public final int getArrowColor();
+    method protected final int getCurrentPageIndex();
+    method public final int getDescriptionViewTextColor();
+    method public final int getDotBackgroundColor();
+    method public final int getIconResourceId();
+    method public final int getLogoResourceId();
+    method protected abstract int getPageCount();
+    method protected abstract java.lang.CharSequence getPageDescription(int);
+    method protected abstract java.lang.CharSequence getPageTitle(int);
+    method public final java.lang.CharSequence getStartButtonText();
+    method public final int getTitleViewTextColor();
+    method protected final boolean isLogoAnimationFinished();
+    method protected void moveToNextPage();
+    method protected void moveToPreviousPage();
+    method protected abstract android.view.View onCreateBackgroundView(android.view.LayoutInflater, android.view.ViewGroup);
+    method protected abstract android.view.View onCreateContentView(android.view.LayoutInflater, android.view.ViewGroup);
+    method protected android.animation.Animator onCreateDescriptionAnimator();
+    method protected android.animation.Animator onCreateEnterAnimation();
+    method protected abstract android.view.View onCreateForegroundView(android.view.LayoutInflater, android.view.ViewGroup);
+    method protected android.animation.Animator onCreateLogoAnimation();
+    method protected android.animation.Animator onCreateTitleAnimator();
+    method protected void onFinishFragment();
+    method protected void onLogoAnimationFinished();
+    method protected void onPageChanged(int, int);
+    method public int onProvideTheme();
+    method public void setArrowBackgroundColor(int);
+    method public void setArrowColor(int);
+    method public void setDescriptionViewTextColor(int);
+    method public void setDotBackgroundColor(int);
+    method public final void setIconResouceId(int);
+    method public final void setLogoResourceId(int);
+    method public void setStartButtonText(java.lang.CharSequence);
+    method public void setTitleViewTextColor(int);
+    method protected final void startEnterAnimation(boolean);
+  }
+
+  public deprecated class PlaybackFragment extends android.app.Fragment {
+    ctor public PlaybackFragment();
+    method public deprecated void fadeOut();
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public int getBackgroundType();
+    method public android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+    method public void hideControlsOverlay(boolean);
+    method public boolean isControlsOverlayAutoHideEnabled();
+    method public boolean isControlsOverlayVisible();
+    method public deprecated boolean isFadingEnabled();
+    method public void notifyPlaybackRowChanged();
+    method protected void onBufferingStateChanged(boolean);
+    method protected void onError(int, java.lang.CharSequence);
+    method protected void onVideoSizeChanged(int, int);
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setBackgroundType(int);
+    method public void setControlsOverlayAutoHideEnabled(boolean);
+    method public deprecated void setFadingEnabled(boolean);
+    method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+    method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+    method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+    method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+    method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+    method public void setSelectedPosition(int);
+    method public void setSelectedPosition(int, boolean);
+    method public void showControlsOverlay(boolean);
+    method public void tickle();
+    field public static final int BG_DARK = 1; // 0x1
+    field public static final int BG_LIGHT = 2; // 0x2
+    field public static final int BG_NONE = 0; // 0x0
+  }
+
+  public deprecated class PlaybackFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost implements android.support.v17.leanback.widget.PlaybackSeekUi {
+    ctor public PlaybackFragmentGlueHost(android.support.v17.leanback.app.PlaybackFragment);
+    method public void fadeOut();
+    method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+  }
+
+  public class PlaybackSupportFragment extends android.support.v4.app.Fragment {
+    ctor public PlaybackSupportFragment();
+    method public deprecated void fadeOut();
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public int getBackgroundType();
+    method public android.support.v17.leanback.app.ProgressBarManager getProgressBarManager();
+    method public void hideControlsOverlay(boolean);
+    method public boolean isControlsOverlayAutoHideEnabled();
+    method public boolean isControlsOverlayVisible();
+    method public deprecated boolean isFadingEnabled();
+    method public void notifyPlaybackRowChanged();
+    method protected void onBufferingStateChanged(boolean);
+    method protected void onError(int, java.lang.CharSequence);
+    method protected void onVideoSizeChanged(int, int);
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setBackgroundType(int);
+    method public void setControlsOverlayAutoHideEnabled(boolean);
+    method public deprecated void setFadingEnabled(boolean);
+    method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+    method public final void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+    method public void setOnPlaybackItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+    method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+    method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+    method public void setSelectedPosition(int);
+    method public void setSelectedPosition(int, boolean);
+    method public void showControlsOverlay(boolean);
+    method public void tickle();
+    field public static final int BG_DARK = 1; // 0x1
+    field public static final int BG_LIGHT = 2; // 0x2
+    field public static final int BG_NONE = 0; // 0x0
+  }
+
+  public class PlaybackSupportFragmentGlueHost extends android.support.v17.leanback.media.PlaybackGlueHost implements android.support.v17.leanback.widget.PlaybackSeekUi {
+    ctor public PlaybackSupportFragmentGlueHost(android.support.v17.leanback.app.PlaybackSupportFragment);
+    method public void fadeOut();
+    method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+  }
+
+  public final class ProgressBarManager {
+    ctor public ProgressBarManager();
+    method public void disableProgressBar();
+    method public void enableProgressBar();
+    method public long getInitialDelay();
+    method public void hide();
+    method public void setInitialDelay(long);
+    method public void setProgressBarView(android.view.View);
+    method public void setRootView(android.view.ViewGroup);
+    method public void show();
+  }
+
+  public deprecated class RowsFragment extends android.app.Fragment implements android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapterProvider {
+    ctor public RowsFragment();
+    method public deprecated void enableRowScaling(boolean);
+    method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+    method public android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter getMainFragmentAdapter();
+    method public android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+    method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+    method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+    method public boolean isScrolling();
+    method public void onTransitionEnd();
+    method public boolean onTransitionPrepare();
+    method public void setAlignment(int);
+    method public void setEntranceTransitionState(boolean);
+    method public void setExpand(boolean);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+    method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+  }
+
+  public static class RowsFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentAdapter {
+    ctor public RowsFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsFragment);
+  }
+
+  public static deprecated class RowsFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseFragment.MainFragmentRowsAdapter {
+    ctor public RowsFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsFragment);
+  }
+
+  public class RowsSupportFragment extends android.support.v4.app.Fragment implements android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapterProvider android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapterProvider {
+    ctor public RowsSupportFragment();
+    method public deprecated void enableRowScaling(boolean);
+    method protected android.support.v17.leanback.widget.VerticalGridView findGridViewFromRoot(android.view.View);
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder findRowViewHolderByPosition(int);
+    method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter getMainFragmentAdapter();
+    method public android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter();
+    method public android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+    method public android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+    method public android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(int);
+    method public boolean isScrolling();
+    method public void onTransitionEnd();
+    method public boolean onTransitionPrepare();
+    method public void setAlignment(int);
+    method public void setEntranceTransitionState(boolean);
+    method public void setExpand(boolean);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+    method public void setSelectedPosition(int, boolean, android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+  }
+
+  public static class RowsSupportFragment.MainFragmentAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentAdapter {
+    ctor public RowsSupportFragment.MainFragmentAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+  }
+
+  public static class RowsSupportFragment.MainFragmentRowsAdapter extends android.support.v17.leanback.app.BrowseSupportFragment.MainFragmentRowsAdapter {
+    ctor public RowsSupportFragment.MainFragmentRowsAdapter(android.support.v17.leanback.app.RowsSupportFragment);
+  }
+
+  public deprecated class SearchFragment extends android.app.Fragment {
+    ctor public SearchFragment();
+    method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+    method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+    method public void displayCompletions(java.util.List<java.lang.String>);
+    method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public android.graphics.drawable.Drawable getBadgeDrawable();
+    method public android.content.Intent getRecognizerIntent();
+    method public android.support.v17.leanback.app.RowsFragment getRowsFragment();
+    method public java.lang.String getTitle();
+    method public static android.support.v17.leanback.app.SearchFragment newInstance(java.lang.String);
+    method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setSearchQuery(java.lang.String, boolean);
+    method public void setSearchQuery(android.content.Intent, boolean);
+    method public void setSearchResultProvider(android.support.v17.leanback.app.SearchFragment.SearchResultProvider);
+    method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+    method public void setTitle(java.lang.String);
+    method public void startRecognition();
+  }
+
+  public static abstract interface SearchFragment.SearchResultProvider {
+    method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+    method public abstract boolean onQueryTextChange(java.lang.String);
+    method public abstract boolean onQueryTextSubmit(java.lang.String);
+  }
+
+  public class SearchSupportFragment extends android.support.v4.app.Fragment {
+    ctor public SearchSupportFragment();
+    method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String);
+    method public static android.os.Bundle createArgs(android.os.Bundle, java.lang.String, java.lang.String);
+    method public void displayCompletions(java.util.List<java.lang.String>);
+    method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public android.graphics.drawable.Drawable getBadgeDrawable();
+    method public android.content.Intent getRecognizerIntent();
+    method public android.support.v17.leanback.app.RowsSupportFragment getRowsSupportFragment();
+    method public java.lang.String getTitle();
+    method public static android.support.v17.leanback.app.SearchSupportFragment newInstance(java.lang.String);
+    method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setSearchQuery(java.lang.String, boolean);
+    method public void setSearchQuery(android.content.Intent, boolean);
+    method public void setSearchResultProvider(android.support.v17.leanback.app.SearchSupportFragment.SearchResultProvider);
+    method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+    method public void setTitle(java.lang.String);
+    method public void startRecognition();
+  }
+
+  public static abstract interface SearchSupportFragment.SearchResultProvider {
+    method public abstract android.support.v17.leanback.widget.ObjectAdapter getResultsAdapter();
+    method public abstract boolean onQueryTextChange(java.lang.String);
+    method public abstract boolean onQueryTextSubmit(java.lang.String);
+  }
+
+  public deprecated class VerticalGridFragment extends android.support.v17.leanback.app.BaseFragment {
+    ctor public VerticalGridFragment();
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+    method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSelectedPosition(int);
+  }
+
+  public class VerticalGridSupportFragment extends android.support.v17.leanback.app.BaseSupportFragment {
+    ctor public VerticalGridSupportFragment();
+    method public android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public android.support.v17.leanback.widget.VerticalGridPresenter getGridPresenter();
+    method public android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setGridPresenter(android.support.v17.leanback.widget.VerticalGridPresenter);
+    method public void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public void setSelectedPosition(int);
+  }
+
+  public deprecated class VideoFragment extends android.support.v17.leanback.app.PlaybackFragment {
+    ctor public VideoFragment();
+    method public android.view.SurfaceView getSurfaceView();
+    method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+  }
+
+  public deprecated class VideoFragmentGlueHost extends android.support.v17.leanback.app.PlaybackFragmentGlueHost implements android.support.v17.leanback.media.SurfaceHolderGlueHost {
+    ctor public VideoFragmentGlueHost(android.support.v17.leanback.app.VideoFragment);
+    method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+  }
+
+  public class VideoSupportFragment extends android.support.v17.leanback.app.PlaybackSupportFragment {
+    ctor public VideoSupportFragment();
+    method public android.view.SurfaceView getSurfaceView();
+    method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+  }
+
+  public class VideoSupportFragmentGlueHost extends android.support.v17.leanback.app.PlaybackSupportFragmentGlueHost implements android.support.v17.leanback.media.SurfaceHolderGlueHost {
+    ctor public VideoSupportFragmentGlueHost(android.support.v17.leanback.app.VideoSupportFragment);
+    method public void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+  }
+
+}
+
+package android.support.v17.leanback.database {
+
+  public abstract class CursorMapper {
+    ctor public CursorMapper();
+    method protected abstract java.lang.Object bind(android.database.Cursor);
+    method protected abstract void bindColumns(android.database.Cursor);
+    method public java.lang.Object convert(android.database.Cursor);
+  }
+
+}
+
+package android.support.v17.leanback.graphics {
+
+  public class BoundsRule {
+    ctor public BoundsRule();
+    ctor public BoundsRule(android.support.v17.leanback.graphics.BoundsRule);
+    method public void calculateBounds(android.graphics.Rect, android.graphics.Rect);
+    field public android.support.v17.leanback.graphics.BoundsRule.ValueRule bottom;
+    field public android.support.v17.leanback.graphics.BoundsRule.ValueRule left;
+    field public android.support.v17.leanback.graphics.BoundsRule.ValueRule right;
+    field public android.support.v17.leanback.graphics.BoundsRule.ValueRule top;
+  }
+
+  public static final class BoundsRule.ValueRule {
+    method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule absoluteValue(int);
+    method public int getAbsoluteValue();
+    method public float getFraction();
+    method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule inheritFromParent(float);
+    method public static android.support.v17.leanback.graphics.BoundsRule.ValueRule inheritFromParentWithOffset(float, int);
+    method public void setAbsoluteValue(int);
+    method public void setFraction(float);
+  }
+
+  public final class ColorFilterCache {
+    method public static android.support.v17.leanback.graphics.ColorFilterCache getColorFilterCache(int);
+    method public android.graphics.ColorFilter getFilterForLevel(float);
+  }
+
+  public final class ColorFilterDimmer {
+    method public void applyFilterToView(android.view.View);
+    method public static android.support.v17.leanback.graphics.ColorFilterDimmer create(android.support.v17.leanback.graphics.ColorFilterCache, float, float);
+    method public static android.support.v17.leanback.graphics.ColorFilterDimmer createDefault(android.content.Context);
+    method public android.graphics.ColorFilter getColorFilter();
+    method public android.graphics.Paint getPaint();
+    method public void setActiveLevel(float);
+  }
+
+  public final class ColorOverlayDimmer {
+    method public int applyToColor(int);
+    method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createColorOverlayDimmer(int, float, float);
+    method public static android.support.v17.leanback.graphics.ColorOverlayDimmer createDefault(android.content.Context);
+    method public void drawColorOverlay(android.graphics.Canvas, android.view.View, boolean);
+    method public int getAlpha();
+    method public float getAlphaFloat();
+    method public android.graphics.Paint getPaint();
+    method public boolean needsDraw();
+    method public void setActiveLevel(float);
+  }
+
+  public class CompositeDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public CompositeDrawable();
+    method public void addChildDrawable(android.graphics.drawable.Drawable);
+    method public void draw(android.graphics.Canvas);
+    method public android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable getChildAt(int);
+    method public int getChildCount();
+    method public android.graphics.drawable.Drawable getDrawable(int);
+    method public int getOpacity();
+    method public void invalidateDrawable(android.graphics.drawable.Drawable);
+    method public void removeChild(int);
+    method public void removeDrawable(android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
+    method public void setAlpha(int);
+    method public void setChildDrawableAt(int, android.graphics.drawable.Drawable);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
+  }
+
+  public static final class CompositeDrawable.ChildDrawable {
+    ctor public CompositeDrawable.ChildDrawable(android.graphics.drawable.Drawable, android.support.v17.leanback.graphics.CompositeDrawable);
+    method public android.support.v17.leanback.graphics.BoundsRule getBoundsRule();
+    method public android.graphics.drawable.Drawable getDrawable();
+    method public void recomputeBounds();
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> BOTTOM_ABSOLUTE;
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> BOTTOM_FRACTION;
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> LEFT_ABSOLUTE;
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> LEFT_FRACTION;
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> RIGHT_ABSOLUTE;
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> RIGHT_FRACTION;
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Integer> TOP_ABSOLUTE;
+    field public static final android.util.Property<android.support.v17.leanback.graphics.CompositeDrawable.ChildDrawable, java.lang.Float> TOP_FRACTION;
+  }
+
+  public class FitWidthBitmapDrawable extends android.graphics.drawable.Drawable {
+    ctor public FitWidthBitmapDrawable();
+    method public void draw(android.graphics.Canvas);
+    method public android.graphics.Bitmap getBitmap();
+    method public int getOpacity();
+    method public android.graphics.Rect getSource();
+    method public int getVerticalOffset();
+    method public void setAlpha(int);
+    method public void setBitmap(android.graphics.Bitmap);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setSource(android.graphics.Rect);
+    method public void setVerticalOffset(int);
+    field public static final android.util.Property<android.support.v17.leanback.graphics.FitWidthBitmapDrawable, java.lang.Integer> PROPERTY_VERTICAL_OFFSET;
+  }
+
+}
+
+package android.support.v17.leanback.media {
+
+  public class MediaControllerAdapter extends android.support.v17.leanback.media.PlayerAdapter {
+    ctor public MediaControllerAdapter(android.support.v4.media.session.MediaControllerCompat);
+    method public android.graphics.drawable.Drawable getMediaArt(android.content.Context);
+    method public android.support.v4.media.session.MediaControllerCompat getMediaController();
+    method public java.lang.CharSequence getMediaSubtitle();
+    method public java.lang.CharSequence getMediaTitle();
+    method public void pause();
+    method public void play();
+  }
+
+  public abstract deprecated class MediaControllerGlue extends android.support.v17.leanback.media.PlaybackControlGlue {
+    ctor public MediaControllerGlue(android.content.Context, int[], int[]);
+    method public void attachToMediaController(android.support.v4.media.session.MediaControllerCompat);
+    method public void detach();
+    method public int getCurrentPosition();
+    method public int getCurrentSpeedId();
+    method public android.graphics.drawable.Drawable getMediaArt();
+    method public final android.support.v4.media.session.MediaControllerCompat getMediaController();
+    method public int getMediaDuration();
+    method public java.lang.CharSequence getMediaSubtitle();
+    method public java.lang.CharSequence getMediaTitle();
+    method public long getSupportedActions();
+    method public boolean hasValidMedia();
+    method public boolean isMediaPlaying();
+  }
+
+  public class MediaPlayerAdapter extends android.support.v17.leanback.media.PlayerAdapter {
+    ctor public MediaPlayerAdapter(android.content.Context);
+    method protected boolean onError(int, int);
+    method protected boolean onInfo(int, int);
+    method protected void onSeekComplete();
+    method public void pause();
+    method public void play();
+    method public void release();
+    method public void reset();
+    method public boolean setDataSource(android.net.Uri);
+  }
+
+  public class PlaybackBannerControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackBaseControlGlue {
+    ctor public PlaybackBannerControlGlue(android.content.Context, int[], T);
+    ctor public PlaybackBannerControlGlue(android.content.Context, int[], int[], T);
+    method public int[] getFastForwardSpeeds();
+    method public int[] getRewindSpeeds();
+    method public void onActionClicked(android.support.v17.leanback.widget.Action);
+    method protected android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+    method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+    field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+    field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+    field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+    field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+    field public static final int ACTION_REWIND = 32; // 0x20
+    field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+    field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+    field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+    field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+    field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+    field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+    field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+    field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+    field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+    field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+  }
+
+  public abstract class PlaybackBaseControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackGlue implements android.support.v17.leanback.widget.OnActionClickedListener android.view.View.OnKeyListener {
+    ctor public PlaybackBaseControlGlue(android.content.Context, T);
+    method public android.graphics.drawable.Drawable getArt();
+    method public final long getBufferedPosition();
+    method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+    method public long getCurrentPosition();
+    method public final long getDuration();
+    method public android.support.v17.leanback.widget.PlaybackRowPresenter getPlaybackRowPresenter();
+    method public final T getPlayerAdapter();
+    method public java.lang.CharSequence getSubtitle();
+    method public long getSupportedActions();
+    method public java.lang.CharSequence getTitle();
+    method public boolean isControlsOverlayAutoHideEnabled();
+    method public final boolean isPlaying();
+    method public final boolean isPrepared();
+    method protected static void notifyItemChanged(android.support.v17.leanback.widget.ArrayObjectAdapter, java.lang.Object);
+    method protected void onCreatePrimaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+    method protected abstract android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+    method protected void onCreateSecondaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+    method protected void onMetadataChanged();
+    method protected void onPlayCompleted();
+    method protected void onPlayStateChanged();
+    method protected void onPreparedStateChanged();
+    method protected void onUpdateBufferedProgress();
+    method protected void onUpdateDuration();
+    method protected void onUpdateProgress();
+    method public final void seekTo(long);
+    method public void setArt(android.graphics.drawable.Drawable);
+    method public void setControlsOverlayAutoHideEnabled(boolean);
+    method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+    method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+    method public void setSubtitle(java.lang.CharSequence);
+    method public void setTitle(java.lang.CharSequence);
+    field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+    field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+    field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+    field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+    field public static final int ACTION_REPEAT = 512; // 0x200
+    field public static final int ACTION_REWIND = 32; // 0x20
+    field public static final int ACTION_SHUFFLE = 1024; // 0x400
+    field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+    field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+  }
+
+  public abstract class PlaybackControlGlue extends android.support.v17.leanback.media.PlaybackGlue implements android.support.v17.leanback.widget.OnActionClickedListener android.view.View.OnKeyListener {
+    ctor public PlaybackControlGlue(android.content.Context, int[]);
+    ctor public PlaybackControlGlue(android.content.Context, int[], int[]);
+    method public void enableProgressUpdating(boolean);
+    method public android.support.v17.leanback.widget.PlaybackControlsRow getControlsRow();
+    method public deprecated android.support.v17.leanback.widget.PlaybackControlsRowPresenter getControlsRowPresenter();
+    method public abstract int getCurrentPosition();
+    method public abstract int getCurrentSpeedId();
+    method public int[] getFastForwardSpeeds();
+    method public abstract android.graphics.drawable.Drawable getMediaArt();
+    method public abstract int getMediaDuration();
+    method public abstract java.lang.CharSequence getMediaSubtitle();
+    method public abstract java.lang.CharSequence getMediaTitle();
+    method public android.support.v17.leanback.widget.PlaybackRowPresenter getPlaybackRowPresenter();
+    method public int[] getRewindSpeeds();
+    method public abstract long getSupportedActions();
+    method public int getUpdatePeriod();
+    method public abstract boolean hasValidMedia();
+    method public boolean isFadingEnabled();
+    method public abstract boolean isMediaPlaying();
+    method public void onActionClicked(android.support.v17.leanback.widget.Action);
+    method protected void onCreateControlsRowAndPresenter();
+    method protected void onCreatePrimaryActions(android.support.v17.leanback.widget.SparseArrayObjectAdapter);
+    method protected void onCreateSecondaryActions(android.support.v17.leanback.widget.ArrayObjectAdapter);
+    method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+    method protected void onMetadataChanged();
+    method protected void onStateChanged();
+    method public void play(int);
+    method public final void play();
+    method public void setControlsRow(android.support.v17.leanback.widget.PlaybackControlsRow);
+    method public deprecated void setControlsRowPresenter(android.support.v17.leanback.widget.PlaybackControlsRowPresenter);
+    method public void setFadingEnabled(boolean);
+    method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+    method public void updateProgress();
+    field public static final int ACTION_CUSTOM_LEFT_FIRST = 1; // 0x1
+    field public static final int ACTION_CUSTOM_RIGHT_FIRST = 4096; // 0x1000
+    field public static final int ACTION_FAST_FORWARD = 128; // 0x80
+    field public static final int ACTION_PLAY_PAUSE = 64; // 0x40
+    field public static final int ACTION_REWIND = 32; // 0x20
+    field public static final int ACTION_SKIP_TO_NEXT = 256; // 0x100
+    field public static final int ACTION_SKIP_TO_PREVIOUS = 16; // 0x10
+    field public static final int PLAYBACK_SPEED_FAST_L0 = 10; // 0xa
+    field public static final int PLAYBACK_SPEED_FAST_L1 = 11; // 0xb
+    field public static final int PLAYBACK_SPEED_FAST_L2 = 12; // 0xc
+    field public static final int PLAYBACK_SPEED_FAST_L3 = 13; // 0xd
+    field public static final int PLAYBACK_SPEED_FAST_L4 = 14; // 0xe
+    field public static final int PLAYBACK_SPEED_INVALID = -1; // 0xffffffff
+    field public static final int PLAYBACK_SPEED_NORMAL = 1; // 0x1
+    field public static final int PLAYBACK_SPEED_PAUSED = 0; // 0x0
+  }
+
+  public abstract class PlaybackGlue {
+    ctor public PlaybackGlue(android.content.Context);
+    method public void addPlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+    method public android.content.Context getContext();
+    method public android.support.v17.leanback.media.PlaybackGlueHost getHost();
+    method protected java.util.List<android.support.v17.leanback.media.PlaybackGlue.PlayerCallback> getPlayerCallbacks();
+    method public boolean isPlaying();
+    method public boolean isPrepared();
+    method public void next();
+    method protected void onAttachedToHost(android.support.v17.leanback.media.PlaybackGlueHost);
+    method protected void onDetachedFromHost();
+    method protected void onHostPause();
+    method protected void onHostResume();
+    method protected void onHostStart();
+    method protected void onHostStop();
+    method public void pause();
+    method public void play();
+    method public void playWhenPrepared();
+    method public void previous();
+    method public void removePlayerCallback(android.support.v17.leanback.media.PlaybackGlue.PlayerCallback);
+    method public final void setHost(android.support.v17.leanback.media.PlaybackGlueHost);
+  }
+
+  public static abstract class PlaybackGlue.PlayerCallback {
+    ctor public PlaybackGlue.PlayerCallback();
+    method public void onPlayCompleted(android.support.v17.leanback.media.PlaybackGlue);
+    method public void onPlayStateChanged(android.support.v17.leanback.media.PlaybackGlue);
+    method public void onPreparedStateChanged(android.support.v17.leanback.media.PlaybackGlue);
+  }
+
+  public abstract class PlaybackGlueHost {
+    ctor public PlaybackGlueHost();
+    method public deprecated void fadeOut();
+    method public android.support.v17.leanback.media.PlaybackGlueHost.PlayerCallback getPlayerCallback();
+    method public void hideControlsOverlay(boolean);
+    method public boolean isControlsOverlayAutoHideEnabled();
+    method public boolean isControlsOverlayVisible();
+    method public void notifyPlaybackRowChanged();
+    method public void setControlsOverlayAutoHideEnabled(boolean);
+    method public deprecated void setFadingEnabled(boolean);
+    method public void setHostCallback(android.support.v17.leanback.media.PlaybackGlueHost.HostCallback);
+    method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+    method public void setOnKeyInterceptListener(android.view.View.OnKeyListener);
+    method public void setPlaybackRow(android.support.v17.leanback.widget.Row);
+    method public void setPlaybackRowPresenter(android.support.v17.leanback.widget.PlaybackRowPresenter);
+    method public void showControlsOverlay(boolean);
+  }
+
+  public static abstract class PlaybackGlueHost.HostCallback {
+    ctor public PlaybackGlueHost.HostCallback();
+    method public void onHostDestroy();
+    method public void onHostPause();
+    method public void onHostResume();
+    method public void onHostStart();
+    method public void onHostStop();
+  }
+
+  public static class PlaybackGlueHost.PlayerCallback {
+    ctor public PlaybackGlueHost.PlayerCallback();
+    method public void onBufferingStateChanged(boolean);
+    method public void onError(int, java.lang.CharSequence);
+    method public void onVideoSizeChanged(int, int);
+  }
+
+  public class PlaybackTransportControlGlue<T extends android.support.v17.leanback.media.PlayerAdapter> extends android.support.v17.leanback.media.PlaybackBaseControlGlue {
+    ctor public PlaybackTransportControlGlue(android.content.Context, T);
+    method public final android.support.v17.leanback.widget.PlaybackSeekDataProvider getSeekProvider();
+    method public final boolean isSeekEnabled();
+    method public void onActionClicked(android.support.v17.leanback.widget.Action);
+    method protected android.support.v17.leanback.widget.PlaybackRowPresenter onCreateRowPresenter();
+    method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+    method public final void setSeekEnabled(boolean);
+    method public final void setSeekProvider(android.support.v17.leanback.widget.PlaybackSeekDataProvider);
+  }
+
+  public abstract class PlayerAdapter {
+    ctor public PlayerAdapter();
+    method public void fastForward();
+    method public long getBufferedPosition();
+    method public final android.support.v17.leanback.media.PlayerAdapter.Callback getCallback();
+    method public long getCurrentPosition();
+    method public long getDuration();
+    method public long getSupportedActions();
+    method public boolean isPlaying();
+    method public boolean isPrepared();
+    method public void next();
+    method public void onAttachedToHost(android.support.v17.leanback.media.PlaybackGlueHost);
+    method public void onDetachedFromHost();
+    method public abstract void pause();
+    method public abstract void play();
+    method public void previous();
+    method public void rewind();
+    method public void seekTo(long);
+    method public final void setCallback(android.support.v17.leanback.media.PlayerAdapter.Callback);
+    method public void setProgressUpdatingEnabled(boolean);
+    method public void setRepeatAction(int);
+    method public void setShuffleAction(int);
+  }
+
+  public static class PlayerAdapter.Callback {
+    ctor public PlayerAdapter.Callback();
+    method public void onBufferedPositionChanged(android.support.v17.leanback.media.PlayerAdapter);
+    method public void onBufferingStateChanged(android.support.v17.leanback.media.PlayerAdapter, boolean);
+    method public void onCurrentPositionChanged(android.support.v17.leanback.media.PlayerAdapter);
+    method public void onDurationChanged(android.support.v17.leanback.media.PlayerAdapter);
+    method public void onError(android.support.v17.leanback.media.PlayerAdapter, int, java.lang.String);
+    method public void onMetadataChanged(android.support.v17.leanback.media.PlayerAdapter);
+    method public void onPlayCompleted(android.support.v17.leanback.media.PlayerAdapter);
+    method public void onPlayStateChanged(android.support.v17.leanback.media.PlayerAdapter);
+    method public void onPreparedStateChanged(android.support.v17.leanback.media.PlayerAdapter);
+    method public void onVideoSizeChanged(android.support.v17.leanback.media.PlayerAdapter, int, int);
+  }
+
+  public abstract interface SurfaceHolderGlueHost {
+    method public abstract void setSurfaceHolderCallback(android.view.SurfaceHolder.Callback);
+  }
+
+}
+
+package android.support.v17.leanback.system {
+
+  public class Settings {
+    method public boolean getBoolean(java.lang.String);
+    method public static android.support.v17.leanback.system.Settings getInstance(android.content.Context);
+    method public void setBoolean(java.lang.String, boolean);
+    field public static final java.lang.String OUTLINE_CLIPPING_DISABLED = "OUTLINE_CLIPPING_DISABLED";
+    field public static final java.lang.String PREFER_STATIC_SHADOWS = "PREFER_STATIC_SHADOWS";
+  }
+
+}
+
+package android.support.v17.leanback.widget {
+
+  public abstract class AbstractDetailsDescriptionPresenter extends android.support.v17.leanback.widget.Presenter {
+    ctor public AbstractDetailsDescriptionPresenter();
+    method protected abstract void onBindDescription(android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder, java.lang.Object);
+    method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+    method public final android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+  }
+
+  public static class AbstractDetailsDescriptionPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+    ctor public AbstractDetailsDescriptionPresenter.ViewHolder(android.view.View);
+    method public android.widget.TextView getBody();
+    method public android.widget.TextView getSubtitle();
+    method public android.widget.TextView getTitle();
+  }
+
+  public abstract class AbstractMediaItemPresenter extends android.support.v17.leanback.widget.RowPresenter {
+    ctor public AbstractMediaItemPresenter();
+    ctor public AbstractMediaItemPresenter(int);
+    method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method public android.support.v17.leanback.widget.Presenter getActionPresenter();
+    method protected int getMediaPlayState(java.lang.Object);
+    method public int getThemeId();
+    method public boolean hasMediaRowSeparator();
+    method protected abstract void onBindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder, java.lang.Object);
+    method public void onBindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+    method protected void onBindRowActions(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+    method protected void onUnbindMediaDetails(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+    method public void onUnbindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder);
+    method public void setActionPresenter(android.support.v17.leanback.widget.Presenter);
+    method public void setBackgroundColor(int);
+    method public void setHasMediaRowSeparator(boolean);
+    method public void setThemeId(int);
+    field public static final int PLAY_STATE_INITIAL = 0; // 0x0
+    field public static final int PLAY_STATE_PAUSED = 1; // 0x1
+    field public static final int PLAY_STATE_PLAYING = 2; // 0x2
+  }
+
+  public static class AbstractMediaItemPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+    ctor public AbstractMediaItemPresenter.ViewHolder(android.view.View);
+    method public android.view.ViewGroup getMediaItemActionsContainer();
+    method public android.view.View getMediaItemDetailsView();
+    method public android.widget.TextView getMediaItemDurationView();
+    method public android.widget.TextView getMediaItemNameView();
+    method public android.widget.TextView getMediaItemNumberView();
+    method public android.widget.ViewFlipper getMediaItemNumberViewFlipper();
+    method public android.view.View getMediaItemPausedView();
+    method public android.view.View getMediaItemPlayingView();
+    method public android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getMediaItemRowActions();
+    method public android.view.View getMediaItemRowSeparator();
+    method public android.view.View getSelectorView();
+    method public void notifyActionChanged(android.support.v17.leanback.widget.MultiActionsProvider.MultiAction);
+    method public void notifyDetailsChanged();
+    method public void notifyPlayStateChanged();
+    method public void onBindRowActions();
+    method public void setSelectedMediaItemNumberView(int);
+  }
+
+  public abstract class AbstractMediaListHeaderPresenter extends android.support.v17.leanback.widget.RowPresenter {
+    ctor public AbstractMediaListHeaderPresenter(android.content.Context, int);
+    ctor public AbstractMediaListHeaderPresenter();
+    method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method protected abstract void onBindMediaListHeaderViewHolder(android.support.v17.leanback.widget.AbstractMediaListHeaderPresenter.ViewHolder, java.lang.Object);
+    method public void setBackgroundColor(int);
+  }
+
+  public static class AbstractMediaListHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+    ctor public AbstractMediaListHeaderPresenter.ViewHolder(android.view.View);
+    method public android.widget.TextView getHeaderView();
+  }
+
+  public class Action {
+    ctor public Action(long);
+    ctor public Action(long, java.lang.CharSequence);
+    ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence);
+    ctor public Action(long, java.lang.CharSequence, java.lang.CharSequence, android.graphics.drawable.Drawable);
+    method public final void addKeyCode(int);
+    method public final android.graphics.drawable.Drawable getIcon();
+    method public final long getId();
+    method public final java.lang.CharSequence getLabel1();
+    method public final java.lang.CharSequence getLabel2();
+    method public final void removeKeyCode(int);
+    method public final boolean respondsToKeyCode(int);
+    method public final void setIcon(android.graphics.drawable.Drawable);
+    method public final void setId(long);
+    method public final void setLabel1(java.lang.CharSequence);
+    method public final void setLabel2(java.lang.CharSequence);
+    field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+  }
+
+  public class ArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+    ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+    ctor public ArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+    ctor public ArrayObjectAdapter();
+    method public void add(java.lang.Object);
+    method public void add(int, java.lang.Object);
+    method public void addAll(int, java.util.Collection);
+    method public void clear();
+    method public java.lang.Object get(int);
+    method public int indexOf(java.lang.Object);
+    method public void move(int, int);
+    method public void notifyArrayItemRangeChanged(int, int);
+    method public boolean remove(java.lang.Object);
+    method public int removeItems(int, int);
+    method public void replace(int, java.lang.Object);
+    method public void setItems(java.util.List, android.support.v17.leanback.widget.DiffCallback);
+    method public int size();
+    method public <E> java.util.List<E> unmodifiableList();
+  }
+
+  public class BaseCardView extends android.widget.FrameLayout {
+    ctor public BaseCardView(android.content.Context);
+    ctor public BaseCardView(android.content.Context, android.util.AttributeSet);
+    ctor public BaseCardView(android.content.Context, android.util.AttributeSet, int);
+    method protected android.support.v17.leanback.widget.BaseCardView.LayoutParams generateDefaultLayoutParams();
+    method public android.support.v17.leanback.widget.BaseCardView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.support.v17.leanback.widget.BaseCardView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getCardType();
+    method public deprecated int getExtraVisibility();
+    method public int getInfoVisibility();
+    method public boolean isSelectedAnimationDelayed();
+    method public void setCardType(int);
+    method public deprecated void setExtraVisibility(int);
+    method public void setInfoVisibility(int);
+    method public void setSelectedAnimationDelayed(boolean);
+    field public static final int CARD_REGION_VISIBLE_ACTIVATED = 1; // 0x1
+    field public static final int CARD_REGION_VISIBLE_ALWAYS = 0; // 0x0
+    field public static final int CARD_REGION_VISIBLE_SELECTED = 2; // 0x2
+    field public static final int CARD_TYPE_INFO_OVER = 1; // 0x1
+    field public static final int CARD_TYPE_INFO_UNDER = 2; // 0x2
+    field public static final int CARD_TYPE_INFO_UNDER_WITH_EXTRA = 3; // 0x3
+    field public static final int CARD_TYPE_MAIN_ONLY = 0; // 0x0
+  }
+
+  public static class BaseCardView.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+    ctor public BaseCardView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public BaseCardView.LayoutParams(int, int);
+    ctor public BaseCardView.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public BaseCardView.LayoutParams(android.support.v17.leanback.widget.BaseCardView.LayoutParams);
+    field public static final int VIEW_TYPE_EXTRA = 2; // 0x2
+    field public static final int VIEW_TYPE_INFO = 1; // 0x1
+    field public static final int VIEW_TYPE_MAIN = 0; // 0x0
+    field public int viewType;
+  }
+
+  public abstract class BaseGridView extends android.support.v7.widget.RecyclerView {
+    method public void addOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+    method public void animateIn();
+    method public void animateOut();
+    method public int getChildDrawingOrder(int, int);
+    method public deprecated int getHorizontalMargin();
+    method public int getHorizontalSpacing();
+    method public int getInitialPrefetchItemCount();
+    method public int getItemAlignmentOffset();
+    method public float getItemAlignmentOffsetPercent();
+    method public int getItemAlignmentViewId();
+    method public android.support.v17.leanback.widget.BaseGridView.OnUnhandledKeyListener getOnUnhandledKeyListener();
+    method public final int getSaveChildrenLimitNumber();
+    method public final int getSaveChildrenPolicy();
+    method public int getSelectedPosition();
+    method public deprecated int getVerticalMargin();
+    method public int getVerticalSpacing();
+    method public void getViewSelectedOffsets(android.view.View, int[]);
+    method public int getWindowAlignment();
+    method public int getWindowAlignmentOffset();
+    method public float getWindowAlignmentOffsetPercent();
+    method public boolean hasPreviousViewInSameRow(int);
+    method public boolean isChildLayoutAnimated();
+    method public boolean isFocusDrawingOrderEnabled();
+    method public final boolean isFocusSearchDisabled();
+    method public boolean isItemAlignmentOffsetWithPadding();
+    method public boolean isScrollEnabled();
+    method public boolean isWindowAlignmentPreferKeyLineOverHighEdge();
+    method public boolean isWindowAlignmentPreferKeyLineOverLowEdge();
+    method public boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+    method public void removeOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+    method public void setAnimateChildLayout(boolean);
+    method public void setChildrenVisibility(int);
+    method public void setFocusDrawingOrderEnabled(boolean);
+    method public final void setFocusSearchDisabled(boolean);
+    method public void setGravity(int);
+    method public void setHasOverlappingRendering(boolean);
+    method public deprecated void setHorizontalMargin(int);
+    method public void setHorizontalSpacing(int);
+    method public void setInitialPrefetchItemCount(int);
+    method public void setItemAlignmentOffset(int);
+    method public void setItemAlignmentOffsetPercent(float);
+    method public void setItemAlignmentOffsetWithPadding(boolean);
+    method public void setItemAlignmentViewId(int);
+    method public deprecated void setItemMargin(int);
+    method public void setItemSpacing(int);
+    method public void setLayoutEnabled(boolean);
+    method public void setOnChildLaidOutListener(android.support.v17.leanback.widget.OnChildLaidOutListener);
+    method public void setOnChildSelectedListener(android.support.v17.leanback.widget.OnChildSelectedListener);
+    method public void setOnChildViewHolderSelectedListener(android.support.v17.leanback.widget.OnChildViewHolderSelectedListener);
+    method public void setOnKeyInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnKeyInterceptListener);
+    method public void setOnMotionInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnMotionInterceptListener);
+    method public void setOnTouchInterceptListener(android.support.v17.leanback.widget.BaseGridView.OnTouchInterceptListener);
+    method public void setOnUnhandledKeyListener(android.support.v17.leanback.widget.BaseGridView.OnUnhandledKeyListener);
+    method public void setPruneChild(boolean);
+    method public final void setSaveChildrenLimitNumber(int);
+    method public final void setSaveChildrenPolicy(int);
+    method public void setScrollEnabled(boolean);
+    method public void setSelectedPosition(int);
+    method public void setSelectedPosition(int, int);
+    method public void setSelectedPosition(int, android.support.v17.leanback.widget.ViewHolderTask);
+    method public void setSelectedPositionSmooth(int);
+    method public void setSelectedPositionSmooth(int, android.support.v17.leanback.widget.ViewHolderTask);
+    method public deprecated void setVerticalMargin(int);
+    method public void setVerticalSpacing(int);
+    method public void setWindowAlignment(int);
+    method public void setWindowAlignmentOffset(int);
+    method public void setWindowAlignmentOffsetPercent(float);
+    method public void setWindowAlignmentPreferKeyLineOverHighEdge(boolean);
+    method public void setWindowAlignmentPreferKeyLineOverLowEdge(boolean);
+    field public static final float ITEM_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+    field public static final int SAVE_ALL_CHILD = 3; // 0x3
+    field public static final int SAVE_LIMITED_CHILD = 2; // 0x2
+    field public static final int SAVE_NO_CHILD = 0; // 0x0
+    field public static final int SAVE_ON_SCREEN_CHILD = 1; // 0x1
+    field public static final int WINDOW_ALIGN_BOTH_EDGE = 3; // 0x3
+    field public static final int WINDOW_ALIGN_HIGH_EDGE = 2; // 0x2
+    field public static final int WINDOW_ALIGN_LOW_EDGE = 1; // 0x1
+    field public static final int WINDOW_ALIGN_NO_EDGE = 0; // 0x0
+    field public static final float WINDOW_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+  }
+
+  public static abstract interface BaseGridView.OnKeyInterceptListener {
+    method public abstract boolean onInterceptKeyEvent(android.view.KeyEvent);
+  }
+
+  public static abstract interface BaseGridView.OnMotionInterceptListener {
+    method public abstract boolean onInterceptMotionEvent(android.view.MotionEvent);
+  }
+
+  public static abstract interface BaseGridView.OnTouchInterceptListener {
+    method public abstract boolean onInterceptTouchEvent(android.view.MotionEvent);
+  }
+
+  public static abstract interface BaseGridView.OnUnhandledKeyListener {
+    method public abstract boolean onUnhandledKey(android.view.KeyEvent);
+  }
+
+  public abstract interface BaseOnItemViewClickedListener<T> {
+    method public abstract void onItemClicked(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+  }
+
+  public abstract interface BaseOnItemViewSelectedListener<T> {
+    method public abstract void onItemSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, android.support.v17.leanback.widget.RowPresenter.ViewHolder, T);
+  }
+
+  public class BrowseFrameLayout extends android.widget.FrameLayout {
+    ctor public BrowseFrameLayout(android.content.Context);
+    ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet);
+    ctor public BrowseFrameLayout(android.content.Context, android.util.AttributeSet, int);
+    method public android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener getOnChildFocusListener();
+    method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+    method public void setOnChildFocusListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnChildFocusListener);
+    method public void setOnDispatchKeyListener(android.view.View.OnKeyListener);
+    method public void setOnFocusSearchListener(android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener);
+  }
+
+  public static abstract interface BrowseFrameLayout.OnChildFocusListener {
+    method public abstract void onRequestChildFocus(android.view.View, android.view.View);
+    method public abstract boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+  }
+
+  public static abstract interface BrowseFrameLayout.OnFocusSearchListener {
+    method public abstract android.view.View onFocusSearch(android.view.View, int);
+  }
+
+  public final class ClassPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+    ctor public ClassPresenterSelector();
+    method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenter(java.lang.Class<?>, android.support.v17.leanback.widget.Presenter);
+    method public android.support.v17.leanback.widget.ClassPresenterSelector addClassPresenterSelector(java.lang.Class<?>, android.support.v17.leanback.widget.PresenterSelector);
+    method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+  }
+
+  public class ControlButtonPresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+    ctor public ControlButtonPresenterSelector();
+    method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+    method public android.support.v17.leanback.widget.Presenter getPrimaryPresenter();
+    method public android.support.v17.leanback.widget.Presenter getSecondaryPresenter();
+  }
+
+  public class CursorObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+    ctor public CursorObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+    ctor public CursorObjectAdapter(android.support.v17.leanback.widget.Presenter);
+    ctor public CursorObjectAdapter();
+    method public void changeCursor(android.database.Cursor);
+    method public void close();
+    method public java.lang.Object get(int);
+    method public final android.database.Cursor getCursor();
+    method public final android.support.v17.leanback.database.CursorMapper getMapper();
+    method protected final void invalidateCache(int);
+    method protected final void invalidateCache(int, int);
+    method public boolean isClosed();
+    method protected void onCursorChanged();
+    method protected void onMapperChanged();
+    method public final void setMapper(android.support.v17.leanback.database.CursorMapper);
+    method public int size();
+    method public android.database.Cursor swapCursor(android.database.Cursor);
+  }
+
+  public class DetailsOverviewLogoPresenter extends android.support.v17.leanback.widget.Presenter {
+    ctor public DetailsOverviewLogoPresenter();
+    method public boolean isBoundToImage(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.DetailsOverviewRow);
+    method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+    method public android.view.View onCreateView(android.view.ViewGroup);
+    method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public void setContext(android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter);
+  }
+
+  public static class DetailsOverviewLogoPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+    ctor public DetailsOverviewLogoPresenter.ViewHolder(android.view.View);
+    method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter getParentPresenter();
+    method public android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder();
+    method public boolean isSizeFromDrawableIntrinsic();
+    method public void setSizeFromDrawableIntrinsic(boolean);
+    field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter mParentPresenter;
+    field protected android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder;
+  }
+
+  public class DetailsOverviewRow extends android.support.v17.leanback.widget.Row {
+    ctor public DetailsOverviewRow(java.lang.Object);
+    method public final deprecated void addAction(android.support.v17.leanback.widget.Action);
+    method public final deprecated void addAction(int, android.support.v17.leanback.widget.Action);
+    method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+    method public final deprecated java.util.List<android.support.v17.leanback.widget.Action> getActions();
+    method public final android.support.v17.leanback.widget.ObjectAdapter getActionsAdapter();
+    method public final android.graphics.drawable.Drawable getImageDrawable();
+    method public final java.lang.Object getItem();
+    method public boolean isImageScaleUpAllowed();
+    method public final deprecated boolean removeAction(android.support.v17.leanback.widget.Action);
+    method public final void setActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+    method public final void setImageDrawable(android.graphics.drawable.Drawable);
+    method public void setImageScaleUpAllowed(boolean);
+    method public final void setItem(java.lang.Object);
+  }
+
+  public static class DetailsOverviewRow.Listener {
+    ctor public DetailsOverviewRow.Listener();
+    method public void onActionsAdapterChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+    method public void onImageDrawableChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+    method public void onItemChanged(android.support.v17.leanback.widget.DetailsOverviewRow);
+  }
+
+  public deprecated class DetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+    ctor public DetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+    method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method public int getBackgroundColor();
+    method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+    method public boolean isStyleLarge();
+    method public final boolean isUsingDefaultSelectEffect();
+    method public void setBackgroundColor(int);
+    method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+    method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+    method public final void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+    method public void setStyleLarge(boolean);
+  }
+
+  public final class DetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+    ctor public DetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter);
+    field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDetailsDescriptionViewHolder;
+  }
+
+  public class DetailsParallax extends android.support.v17.leanback.widget.RecyclerViewParallax {
+    ctor public DetailsParallax();
+    method public android.support.v17.leanback.widget.Parallax.IntProperty getOverviewRowBottom();
+    method public android.support.v17.leanback.widget.Parallax.IntProperty getOverviewRowTop();
+  }
+
+  public abstract class DiffCallback<Value> {
+    ctor public DiffCallback();
+    method public abstract boolean areContentsTheSame(Value, Value);
+    method public abstract boolean areItemsTheSame(Value, Value);
+    method public java.lang.Object getChangePayload(Value, Value);
+  }
+
+  public class DividerPresenter extends android.support.v17.leanback.widget.Presenter {
+    ctor public DividerPresenter();
+    method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+    method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+  }
+
+  public class DividerRow extends android.support.v17.leanback.widget.Row {
+    ctor public DividerRow();
+    method public final boolean isRenderedAsRowView();
+  }
+
+  public abstract interface FacetProvider {
+    method public abstract java.lang.Object getFacet(java.lang.Class<?>);
+  }
+
+  public abstract interface FacetProviderAdapter {
+    method public abstract android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+  }
+
+  public abstract interface FocusHighlight {
+    field public static final int ZOOM_FACTOR_LARGE = 3; // 0x3
+    field public static final int ZOOM_FACTOR_MEDIUM = 2; // 0x2
+    field public static final int ZOOM_FACTOR_NONE = 0; // 0x0
+    field public static final int ZOOM_FACTOR_SMALL = 1; // 0x1
+    field public static final int ZOOM_FACTOR_XSMALL = 4; // 0x4
+  }
+
+  public class FocusHighlightHelper {
+    ctor public FocusHighlightHelper();
+    method public static void setupBrowseItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter, int, boolean);
+    method public static deprecated void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView);
+    method public static deprecated void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.VerticalGridView, boolean);
+    method public static void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter);
+    method public static void setupHeaderItemFocusHighlight(android.support.v17.leanback.widget.ItemBridgeAdapter, boolean);
+  }
+
+  public abstract interface FragmentAnimationProvider {
+    method public abstract void onImeAppearing(java.util.List<android.animation.Animator>);
+    method public abstract void onImeDisappearing(java.util.List<android.animation.Animator>);
+  }
+
+  public class FullWidthDetailsOverviewRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+    ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter);
+    ctor public FullWidthDetailsOverviewRowPresenter(android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+    method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method public final int getActionsBackgroundColor();
+    method public final int getAlignmentMode();
+    method public final int getBackgroundColor();
+    method public final int getInitialState();
+    method protected int getLayoutResourceId();
+    method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+    method public final boolean isParticipatingEntranceTransition();
+    method public final boolean isUsingDefaultSelectEffect();
+    method public final void notifyOnBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+    method protected void onLayoutLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+    method protected void onLayoutOverviewFrame(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int, boolean);
+    method protected void onStateChanged(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+    method public final void setActionsBackgroundColor(int);
+    method public final void setAlignmentMode(int);
+    method public final void setBackgroundColor(int);
+    method public final void setInitialState(int);
+    method public final void setListener(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener);
+    method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+    method public final void setParticipatingEntranceTransition(boolean);
+    method public final void setState(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder, int);
+    field public static final int ALIGN_MODE_MIDDLE = 1; // 0x1
+    field public static final int ALIGN_MODE_START = 0; // 0x0
+    field public static final int STATE_FULL = 1; // 0x1
+    field public static final int STATE_HALF = 0; // 0x0
+    field public static final int STATE_SMALL = 2; // 0x2
+    field protected int mInitialState;
+  }
+
+  public static abstract class FullWidthDetailsOverviewRowPresenter.Listener {
+    ctor public FullWidthDetailsOverviewRowPresenter.Listener();
+    method public void onBindLogo(android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.ViewHolder);
+  }
+
+  public class FullWidthDetailsOverviewRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+    ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter, android.support.v17.leanback.widget.DetailsOverviewLogoPresenter);
+    method protected android.support.v17.leanback.widget.DetailsOverviewRow.Listener createRowListener();
+    method public final android.view.ViewGroup getActionsRow();
+    method public final android.view.ViewGroup getDetailsDescriptionFrame();
+    method public final android.support.v17.leanback.widget.Presenter.ViewHolder getDetailsDescriptionViewHolder();
+    method public final android.support.v17.leanback.widget.DetailsOverviewLogoPresenter.ViewHolder getLogoViewHolder();
+    method public final android.view.ViewGroup getOverviewView();
+    method public final int getState();
+    field protected final android.support.v17.leanback.widget.DetailsOverviewRow.Listener mRowListener;
+  }
+
+  public class FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener extends android.support.v17.leanback.widget.DetailsOverviewRow.Listener {
+    ctor public FullWidthDetailsOverviewRowPresenter.ViewHolder.DetailsOverviewRowListener();
+  }
+
+  public class FullWidthDetailsOverviewSharedElementHelper extends android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter.Listener {
+    ctor public FullWidthDetailsOverviewSharedElementHelper();
+    method public boolean getAutoStartSharedElementTransition();
+    method public void setAutoStartSharedElementTransition(boolean);
+    method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String);
+    method public void setSharedElementEnterTransition(android.app.Activity, java.lang.String, long);
+    method public void startPostponedEnterTransition();
+  }
+
+  public class GuidanceStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+    ctor public GuidanceStylist();
+    method public android.widget.TextView getBreadcrumbView();
+    method public android.widget.TextView getDescriptionView();
+    method public android.widget.ImageView getIconView();
+    method public android.widget.TextView getTitleView();
+    method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.support.v17.leanback.widget.GuidanceStylist.Guidance);
+    method public void onDestroyView();
+    method public void onImeAppearing(java.util.List<android.animation.Animator>);
+    method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+    method public int onProvideLayoutId();
+  }
+
+  public static class GuidanceStylist.Guidance {
+    ctor public GuidanceStylist.Guidance(java.lang.String, java.lang.String, java.lang.String, android.graphics.drawable.Drawable);
+    method public java.lang.String getBreadcrumb();
+    method public java.lang.String getDescription();
+    method public android.graphics.drawable.Drawable getIconDrawable();
+    method public java.lang.String getTitle();
+  }
+
+  public class GuidedAction extends android.support.v17.leanback.widget.Action {
+    ctor protected GuidedAction();
+    method public int getCheckSetId();
+    method public java.lang.CharSequence getDescription();
+    method public int getDescriptionEditInputType();
+    method public int getDescriptionInputType();
+    method public java.lang.CharSequence getEditDescription();
+    method public int getEditInputType();
+    method public java.lang.CharSequence getEditTitle();
+    method public int getInputType();
+    method public android.content.Intent getIntent();
+    method public java.util.List<android.support.v17.leanback.widget.GuidedAction> getSubActions();
+    method public java.lang.CharSequence getTitle();
+    method public boolean hasEditableActivatorView();
+    method public boolean hasMultilineDescription();
+    method public boolean hasNext();
+    method public boolean hasSubActions();
+    method public boolean hasTextEditable();
+    method public boolean infoOnly();
+    method public final boolean isAutoSaveRestoreEnabled();
+    method public boolean isChecked();
+    method public boolean isDescriptionEditable();
+    method public boolean isEditTitleUsed();
+    method public boolean isEditable();
+    method public boolean isEnabled();
+    method public boolean isFocusable();
+    method public void onRestoreInstanceState(android.os.Bundle, java.lang.String);
+    method public void onSaveInstanceState(android.os.Bundle, java.lang.String);
+    method public void setChecked(boolean);
+    method public void setDescription(java.lang.CharSequence);
+    method public void setEditDescription(java.lang.CharSequence);
+    method public void setEditTitle(java.lang.CharSequence);
+    method public void setEnabled(boolean);
+    method public void setFocusable(boolean);
+    method public void setIntent(android.content.Intent);
+    method public void setSubActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+    method public void setTitle(java.lang.CharSequence);
+    field public static final long ACTION_ID_CANCEL = -5L; // 0xfffffffffffffffbL
+    field public static final long ACTION_ID_CONTINUE = -7L; // 0xfffffffffffffff9L
+    field public static final long ACTION_ID_CURRENT = -3L; // 0xfffffffffffffffdL
+    field public static final long ACTION_ID_FINISH = -6L; // 0xfffffffffffffffaL
+    field public static final long ACTION_ID_NEXT = -2L; // 0xfffffffffffffffeL
+    field public static final long ACTION_ID_NO = -9L; // 0xfffffffffffffff7L
+    field public static final long ACTION_ID_OK = -4L; // 0xfffffffffffffffcL
+    field public static final long ACTION_ID_YES = -8L; // 0xfffffffffffffff8L
+    field public static final int CHECKBOX_CHECK_SET_ID = -1; // 0xffffffff
+    field public static final int DEFAULT_CHECK_SET_ID = 1; // 0x1
+    field public static final int NO_CHECK_SET = 0; // 0x0
+  }
+
+  public static class GuidedAction.Builder extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+    ctor public deprecated GuidedAction.Builder();
+    ctor public GuidedAction.Builder(android.content.Context);
+    method public android.support.v17.leanback.widget.GuidedAction build();
+  }
+
+  public static abstract class GuidedAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedAction.BuilderBase> {
+    ctor public GuidedAction.BuilderBase(android.content.Context);
+    method protected final void applyValues(android.support.v17.leanback.widget.GuidedAction);
+    method public B autoSaveRestoreEnabled(boolean);
+    method public B checkSetId(int);
+    method public B checked(boolean);
+    method public B clickAction(long);
+    method public B description(java.lang.CharSequence);
+    method public B description(int);
+    method public B descriptionEditInputType(int);
+    method public B descriptionEditable(boolean);
+    method public B descriptionInputType(int);
+    method public B editDescription(java.lang.CharSequence);
+    method public B editDescription(int);
+    method public B editInputType(int);
+    method public B editTitle(java.lang.CharSequence);
+    method public B editTitle(int);
+    method public B editable(boolean);
+    method public B enabled(boolean);
+    method public B focusable(boolean);
+    method public android.content.Context getContext();
+    method public B hasEditableActivatorView(boolean);
+    method public B hasNext(boolean);
+    method public B icon(android.graphics.drawable.Drawable);
+    method public B icon(int);
+    method public deprecated B iconResourceId(int, android.content.Context);
+    method public B id(long);
+    method public B infoOnly(boolean);
+    method public B inputType(int);
+    method public B intent(android.content.Intent);
+    method public B multilineDescription(boolean);
+    method public B subActions(java.util.List<android.support.v17.leanback.widget.GuidedAction>);
+    method public B title(java.lang.CharSequence);
+    method public B title(int);
+  }
+
+  public class GuidedActionDiffCallback extends android.support.v17.leanback.widget.DiffCallback {
+    ctor public GuidedActionDiffCallback();
+    method public boolean areContentsTheSame(android.support.v17.leanback.widget.GuidedAction, android.support.v17.leanback.widget.GuidedAction);
+    method public boolean areItemsTheSame(android.support.v17.leanback.widget.GuidedAction, android.support.v17.leanback.widget.GuidedAction);
+    method public static android.support.v17.leanback.widget.GuidedActionDiffCallback getInstance();
+  }
+
+  public class GuidedActionEditText extends android.widget.EditText implements android.support.v17.leanback.widget.ImeKeyMonitor {
+    ctor public GuidedActionEditText(android.content.Context);
+    ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet);
+    ctor public GuidedActionEditText(android.content.Context, android.util.AttributeSet, int);
+    method public void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+  }
+
+  public class GuidedActionsStylist implements android.support.v17.leanback.widget.FragmentAnimationProvider {
+    ctor public GuidedActionsStylist();
+    method public void collapseAction(boolean);
+    method public void expandAction(android.support.v17.leanback.widget.GuidedAction, boolean);
+    method public android.support.v17.leanback.widget.VerticalGridView getActionsGridView();
+    method public android.support.v17.leanback.widget.GuidedAction getExpandedAction();
+    method public int getItemViewType(android.support.v17.leanback.widget.GuidedAction);
+    method public android.support.v17.leanback.widget.VerticalGridView getSubActionsGridView();
+    method public final boolean isBackKeyToCollapseActivatorView();
+    method public final boolean isBackKeyToCollapseSubActions();
+    method public boolean isButtonActions();
+    method public boolean isExpandTransitionSupported();
+    method public boolean isExpanded();
+    method public boolean isInExpandTransition();
+    method public boolean isSubActionsExpanded();
+    method public void onAnimateItemChecked(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+    method public void onAnimateItemFocused(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+    method public void onAnimateItemPressed(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean);
+    method public void onAnimateItemPressedCancelled(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+    method public void onBindActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+    method public void onBindCheckMarkView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+    method public void onBindChevronView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+    method public void onBindViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+    method public android.view.View onCreateView(android.view.LayoutInflater, android.view.ViewGroup);
+    method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method public android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+    method public void onDestroyView();
+    method protected deprecated void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+    method protected void onEditingModeChange(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, boolean, boolean);
+    method public void onImeAppearing(java.util.List<android.animation.Animator>);
+    method public void onImeDisappearing(java.util.List<android.animation.Animator>);
+    method public int onProvideItemLayoutId();
+    method public int onProvideItemLayoutId(int);
+    method public int onProvideLayoutId();
+    method public boolean onUpdateActivatorView(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+    method public void onUpdateExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+    method public void openInEditMode(android.support.v17.leanback.widget.GuidedAction);
+    method public void setAsButtonActions();
+    method public final void setBackKeyToCollapseActivatorView(boolean);
+    method public final void setBackKeyToCollapseSubActions(boolean);
+    method public deprecated void setEditingMode(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction, boolean);
+    method public deprecated void setExpandedViewHolder(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+    method protected void setupImeOptions(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder, android.support.v17.leanback.widget.GuidedAction);
+    method public deprecated void startExpandedTransition(android.support.v17.leanback.widget.GuidedActionsStylist.ViewHolder);
+    field public static final int VIEW_TYPE_DATE_PICKER = 1; // 0x1
+    field public static final int VIEW_TYPE_DEFAULT = 0; // 0x0
+  }
+
+  public static class GuidedActionsStylist.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+    ctor public GuidedActionsStylist.ViewHolder(android.view.View);
+    ctor public GuidedActionsStylist.ViewHolder(android.view.View, boolean);
+    method public android.support.v17.leanback.widget.GuidedAction getAction();
+    method public android.widget.ImageView getCheckmarkView();
+    method public android.widget.ImageView getChevronView();
+    method public android.view.View getContentView();
+    method public android.widget.TextView getDescriptionView();
+    method public android.widget.EditText getEditableDescriptionView();
+    method public android.widget.EditText getEditableTitleView();
+    method public android.view.View getEditingView();
+    method public java.lang.Object getFacet(java.lang.Class<?>);
+    method public android.widget.ImageView getIconView();
+    method public android.widget.TextView getTitleView();
+    method public boolean isInEditing();
+    method public boolean isInEditingActivatorView();
+    method public boolean isInEditingDescription();
+    method public boolean isInEditingText();
+    method public boolean isInEditingTitle();
+    method public boolean isSubAction();
+  }
+
+  public class GuidedDatePickerAction extends android.support.v17.leanback.widget.GuidedAction {
+    ctor public GuidedDatePickerAction();
+    method public long getDate();
+    method public java.lang.String getDatePickerFormat();
+    method public long getMaxDate();
+    method public long getMinDate();
+    method public void setDate(long);
+  }
+
+  public static final class GuidedDatePickerAction.Builder extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase {
+    ctor public GuidedDatePickerAction.Builder(android.content.Context);
+    method public android.support.v17.leanback.widget.GuidedDatePickerAction build();
+  }
+
+  public static abstract class GuidedDatePickerAction.BuilderBase<B extends android.support.v17.leanback.widget.GuidedDatePickerAction.BuilderBase> extends android.support.v17.leanback.widget.GuidedAction.BuilderBase {
+    ctor public GuidedDatePickerAction.BuilderBase(android.content.Context);
+    method protected final void applyDatePickerValues(android.support.v17.leanback.widget.GuidedDatePickerAction);
+    method public B date(long);
+    method public B datePickerFormat(java.lang.String);
+    method public B maxDate(long);
+    method public B minDate(long);
+  }
+
+  public class HeaderItem {
+    ctor public HeaderItem(long, java.lang.String);
+    ctor public HeaderItem(java.lang.String);
+    method public java.lang.CharSequence getContentDescription();
+    method public java.lang.CharSequence getDescription();
+    method public final long getId();
+    method public final java.lang.String getName();
+    method public void setContentDescription(java.lang.CharSequence);
+    method public void setDescription(java.lang.CharSequence);
+  }
+
+  public class HorizontalGridView extends android.support.v17.leanback.widget.BaseGridView {
+    ctor public HorizontalGridView(android.content.Context);
+    ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet);
+    ctor public HorizontalGridView(android.content.Context, android.util.AttributeSet, int);
+    method public final boolean getFadingLeftEdge();
+    method public final int getFadingLeftEdgeLength();
+    method public final int getFadingLeftEdgeOffset();
+    method public final boolean getFadingRightEdge();
+    method public final int getFadingRightEdgeLength();
+    method public final int getFadingRightEdgeOffset();
+    method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+    method public final void setFadingLeftEdge(boolean);
+    method public final void setFadingLeftEdgeLength(int);
+    method public final void setFadingLeftEdgeOffset(int);
+    method public final void setFadingRightEdge(boolean);
+    method public final void setFadingRightEdgeLength(int);
+    method public final void setFadingRightEdgeOffset(int);
+    method public void setNumRows(int);
+    method public void setRowHeight(int);
+  }
+
+  public final class HorizontalHoverCardSwitcher extends android.support.v17.leanback.widget.PresenterSwitcher {
+    ctor public HorizontalHoverCardSwitcher();
+    method protected void insertView(android.view.View);
+    method public void select(android.support.v17.leanback.widget.HorizontalGridView, android.view.View, java.lang.Object);
+  }
+
+  public class ImageCardView extends android.support.v17.leanback.widget.BaseCardView {
+    ctor public deprecated ImageCardView(android.content.Context, int);
+    ctor public ImageCardView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ImageCardView(android.content.Context);
+    ctor public ImageCardView(android.content.Context, android.util.AttributeSet);
+    method public android.graphics.drawable.Drawable getBadgeImage();
+    method public java.lang.CharSequence getContentText();
+    method public android.graphics.drawable.Drawable getInfoAreaBackground();
+    method public android.graphics.drawable.Drawable getMainImage();
+    method public final android.widget.ImageView getMainImageView();
+    method public java.lang.CharSequence getTitleText();
+    method public void setBadgeImage(android.graphics.drawable.Drawable);
+    method public void setContentText(java.lang.CharSequence);
+    method public void setInfoAreaBackground(android.graphics.drawable.Drawable);
+    method public void setInfoAreaBackgroundColor(int);
+    method public void setMainImage(android.graphics.drawable.Drawable);
+    method public void setMainImage(android.graphics.drawable.Drawable, boolean);
+    method public void setMainImageAdjustViewBounds(boolean);
+    method public void setMainImageDimensions(int, int);
+    method public void setMainImageScaleType(android.widget.ImageView.ScaleType);
+    method public void setTitleText(java.lang.CharSequence);
+    field public static final int CARD_TYPE_FLAG_CONTENT = 2; // 0x2
+    field public static final int CARD_TYPE_FLAG_ICON_LEFT = 8; // 0x8
+    field public static final int CARD_TYPE_FLAG_ICON_RIGHT = 4; // 0x4
+    field public static final int CARD_TYPE_FLAG_IMAGE_ONLY = 0; // 0x0
+    field public static final int CARD_TYPE_FLAG_TITLE = 1; // 0x1
+  }
+
+  public abstract interface ImeKeyMonitor {
+    method public abstract void setImeKeyListener(android.support.v17.leanback.widget.ImeKeyMonitor.ImeKeyListener);
+  }
+
+  public static abstract interface ImeKeyMonitor.ImeKeyListener {
+    method public abstract boolean onKeyPreIme(android.widget.EditText, int, android.view.KeyEvent);
+  }
+
+  public final class ItemAlignmentFacet {
+    ctor public ItemAlignmentFacet();
+    method public android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[] getAlignmentDefs();
+    method public boolean isMultiAlignment();
+    method public void setAlignmentDefs(android.support.v17.leanback.widget.ItemAlignmentFacet.ItemAlignmentDef[]);
+    field public static final float ITEM_ALIGN_OFFSET_PERCENT_DISABLED = -1.0f;
+  }
+
+  public static class ItemAlignmentFacet.ItemAlignmentDef {
+    ctor public ItemAlignmentFacet.ItemAlignmentDef();
+    method public final int getItemAlignmentFocusViewId();
+    method public final int getItemAlignmentOffset();
+    method public final float getItemAlignmentOffsetPercent();
+    method public final int getItemAlignmentViewId();
+    method public boolean isAlignedToTextViewBaseLine();
+    method public final boolean isItemAlignmentOffsetWithPadding();
+    method public final void setAlignedToTextViewBaseline(boolean);
+    method public final void setItemAlignmentFocusViewId(int);
+    method public final void setItemAlignmentOffset(int);
+    method public final void setItemAlignmentOffsetPercent(float);
+    method public final void setItemAlignmentOffsetWithPadding(boolean);
+    method public final void setItemAlignmentViewId(int);
+  }
+
+  public class ItemBridgeAdapter extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.leanback.widget.FacetProviderAdapter {
+    ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter, android.support.v17.leanback.widget.PresenterSelector);
+    ctor public ItemBridgeAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    ctor public ItemBridgeAdapter();
+    method public void clear();
+    method public android.support.v17.leanback.widget.FacetProvider getFacetProvider(int);
+    method public int getItemCount();
+    method public java.util.ArrayList<android.support.v17.leanback.widget.Presenter> getPresenterMapper();
+    method public android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper getWrapper();
+    method protected void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+    method protected void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method protected void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method public final void onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, int);
+    method public final void onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, int, java.util.List);
+    method protected void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method public final android.support.v7.widget.RecyclerView.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+    method protected void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method protected void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method public final void onViewAttachedToWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void onViewDetachedFromWindow(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void setAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public void setAdapterListener(android.support.v17.leanback.widget.ItemBridgeAdapter.AdapterListener);
+    method public void setPresenter(android.support.v17.leanback.widget.PresenterSelector);
+    method public void setPresenterMapper(java.util.ArrayList<android.support.v17.leanback.widget.Presenter>);
+    method public void setWrapper(android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper);
+  }
+
+  public static class ItemBridgeAdapter.AdapterListener {
+    ctor public ItemBridgeAdapter.AdapterListener();
+    method public void onAddPresenter(android.support.v17.leanback.widget.Presenter, int);
+    method public void onAttachedToWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method public void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method public void onBind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder, java.util.List);
+    method public void onCreate(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method public void onDetachedFromWindow(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+    method public void onUnbind(android.support.v17.leanback.widget.ItemBridgeAdapter.ViewHolder);
+  }
+
+  public class ItemBridgeAdapter.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+    method public final java.lang.Object getExtraObject();
+    method public java.lang.Object getFacet(java.lang.Class<?>);
+    method public final java.lang.Object getItem();
+    method public final android.support.v17.leanback.widget.Presenter getPresenter();
+    method public final android.support.v17.leanback.widget.Presenter.ViewHolder getViewHolder();
+    method public void setExtraObject(java.lang.Object);
+  }
+
+  public static abstract class ItemBridgeAdapter.Wrapper {
+    ctor public ItemBridgeAdapter.Wrapper();
+    method public abstract android.view.View createWrapper(android.view.View);
+    method public abstract void wrap(android.view.View, android.view.View);
+  }
+
+  public class ItemBridgeAdapterShadowOverlayWrapper extends android.support.v17.leanback.widget.ItemBridgeAdapter.Wrapper {
+    ctor public ItemBridgeAdapterShadowOverlayWrapper(android.support.v17.leanback.widget.ShadowOverlayHelper);
+    method public android.view.View createWrapper(android.view.View);
+    method public void wrap(android.view.View, android.view.View);
+  }
+
+  public class ListRow extends android.support.v17.leanback.widget.Row {
+    ctor public ListRow(android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+    ctor public ListRow(long, android.support.v17.leanback.widget.HeaderItem, android.support.v17.leanback.widget.ObjectAdapter);
+    ctor public ListRow(android.support.v17.leanback.widget.ObjectAdapter);
+    method public final android.support.v17.leanback.widget.ObjectAdapter getAdapter();
+    method public java.lang.CharSequence getContentDescription();
+    method public void setContentDescription(java.lang.CharSequence);
+  }
+
+  public final class ListRowHoverCardView extends android.widget.LinearLayout {
+    ctor public ListRowHoverCardView(android.content.Context);
+    ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet);
+    ctor public ListRowHoverCardView(android.content.Context, android.util.AttributeSet, int);
+    method public java.lang.CharSequence getDescription();
+    method public java.lang.CharSequence getTitle();
+    method public void setDescription(java.lang.CharSequence);
+    method public void setTitle(java.lang.CharSequence);
+  }
+
+  public class ListRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+    ctor public ListRowPresenter();
+    ctor public ListRowPresenter(int);
+    ctor public ListRowPresenter(int, boolean);
+    method protected void applySelectLevelToChild(android.support.v17.leanback.widget.ListRowPresenter.ViewHolder, android.view.View);
+    method public final boolean areChildRoundedCornersEnabled();
+    method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+    method public final void enableChildRoundedCorners(boolean);
+    method public int getExpandedRowHeight();
+    method public final int getFocusZoomFactor();
+    method public final android.support.v17.leanback.widget.PresenterSelector getHoverCardPresenterSelector();
+    method public int getRecycledPoolSize(android.support.v17.leanback.widget.Presenter);
+    method public int getRowHeight();
+    method public final boolean getShadowEnabled();
+    method public final deprecated int getZoomFactor();
+    method public final boolean isFocusDimmerUsed();
+    method public final boolean isKeepChildForeground();
+    method public boolean isUsingDefaultListSelectEffect();
+    method public final boolean isUsingDefaultSelectEffect();
+    method public boolean isUsingDefaultShadow();
+    method public boolean isUsingOutlineClipping(android.content.Context);
+    method public boolean isUsingZOrder(android.content.Context);
+    method public void setExpandedRowHeight(int);
+    method public final void setHoverCardPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+    method public final void setKeepChildForeground(boolean);
+    method public void setNumRows(int);
+    method public void setRecycledPoolSize(android.support.v17.leanback.widget.Presenter, int);
+    method public void setRowHeight(int);
+    method public final void setShadowEnabled(boolean);
+  }
+
+  public static class ListRowPresenter.SelectItemViewHolderTask extends android.support.v17.leanback.widget.Presenter.ViewHolderTask {
+    ctor public ListRowPresenter.SelectItemViewHolderTask(int);
+    method public int getItemPosition();
+    method public android.support.v17.leanback.widget.Presenter.ViewHolderTask getItemTask();
+    method public boolean isSmoothScroll();
+    method public void setItemPosition(int);
+    method public void setItemTask(android.support.v17.leanback.widget.Presenter.ViewHolderTask);
+    method public void setSmoothScroll(boolean);
+  }
+
+  public static class ListRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+    ctor public ListRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.HorizontalGridView, android.support.v17.leanback.widget.ListRowPresenter);
+    method public final android.support.v17.leanback.widget.ItemBridgeAdapter getBridgeAdapter();
+    method public final android.support.v17.leanback.widget.HorizontalGridView getGridView();
+    method public android.support.v17.leanback.widget.Presenter.ViewHolder getItemViewHolder(int);
+    method public final android.support.v17.leanback.widget.ListRowPresenter getListRowPresenter();
+    method public int getSelectedPosition();
+  }
+
+  public final class ListRowView extends android.widget.LinearLayout {
+    ctor public ListRowView(android.content.Context);
+    ctor public ListRowView(android.content.Context, android.util.AttributeSet);
+    ctor public ListRowView(android.content.Context, android.util.AttributeSet, int);
+    method public android.support.v17.leanback.widget.HorizontalGridView getGridView();
+  }
+
+  public abstract interface MultiActionsProvider {
+    method public abstract android.support.v17.leanback.widget.MultiActionsProvider.MultiAction[] getActions();
+  }
+
+  public static class MultiActionsProvider.MultiAction {
+    ctor public MultiActionsProvider.MultiAction(long);
+    method public android.graphics.drawable.Drawable getCurrentDrawable();
+    method public android.graphics.drawable.Drawable[] getDrawables();
+    method public long getId();
+    method public int getIndex();
+    method public void incrementIndex();
+    method public void setDrawables(android.graphics.drawable.Drawable[]);
+    method public void setIndex(int);
+  }
+
+  public abstract class ObjectAdapter {
+    ctor public ObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+    ctor public ObjectAdapter(android.support.v17.leanback.widget.Presenter);
+    ctor public ObjectAdapter();
+    method public abstract java.lang.Object get(int);
+    method public long getId(int);
+    method public final android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+    method public final android.support.v17.leanback.widget.PresenterSelector getPresenterSelector();
+    method public final boolean hasStableIds();
+    method public boolean isImmediateNotifySupported();
+    method protected final void notifyChanged();
+    method protected final void notifyItemMoved(int, int);
+    method public final void notifyItemRangeChanged(int, int);
+    method public final void notifyItemRangeChanged(int, int, java.lang.Object);
+    method protected final void notifyItemRangeInserted(int, int);
+    method protected final void notifyItemRangeRemoved(int, int);
+    method protected void onHasStableIdsChanged();
+    method protected void onPresenterSelectorChanged();
+    method public final void registerObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+    method public final void setHasStableIds(boolean);
+    method public final void setPresenterSelector(android.support.v17.leanback.widget.PresenterSelector);
+    method public abstract int size();
+    method public final void unregisterAllObservers();
+    method public final void unregisterObserver(android.support.v17.leanback.widget.ObjectAdapter.DataObserver);
+    field public static final int NO_ID = -1; // 0xffffffff
+  }
+
+  public static abstract class ObjectAdapter.DataObserver {
+    ctor public ObjectAdapter.DataObserver();
+    method public void onChanged();
+    method public void onItemMoved(int, int);
+    method public void onItemRangeChanged(int, int);
+    method public void onItemRangeChanged(int, int, java.lang.Object);
+    method public void onItemRangeInserted(int, int);
+    method public void onItemRangeRemoved(int, int);
+  }
+
+  public abstract interface OnActionClickedListener {
+    method public abstract void onActionClicked(android.support.v17.leanback.widget.Action);
+  }
+
+  public abstract interface OnChildLaidOutListener {
+    method public abstract void onChildLaidOut(android.view.ViewGroup, android.view.View, int, long);
+  }
+
+  public abstract deprecated interface OnChildSelectedListener {
+    method public abstract void onChildSelected(android.view.ViewGroup, android.view.View, int, long);
+  }
+
+  public abstract class OnChildViewHolderSelectedListener {
+    ctor public OnChildViewHolderSelectedListener();
+    method public void onChildViewHolderSelected(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+    method public void onChildViewHolderSelectedAndPositioned(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, int);
+  }
+
+  public abstract interface OnItemViewClickedListener implements android.support.v17.leanback.widget.BaseOnItemViewClickedListener {
+  }
+
+  public abstract interface OnItemViewSelectedListener implements android.support.v17.leanback.widget.BaseOnItemViewSelectedListener {
+  }
+
+  public class PageRow extends android.support.v17.leanback.widget.Row {
+    ctor public PageRow(android.support.v17.leanback.widget.HeaderItem);
+    method public final boolean isRenderedAsRowView();
+  }
+
+  public abstract class Parallax<PropertyT extends android.util.Property> {
+    ctor public Parallax();
+    method public android.support.v17.leanback.widget.ParallaxEffect addEffect(android.support.v17.leanback.widget.Parallax.PropertyMarkerValue...);
+    method public final PropertyT addProperty(java.lang.String);
+    method public abstract PropertyT createProperty(java.lang.String, int);
+    method public java.util.List<android.support.v17.leanback.widget.ParallaxEffect> getEffects();
+    method public abstract float getMaxValue();
+    method public final java.util.List<PropertyT> getProperties();
+    method public void removeAllEffects();
+    method public void removeEffect(android.support.v17.leanback.widget.ParallaxEffect);
+    method public void updateValues();
+  }
+
+  public static class Parallax.FloatProperty extends android.util.Property {
+    ctor public Parallax.FloatProperty(java.lang.String, int);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue at(float, float);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atAbsolute(float);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atFraction(float);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMax();
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMin();
+    method public final java.lang.Float get(android.support.v17.leanback.widget.Parallax);
+    method public final int getIndex();
+    method public final float getValue(android.support.v17.leanback.widget.Parallax);
+    method public final void set(android.support.v17.leanback.widget.Parallax, java.lang.Float);
+    method public final void setValue(android.support.v17.leanback.widget.Parallax, float);
+    field public static final float UNKNOWN_AFTER = 3.4028235E38f;
+    field public static final float UNKNOWN_BEFORE = -3.4028235E38f;
+  }
+
+  public static class Parallax.IntProperty extends android.util.Property {
+    ctor public Parallax.IntProperty(java.lang.String, int);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue at(int, float);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atAbsolute(int);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atFraction(float);
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMax();
+    method public final android.support.v17.leanback.widget.Parallax.PropertyMarkerValue atMin();
+    method public final java.lang.Integer get(android.support.v17.leanback.widget.Parallax);
+    method public final int getIndex();
+    method public final int getValue(android.support.v17.leanback.widget.Parallax);
+    method public final void set(android.support.v17.leanback.widget.Parallax, java.lang.Integer);
+    method public final void setValue(android.support.v17.leanback.widget.Parallax, int);
+    field public static final int UNKNOWN_AFTER = 2147483647; // 0x7fffffff
+    field public static final int UNKNOWN_BEFORE = -2147483648; // 0x80000000
+  }
+
+  public static class Parallax.PropertyMarkerValue<PropertyT> {
+    ctor public Parallax.PropertyMarkerValue(PropertyT);
+    method public PropertyT getProperty();
+  }
+
+  public abstract class ParallaxEffect {
+    method public final void addTarget(android.support.v17.leanback.widget.ParallaxTarget);
+    method public final java.util.List<android.support.v17.leanback.widget.Parallax.PropertyMarkerValue> getPropertyRanges();
+    method public final java.util.List<android.support.v17.leanback.widget.ParallaxTarget> getTargets();
+    method public final void performMapping(android.support.v17.leanback.widget.Parallax);
+    method public final void removeTarget(android.support.v17.leanback.widget.ParallaxTarget);
+    method public final void setPropertyRanges(android.support.v17.leanback.widget.Parallax.PropertyMarkerValue...);
+    method public final android.support.v17.leanback.widget.ParallaxEffect target(android.support.v17.leanback.widget.ParallaxTarget);
+    method public final android.support.v17.leanback.widget.ParallaxEffect target(java.lang.Object, android.animation.PropertyValuesHolder);
+    method public final <T, V extends java.lang.Number> android.support.v17.leanback.widget.ParallaxEffect target(T, android.util.Property<T, V>);
+  }
+
+  public abstract class ParallaxTarget {
+    ctor public ParallaxTarget();
+    method public void directUpdate(java.lang.Number);
+    method public boolean isDirectMapping();
+    method public void update(float);
+  }
+
+  public static final class ParallaxTarget.DirectPropertyTarget<T, V extends java.lang.Number> extends android.support.v17.leanback.widget.ParallaxTarget {
+    ctor public ParallaxTarget.DirectPropertyTarget(java.lang.Object, android.util.Property<T, V>);
+  }
+
+  public static final class ParallaxTarget.PropertyValuesHolderTarget extends android.support.v17.leanback.widget.ParallaxTarget {
+    ctor public ParallaxTarget.PropertyValuesHolderTarget(java.lang.Object, android.animation.PropertyValuesHolder);
+  }
+
+  public class PlaybackControlsRow extends android.support.v17.leanback.widget.Row {
+    ctor public PlaybackControlsRow(java.lang.Object);
+    ctor public PlaybackControlsRow();
+    method public android.support.v17.leanback.widget.Action getActionForKeyCode(int);
+    method public android.support.v17.leanback.widget.Action getActionForKeyCode(android.support.v17.leanback.widget.ObjectAdapter, int);
+    method public long getBufferedPosition();
+    method public deprecated int getBufferedProgress();
+    method public deprecated long getBufferedProgressLong();
+    method public long getCurrentPosition();
+    method public deprecated int getCurrentTime();
+    method public deprecated long getCurrentTimeLong();
+    method public long getDuration();
+    method public final android.graphics.drawable.Drawable getImageDrawable();
+    method public final java.lang.Object getItem();
+    method public final android.support.v17.leanback.widget.ObjectAdapter getPrimaryActionsAdapter();
+    method public final android.support.v17.leanback.widget.ObjectAdapter getSecondaryActionsAdapter();
+    method public deprecated int getTotalTime();
+    method public deprecated long getTotalTimeLong();
+    method public void setBufferedPosition(long);
+    method public deprecated void setBufferedProgress(int);
+    method public deprecated void setBufferedProgressLong(long);
+    method public void setCurrentPosition(long);
+    method public deprecated void setCurrentTime(int);
+    method public deprecated void setCurrentTimeLong(long);
+    method public void setDuration(long);
+    method public final void setImageBitmap(android.content.Context, android.graphics.Bitmap);
+    method public final void setImageDrawable(android.graphics.drawable.Drawable);
+    method public void setOnPlaybackProgressChangedListener(android.support.v17.leanback.widget.PlaybackControlsRow.OnPlaybackProgressCallback);
+    method public final void setPrimaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public final void setSecondaryActionsAdapter(android.support.v17.leanback.widget.ObjectAdapter);
+    method public deprecated void setTotalTime(int);
+    method public deprecated void setTotalTimeLong(long);
+  }
+
+  public static class PlaybackControlsRow.ClosedCaptioningAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context);
+    ctor public PlaybackControlsRow.ClosedCaptioningAction(android.content.Context, int);
+    field public static final int INDEX_OFF = 0; // 0x0
+    field public static final int INDEX_ON = 1; // 0x1
+    field public static deprecated int OFF;
+    field public static deprecated int ON;
+  }
+
+  public static class PlaybackControlsRow.FastForwardAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.FastForwardAction(android.content.Context);
+    ctor public PlaybackControlsRow.FastForwardAction(android.content.Context, int);
+  }
+
+  public static class PlaybackControlsRow.HighQualityAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.HighQualityAction(android.content.Context);
+    ctor public PlaybackControlsRow.HighQualityAction(android.content.Context, int);
+    field public static final int INDEX_OFF = 0; // 0x0
+    field public static final int INDEX_ON = 1; // 0x1
+    field public static deprecated int OFF;
+    field public static deprecated int ON;
+  }
+
+  public static class PlaybackControlsRow.MoreActions extends android.support.v17.leanback.widget.Action {
+    ctor public PlaybackControlsRow.MoreActions(android.content.Context);
+  }
+
+  public static abstract class PlaybackControlsRow.MultiAction extends android.support.v17.leanback.widget.Action {
+    ctor public PlaybackControlsRow.MultiAction(int);
+    method public int getActionCount();
+    method public android.graphics.drawable.Drawable getDrawable(int);
+    method public int getIndex();
+    method public java.lang.String getLabel(int);
+    method public java.lang.String getSecondaryLabel(int);
+    method public void nextIndex();
+    method public void setDrawables(android.graphics.drawable.Drawable[]);
+    method public void setIndex(int);
+    method public void setLabels(java.lang.String[]);
+    method public void setSecondaryLabels(java.lang.String[]);
+  }
+
+  public static class PlaybackControlsRow.OnPlaybackProgressCallback {
+    ctor public PlaybackControlsRow.OnPlaybackProgressCallback();
+    method public void onBufferedPositionChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+    method public void onCurrentPositionChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+    method public void onDurationChanged(android.support.v17.leanback.widget.PlaybackControlsRow, long);
+  }
+
+  public static class PlaybackControlsRow.PictureInPictureAction extends android.support.v17.leanback.widget.Action {
+    ctor public PlaybackControlsRow.PictureInPictureAction(android.content.Context);
+  }
+
+  public static class PlaybackControlsRow.PlayPauseAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.PlayPauseAction(android.content.Context);
+    field public static final int INDEX_PAUSE = 1; // 0x1
+    field public static final int INDEX_PLAY = 0; // 0x0
+    field public static deprecated int PAUSE;
+    field public static deprecated int PLAY;
+  }
+
+  public static class PlaybackControlsRow.RepeatAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.RepeatAction(android.content.Context);
+    ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int);
+    ctor public PlaybackControlsRow.RepeatAction(android.content.Context, int, int);
+    field public static deprecated int ALL;
+    field public static final int INDEX_ALL = 1; // 0x1
+    field public static final int INDEX_NONE = 0; // 0x0
+    field public static final int INDEX_ONE = 2; // 0x2
+    field public static deprecated int NONE;
+    field public static deprecated int ONE;
+  }
+
+  public static class PlaybackControlsRow.RewindAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.RewindAction(android.content.Context);
+    ctor public PlaybackControlsRow.RewindAction(android.content.Context, int);
+  }
+
+  public static class PlaybackControlsRow.ShuffleAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.ShuffleAction(android.content.Context);
+    ctor public PlaybackControlsRow.ShuffleAction(android.content.Context, int);
+    field public static final int INDEX_OFF = 0; // 0x0
+    field public static final int INDEX_ON = 1; // 0x1
+    field public static deprecated int OFF;
+    field public static deprecated int ON;
+  }
+
+  public static class PlaybackControlsRow.SkipNextAction extends android.support.v17.leanback.widget.Action {
+    ctor public PlaybackControlsRow.SkipNextAction(android.content.Context);
+  }
+
+  public static class PlaybackControlsRow.SkipPreviousAction extends android.support.v17.leanback.widget.Action {
+    ctor public PlaybackControlsRow.SkipPreviousAction(android.content.Context);
+  }
+
+  public static abstract class PlaybackControlsRow.ThumbsAction extends android.support.v17.leanback.widget.PlaybackControlsRow.MultiAction {
+    ctor public PlaybackControlsRow.ThumbsAction(int, android.content.Context, int, int);
+    field public static final int INDEX_OUTLINE = 1; // 0x1
+    field public static final int INDEX_SOLID = 0; // 0x0
+    field public static deprecated int OUTLINE;
+    field public static deprecated int SOLID;
+  }
+
+  public static class PlaybackControlsRow.ThumbsDownAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+    ctor public PlaybackControlsRow.ThumbsDownAction(android.content.Context);
+  }
+
+  public static class PlaybackControlsRow.ThumbsUpAction extends android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsAction {
+    ctor public PlaybackControlsRow.ThumbsUpAction(android.content.Context);
+  }
+
+  public class PlaybackControlsRowPresenter extends android.support.v17.leanback.widget.PlaybackRowPresenter {
+    ctor public PlaybackControlsRowPresenter(android.support.v17.leanback.widget.Presenter);
+    ctor public PlaybackControlsRowPresenter();
+    method public boolean areSecondaryActionsHidden();
+    method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method public int getBackgroundColor();
+    method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+    method public int getProgressColor();
+    method public void setBackgroundColor(int);
+    method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+    method public void setProgressColor(int);
+    method public void setSecondaryActionsHidden(boolean);
+    method public void showBottomSpace(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder, boolean);
+    method public void showPrimaryActions(android.support.v17.leanback.widget.PlaybackControlsRowPresenter.ViewHolder);
+  }
+
+  public class PlaybackControlsRowPresenter.ViewHolder extends android.support.v17.leanback.widget.PlaybackRowPresenter.ViewHolder {
+    field public final android.support.v17.leanback.widget.Presenter.ViewHolder mDescriptionViewHolder;
+  }
+
+  public abstract class PlaybackRowPresenter extends android.support.v17.leanback.widget.RowPresenter {
+    ctor public PlaybackRowPresenter();
+    method public void onReappear(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+  }
+
+  public static class PlaybackRowPresenter.ViewHolder extends android.support.v17.leanback.widget.RowPresenter.ViewHolder {
+    ctor public PlaybackRowPresenter.ViewHolder(android.view.View);
+  }
+
+  public class PlaybackSeekDataProvider {
+    ctor public PlaybackSeekDataProvider();
+    method public long[] getSeekPositions();
+    method public void getThumbnail(int, android.support.v17.leanback.widget.PlaybackSeekDataProvider.ResultCallback);
+    method public void reset();
+  }
+
+  public static class PlaybackSeekDataProvider.ResultCallback {
+    ctor public PlaybackSeekDataProvider.ResultCallback();
+    method public void onThumbnailLoaded(android.graphics.Bitmap, int);
+  }
+
+  public abstract interface PlaybackSeekUi {
+    method public abstract void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+  }
+
+  public static class PlaybackSeekUi.Client {
+    ctor public PlaybackSeekUi.Client();
+    method public android.support.v17.leanback.widget.PlaybackSeekDataProvider getPlaybackSeekDataProvider();
+    method public boolean isSeekEnabled();
+    method public void onSeekFinished(boolean);
+    method public void onSeekPositionChanged(long);
+    method public void onSeekStarted();
+  }
+
+  public class PlaybackTransportRowPresenter extends android.support.v17.leanback.widget.PlaybackRowPresenter {
+    ctor public PlaybackTransportRowPresenter();
+    method protected android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method public float getDefaultSeekIncrement();
+    method public android.support.v17.leanback.widget.OnActionClickedListener getOnActionClickedListener();
+    method public int getProgressColor();
+    method protected void onProgressBarClicked(android.support.v17.leanback.widget.PlaybackTransportRowPresenter.ViewHolder);
+    method public void setDefaultSeekIncrement(float);
+    method public void setDescriptionPresenter(android.support.v17.leanback.widget.Presenter);
+    method public void setOnActionClickedListener(android.support.v17.leanback.widget.OnActionClickedListener);
+    method public void setProgressColor(int);
+  }
+
+  public class PlaybackTransportRowPresenter.ViewHolder extends android.support.v17.leanback.widget.PlaybackRowPresenter.ViewHolder implements android.support.v17.leanback.widget.PlaybackSeekUi {
+    ctor public PlaybackTransportRowPresenter.ViewHolder(android.view.View, android.support.v17.leanback.widget.Presenter);
+    method public final android.widget.TextView getCurrentPositionView();
+    method public final android.support.v17.leanback.widget.Presenter.ViewHolder getDescriptionViewHolder();
+    method public final android.widget.TextView getDurationView();
+    method protected void onSetCurrentPositionLabel(long);
+    method protected void onSetDurationLabel(long);
+    method public void setPlaybackSeekUiClient(android.support.v17.leanback.widget.PlaybackSeekUi.Client);
+  }
+
+  public abstract class Presenter implements android.support.v17.leanback.widget.FacetProvider {
+    ctor public Presenter();
+    method protected static void cancelAnimationsRecursive(android.view.View);
+    method public final java.lang.Object getFacet(java.lang.Class<?>);
+    method public abstract void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+    method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object, java.util.List<java.lang.Object>);
+    method public abstract android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method public abstract void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+    method public void setOnClickListener(android.support.v17.leanback.widget.Presenter.ViewHolder, android.view.View.OnClickListener);
+  }
+
+  public static class Presenter.ViewHolder implements android.support.v17.leanback.widget.FacetProvider {
+    ctor public Presenter.ViewHolder(android.view.View);
+    method public final java.lang.Object getFacet(java.lang.Class<?>);
+    method public final void setFacet(java.lang.Class<?>, java.lang.Object);
+    field public final android.view.View view;
+  }
+
+  public static abstract class Presenter.ViewHolderTask {
+    ctor public Presenter.ViewHolderTask();
+    method public void run(android.support.v17.leanback.widget.Presenter.ViewHolder);
+  }
+
+  public abstract class PresenterSelector {
+    ctor public PresenterSelector();
+    method public abstract android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+    method public android.support.v17.leanback.widget.Presenter[] getPresenters();
+  }
+
+  public abstract class PresenterSwitcher {
+    ctor public PresenterSwitcher();
+    method public void clear();
+    method public final android.view.ViewGroup getParentViewGroup();
+    method public void init(android.view.ViewGroup, android.support.v17.leanback.widget.PresenterSelector);
+    method protected abstract void insertView(android.view.View);
+    method protected void onViewSelected(android.view.View);
+    method public void select(java.lang.Object);
+    method protected void showView(android.view.View, boolean);
+    method public void unselect();
+  }
+
+  public class RecyclerViewParallax extends android.support.v17.leanback.widget.Parallax {
+    ctor public RecyclerViewParallax();
+    method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty createProperty(java.lang.String, int);
+    method public float getMaxValue();
+    method public android.support.v7.widget.RecyclerView getRecyclerView();
+    method public void setRecyclerView(android.support.v7.widget.RecyclerView);
+  }
+
+  public static final class RecyclerViewParallax.ChildPositionProperty extends android.support.v17.leanback.widget.Parallax.IntProperty {
+    method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty adapterPosition(int);
+    method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty fraction(float);
+    method public int getAdapterPosition();
+    method public float getFraction();
+    method public int getOffset();
+    method public int getViewId();
+    method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty offset(int);
+    method public android.support.v17.leanback.widget.RecyclerViewParallax.ChildPositionProperty viewId(int);
+  }
+
+  public class Row {
+    ctor public Row(long, android.support.v17.leanback.widget.HeaderItem);
+    ctor public Row(android.support.v17.leanback.widget.HeaderItem);
+    ctor public Row();
+    method public final android.support.v17.leanback.widget.HeaderItem getHeaderItem();
+    method public final long getId();
+    method public boolean isRenderedAsRowView();
+    method public final void setHeaderItem(android.support.v17.leanback.widget.HeaderItem);
+    method public final void setId(long);
+  }
+
+  public class RowHeaderPresenter extends android.support.v17.leanback.widget.Presenter {
+    ctor public RowHeaderPresenter();
+    method protected static float getFontDescent(android.widget.TextView, android.graphics.Paint);
+    method public int getSpaceUnderBaseline(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+    method public boolean isNullItemVisibilityGone();
+    method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+    method public android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder);
+    method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public void setNullItemVisibilityGone(boolean);
+    method public final void setSelectLevel(android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder, float);
+  }
+
+  public static class RowHeaderPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+    ctor public RowHeaderPresenter.ViewHolder(android.view.View);
+    method public final float getSelectLevel();
+  }
+
+  public final class RowHeaderView extends android.widget.TextView {
+    ctor public RowHeaderView(android.content.Context);
+    ctor public RowHeaderView(android.content.Context, android.util.AttributeSet);
+    ctor public RowHeaderView(android.content.Context, android.util.AttributeSet, int);
+  }
+
+  public abstract class RowPresenter extends android.support.v17.leanback.widget.Presenter {
+    ctor public RowPresenter();
+    method protected abstract android.support.v17.leanback.widget.RowPresenter.ViewHolder createRowViewHolder(android.view.ViewGroup);
+    method protected void dispatchItemSelectedListener(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+    method public void freeze(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+    method public final android.support.v17.leanback.widget.RowHeaderPresenter getHeaderPresenter();
+    method public final android.support.v17.leanback.widget.RowPresenter.ViewHolder getRowViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public final boolean getSelectEffectEnabled();
+    method public final float getSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public final int getSyncActivatePolicy();
+    method protected void initializeRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+    method protected boolean isClippingChildren();
+    method public boolean isUsingDefaultSelectEffect();
+    method protected void onBindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder, java.lang.Object);
+    method public final void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+    method public final android.support.v17.leanback.widget.Presenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method protected void onRowViewAttachedToWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+    method protected void onRowViewDetachedFromWindow(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+    method protected void onRowViewExpanded(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+    method protected void onRowViewSelected(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+    method protected void onSelectLevelChanged(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+    method protected void onUnbindRowViewHolder(android.support.v17.leanback.widget.RowPresenter.ViewHolder);
+    method public final void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public final void onViewAttachedToWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public final void onViewDetachedFromWindow(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public void setEntranceTransitionState(android.support.v17.leanback.widget.RowPresenter.ViewHolder, boolean);
+    method public final void setHeaderPresenter(android.support.v17.leanback.widget.RowHeaderPresenter);
+    method public final void setRowViewExpanded(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+    method public final void setRowViewSelected(android.support.v17.leanback.widget.Presenter.ViewHolder, boolean);
+    method public final void setSelectEffectEnabled(boolean);
+    method public final void setSelectLevel(android.support.v17.leanback.widget.Presenter.ViewHolder, float);
+    method public final void setSyncActivatePolicy(int);
+    field public static final int SYNC_ACTIVATED_CUSTOM = 0; // 0x0
+    field public static final int SYNC_ACTIVATED_TO_EXPANDED = 1; // 0x1
+    field public static final int SYNC_ACTIVATED_TO_EXPANDED_AND_SELECTED = 3; // 0x3
+    field public static final int SYNC_ACTIVATED_TO_SELECTED = 2; // 0x2
+  }
+
+  public static class RowPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+    ctor public RowPresenter.ViewHolder(android.view.View);
+    method public final android.support.v17.leanback.widget.RowHeaderPresenter.ViewHolder getHeaderViewHolder();
+    method public final android.support.v17.leanback.widget.BaseOnItemViewClickedListener getOnItemViewClickedListener();
+    method public final android.support.v17.leanback.widget.BaseOnItemViewSelectedListener getOnItemViewSelectedListener();
+    method public android.view.View.OnKeyListener getOnKeyListener();
+    method public final android.support.v17.leanback.widget.Row getRow();
+    method public final java.lang.Object getRowObject();
+    method public final float getSelectLevel();
+    method public java.lang.Object getSelectedItem();
+    method public android.support.v17.leanback.widget.Presenter.ViewHolder getSelectedItemViewHolder();
+    method public final boolean isExpanded();
+    method public final boolean isSelected();
+    method public final void setActivated(boolean);
+    method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.BaseOnItemViewClickedListener);
+    method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.BaseOnItemViewSelectedListener);
+    method public void setOnKeyListener(android.view.View.OnKeyListener);
+    method public final void syncActivatedStatus(android.view.View);
+    field protected final android.support.v17.leanback.graphics.ColorOverlayDimmer mColorDimmer;
+  }
+
+  public class SearchBar extends android.widget.RelativeLayout {
+    ctor public SearchBar(android.content.Context);
+    ctor public SearchBar(android.content.Context, android.util.AttributeSet);
+    ctor public SearchBar(android.content.Context, android.util.AttributeSet, int);
+    method public void displayCompletions(java.util.List<java.lang.String>);
+    method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public android.graphics.drawable.Drawable getBadgeDrawable();
+    method public java.lang.CharSequence getHint();
+    method public java.lang.String getTitle();
+    method public boolean isRecognizing();
+    method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+    method public void setPermissionListener(android.support.v17.leanback.widget.SearchBar.SearchBarPermissionListener);
+    method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setSearchAffordanceColorsInListening(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setSearchBarListener(android.support.v17.leanback.widget.SearchBar.SearchBarListener);
+    method public void setSearchQuery(java.lang.String);
+    method public deprecated void setSpeechRecognitionCallback(android.support.v17.leanback.widget.SpeechRecognitionCallback);
+    method public void setSpeechRecognizer(android.speech.SpeechRecognizer);
+    method public void setTitle(java.lang.String);
+    method public void startRecognition();
+    method public void stopRecognition();
+  }
+
+  public static abstract interface SearchBar.SearchBarListener {
+    method public abstract void onKeyboardDismiss(java.lang.String);
+    method public abstract void onSearchQueryChange(java.lang.String);
+    method public abstract void onSearchQuerySubmit(java.lang.String);
+  }
+
+  public static abstract interface SearchBar.SearchBarPermissionListener {
+    method public abstract void requestAudioPermission();
+  }
+
+  public class SearchEditText extends android.widget.EditText {
+    ctor public SearchEditText(android.content.Context);
+    ctor public SearchEditText(android.content.Context, android.util.AttributeSet);
+    ctor public SearchEditText(android.content.Context, android.util.AttributeSet, int);
+    method public void setOnKeyboardDismissListener(android.support.v17.leanback.widget.SearchEditText.OnKeyboardDismissListener);
+  }
+
+  public static abstract interface SearchEditText.OnKeyboardDismissListener {
+    method public abstract void onKeyboardDismiss();
+  }
+
+  public class SearchOrbView extends android.widget.FrameLayout implements android.view.View.OnClickListener {
+    ctor public SearchOrbView(android.content.Context);
+    ctor public SearchOrbView(android.content.Context, android.util.AttributeSet);
+    ctor public SearchOrbView(android.content.Context, android.util.AttributeSet, int);
+    method public void enableOrbColorAnimation(boolean);
+    method public int getOrbColor();
+    method public android.support.v17.leanback.widget.SearchOrbView.Colors getOrbColors();
+    method public android.graphics.drawable.Drawable getOrbIcon();
+    method public void onClick(android.view.View);
+    method public void setOnOrbClickedListener(android.view.View.OnClickListener);
+    method public void setOrbColor(int);
+    method public deprecated void setOrbColor(int, int);
+    method public void setOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setOrbIcon(android.graphics.drawable.Drawable);
+  }
+
+  public static class SearchOrbView.Colors {
+    ctor public SearchOrbView.Colors(int);
+    ctor public SearchOrbView.Colors(int, int);
+    ctor public SearchOrbView.Colors(int, int, int);
+    method public static int getBrightColor(int);
+    field public int brightColor;
+    field public int color;
+    field public int iconColor;
+  }
+
+  public class SectionRow extends android.support.v17.leanback.widget.Row {
+    ctor public SectionRow(android.support.v17.leanback.widget.HeaderItem);
+    ctor public SectionRow(long, java.lang.String);
+    ctor public SectionRow(java.lang.String);
+    method public final boolean isRenderedAsRowView();
+  }
+
+  public class ShadowOverlayContainer extends android.widget.FrameLayout {
+    ctor public ShadowOverlayContainer(android.content.Context);
+    ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet);
+    ctor public ShadowOverlayContainer(android.content.Context, android.util.AttributeSet, int);
+    method public int getShadowType();
+    method public android.view.View getWrappedView();
+    method public deprecated void initialize(boolean, boolean);
+    method public deprecated void initialize(boolean, boolean, boolean);
+    method public static void prepareParentForShadow(android.view.ViewGroup);
+    method public void setOverlayColor(int);
+    method public void setShadowFocusLevel(float);
+    method public static boolean supportsDynamicShadow();
+    method public static boolean supportsShadow();
+    method public void useDynamicShadow();
+    method public void useDynamicShadow(float, float);
+    method public void useStaticShadow();
+    method public void wrap(android.view.View);
+    field public static final int SHADOW_DYNAMIC = 3; // 0x3
+    field public static final int SHADOW_NONE = 1; // 0x1
+    field public static final int SHADOW_STATIC = 2; // 0x2
+  }
+
+  public final class ShadowOverlayHelper {
+    method public android.support.v17.leanback.widget.ShadowOverlayContainer createShadowOverlayContainer(android.content.Context);
+    method public int getShadowType();
+    method public boolean needsOverlay();
+    method public boolean needsRoundedCorner();
+    method public boolean needsWrapper();
+    method public void onViewCreated(android.view.View);
+    method public void prepareParentForShadow(android.view.ViewGroup);
+    method public static void setNoneWrapperOverlayColor(android.view.View, int);
+    method public static void setNoneWrapperShadowFocusLevel(android.view.View, float);
+    method public void setOverlayColor(android.view.View, int);
+    method public void setShadowFocusLevel(android.view.View, float);
+    method public static boolean supportsDynamicShadow();
+    method public static boolean supportsForeground();
+    method public static boolean supportsRoundedCorner();
+    method public static boolean supportsShadow();
+    field public static final int SHADOW_DYNAMIC = 3; // 0x3
+    field public static final int SHADOW_NONE = 1; // 0x1
+    field public static final int SHADOW_STATIC = 2; // 0x2
+  }
+
+  public static final class ShadowOverlayHelper.Builder {
+    ctor public ShadowOverlayHelper.Builder();
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper build(android.content.Context);
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder keepForegroundDrawable(boolean);
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsOverlay(boolean);
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsRoundedCorner(boolean);
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder needsShadow(boolean);
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder options(android.support.v17.leanback.widget.ShadowOverlayHelper.Options);
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Builder preferZOrder(boolean);
+  }
+
+  public static final class ShadowOverlayHelper.Options {
+    ctor public ShadowOverlayHelper.Options();
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options dynamicShadowZ(float, float);
+    method public float getDynamicShadowFocusedZ();
+    method public float getDynamicShadowUnfocusedZ();
+    method public int getRoundedCornerRadius();
+    method public android.support.v17.leanback.widget.ShadowOverlayHelper.Options roundedCornerRadius(int);
+    field public static final android.support.v17.leanback.widget.ShadowOverlayHelper.Options DEFAULT;
+  }
+
+  public final class SinglePresenterSelector extends android.support.v17.leanback.widget.PresenterSelector {
+    ctor public SinglePresenterSelector(android.support.v17.leanback.widget.Presenter);
+    method public android.support.v17.leanback.widget.Presenter getPresenter(java.lang.Object);
+  }
+
+  public class SparseArrayObjectAdapter extends android.support.v17.leanback.widget.ObjectAdapter {
+    ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.PresenterSelector);
+    ctor public SparseArrayObjectAdapter(android.support.v17.leanback.widget.Presenter);
+    ctor public SparseArrayObjectAdapter();
+    method public void clear(int);
+    method public void clear();
+    method public java.lang.Object get(int);
+    method public int indexOf(java.lang.Object);
+    method public int indexOf(int);
+    method public java.lang.Object lookup(int);
+    method public void notifyArrayItemRangeChanged(int, int);
+    method public void set(int, java.lang.Object);
+    method public int size();
+  }
+
+  public class SpeechOrbView extends android.support.v17.leanback.widget.SearchOrbView {
+    ctor public SpeechOrbView(android.content.Context);
+    ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet);
+    ctor public SpeechOrbView(android.content.Context, android.util.AttributeSet, int);
+    method public void setListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setNotListeningOrbColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setSoundLevel(int);
+    method public void showListening();
+    method public void showNotListening();
+  }
+
+  public abstract deprecated interface SpeechRecognitionCallback {
+    method public abstract void recognizeSpeech();
+  }
+
+  public class TitleHelper {
+    ctor public TitleHelper(android.view.ViewGroup, android.view.View);
+    method public android.support.v17.leanback.widget.BrowseFrameLayout.OnFocusSearchListener getOnFocusSearchListener();
+    method public android.view.ViewGroup getSceneRoot();
+    method public android.view.View getTitleView();
+    method public void showTitle(boolean);
+  }
+
+  public class TitleView extends android.widget.FrameLayout implements android.support.v17.leanback.widget.TitleViewAdapter.Provider {
+    ctor public TitleView(android.content.Context);
+    ctor public TitleView(android.content.Context, android.util.AttributeSet);
+    ctor public TitleView(android.content.Context, android.util.AttributeSet, int);
+    method public void enableAnimation(boolean);
+    method public android.graphics.drawable.Drawable getBadgeDrawable();
+    method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+    method public android.view.View getSearchAffordanceView();
+    method public java.lang.CharSequence getTitle();
+    method public android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+    method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+    method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+    method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setTitle(java.lang.CharSequence);
+    method public void updateComponentsVisibility(int);
+  }
+
+  public abstract class TitleViewAdapter {
+    ctor public TitleViewAdapter();
+    method public android.graphics.drawable.Drawable getBadgeDrawable();
+    method public android.support.v17.leanback.widget.SearchOrbView.Colors getSearchAffordanceColors();
+    method public abstract android.view.View getSearchAffordanceView();
+    method public java.lang.CharSequence getTitle();
+    method public void setAnimationEnabled(boolean);
+    method public void setBadgeDrawable(android.graphics.drawable.Drawable);
+    method public void setOnSearchClickedListener(android.view.View.OnClickListener);
+    method public void setSearchAffordanceColors(android.support.v17.leanback.widget.SearchOrbView.Colors);
+    method public void setTitle(java.lang.CharSequence);
+    method public void updateComponentsVisibility(int);
+    field public static final int BRANDING_VIEW_VISIBLE = 2; // 0x2
+    field public static final int FULL_VIEW_VISIBLE = 6; // 0x6
+    field public static final int SEARCH_VIEW_VISIBLE = 4; // 0x4
+  }
+
+  public static abstract interface TitleViewAdapter.Provider {
+    method public abstract android.support.v17.leanback.widget.TitleViewAdapter getTitleViewAdapter();
+  }
+
+  public class VerticalGridPresenter extends android.support.v17.leanback.widget.Presenter {
+    ctor public VerticalGridPresenter();
+    ctor public VerticalGridPresenter(int);
+    ctor public VerticalGridPresenter(int, boolean);
+    method public final boolean areChildRoundedCornersEnabled();
+    method protected android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder createGridViewHolder(android.view.ViewGroup);
+    method protected android.support.v17.leanback.widget.ShadowOverlayHelper.Options createShadowOverlayOptions();
+    method public final void enableChildRoundedCorners(boolean);
+    method public final int getFocusZoomFactor();
+    method public final boolean getKeepChildForeground();
+    method public int getNumberOfColumns();
+    method public final android.support.v17.leanback.widget.OnItemViewClickedListener getOnItemViewClickedListener();
+    method public final android.support.v17.leanback.widget.OnItemViewSelectedListener getOnItemViewSelectedListener();
+    method public final boolean getShadowEnabled();
+    method protected void initializeGridViewHolder(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder);
+    method public final boolean isFocusDimmerUsed();
+    method public boolean isUsingDefaultShadow();
+    method public boolean isUsingZOrder(android.content.Context);
+    method public void onBindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder, java.lang.Object);
+    method public final android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder onCreateViewHolder(android.view.ViewGroup);
+    method public void onUnbindViewHolder(android.support.v17.leanback.widget.Presenter.ViewHolder);
+    method public void setEntranceTransitionState(android.support.v17.leanback.widget.VerticalGridPresenter.ViewHolder, boolean);
+    method public final void setKeepChildForeground(boolean);
+    method public void setNumberOfColumns(int);
+    method public final void setOnItemViewClickedListener(android.support.v17.leanback.widget.OnItemViewClickedListener);
+    method public final void setOnItemViewSelectedListener(android.support.v17.leanback.widget.OnItemViewSelectedListener);
+    method public final void setShadowEnabled(boolean);
+  }
+
+  public static class VerticalGridPresenter.ViewHolder extends android.support.v17.leanback.widget.Presenter.ViewHolder {
+    ctor public VerticalGridPresenter.ViewHolder(android.support.v17.leanback.widget.VerticalGridView);
+    method public android.support.v17.leanback.widget.VerticalGridView getGridView();
+  }
+
+  public class VerticalGridView extends android.support.v17.leanback.widget.BaseGridView {
+    ctor public VerticalGridView(android.content.Context);
+    ctor public VerticalGridView(android.content.Context, android.util.AttributeSet);
+    ctor public VerticalGridView(android.content.Context, android.util.AttributeSet, int);
+    method protected void initAttributes(android.content.Context, android.util.AttributeSet);
+    method public void setColumnWidth(int);
+    method public void setNumColumns(int);
+  }
+
+  public abstract interface ViewHolderTask {
+    method public abstract void run(android.support.v7.widget.RecyclerView.ViewHolder);
+  }
+
+}
+
+package android.support.v17.leanback.widget.picker {
+
+  public class Picker extends android.widget.FrameLayout {
+    ctor public Picker(android.content.Context, android.util.AttributeSet, int);
+    method public void addOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+    method public float getActivatedVisibleItemCount();
+    method public android.support.v17.leanback.widget.picker.PickerColumn getColumnAt(int);
+    method public int getColumnsCount();
+    method protected int getPickerItemHeightPixels();
+    method public final int getPickerItemLayoutId();
+    method public final int getPickerItemTextViewId();
+    method public int getSelectedColumn();
+    method public final deprecated java.lang.CharSequence getSeparator();
+    method public final java.util.List<java.lang.CharSequence> getSeparators();
+    method public float getVisibleItemCount();
+    method public void onColumnValueChanged(int, int);
+    method public void removeOnValueChangedListener(android.support.v17.leanback.widget.picker.Picker.PickerValueListener);
+    method public void setActivatedVisibleItemCount(float);
+    method public void setColumnAt(int, android.support.v17.leanback.widget.picker.PickerColumn);
+    method public void setColumnValue(int, int, boolean);
+    method public void setColumns(java.util.List<android.support.v17.leanback.widget.picker.PickerColumn>);
+    method public final void setPickerItemTextViewId(int);
+    method public void setSelectedColumn(int);
+    method public final void setSeparator(java.lang.CharSequence);
+    method public final void setSeparators(java.util.List<java.lang.CharSequence>);
+    method public void setVisibleItemCount(float);
+  }
+
+  public static abstract interface Picker.PickerValueListener {
+    method public abstract void onValueChanged(android.support.v17.leanback.widget.picker.Picker, int);
+  }
+
+  public class PickerColumn {
+    ctor public PickerColumn();
+    method public int getCount();
+    method public int getCurrentValue();
+    method public java.lang.CharSequence getLabelFor(int);
+    method public java.lang.String getLabelFormat();
+    method public int getMaxValue();
+    method public int getMinValue();
+    method public java.lang.CharSequence[] getStaticLabels();
+    method public void setCurrentValue(int);
+    method public void setLabelFormat(java.lang.String);
+    method public void setMaxValue(int);
+    method public void setMinValue(int);
+    method public void setStaticLabels(java.lang.CharSequence[]);
+  }
+
+  public class TimePicker extends android.support.v17.leanback.widget.picker.Picker {
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet, int);
+    method public int getHour();
+    method public int getMinute();
+    method public boolean is24Hour();
+    method public boolean isPm();
+    method public void setHour(int);
+    method public void setIs24Hour(boolean);
+    method public void setMinute(int);
+  }
+
+}
+
diff --git a/leanback/res/values-mr/strings.xml b/leanback/res/values-mr/strings.xml
index 8629ef1..1fcb920 100644
--- a/leanback/res/values-mr/strings.xml
+++ b/leanback/res/values-mr/strings.xml
@@ -47,7 +47,7 @@
     <string name="lb_playback_controls_high_quality_disable" msgid="8637371582779057866">"उच्च गुणवत्ता अक्षम करा"</string>
     <string name="lb_playback_controls_closed_captioning_enable" msgid="2429655367176440226">"उपशीर्षके सक्षम करा"</string>
     <string name="lb_playback_controls_closed_captioning_disable" msgid="6133362019475930048">"सबटायटल अक्षम करा"</string>
-    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"चित्र मोडमध्ये चित्र प्रविष्ट करा"</string>
+    <string name="lb_playback_controls_picture_in_picture" msgid="3040035547765350690">"चित्र मोडमध्ये चित्र एंटर करा"</string>
     <string name="lb_playback_time_separator" msgid="3208380806582304911">"/"</string>
     <string name="lb_playback_controls_shown" msgid="6382160135512023238">"मीडिया नियंत्रणे दर्शवली आहेत"</string>
     <string name="lb_playback_controls_hidden" msgid="8940984081242033574">"मीडिया नियंत्रणे लपलेली आहेत, दर्शवण्‍यासाठी d-pad दाबा"</string>
diff --git a/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java b/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
index 92655d9..d360d15 100644
--- a/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -3715,9 +3715,11 @@
         }
         switch (translatedAction) {
             case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD:
+                processPendingMovement(false);
                 processSelectionMoves(false, -1);
                 break;
             case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD:
+                processPendingMovement(true);
                 processSelectionMoves(false, 1);
                 break;
         }
diff --git a/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java b/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
index 4029a29..0ca1562 100644
--- a/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
+++ b/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
@@ -4493,23 +4493,34 @@
         }
     }
 
-    @Test
-    public void testAccessibilityRespondToLeftRightPartiallyVisible() throws Throwable {
-        // Tests the case when there are two children, and the second child is partially visible
+    private void setUpActivityForScrollingTest(final boolean isRTL, boolean isHorizontal,
+            int numChildViews, boolean isSiblingViewVisible) throws Throwable {
         Intent intent = new Intent();
-        intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, R.layout.horizontal_linear);
+        int layout;
+        if (isHorizontal) {
+            layout = isRTL ? R.layout.horizontal_linear_rtl : R.layout.horizontal_linear;
+        } else {
+            layout = R.layout.vertical_linear;
+        }
+        intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, layout);
         intent.putExtra(GridActivity.EXTRA_CHILD_LAYOUT_ID, R.layout.item_button_at_bottom);
         intent.putExtra(GridActivity.EXTRA_ITEMS,  new int[]{});
         intent.putExtra(GridActivity.EXTRA_STAGGERED, false);
         initActivity(intent);
-        mOrientation = BaseGridView.HORIZONTAL;
+        mOrientation = isHorizontal ? BaseGridView.HORIZONTAL : BaseGridView.VERTICAL;
         mNumRows = 1;
 
-        final int offset = 2 * mGridView.getHorizontalSpacing();
-        final int childWidth = mGridView.getWidth() - offset - 2 * mGridView.getHorizontalSpacing();
+        final int offset = (isSiblingViewVisible ? 2 : 1) * (isHorizontal
+                ? mGridView.getHorizontalSpacing() : mGridView.getVerticalSpacing());
+        final int childSize = (isHorizontal ? mGridView.getWidth() : mGridView.getHeight())
+                - offset - (isHorizontal ? 2 * mGridView.getHorizontalSpacing() :
+                mGridView.getVerticalSpacing());
         mActivityTestRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
+                if (isRTL) {
+                    mGridView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
+                }
                 mGridView.setWindowAlignment(BaseGridView.WINDOW_ALIGN_NO_EDGE);
                 mGridView.setWindowAlignmentOffset(offset);
                 mGridView.setWindowAlignmentOffsetPercent(BaseGridView
@@ -4519,7 +4530,12 @@
                         .ITEM_ALIGN_OFFSET_PERCENT_DISABLED);
             }
         });
-        mActivity.addItems(0, new int[]{childWidth, childWidth});
+        int[] widthArrays = new int[numChildViews];
+        Arrays.fill(widthArrays, childSize);
+        mActivity.addItems(0, widthArrays);
+    }
+
+    private void testScrollingAction(boolean isRTL, boolean isHorizontal) throws Throwable {
         waitForItemAnimation();
         setSelectedPosition(1);
         final RecyclerViewAccessibilityDelegate delegateCompat = mGridView
@@ -4531,30 +4547,52 @@
                 delegateCompat.onInitializeAccessibilityNodeInfo(mGridView, info);
             }
         });
+        // We are currently focusing on item 1, calculating the direction to get me to item 0
+        final AccessibilityNodeInfoCompat.AccessibilityActionCompat itemZeroDirection;
+        if (isHorizontal) {
+            itemZeroDirection = isRTL
+                    ? AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT :
+                    AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT;
+        } else {
+            itemZeroDirection =
+                    AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP;
+        }
+        final int translatedItemZeroDirection = AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD;
+
         assertTrue("test sanity", info.isScrollable());
         if (Build.VERSION.SDK_INT >= 23) {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .AccessibilityActionCompat.ACTION_SCROLL_LEFT));
+            assertTrue("test sanity", hasAction(info, itemZeroDirection));
         } else {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .ACTION_SCROLL_BACKWARD));
+            assertTrue("test sanity", hasAction(info, translatedItemZeroDirection));
         }
 
         mActivityTestRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
                 if (Build.VERSION.SDK_INT >= 23) {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .AccessibilityActionCompat.ACTION_SCROLL_LEFT.getId(), null);
+                    delegateCompat.performAccessibilityAction(mGridView, itemZeroDirection.getId(),
+                            null);
                 } else {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .ACTION_SCROLL_BACKWARD, null);
+                    delegateCompat.performAccessibilityAction(mGridView,
+                            translatedItemZeroDirection, null);
                 }
             }
         });
         waitForScrollIdle(mVerifyLayout);
         assertEquals(0, mGridView.getSelectedPosition());
         setSelectedPosition(0);
+        // We are at item 0, calculate the direction that lead us to the item 1
+        final AccessibilityNodeInfoCompat.AccessibilityActionCompat itemOneDirection;
+        if (isHorizontal) {
+            itemOneDirection = isRTL
+                    ? AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT
+                    : AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT;
+        } else {
+            itemOneDirection =
+                    AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN;
+        }
+        final int translatedItemOneDirection = AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD;
+
         mActivityTestRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
@@ -4562,21 +4600,19 @@
             }
         });
         if (Build.VERSION.SDK_INT >= 23) {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .AccessibilityActionCompat.ACTION_SCROLL_RIGHT));
+            assertTrue("test sanity", hasAction(info, itemOneDirection));
         } else {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .ACTION_SCROLL_FORWARD));
+            assertTrue("test sanity", hasAction(info, translatedItemOneDirection));
         }
         mActivityTestRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
                 if (Build.VERSION.SDK_INT >= 23) {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .AccessibilityActionCompat.ACTION_SCROLL_RIGHT.getId(), null);
+                    delegateCompat.performAccessibilityAction(mGridView, itemOneDirection.getId(),
+                            null);
                 } else {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .ACTION_SCROLL_FORWARD, null);
+                    delegateCompat.performAccessibilityAction(mGridView, translatedItemOneDirection,
+                            null);
                 }
             }
         });
@@ -4585,159 +4621,58 @@
     }
 
     @Test
+    public void testAccessibilityRespondToLeftRightInvisible() throws Throwable {
+        boolean isRTL = false;
+        boolean isHorizontal = true;
+        setUpActivityForScrollingTest(isRTL, isHorizontal, 2 /* numChild */,
+                false /* next child partially visible */);
+        testScrollingAction(isRTL, isHorizontal);
+    }
+
+    @Test
+    public void testAccessibilityRespondToLeftRightPartiallyVisible() throws Throwable {
+        boolean isRTL = false;
+        boolean isHorizontal = true;
+        setUpActivityForScrollingTest(isRTL, isHorizontal, 2 /* numChild */,
+                true /* next child partially visible */);
+        testScrollingAction(isRTL, isHorizontal);
+    }
+
+    @Test
+    public void testAccessibilityRespondToLeftRightRtlInvisible()
+            throws Throwable {
+        boolean isRTL = true;
+        boolean isHorizontal = true;
+        setUpActivityForScrollingTest(isRTL, isHorizontal, 2 /* numChild */,
+                false /* next child partially visible */);
+        testScrollingAction(isRTL, isHorizontal);
+    }
+
+    @Test
     public void testAccessibilityRespondToLeftRightRtlPartiallyVisible() throws Throwable {
-        // Tests the case when there are two children, and the second child is partially visible
-        Intent intent = new Intent();
-        intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, R.layout.horizontal_linear_rtl);
-        intent.putExtra(GridActivity.EXTRA_CHILD_LAYOUT_ID, R.layout.item_button_at_bottom);
-        intent.putExtra(GridActivity.EXTRA_ITEMS,  new int[]{});
-        intent.putExtra(GridActivity.EXTRA_STAGGERED, false);
-        initActivity(intent);
-        mOrientation = BaseGridView.HORIZONTAL;
-        mNumRows = 1;
-
-        final int offset = 2 * mGridView.getHorizontalSpacing();
-        final int childWidth = mGridView.getWidth() - offset - 2 * mGridView.getHorizontalSpacing();
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mGridView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
-                mGridView.setWindowAlignment(BaseGridView.WINDOW_ALIGN_NO_EDGE);
-                mGridView.setWindowAlignmentOffset(offset);
-                mGridView.setWindowAlignmentOffsetPercent(BaseGridView
-                        .WINDOW_ALIGN_OFFSET_PERCENT_DISABLED);
-                mGridView.setItemAlignmentOffset(0);
-                mGridView.setItemAlignmentOffsetPercent(BaseGridView
-                        .ITEM_ALIGN_OFFSET_PERCENT_DISABLED);
-            }
-        });
-        mActivity.addItems(0, new int[]{childWidth, childWidth});
-        waitForItemAnimation();
-        setSelectedPosition(1);
-        final RecyclerViewAccessibilityDelegate delegateCompat = mGridView
-                .getCompatAccessibilityDelegate();
-        final AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.obtain();
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                delegateCompat.onInitializeAccessibilityNodeInfo(mGridView, info);
-            }
-        });
-        assertTrue("test sanity", info.isScrollable());
-        if (Build.VERSION.SDK_INT >= 23) {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .AccessibilityActionCompat.ACTION_SCROLL_RIGHT));
-        } else {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .ACTION_SCROLL_BACKWARD));
-        }
-
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (Build.VERSION.SDK_INT >= 23) {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .AccessibilityActionCompat.ACTION_SCROLL_RIGHT.getId(), null);
-                } else {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .ACTION_SCROLL_BACKWARD, null);
-                }
-            }
-        });
-        waitForScrollIdle(mVerifyLayout);
-        assertEquals(0, mGridView.getSelectedPosition());
-        setSelectedPosition(0);
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                delegateCompat.onInitializeAccessibilityNodeInfo(mGridView, info);
-            }
-        });
-        if (Build.VERSION.SDK_INT >= 23) {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .AccessibilityActionCompat.ACTION_SCROLL_LEFT));
-        } else {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .ACTION_SCROLL_FORWARD));
-        }
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (Build.VERSION.SDK_INT >= 23) {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .AccessibilityActionCompat.ACTION_SCROLL_LEFT.getId(), null);
-                } else {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .ACTION_SCROLL_FORWARD, null);
-                }
-            }
-        });
-        waitForScrollIdle(mVerifyLayout);
-        assertEquals(1, mGridView.getSelectedPosition());
+        boolean isRTL = true;
+        boolean isHorizontal = true;
+        setUpActivityForScrollingTest(isRTL, isHorizontal, 2 /* numChild */,
+                true /* next child partially visible */);
+        testScrollingAction(isRTL, isHorizontal);
     }
 
     @Test
-    public void testAccessibilityRespondToScrollUpActionPartiallyVisible() throws Throwable {
-        // Tests the case when there are two children, and the second child is partially visible
-        Intent intent = new Intent();
-        intent.putExtra(GridActivity.EXTRA_LAYOUT_RESOURCE_ID, R.layout.vertical_linear);
-        intent.putExtra(GridActivity.EXTRA_CHILD_LAYOUT_ID, R.layout.item_button_at_bottom);
-        intent.putExtra(GridActivity.EXTRA_ITEMS,  new int[]{});
-        intent.putExtra(GridActivity.EXTRA_STAGGERED, false);
-        initActivity(intent);
-        mOrientation = BaseGridView.VERTICAL;
-        mNumRows = 1;
+    public void testAccessibilityRespondToScrollUpDownActionInvisible() throws Throwable {
+        boolean isRTL = false;
+        boolean isHorizontal = false;
+        setUpActivityForScrollingTest(isRTL, isHorizontal, 2 /* numChild */,
+                false /* next child partially visible */);
+        testScrollingAction(isRTL, isHorizontal);
+    }
 
-        final int offset = 2 * mGridView.getVerticalSpacing();
-        final int childHeight = mGridView.getHeight() - offset - 2 * mGridView.getVerticalSpacing();
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mGridView.setWindowAlignment(BaseGridView.WINDOW_ALIGN_NO_EDGE);
-                mGridView.setWindowAlignmentOffset(offset);
-                mGridView.setWindowAlignmentOffsetPercent(BaseGridView
-                        .WINDOW_ALIGN_OFFSET_PERCENT_DISABLED);
-                mGridView.setItemAlignmentOffset(0);
-                mGridView.setItemAlignmentOffsetPercent(BaseGridView
-                        .ITEM_ALIGN_OFFSET_PERCENT_DISABLED);
-            }
-        });
-        mActivity.addItems(0, new int[]{childHeight, childHeight});
-        waitForItemAnimation();
-        setSelectedPosition(1);
-
-        final RecyclerViewAccessibilityDelegate delegateCompat = mGridView
-                .getCompatAccessibilityDelegate();
-        final AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.obtain();
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                delegateCompat.onInitializeAccessibilityNodeInfo(mGridView, info);
-            }
-        });
-        assertTrue("test sanity", info.isScrollable());
-        if (Build.VERSION.SDK_INT >= 23) {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .AccessibilityActionCompat.ACTION_SCROLL_UP));
-        } else {
-            assertTrue("test sanity", hasAction(info, AccessibilityNodeInfoCompat
-                    .ACTION_SCROLL_BACKWARD));
-        }
-
-        mActivityTestRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (Build.VERSION.SDK_INT >= 23) {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .AccessibilityActionCompat.ACTION_SCROLL_UP.getId(), null);
-                } else {
-                    delegateCompat.performAccessibilityAction(mGridView, AccessibilityNodeInfoCompat
-                            .ACTION_SCROLL_BACKWARD, null);
-                }
-            }
-        });
-        waitForScrollIdle(mVerifyLayout);
-        assertEquals(0, mGridView.getSelectedPosition());
+    @Test
+    public void testAccessibilityRespondToScrollUpDownActionPartiallyVisible() throws Throwable {
+        boolean isRTL = false;
+        boolean isHorizontal = false;
+        setUpActivityForScrollingTest(isRTL, isHorizontal, 2 /* numChild */,
+                true /* next child partially visible */);
+        testScrollingAction(isRTL, isHorizontal);
     }
 
     @Test
diff --git a/lifecycle/extensions/src/androidTest/AndroidManifest.xml b/lifecycle/extensions/src/androidTest/AndroidManifest.xml
index 08e1de6..db921fd 100644
--- a/lifecycle/extensions/src/androidTest/AndroidManifest.xml
+++ b/lifecycle/extensions/src/androidTest/AndroidManifest.xml
@@ -17,6 +17,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.lifecycle.extensions.test">
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
 
     <application>
         <activity android:name="android.arch.lifecycle.viewmodeltest.ViewModelActivity"
diff --git a/lifecycle/reactivestreams/src/androidTest/AndroidManifest.xml b/lifecycle/reactivestreams/src/androidTest/AndroidManifest.xml
index 722f480..e60c9f4 100644
--- a/lifecycle/reactivestreams/src/androidTest/AndroidManifest.xml
+++ b/lifecycle/reactivestreams/src/androidTest/AndroidManifest.xml
@@ -17,6 +17,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.arch.lifecycle.reactivestreams.test">
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
 
     <application>
         <activity android:name="android.arch.lifecycle.viewmodeltest.ViewModelActivity"
diff --git a/media-compat/Android.mk b/media-compat/Android.mk
deleted file mode 100644
index 8538752..0000000
--- a/media-compat/Android.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-# 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)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-media-compat \
-#       android-support-compat \
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-media-compat
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/java
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,api21) \
-    $(call all-java-files-under,api22) \
-    $(call all-java-files-under,api23) \
-    $(call all-java-files-under,api24) \
-    $(call all-java-files-under,api26) \
-    $(call all-java-files-under,java) \
-    $(call all-Iaidl-files-under,java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/media-compat/api/27.1.0.txt b/media-compat/api/27.1.0.txt
new file mode 100644
index 0000000..b53de68
--- /dev/null
+++ b/media-compat/api/27.1.0.txt
@@ -0,0 +1,649 @@
+package android.support.v4.media {
+
+  public class AudioAttributesCompat {
+    method public int getContentType();
+    method public int getFlags();
+    method public int getLegacyStreamType();
+    method public int getUsage();
+    method public int getVolumeControlStream();
+    method public java.lang.Object unwrap();
+    method public static android.support.v4.media.AudioAttributesCompat wrap(java.lang.Object);
+    field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+    field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+    field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+    field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+    field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+    field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+    field public static final int USAGE_ALARM = 4; // 0x4
+    field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+    field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+    field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+    field public static final int USAGE_ASSISTANT = 16; // 0x10
+    field public static final int USAGE_GAME = 14; // 0xe
+    field public static final int USAGE_MEDIA = 1; // 0x1
+    field public static final int USAGE_NOTIFICATION = 5; // 0x5
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+    field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+    field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+    field public static final int USAGE_UNKNOWN = 0; // 0x0
+    field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+    field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+  }
+
+  public static class AudioAttributesCompat.Builder {
+    ctor public AudioAttributesCompat.Builder();
+    ctor public AudioAttributesCompat.Builder(android.support.v4.media.AudioAttributesCompat);
+    method public android.support.v4.media.AudioAttributesCompat build();
+    method public android.support.v4.media.AudioAttributesCompat.Builder setContentType(int);
+    method public android.support.v4.media.AudioAttributesCompat.Builder setFlags(int);
+    method public android.support.v4.media.AudioAttributesCompat.Builder setLegacyStreamType(int);
+    method public android.support.v4.media.AudioAttributesCompat.Builder setUsage(int);
+  }
+
+  public final class MediaBrowserCompat {
+    ctor public MediaBrowserCompat(android.content.Context, android.content.ComponentName, android.support.v4.media.MediaBrowserCompat.ConnectionCallback, android.os.Bundle);
+    method public void connect();
+    method public void disconnect();
+    method public android.os.Bundle getExtras();
+    method public void getItem(java.lang.String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+    method public java.lang.String getRoot();
+    method public android.content.ComponentName getServiceComponent();
+    method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+    method public boolean isConnected();
+    method public void search(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SearchCallback);
+    method public void sendCustomAction(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.CustomActionCallback);
+    method public void subscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+    method public void subscribe(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+    method public void unsubscribe(java.lang.String);
+    method public void unsubscribe(java.lang.String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+    field public static final java.lang.String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
+    field public static final java.lang.String CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE = "android.support.v4.media.action.REMOVE_DOWNLOADED_FILE";
+    field public static final java.lang.String EXTRA_DOWNLOAD_PROGRESS = "android.media.browse.extra.DOWNLOAD_PROGRESS";
+    field public static final java.lang.String EXTRA_MEDIA_ID = "android.media.browse.extra.MEDIA_ID";
+    field public static final java.lang.String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+    field public static final java.lang.String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+  }
+
+  public static class MediaBrowserCompat.ConnectionCallback {
+    ctor public MediaBrowserCompat.ConnectionCallback();
+    method public void onConnected();
+    method public void onConnectionFailed();
+    method public void onConnectionSuspended();
+  }
+
+  public static abstract class MediaBrowserCompat.CustomActionCallback {
+    ctor public MediaBrowserCompat.CustomActionCallback();
+    method public void onError(java.lang.String, android.os.Bundle, android.os.Bundle);
+    method public void onProgressUpdate(java.lang.String, android.os.Bundle, android.os.Bundle);
+    method public void onResult(java.lang.String, android.os.Bundle, android.os.Bundle);
+  }
+
+  public static abstract class MediaBrowserCompat.ItemCallback {
+    ctor public MediaBrowserCompat.ItemCallback();
+    method public void onError(java.lang.String);
+    method public void onItemLoaded(android.support.v4.media.MediaBrowserCompat.MediaItem);
+  }
+
+  public static class MediaBrowserCompat.MediaItem implements android.os.Parcelable {
+    ctor public MediaBrowserCompat.MediaItem(android.support.v4.media.MediaDescriptionCompat, int);
+    method public int describeContents();
+    method public static android.support.v4.media.MediaBrowserCompat.MediaItem fromMediaItem(java.lang.Object);
+    method public static java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem> fromMediaItemList(java.util.List<?>);
+    method public android.support.v4.media.MediaDescriptionCompat getDescription();
+    method public int getFlags();
+    method public java.lang.String getMediaId();
+    method public boolean isBrowsable();
+    method public boolean isPlayable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaBrowserCompat.MediaItem> CREATOR;
+    field public static final int FLAG_BROWSABLE = 1; // 0x1
+    field public static final int FLAG_PLAYABLE = 2; // 0x2
+  }
+
+  public static abstract class MediaBrowserCompat.SearchCallback {
+    ctor public MediaBrowserCompat.SearchCallback();
+    method public void onError(java.lang.String, android.os.Bundle);
+    method public void onSearchResult(java.lang.String, android.os.Bundle, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+  }
+
+  public static abstract class MediaBrowserCompat.SubscriptionCallback {
+    ctor public MediaBrowserCompat.SubscriptionCallback();
+    method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+    method public void onChildrenLoaded(java.lang.String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>, android.os.Bundle);
+    method public void onError(java.lang.String);
+    method public void onError(java.lang.String, android.os.Bundle);
+  }
+
+  public abstract class MediaBrowserServiceCompat extends android.app.Service {
+    ctor public MediaBrowserServiceCompat();
+    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+    method public final android.os.Bundle getBrowserRootHints();
+    method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+    method public void notifyChildrenChanged(java.lang.String);
+    method public void notifyChildrenChanged(java.lang.String, android.os.Bundle);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onCustomAction(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserServiceCompat.Result<android.os.Bundle>);
+    method public abstract android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
+    method public abstract void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+    method public void onLoadChildren(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>, android.os.Bundle);
+    method public void onLoadItem(java.lang.String, android.support.v4.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+    method public void onSearch(java.lang.String, android.os.Bundle, android.support.v4.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+    method public void setSessionToken(android.support.v4.media.session.MediaSessionCompat.Token);
+    field public static final java.lang.String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+  }
+
+  public static final class MediaBrowserServiceCompat.BrowserRoot {
+    ctor public MediaBrowserServiceCompat.BrowserRoot(java.lang.String, android.os.Bundle);
+    method public android.os.Bundle getExtras();
+    method public java.lang.String getRootId();
+    field public static final java.lang.String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+    field public static final java.lang.String EXTRA_RECENT = "android.service.media.extra.RECENT";
+    field public static final java.lang.String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+    field public static final deprecated java.lang.String EXTRA_SUGGESTION_KEYWORDS = "android.service.media.extra.SUGGESTION_KEYWORDS";
+  }
+
+  public static class MediaBrowserServiceCompat.Result<T> {
+    method public void detach();
+    method public void sendError(android.os.Bundle);
+    method public void sendProgressUpdate(android.os.Bundle);
+    method public void sendResult(T);
+  }
+
+  public final class MediaDescriptionCompat implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.support.v4.media.MediaDescriptionCompat fromMediaDescription(java.lang.Object);
+    method public java.lang.CharSequence getDescription();
+    method public android.os.Bundle getExtras();
+    method public android.graphics.Bitmap getIconBitmap();
+    method public android.net.Uri getIconUri();
+    method public java.lang.Object getMediaDescription();
+    method public java.lang.String getMediaId();
+    method public android.net.Uri getMediaUri();
+    method public java.lang.CharSequence getSubtitle();
+    method public java.lang.CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+    field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+    field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+    field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+    field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+    field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+    field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaDescriptionCompat> CREATOR;
+    field public static final java.lang.String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+    field public static final java.lang.String EXTRA_DOWNLOAD_STATUS = "android.media.extra.DOWNLOAD_STATUS";
+    field public static final long STATUS_DOWNLOADED = 2L; // 0x2L
+    field public static final long STATUS_DOWNLOADING = 1L; // 0x1L
+    field public static final long STATUS_NOT_DOWNLOADED = 0L; // 0x0L
+  }
+
+  public static final class MediaDescriptionCompat.Builder {
+    ctor public MediaDescriptionCompat.Builder();
+    method public android.support.v4.media.MediaDescriptionCompat build();
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setDescription(java.lang.CharSequence);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setExtras(android.os.Bundle);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setIconBitmap(android.graphics.Bitmap);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setIconUri(android.net.Uri);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaId(java.lang.String);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setMediaUri(android.net.Uri);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setSubtitle(java.lang.CharSequence);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder setTitle(java.lang.CharSequence);
+  }
+
+  public final class MediaMetadataCompat implements android.os.Parcelable {
+    method public boolean containsKey(java.lang.String);
+    method public int describeContents();
+    method public static android.support.v4.media.MediaMetadataCompat fromMediaMetadata(java.lang.Object);
+    method public android.graphics.Bitmap getBitmap(java.lang.String);
+    method public android.os.Bundle getBundle();
+    method public android.support.v4.media.MediaDescriptionCompat getDescription();
+    method public long getLong(java.lang.String);
+    method public java.lang.Object getMediaMetadata();
+    method public android.support.v4.media.RatingCompat getRating(java.lang.String);
+    method public java.lang.String getString(java.lang.String);
+    method public java.lang.CharSequence getText(java.lang.String);
+    method public java.util.Set<java.lang.String> keySet();
+    method public int size();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.MediaMetadataCompat> CREATOR;
+    field public static final java.lang.String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
+    field public static final java.lang.String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+    field public static final java.lang.String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+    field public static final java.lang.String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+    field public static final java.lang.String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+    field public static final java.lang.String METADATA_KEY_ART = "android.media.metadata.ART";
+    field public static final java.lang.String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+    field public static final java.lang.String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+    field public static final java.lang.String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+    field public static final java.lang.String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+    field public static final java.lang.String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+    field public static final java.lang.String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+    field public static final java.lang.String METADATA_KEY_DATE = "android.media.metadata.DATE";
+    field public static final java.lang.String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+    field public static final java.lang.String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+    field public static final java.lang.String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+    field public static final java.lang.String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+    field public static final java.lang.String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+    field public static final java.lang.String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+    field public static final java.lang.String METADATA_KEY_DOWNLOAD_STATUS = "android.media.metadata.DOWNLOAD_STATUS";
+    field public static final java.lang.String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+    field public static final java.lang.String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+    field public static final java.lang.String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+    field public static final java.lang.String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+    field public static final java.lang.String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+    field public static final java.lang.String METADATA_KEY_RATING = "android.media.metadata.RATING";
+    field public static final java.lang.String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+    field public static final java.lang.String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+    field public static final java.lang.String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+    field public static final java.lang.String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+    field public static final java.lang.String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+  }
+
+  public static final class MediaMetadataCompat.Builder {
+    ctor public MediaMetadataCompat.Builder();
+    ctor public MediaMetadataCompat.Builder(android.support.v4.media.MediaMetadataCompat);
+    method public android.support.v4.media.MediaMetadataCompat build();
+    method public android.support.v4.media.MediaMetadataCompat.Builder putBitmap(java.lang.String, android.graphics.Bitmap);
+    method public android.support.v4.media.MediaMetadataCompat.Builder putLong(java.lang.String, long);
+    method public android.support.v4.media.MediaMetadataCompat.Builder putRating(java.lang.String, android.support.v4.media.RatingCompat);
+    method public android.support.v4.media.MediaMetadataCompat.Builder putString(java.lang.String, java.lang.String);
+    method public android.support.v4.media.MediaMetadataCompat.Builder putText(java.lang.String, java.lang.CharSequence);
+  }
+
+  public final class RatingCompat implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.support.v4.media.RatingCompat fromRating(java.lang.Object);
+    method public float getPercentRating();
+    method public java.lang.Object getRating();
+    method public int getRatingStyle();
+    method public float getStarRating();
+    method public boolean hasHeart();
+    method public boolean isRated();
+    method public boolean isThumbUp();
+    method public static android.support.v4.media.RatingCompat newHeartRating(boolean);
+    method public static android.support.v4.media.RatingCompat newPercentageRating(float);
+    method public static android.support.v4.media.RatingCompat newStarRating(int, float);
+    method public static android.support.v4.media.RatingCompat newThumbRating(boolean);
+    method public static android.support.v4.media.RatingCompat newUnratedRating(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.RatingCompat> CREATOR;
+    field public static final int RATING_3_STARS = 3; // 0x3
+    field public static final int RATING_4_STARS = 4; // 0x4
+    field public static final int RATING_5_STARS = 5; // 0x5
+    field public static final int RATING_HEART = 1; // 0x1
+    field public static final int RATING_NONE = 0; // 0x0
+    field public static final int RATING_PERCENTAGE = 6; // 0x6
+    field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+  }
+
+  public abstract class VolumeProviderCompat {
+    ctor public VolumeProviderCompat(int, int, int);
+    method public final int getCurrentVolume();
+    method public final int getMaxVolume();
+    method public final int getVolumeControl();
+    method public java.lang.Object getVolumeProvider();
+    method public void onAdjustVolume(int);
+    method public void onSetVolumeTo(int);
+    method public void setCallback(android.support.v4.media.VolumeProviderCompat.Callback);
+    method public final void setCurrentVolume(int);
+    field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+    field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+    field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+  }
+
+  public static abstract class VolumeProviderCompat.Callback {
+    ctor public VolumeProviderCompat.Callback();
+    method public abstract void onVolumeChanged(android.support.v4.media.VolumeProviderCompat);
+  }
+
+}
+
+package android.support.v4.media.app {
+
+  public class NotificationCompat {
+  }
+
+  public static class NotificationCompat.DecoratedMediaCustomViewStyle extends android.support.v4.media.app.NotificationCompat.MediaStyle {
+    ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+  }
+
+  public static class NotificationCompat.MediaStyle extends android.support.v4.app.NotificationCompat.Style {
+    ctor public NotificationCompat.MediaStyle();
+    ctor public NotificationCompat.MediaStyle(android.support.v4.app.NotificationCompat.Builder);
+    method public static android.support.v4.media.session.MediaSessionCompat.Token getMediaSession(android.app.Notification);
+    method public android.support.v4.media.app.NotificationCompat.MediaStyle setCancelButtonIntent(android.app.PendingIntent);
+    method public android.support.v4.media.app.NotificationCompat.MediaStyle setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token);
+    method public android.support.v4.media.app.NotificationCompat.MediaStyle setShowActionsInCompactView(int...);
+    method public android.support.v4.media.app.NotificationCompat.MediaStyle setShowCancelButton(boolean);
+  }
+
+}
+
+package android.support.v4.media.session {
+
+  public class MediaButtonReceiver extends android.content.BroadcastReceiver {
+    ctor public MediaButtonReceiver();
+    method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, long);
+    method public static android.app.PendingIntent buildMediaButtonPendingIntent(android.content.Context, android.content.ComponentName, long);
+    method public static android.view.KeyEvent handleIntent(android.support.v4.media.session.MediaSessionCompat, android.content.Intent);
+    method public void onReceive(android.content.Context, android.content.Intent);
+  }
+
+  public final class MediaControllerCompat {
+    ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat);
+    ctor public MediaControllerCompat(android.content.Context, android.support.v4.media.session.MediaSessionCompat.Token) throws android.os.RemoteException;
+    method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat);
+    method public void addQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
+    method public void adjustVolume(int, int);
+    method public boolean dispatchMediaButtonEvent(android.view.KeyEvent);
+    method public android.os.Bundle getExtras();
+    method public long getFlags();
+    method public static android.support.v4.media.session.MediaControllerCompat getMediaController(android.app.Activity);
+    method public java.lang.Object getMediaController();
+    method public android.support.v4.media.MediaMetadataCompat getMetadata();
+    method public java.lang.String getPackageName();
+    method public android.support.v4.media.session.MediaControllerCompat.PlaybackInfo getPlaybackInfo();
+    method public android.support.v4.media.session.PlaybackStateCompat getPlaybackState();
+    method public java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> getQueue();
+    method public java.lang.CharSequence getQueueTitle();
+    method public int getRatingType();
+    method public int getRepeatMode();
+    method public android.app.PendingIntent getSessionActivity();
+    method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+    method public int getShuffleMode();
+    method public android.support.v4.media.session.MediaControllerCompat.TransportControls getTransportControls();
+    method public boolean isCaptioningEnabled();
+    method public boolean isSessionReady();
+    method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+    method public void registerCallback(android.support.v4.media.session.MediaControllerCompat.Callback, android.os.Handler);
+    method public void removeQueueItem(android.support.v4.media.MediaDescriptionCompat);
+    method public deprecated void removeQueueItemAt(int);
+    method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+    method public static void setMediaController(android.app.Activity, android.support.v4.media.session.MediaControllerCompat);
+    method public void setVolumeTo(int, int);
+    method public void unregisterCallback(android.support.v4.media.session.MediaControllerCompat.Callback);
+  }
+
+  public static abstract class MediaControllerCompat.Callback implements android.os.IBinder.DeathRecipient {
+    ctor public MediaControllerCompat.Callback();
+    method public void binderDied();
+    method public void onAudioInfoChanged(android.support.v4.media.session.MediaControllerCompat.PlaybackInfo);
+    method public void onCaptioningEnabledChanged(boolean);
+    method public void onExtrasChanged(android.os.Bundle);
+    method public void onMetadataChanged(android.support.v4.media.MediaMetadataCompat);
+    method public void onPlaybackStateChanged(android.support.v4.media.session.PlaybackStateCompat);
+    method public void onQueueChanged(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+    method public void onQueueTitleChanged(java.lang.CharSequence);
+    method public void onRepeatModeChanged(int);
+    method public void onSessionDestroyed();
+    method public void onSessionEvent(java.lang.String, android.os.Bundle);
+    method public void onSessionReady();
+    method public void onShuffleModeChanged(int);
+  }
+
+  public static final class MediaControllerCompat.PlaybackInfo {
+    method public int getAudioStream();
+    method public int getCurrentVolume();
+    method public int getMaxVolume();
+    method public int getPlaybackType();
+    method public int getVolumeControl();
+    field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+    field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+  }
+
+  public static abstract class MediaControllerCompat.TransportControls {
+    method public abstract void fastForward();
+    method public abstract void pause();
+    method public abstract void play();
+    method public abstract void playFromMediaId(java.lang.String, android.os.Bundle);
+    method public abstract void playFromSearch(java.lang.String, android.os.Bundle);
+    method public abstract void playFromUri(android.net.Uri, android.os.Bundle);
+    method public abstract void prepare();
+    method public abstract void prepareFromMediaId(java.lang.String, android.os.Bundle);
+    method public abstract void prepareFromSearch(java.lang.String, android.os.Bundle);
+    method public abstract void prepareFromUri(android.net.Uri, android.os.Bundle);
+    method public abstract void rewind();
+    method public abstract void seekTo(long);
+    method public abstract void sendCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction, android.os.Bundle);
+    method public abstract void sendCustomAction(java.lang.String, android.os.Bundle);
+    method public abstract void setCaptioningEnabled(boolean);
+    method public abstract void setRating(android.support.v4.media.RatingCompat);
+    method public abstract void setRating(android.support.v4.media.RatingCompat, android.os.Bundle);
+    method public abstract void setRepeatMode(int);
+    method public abstract void setShuffleMode(int);
+    method public abstract void skipToNext();
+    method public abstract void skipToPrevious();
+    method public abstract void skipToQueueItem(long);
+    method public abstract void stop();
+    field public static final java.lang.String EXTRA_LEGACY_STREAM_TYPE = "android.media.session.extra.LEGACY_STREAM_TYPE";
+  }
+
+  public class MediaSessionCompat {
+    ctor public MediaSessionCompat(android.content.Context, java.lang.String);
+    ctor public MediaSessionCompat(android.content.Context, java.lang.String, android.content.ComponentName, android.app.PendingIntent);
+    method public void addOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+    method public static android.support.v4.media.session.MediaSessionCompat fromMediaSession(android.content.Context, java.lang.Object);
+    method public android.support.v4.media.session.MediaControllerCompat getController();
+    method public java.lang.Object getMediaSession();
+    method public java.lang.Object getRemoteControlClient();
+    method public android.support.v4.media.session.MediaSessionCompat.Token getSessionToken();
+    method public boolean isActive();
+    method public void release();
+    method public void removeOnActiveChangeListener(android.support.v4.media.session.MediaSessionCompat.OnActiveChangeListener);
+    method public void sendSessionEvent(java.lang.String, android.os.Bundle);
+    method public void setActive(boolean);
+    method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback);
+    method public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback, android.os.Handler);
+    method public void setCaptioningEnabled(boolean);
+    method public void setExtras(android.os.Bundle);
+    method public void setFlags(int);
+    method public void setMediaButtonReceiver(android.app.PendingIntent);
+    method public void setMetadata(android.support.v4.media.MediaMetadataCompat);
+    method public void setPlaybackState(android.support.v4.media.session.PlaybackStateCompat);
+    method public void setPlaybackToLocal(int);
+    method public void setPlaybackToRemote(android.support.v4.media.VolumeProviderCompat);
+    method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>);
+    method public void setQueueTitle(java.lang.CharSequence);
+    method public void setRatingType(int);
+    method public void setRepeatMode(int);
+    method public void setSessionActivity(android.app.PendingIntent);
+    method public void setShuffleMode(int);
+    field public static final java.lang.String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
+    field public static final java.lang.String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
+    field public static final java.lang.String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
+    field public static final java.lang.String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW";
+    field public static final java.lang.String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE";
+    field public static final java.lang.String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE";
+    field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+    field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
+    field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+    field public static final int MEDIA_ATTRIBUTE_ALBUM = 1; // 0x1
+    field public static final int MEDIA_ATTRIBUTE_ARTIST = 0; // 0x0
+    field public static final int MEDIA_ATTRIBUTE_PLAYLIST = 2; // 0x2
+  }
+
+  public static abstract class MediaSessionCompat.Callback {
+    ctor public MediaSessionCompat.Callback();
+    method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat);
+    method public void onAddQueueItem(android.support.v4.media.MediaDescriptionCompat, int);
+    method public void onCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+    method public void onCustomAction(java.lang.String, android.os.Bundle);
+    method public void onFastForward();
+    method public boolean onMediaButtonEvent(android.content.Intent);
+    method public void onPause();
+    method public void onPlay();
+    method public void onPlayFromMediaId(java.lang.String, android.os.Bundle);
+    method public void onPlayFromSearch(java.lang.String, android.os.Bundle);
+    method public void onPlayFromUri(android.net.Uri, android.os.Bundle);
+    method public void onPrepare();
+    method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle);
+    method public void onPrepareFromSearch(java.lang.String, android.os.Bundle);
+    method public void onPrepareFromUri(android.net.Uri, android.os.Bundle);
+    method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat);
+    method public deprecated void onRemoveQueueItemAt(int);
+    method public void onRewind();
+    method public void onSeekTo(long);
+    method public void onSetCaptioningEnabled(boolean);
+    method public void onSetRating(android.support.v4.media.RatingCompat);
+    method public void onSetRating(android.support.v4.media.RatingCompat, android.os.Bundle);
+    method public void onSetRepeatMode(int);
+    method public void onSetShuffleMode(int);
+    method public void onSkipToNext();
+    method public void onSkipToPrevious();
+    method public void onSkipToQueueItem(long);
+    method public void onStop();
+  }
+
+  public static abstract interface MediaSessionCompat.OnActiveChangeListener {
+    method public abstract void onActiveChanged();
+  }
+
+  public static final class MediaSessionCompat.QueueItem implements android.os.Parcelable {
+    ctor public MediaSessionCompat.QueueItem(android.support.v4.media.MediaDescriptionCompat, long);
+    method public int describeContents();
+    method public static android.support.v4.media.session.MediaSessionCompat.QueueItem fromQueueItem(java.lang.Object);
+    method public static java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem> fromQueueItemList(java.util.List<?>);
+    method public android.support.v4.media.MediaDescriptionCompat getDescription();
+    method public long getQueueId();
+    method public java.lang.Object getQueueItem();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.QueueItem> CREATOR;
+    field public static final int UNKNOWN_ID = -1; // 0xffffffff
+  }
+
+  public static final class MediaSessionCompat.Token implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.support.v4.media.session.MediaSessionCompat.Token fromToken(java.lang.Object);
+    method public java.lang.Object getToken();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.session.MediaSessionCompat.Token> CREATOR;
+  }
+
+  public class ParcelableVolumeInfo implements android.os.Parcelable {
+    ctor public ParcelableVolumeInfo(int, int, int, int, int);
+    ctor public ParcelableVolumeInfo(android.os.Parcel);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.session.ParcelableVolumeInfo> CREATOR;
+    field public int audioStream;
+    field public int controlType;
+    field public int currentVolume;
+    field public int maxVolume;
+    field public int volumeType;
+  }
+
+  public final class PlaybackStateCompat implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.support.v4.media.session.PlaybackStateCompat fromPlaybackState(java.lang.Object);
+    method public long getActions();
+    method public long getActiveQueueItemId();
+    method public long getBufferedPosition();
+    method public java.util.List<android.support.v4.media.session.PlaybackStateCompat.CustomAction> getCustomActions();
+    method public int getErrorCode();
+    method public java.lang.CharSequence getErrorMessage();
+    method public android.os.Bundle getExtras();
+    method public long getLastPositionUpdateTime();
+    method public float getPlaybackSpeed();
+    method public java.lang.Object getPlaybackState();
+    method public long getPosition();
+    method public int getState();
+    method public static int toKeyCode(long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+    field public static final long ACTION_PAUSE = 2L; // 0x2L
+    field public static final long ACTION_PLAY = 4L; // 0x4L
+    field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+    field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+    field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+    field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+    field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+    field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+    field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+    field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+    field public static final long ACTION_REWIND = 8L; // 0x8L
+    field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+    field public static final long ACTION_SET_CAPTIONING_ENABLED = 1048576L; // 0x100000L
+    field public static final long ACTION_SET_RATING = 128L; // 0x80L
+    field public static final long ACTION_SET_REPEAT_MODE = 262144L; // 0x40000L
+    field public static final long ACTION_SET_SHUFFLE_MODE = 2097152L; // 0x200000L
+    field public static final deprecated long ACTION_SET_SHUFFLE_MODE_ENABLED = 524288L; // 0x80000L
+    field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+    field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+    field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+    field public static final long ACTION_STOP = 1L; // 0x1L
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat> CREATOR;
+    field public static final int ERROR_CODE_ACTION_ABORTED = 10; // 0xa
+    field public static final int ERROR_CODE_APP_ERROR = 1; // 0x1
+    field public static final int ERROR_CODE_AUTHENTICATION_EXPIRED = 3; // 0x3
+    field public static final int ERROR_CODE_CONCURRENT_STREAM_LIMIT = 5; // 0x5
+    field public static final int ERROR_CODE_CONTENT_ALREADY_PLAYING = 8; // 0x8
+    field public static final int ERROR_CODE_END_OF_QUEUE = 11; // 0xb
+    field public static final int ERROR_CODE_NOT_AVAILABLE_IN_REGION = 7; // 0x7
+    field public static final int ERROR_CODE_NOT_SUPPORTED = 2; // 0x2
+    field public static final int ERROR_CODE_PARENTAL_CONTROL_RESTRICTED = 6; // 0x6
+    field public static final int ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED = 4; // 0x4
+    field public static final int ERROR_CODE_SKIP_LIMIT_REACHED = 9; // 0x9
+    field public static final int ERROR_CODE_UNKNOWN_ERROR = 0; // 0x0
+    field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+    field public static final int REPEAT_MODE_ALL = 2; // 0x2
+    field public static final int REPEAT_MODE_GROUP = 3; // 0x3
+    field public static final int REPEAT_MODE_INVALID = -1; // 0xffffffff
+    field public static final int REPEAT_MODE_NONE = 0; // 0x0
+    field public static final int REPEAT_MODE_ONE = 1; // 0x1
+    field public static final int SHUFFLE_MODE_ALL = 1; // 0x1
+    field public static final int SHUFFLE_MODE_GROUP = 2; // 0x2
+    field public static final int SHUFFLE_MODE_INVALID = -1; // 0xffffffff
+    field public static final int SHUFFLE_MODE_NONE = 0; // 0x0
+    field public static final int STATE_BUFFERING = 6; // 0x6
+    field public static final int STATE_CONNECTING = 8; // 0x8
+    field public static final int STATE_ERROR = 7; // 0x7
+    field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+    field public static final int STATE_NONE = 0; // 0x0
+    field public static final int STATE_PAUSED = 2; // 0x2
+    field public static final int STATE_PLAYING = 3; // 0x3
+    field public static final int STATE_REWINDING = 5; // 0x5
+    field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+    field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+    field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+    field public static final int STATE_STOPPED = 1; // 0x1
+  }
+
+  public static final class PlaybackStateCompat.Builder {
+    ctor public PlaybackStateCompat.Builder();
+    ctor public PlaybackStateCompat.Builder(android.support.v4.media.session.PlaybackStateCompat);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(java.lang.String, java.lang.String, int);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder addCustomAction(android.support.v4.media.session.PlaybackStateCompat.CustomAction);
+    method public android.support.v4.media.session.PlaybackStateCompat build();
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder setActions(long);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder setActiveQueueItemId(long);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder setBufferedPosition(long);
+    method public deprecated android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(java.lang.CharSequence);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder setErrorMessage(int, java.lang.CharSequence);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder setExtras(android.os.Bundle);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder setState(int, long, float, long);
+  }
+
+  public static final class PlaybackStateCompat.CustomAction implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.support.v4.media.session.PlaybackStateCompat.CustomAction fromCustomAction(java.lang.Object);
+    method public java.lang.String getAction();
+    method public java.lang.Object getCustomAction();
+    method public android.os.Bundle getExtras();
+    method public int getIcon();
+    method public java.lang.CharSequence getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.media.session.PlaybackStateCompat.CustomAction> CREATOR;
+  }
+
+  public static final class PlaybackStateCompat.CustomAction.Builder {
+    ctor public PlaybackStateCompat.CustomAction.Builder(java.lang.String, java.lang.CharSequence, int);
+    method public android.support.v4.media.session.PlaybackStateCompat.CustomAction build();
+    method public android.support.v4.media.session.PlaybackStateCompat.CustomAction.Builder setExtras(android.os.Bundle);
+  }
+
+}
+
diff --git a/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java b/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
index 698e37d..624637a 100644
--- a/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
+++ b/media-compat/api21/android/support/v4/media/session/MediaSessionCompatApi21.java
@@ -31,6 +31,7 @@
 import android.os.Parcelable;
 import android.os.ResultReceiver;
 import android.support.annotation.RequiresApi;
+import android.support.v4.os.BuildCompat;
 import android.util.Log;
 
 import java.lang.reflect.Field;
@@ -140,8 +141,9 @@
 
     public static boolean hasCallback(Object sessionObj) {
         Field callbackField = null;
+        String callbackFieldName = BuildCompat.isAtLeastP() ? "mCallbackHandler" : "mCallback";
         try {
-            callbackField = sessionObj.getClass().getDeclaredField("mCallback");
+            callbackField = sessionObj.getClass().getDeclaredField(callbackFieldName);
             if (callbackField != null) {
                 callbackField.setAccessible(true);
                 return callbackField.get(sessionObj) != null;
diff --git a/pathmap.mk b/pathmap.mk
index 3e73be7..5da9377 100644
--- a/pathmap.mk
+++ b/pathmap.mk
@@ -14,58 +14,54 @@
 # limitations under the License.
 #
 
-#
-# A list of all source roots under frameworks/support.
-#
-FRAMEWORKS_SUPPORT_SUBDIRS := \
-    annotations \
-    compat \
-    core-ui \
-    core-utils \
-    customtabs \
-    design \
-    dynamic-animation \
-    exifinterface \
-    fragment \
-    media-compat \
-    percent \
-    recommendation \
-    transition \
-    tv-provider \
-    v7/cardview \
-    v7/gridlayout \
-    v7/mediarouter \
-    v7/palette \
-    v7/preference \
-    v13 \
-    v14/preference \
-    v17/leanback \
-    v17/preference-leanback \
-    wear
-
-#
-# A version of FRAMEWORKS_SUPPORT_SUBDIRS that is expanded to full paths from
-# the root of the tree.
-#
-FRAMEWORKS_SUPPORT_JAVA_SRC_DIRS := \
-    $(addprefix frameworks/support/,$(FRAMEWORKS_SUPPORT_SUBDIRS)) \
-    frameworks/support/graphics/drawable/animated \
-    frameworks/support/graphics/drawable/static \
-    frameworks/support/v7/appcompat/src \
-    frameworks/support/v7/recyclerview/src \
-    frameworks/support/emoji/core/src \
-    frameworks/support/emoji/appcompat/src \
-    frameworks/support/emoji/bundled/src
-
-#
-# A list of support library modules.
-#
+# The list of support library modules made available to the platform docs build.
 FRAMEWORKS_SUPPORT_JAVA_LIBRARIES := \
-    $(foreach dir,$(FRAMEWORKS_SUPPORT_SUBDIRS),android-support-$(subst /,-,$(dir))) \
-    android-support-vectordrawable \
     android-support-animatedvectordrawable \
-    android-support-v7-appcompat \
-    android-support-v7-recyclerview \
+    android-support-annotations \
     android-support-emoji \
     android-support-emoji-appcompat \
-    android-support-emoji-bundled
+    android-support-emoji-bundled \
+    android-support-compat \
+    android-support-core-ui \
+    android-support-core-utils \
+    android-support-customtabs \
+    android-support-design \
+    android-support-dynamic-animation \
+    android-support-exifinterface \
+    android-support-fragment \
+    android-support-media-compat \
+    android-support-percent \
+    android-support-recommendation \
+    android-support-transition \
+    android-support-tv-provider \
+    android-support-v7-appcompat \
+    android-support-v7-cardview \
+    android-support-v7-gridlayout \
+    android-support-v7-mediarouter \
+    android-support-v7-palette \
+    android-support-v7-preference \
+    android-support-v7-recyclerview \
+    android-support-v13 \
+    android-support-v14-preference \
+    android-support-v17-leanback \
+    android-support-v17-preference-leanback \
+    android-support-vectordrawable \
+    android-support-wear
+
+# List of all Design transitive dependencies. Use this instead of android-support-design.
+ANDROID_SUPPORT_DESIGN_TARGETS := \
+    android-support-design \
+    android-support-compat \
+    android-support-core-ui \
+    android-support-core-utils \
+    android-support-fragment \
+    android-support-transition \
+    android-support-v7-appcompat \
+    android-support-v7-recyclerview \
+
+# List of all Car transitive dependencies. Use this instead of android-support-car.
+ANDROID_SUPPORT_CAR_TARGETS := \
+    android-support-car \
+    $(ANDROID_SUPPORT_DESIGN_TARGETS) \
+    android-support-media-compat \
+    android-support-v7-cardview
diff --git a/percent/Android.mk b/percent/Android.mk
deleted file mode 100644
index 66ce397..0000000
--- a/percent/Android.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must include it with
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-percent \
-#       android-support-compat
-#
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-percent
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_SHARED_ANDROID_LIBRARIES := android-support-v4
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/percent/api/27.1.0.txt b/percent/api/27.1.0.txt
new file mode 100644
index 0000000..088c0de
--- /dev/null
+++ b/percent/api/27.1.0.txt
@@ -0,0 +1,70 @@
+package android.support.percent {
+
+  public deprecated class PercentFrameLayout extends android.widget.FrameLayout {
+    ctor public PercentFrameLayout(android.content.Context);
+    ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet);
+    ctor public PercentFrameLayout(android.content.Context, android.util.AttributeSet, int);
+    method protected android.support.percent.PercentFrameLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.support.percent.PercentFrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+  }
+
+  public static deprecated class PercentFrameLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+    ctor public PercentFrameLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public PercentFrameLayout.LayoutParams(int, int);
+    ctor public PercentFrameLayout.LayoutParams(int, int, int);
+    ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public PercentFrameLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public PercentFrameLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+    ctor public PercentFrameLayout.LayoutParams(android.support.percent.PercentFrameLayout.LayoutParams);
+    method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+  }
+
+  public deprecated class PercentLayoutHelper {
+    ctor public PercentLayoutHelper(android.view.ViewGroup);
+    method public void adjustChildren(int, int);
+    method public static void fetchWidthAndHeight(android.view.ViewGroup.LayoutParams, android.content.res.TypedArray, int, int);
+    method public static android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo(android.content.Context, android.util.AttributeSet);
+    method public boolean handleMeasuredStateTooSmall();
+    method public void restoreOriginalParams();
+  }
+
+  public static deprecated class PercentLayoutHelper.PercentLayoutInfo {
+    ctor public PercentLayoutHelper.PercentLayoutInfo();
+    method public void fillLayoutParams(android.view.ViewGroup.LayoutParams, int, int);
+    method public deprecated void fillMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams, int, int);
+    method public void fillMarginLayoutParams(android.view.View, android.view.ViewGroup.MarginLayoutParams, int, int);
+    method public void restoreLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void restoreMarginLayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    field public float aspectRatio;
+    field public float bottomMarginPercent;
+    field public float endMarginPercent;
+    field public float heightPercent;
+    field public float leftMarginPercent;
+    field public float rightMarginPercent;
+    field public float startMarginPercent;
+    field public float topMarginPercent;
+    field public float widthPercent;
+  }
+
+  public static abstract deprecated interface PercentLayoutHelper.PercentLayoutParams {
+    method public abstract android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+  }
+
+  public deprecated class PercentRelativeLayout extends android.widget.RelativeLayout {
+    ctor public PercentRelativeLayout(android.content.Context);
+    ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet);
+    ctor public PercentRelativeLayout(android.content.Context, android.util.AttributeSet, int);
+    method protected android.support.percent.PercentRelativeLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.support.percent.PercentRelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+  }
+
+  public static deprecated class PercentRelativeLayout.LayoutParams extends android.widget.RelativeLayout.LayoutParams implements android.support.percent.PercentLayoutHelper.PercentLayoutParams {
+    ctor public PercentRelativeLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public PercentRelativeLayout.LayoutParams(int, int);
+    ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public PercentRelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    method public android.support.percent.PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo();
+  }
+
+}
+
diff --git a/preference-leanback/Android.mk b/preference-leanback/Android.mk
deleted file mode 100644
index e2ad1de..0000000
--- a/preference-leanback/Android.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-v17-preference-leanback \
-#       android-support-v17-leanback \
-#       android-support-v14-preference \
-#       android-support-v7-preference \
-#       android-support-v7-appcompat \
-#       android-support-v7-recyclerview \
-#       android-support-v4
-#
-# in their makefiles to include the resources in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_AAPT2_ONLY := true
-LOCAL_MODULE := android-support-v17-preference-leanback
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,api21) \
-    $(call all-java-files-under,src)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v17-leanback \
-    android-support-v14-preference \
-    android-support-v7-preference \
-    android-support-v7-appcompat \
-    android-support-v7-recyclerview \
-    android-support-v4
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/preference-leanback/api/27.1.0.txt b/preference-leanback/api/27.1.0.txt
new file mode 100644
index 0000000..4703ae3
--- /dev/null
+++ b/preference-leanback/api/27.1.0.txt
@@ -0,0 +1,62 @@
+package android.support.v17.preference {
+
+  public abstract class BaseLeanbackPreferenceFragment extends android.support.v14.preference.PreferenceFragment {
+    ctor public BaseLeanbackPreferenceFragment();
+  }
+
+  public class LeanbackListPreferenceDialogFragment extends android.support.v17.preference.LeanbackPreferenceDialogFragment {
+    ctor public LeanbackListPreferenceDialogFragment();
+    method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceMulti(java.lang.String);
+    method public static android.support.v17.preference.LeanbackListPreferenceDialogFragment newInstanceSingle(java.lang.String);
+    method public android.support.v7.widget.RecyclerView.Adapter onCreateAdapter();
+  }
+
+  public class LeanbackListPreferenceDialogFragment.AdapterMulti extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+    ctor public LeanbackListPreferenceDialogFragment.AdapterMulti(java.lang.CharSequence[], java.lang.CharSequence[], java.util.Set<java.lang.String>);
+    method public int getItemCount();
+    method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+    method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+    method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+  }
+
+  public class LeanbackListPreferenceDialogFragment.AdapterSingle extends android.support.v7.widget.RecyclerView.Adapter implements android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+    ctor public LeanbackListPreferenceDialogFragment.AdapterSingle(java.lang.CharSequence[], java.lang.CharSequence[], java.lang.CharSequence);
+    method public int getItemCount();
+    method public void onBindViewHolder(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder, int);
+    method public android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+    method public void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+  }
+
+  public static class LeanbackListPreferenceDialogFragment.ViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder implements android.view.View.OnClickListener {
+    ctor public LeanbackListPreferenceDialogFragment.ViewHolder(android.view.View, android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener);
+    method public android.view.ViewGroup getContainer();
+    method public android.widget.TextView getTitleView();
+    method public android.widget.Checkable getWidgetView();
+    method public void onClick(android.view.View);
+  }
+
+  public static abstract interface LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener {
+    method public abstract void onItemClick(android.support.v17.preference.LeanbackListPreferenceDialogFragment.ViewHolder);
+  }
+
+  public class LeanbackPreferenceDialogFragment extends android.app.Fragment {
+    ctor public LeanbackPreferenceDialogFragment();
+    method public android.support.v7.preference.DialogPreference getPreference();
+    field public static final java.lang.String ARG_KEY = "key";
+  }
+
+  public abstract class LeanbackPreferenceFragment extends android.support.v17.preference.BaseLeanbackPreferenceFragment {
+    ctor public LeanbackPreferenceFragment();
+    method public void setTitle(java.lang.CharSequence);
+  }
+
+  public abstract class LeanbackSettingsFragment extends android.app.Fragment implements android.support.v14.preference.PreferenceFragment.OnPreferenceDisplayDialogCallback android.support.v14.preference.PreferenceFragment.OnPreferenceStartFragmentCallback android.support.v14.preference.PreferenceFragment.OnPreferenceStartScreenCallback {
+    ctor public LeanbackSettingsFragment();
+    method public boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+    method public abstract void onPreferenceStartInitialScreen();
+    method public void startImmersiveFragment(android.app.Fragment);
+    method public void startPreferenceFragment(android.app.Fragment);
+  }
+
+}
+
diff --git a/recommendation/Android.mk b/recommendation/Android.mk
deleted file mode 100644
index 6249df7..0000000
--- a/recommendation/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must include it with
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-recommendation \
-#       android-support-v4
-#
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-recommendation
-LOCAL_SDK_VERSION := current
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v4
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/recommendation/api/27.1.0.txt b/recommendation/api/27.1.0.txt
new file mode 100644
index 0000000..ce69b31
--- /dev/null
+++ b/recommendation/api/27.1.0.txt
@@ -0,0 +1,132 @@
+package android.support.app.recommendation {
+
+  public final class ContentRecommendation {
+    method public java.lang.String getBackgroundImageUri();
+    method public int getBadgeImageResourceId();
+    method public int getColor();
+    method public android.graphics.Bitmap getContentImage();
+    method public android.support.app.recommendation.ContentRecommendation.IntentData getContentIntent();
+    method public java.lang.String[] getContentTypes();
+    method public android.support.app.recommendation.ContentRecommendation.IntentData getDismissIntent();
+    method public java.lang.String[] getGenres();
+    method public java.lang.String getGroup();
+    method public java.lang.String getIdTag();
+    method public java.lang.String getMaturityRating();
+    method public android.app.Notification getNotificationObject(android.content.Context);
+    method public java.lang.String getPricingType();
+    method public java.lang.String getPricingValue();
+    method public java.lang.String getPrimaryContentType();
+    method public int getProgressMax();
+    method public int getProgressValue();
+    method public long getRunningTime();
+    method public java.lang.String getSortKey();
+    method public java.lang.String getSourceName();
+    method public int getStatus();
+    method public java.lang.String getText();
+    method public java.lang.String getTitle();
+    method public boolean hasProgressInfo();
+    method public boolean isAutoDismiss();
+    method public void setAutoDismiss(boolean);
+    method public void setGroup(java.lang.String);
+    method public void setProgress(int, int);
+    method public void setSortKey(java.lang.String);
+    method public void setStatus(int);
+    field public static final java.lang.String CONTENT_MATURITY_ALL = "android.contentMaturity.all";
+    field public static final java.lang.String CONTENT_MATURITY_HIGH = "android.contentMaturity.high";
+    field public static final java.lang.String CONTENT_MATURITY_LOW = "android.contentMaturity.low";
+    field public static final java.lang.String CONTENT_MATURITY_MEDIUM = "android.contentMaturity.medium";
+    field public static final java.lang.String CONTENT_PRICING_FREE = "android.contentPrice.free";
+    field public static final java.lang.String CONTENT_PRICING_PREORDER = "android.contentPrice.preorder";
+    field public static final java.lang.String CONTENT_PRICING_PURCHASE = "android.contentPrice.purchase";
+    field public static final java.lang.String CONTENT_PRICING_RENTAL = "android.contentPrice.rental";
+    field public static final java.lang.String CONTENT_PRICING_SUBSCRIPTION = "android.contentPrice.subscription";
+    field public static final int CONTENT_STATUS_AVAILABLE = 2; // 0x2
+    field public static final int CONTENT_STATUS_PENDING = 1; // 0x1
+    field public static final int CONTENT_STATUS_READY = 0; // 0x0
+    field public static final int CONTENT_STATUS_UNAVAILABLE = 3; // 0x3
+    field public static final java.lang.String CONTENT_TYPE_APP = "android.contentType.app";
+    field public static final java.lang.String CONTENT_TYPE_BOOK = "android.contentType.book";
+    field public static final java.lang.String CONTENT_TYPE_COMIC = "android.contentType.comic";
+    field public static final java.lang.String CONTENT_TYPE_GAME = "android.contentType.game";
+    field public static final java.lang.String CONTENT_TYPE_MAGAZINE = "android.contentType.magazine";
+    field public static final java.lang.String CONTENT_TYPE_MOVIE = "android.contentType.movie";
+    field public static final java.lang.String CONTENT_TYPE_MUSIC = "android.contentType.music";
+    field public static final java.lang.String CONTENT_TYPE_NEWS = "android.contentType.news";
+    field public static final java.lang.String CONTENT_TYPE_PODCAST = "android.contentType.podcast";
+    field public static final java.lang.String CONTENT_TYPE_RADIO = "android.contentType.radio";
+    field public static final java.lang.String CONTENT_TYPE_SERIAL = "android.contentType.serial";
+    field public static final java.lang.String CONTENT_TYPE_SPORTS = "android.contentType.sports";
+    field public static final java.lang.String CONTENT_TYPE_TRAILER = "android.contentType.trailer";
+    field public static final java.lang.String CONTENT_TYPE_VIDEO = "android.contentType.video";
+    field public static final java.lang.String CONTENT_TYPE_WEBSITE = "android.contentType.website";
+    field public static final int INTENT_TYPE_ACTIVITY = 1; // 0x1
+    field public static final int INTENT_TYPE_BROADCAST = 2; // 0x2
+    field public static final int INTENT_TYPE_SERVICE = 3; // 0x3
+  }
+
+  public static final class ContentRecommendation.Builder {
+    ctor public ContentRecommendation.Builder();
+    method public android.support.app.recommendation.ContentRecommendation build();
+    method public android.support.app.recommendation.ContentRecommendation.Builder setAutoDismiss(boolean);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setBackgroundImageUri(java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setBadgeIcon(int);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setColor(int);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setContentImage(android.graphics.Bitmap);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setContentIntentData(int, android.content.Intent, int, android.os.Bundle);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setContentTypes(java.lang.String[]);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setDismissIntentData(int, android.content.Intent, int, android.os.Bundle);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setGenres(java.lang.String[]);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setGroup(java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setIdTag(java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setMaturityRating(java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setPricingInformation(java.lang.String, java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setProgress(int, int);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setRunningTime(long);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setSortKey(java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setSourceName(java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setStatus(int);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setText(java.lang.String);
+    method public android.support.app.recommendation.ContentRecommendation.Builder setTitle(java.lang.String);
+  }
+
+  public static abstract class ContentRecommendation.ContentMaturity implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class ContentRecommendation.ContentPricing implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class ContentRecommendation.ContentStatus implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class ContentRecommendation.ContentType implements java.lang.annotation.Annotation {
+  }
+
+  public static class ContentRecommendation.IntentData {
+    ctor public ContentRecommendation.IntentData();
+  }
+
+  public static abstract class ContentRecommendation.IntentType implements java.lang.annotation.Annotation {
+  }
+
+  public final class RecommendationExtender implements android.app.Notification.Extender {
+    ctor public RecommendationExtender();
+    ctor public RecommendationExtender(android.app.Notification);
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+    method public java.lang.String[] getContentTypes();
+    method public java.lang.String[] getGenres();
+    method public java.lang.String getMaturityRating();
+    method public java.lang.String getPricingType();
+    method public java.lang.String getPricingValue();
+    method public java.lang.String getPrimaryContentType();
+    method public long getRunningTime();
+    method public int getStatus();
+    method public android.support.app.recommendation.RecommendationExtender setContentTypes(java.lang.String[]);
+    method public android.support.app.recommendation.RecommendationExtender setGenres(java.lang.String[]);
+    method public android.support.app.recommendation.RecommendationExtender setMaturityRating(java.lang.String);
+    method public android.support.app.recommendation.RecommendationExtender setPricingInformation(java.lang.String, java.lang.String);
+    method public android.support.app.recommendation.RecommendationExtender setRunningTime(long);
+    method public android.support.app.recommendation.RecommendationExtender setStatus(int);
+  }
+
+}
+
diff --git a/recyclerview-selection/Android.mk b/recyclerview-selection/Android.mk
deleted file mode 100644
index 511806f..0000000
--- a/recyclerview-selection/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2017 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)
-
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-recyclerview-selection
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v7-recyclerview \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/recyclerview-selection/tests/AndroidManifest.xml b/recyclerview-selection/tests/AndroidManifest.xml
index 144adb5..01f1904 100644
--- a/recyclerview-selection/tests/AndroidManifest.xml
+++ b/recyclerview-selection/tests/AndroidManifest.xml
@@ -15,9 +15,8 @@
   ~ limitations under the License.
   -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:tools="http://schemas.android.com/tools"
           package="androidx.widget.recyclerview.selection.test">
-    <uses-sdk android:minSdkVersion="14" />
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
 
     <application android:supportsRtl="true">
     </application>
diff --git a/room/compiler/build.gradle b/room/compiler/build.gradle
index 0d62cf8..c3319ac 100644
--- a/room/compiler/build.gradle
+++ b/room/compiler/build.gradle
@@ -49,6 +49,7 @@
     compile(JAVAPOET)
     compile(ANTLR)
     compile(XERIAL)
+    compile(KOTLIN_METADATA)
     compile(APACHE_COMMONS_CODEC)
     testCompile(GOOGLE_COMPILE_TESTING)
     testCompile project(":paging:common")
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt
index b2d6231..acc3111 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/ext/javapoet_ext.kt
@@ -116,6 +116,7 @@
     val SET = ClassName.get("java.util", "Set")
     val STRING = ClassName.get("java.lang", "String")
     val INTEGER = ClassName.get("java.lang", "Integer")
+    val OPTIONAL = ClassName.get("java.util", "Optional")
 }
 
 object GuavaBaseTypeNames {
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt
index 0ba311e..3d73948 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/processor/PojoProcessor.kt
@@ -47,6 +47,13 @@
 import com.google.auto.common.AnnotationMirrors
 import com.google.auto.common.MoreElements
 import com.google.auto.common.MoreTypes
+import me.eugeniomarletti.kotlin.metadata.KotlinClassMetadata
+import me.eugeniomarletti.kotlin.metadata.KotlinMetadataUtils
+import me.eugeniomarletti.kotlin.metadata.jvm.getJvmConstructorSignature
+import me.eugeniomarletti.kotlin.metadata.kotlinMetadata
+import org.jetbrains.kotlin.serialization.ProtoBuf
+import org.jetbrains.kotlin.serialization.deserialization.NameResolver
+import javax.annotation.processing.ProcessingEnvironment
 import javax.lang.model.element.ExecutableElement
 import javax.lang.model.element.Modifier.ABSTRACT
 import javax.lang.model.element.Modifier.PRIVATE
@@ -69,12 +76,28 @@
                     val element: TypeElement,
                     val bindingScope: FieldProcessor.BindingScope,
                     val parent: EmbeddedField?,
-                    val referenceStack: LinkedHashSet<Name> = LinkedHashSet<Name>()) {
+                    val referenceStack: LinkedHashSet<Name> = LinkedHashSet())
+    : KotlinMetadataUtils {
     val context = baseContext.fork(element)
+
+    // for KotlinMetadataUtils
+    override val processingEnv: ProcessingEnvironment
+        get() = context.processingEnv
+
+    // opportunistic kotlin metadata
+    private val kotlinMetadata by lazy {
+        try {
+            element.kotlinMetadata
+        } catch (throwable: Throwable) {
+            context.logger.d(element, "failed to read get kotlin metadata from %s", element)
+        }
+    }
+
     companion object {
         val PROCESSED_ANNOTATIONS = listOf(ColumnInfo::class, Embedded::class,
-                    Relation::class)
+                Relation::class)
     }
+
     fun process(): Pojo {
         return context.cache.pojos.get(Cache.PojoKey(element, bindingScope, parent), {
             referenceStack.add(element.qualifiedName)
@@ -94,9 +117,9 @@
                     !it.hasAnnotation(Ignore::class)
                             && !it.hasAnyOf(STATIC)
                             && (!it.hasAnyOf(TRANSIENT)
-                                    || it.hasAnnotation(ColumnInfo::class)
-                                    || it.hasAnnotation(Embedded::class)
-                                    || it.hasAnnotation(Relation::class))
+                            || it.hasAnnotation(ColumnInfo::class)
+                            || it.hasAnnotation(Embedded::class)
+                            || it.hasAnnotation(Relation::class))
                 }
                 .groupBy { field ->
                     context.checker.check(
@@ -199,6 +222,40 @@
                 constructor = constructor)
     }
 
+    /**
+     * Retrieves the parameter names of a method. If the method is inherited from a dependency
+     * module, the parameter name is not available (not in java spec). For kotlin, since parameter
+     * names are part of the API, we can read them via the kotlin metadata annotation.
+     * <p>
+     * Since we are using an unofficial library to read the metadata, all access to that code
+     * is safe guarded to avoid unexpected failures. In other words, it is a best effort but
+     * better than not supporting these until JB provides a proper API.
+     */
+    private fun getParamNames(method: ExecutableElement): List<String> {
+        val paramNames = method.parameters.map { it.simpleName.toString() }
+        if (paramNames.isEmpty()) {
+            return emptyList()
+        }
+        (kotlinMetadata as? KotlinClassMetadata)?.let {
+            try {
+                val kotlinParams = it
+                        .findConstructor(method)
+                        ?.tryGetParameterNames(it.data.nameResolver)
+                if (kotlinParams != null) {
+                    return kotlinParams
+                }
+            } catch (throwable: Throwable) {
+                context.logger.d(
+                        method,
+                        "Cannot read kotlin metadata, falling back to jvm signature. %s",
+                        throwable.message as Any)
+            }
+        }
+        // either it is java or something went wrong w/ kotlin metadata. default to whatever
+        // we can read.
+        return paramNames
+    }
+
     private fun chooseConstructor(
             myFields: List<Field>,
             embedded: List<EmbeddedField>,
@@ -208,10 +265,12 @@
         val fieldMap = myFields.associateBy { it.name }
         val embeddedMap = embedded.associateBy { it.field.name }
         val typeUtils = context.processingEnv.typeUtils
-        val failedConstructors = mutableMapOf<ExecutableElement, List<Constructor.Param?>>()
+        // list of param names -> matched params pairs for each failed constructor
+        val failedConstructors = arrayListOf<FailedConstructor>()
         val goodConstructors = constructors.map { constructor ->
-            val params = constructor.parameters.map param@ { param ->
-                val paramName = param.simpleName.toString()
+            val parameterNames = getParamNames(constructor)
+            val params = constructor.parameters.mapIndexed param@ { index, param ->
+                val paramName = parameterNames[index]
                 val paramType = param.asType()
 
                 val matches = fun(field: Field?): Boolean {
@@ -261,7 +320,7 @@
                 } else {
                     context.logger.e(param, ProcessorErrors.ambigiousConstructor(
                             pojo = element.qualifiedName.toString(),
-                            paramName = param.simpleName.toString(),
+                            paramName = paramName,
                             matchingFields = matchingFields.map { it.getPath() }
                                     + embedded.map { it.field.getPath() }
                     ))
@@ -269,7 +328,7 @@
                 }
             }
             if (params.any { it == null }) {
-                failedConstructors.put(constructor, params)
+                failedConstructors.add(FailedConstructor(constructor, parameterNames, params))
                 null
             } else {
                 @Suppress("UNCHECKED_CAST")
@@ -278,12 +337,8 @@
         }.filterNotNull()
         if (goodConstructors.isEmpty()) {
             if (failedConstructors.isNotEmpty()) {
-                val failureMsg = failedConstructors.entries.joinToString("\n") { entry ->
-                    val paramsMatching = entry.key.parameters.withIndex().joinToString(", ") {
-                        "param:${it.value.simpleName} -> matched field:" +
-                                (entry.value[it.index]?.log() ?: "unmatched")
-                    }
-                    "${entry.key} -> [$paramsMatching]"
+                val failureMsg = failedConstructors.joinToString("\n") { entry ->
+                    entry.log()
                 }
                 context.logger.e(element, ProcessorErrors.MISSING_POJO_CONSTRUCTOR +
                         "\nTried the following constructors but they failed to match:\n$failureMsg")
@@ -512,7 +567,7 @@
         val recursiveTailTypeName = typeElement.qualifiedName
 
         val referenceRecursionList = mutableListOf<Name>()
-        with (referenceRecursionList) {
+        with(referenceRecursionList) {
             add(recursiveTailTypeName)
             addAll(referenceStack.toList().takeLastWhile { it != recursiveTailTypeName })
             add(recursiveTailTypeName)
@@ -650,4 +705,51 @@
         }
         return candidates.first()
     }
+
+    /**
+     * Finds the kotlin meteadata for a constructor.
+     */
+    private fun KotlinClassMetadata.findConstructor(
+            executableElement: ExecutableElement
+    ): ProtoBuf.Constructor? {
+        val (nameResolver, classProto) = data
+        val jvmSignature = executableElement.jvmMethodSignature
+        // find constructor
+        return classProto.constructorList.singleOrNull {
+            it.getJvmConstructorSignature(nameResolver, classProto.typeTable) == jvmSignature
+        }
+    }
+
+    /**
+     * Tries to get the parameter names of a kotlin method
+     */
+    private fun ProtoBuf.Constructor.tryGetParameterNames(
+            nameResolver: NameResolver
+    ): List<String>? {
+        return valueParameterList.map {
+            if (it.hasName()) {
+                nameResolver.getName(it.name)
+                        .asString()
+                        .replace("`", "")
+                        .removeSuffix("?")
+                        .trim()
+            } else {
+                // early return bad parameter
+                return null
+            }
+        }
+    }
+
+    private data class FailedConstructor(
+            val method: ExecutableElement,
+            val params: List<String>,
+            val matches: List<Constructor.Param?>
+    ) {
+        fun log(): String {
+            val logPerParam = params.withIndex().joinToString(", ") {
+                "param:${it.value} -> matched field:" + (matches[it.index]?.log() ?: "unmatched")
+            }
+            return "$method -> [$logPerParam]"
+        }
+    }
 }
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/TypeAdapterStore.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/TypeAdapterStore.kt
index 1acaae6..13359f7 100644
--- a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/TypeAdapterStore.kt
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/TypeAdapterStore.kt
@@ -17,6 +17,7 @@
 package android.arch.persistence.room.solver
 
 import android.arch.persistence.room.Entity
+import android.arch.persistence.room.ext.CommonTypeNames
 import android.arch.persistence.room.ext.GuavaBaseTypeNames
 import android.arch.persistence.room.ext.hasAnnotation
 import android.arch.persistence.room.ext.typeName
@@ -43,6 +44,7 @@
 import android.arch.persistence.room.solver.query.result.GuavaOptionalQueryResultAdapter
 import android.arch.persistence.room.solver.query.result.InstantQueryResultBinder
 import android.arch.persistence.room.solver.query.result.ListQueryResultAdapter
+import android.arch.persistence.room.solver.query.result.OptionalQueryResultAdapter
 import android.arch.persistence.room.solver.query.result.PojoRowAdapter
 import android.arch.persistence.room.solver.query.result.QueryResultAdapter
 import android.arch.persistence.room.solver.query.result.QueryResultBinder
@@ -285,6 +287,13 @@
                 val typeArg = declared.typeArguments.first()
                 val rowAdapter = findRowAdapter(typeArg, query) ?: return null
                 return GuavaOptionalQueryResultAdapter(rowAdapter)
+            } else if (
+                    context.processingEnv.typeUtils.erasure(typeMirror).typeName() ==
+                    CommonTypeNames.OPTIONAL) {
+                // Handle java.util.Optional similarly.
+                val typeArg = declared.typeArguments.first()
+                val rowAdapter = findRowAdapter(typeArg, query) ?: return null
+                return OptionalQueryResultAdapter(SingleEntityQueryResultAdapter(rowAdapter))
             } else if (MoreTypes.isTypeOf(java.util.List::class.java, typeMirror)) {
                 val typeArg = declared.typeArguments.first()
                 val rowAdapter = findRowAdapter(typeArg, query) ?: return null
diff --git a/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/OptionalQueryResultAdapter.kt b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/OptionalQueryResultAdapter.kt
new file mode 100644
index 0000000..6f08622
--- /dev/null
+++ b/room/compiler/src/main/kotlin/android/arch/persistence/room/solver/query/result/OptionalQueryResultAdapter.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2018 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.arch.persistence.room.solver.query.result
+
+import android.arch.persistence.room.ext.CommonTypeNames
+import android.arch.persistence.room.ext.L
+import android.arch.persistence.room.ext.T
+import android.arch.persistence.room.ext.typeName
+import android.arch.persistence.room.solver.CodeGenScope
+import com.squareup.javapoet.ParameterizedTypeName
+
+/**
+ * Wraps a row adapter when there is only 1 item in the result, and the result's outer type is
+ * {@link java.util.Optional}.
+ *
+ * <p>n.b. this will only be useful if the project uses Java 8.
+ */
+class OptionalQueryResultAdapter(private val resultAdapter: SingleEntityQueryResultAdapter)
+    : QueryResultAdapter(resultAdapter.rowAdapter) {
+    val type = resultAdapter.rowAdapter?.out
+    override fun convert(
+            outVarName: String, cursorVarName: String, scope: CodeGenScope) {
+        scope.builder().apply {
+            val valueVarName = scope.getTmpVar("_value")
+            resultAdapter?.convert(valueVarName, cursorVarName, scope)
+            addStatement(
+                    "final $T $L = $T.ofNullable($L)",
+                    ParameterizedTypeName.get(CommonTypeNames.OPTIONAL, type?.typeName()) ,
+                    outVarName,
+                    CommonTypeNames.OPTIONAL,
+                    valueVarName)
+        }
+    }
+}
diff --git a/room/integration-tests/kotlintestapp/build.gradle b/room/integration-tests/kotlintestapp/build.gradle
index 64db19c..421e192 100644
--- a/room/integration-tests/kotlintestapp/build.gradle
+++ b/room/integration-tests/kotlintestapp/build.gradle
@@ -43,7 +43,6 @@
     implementation(project(":arch:runtime"))
 
     implementation(SUPPORT_APPCOMPAT, libs.support_exclude_config)
-    kapt project(":room:compiler")
     kaptAndroidTest project(":room:compiler")
 
     androidTestImplementation(TEST_RUNNER) {
diff --git a/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json b/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json
index 6362ae8..014d98c 100644
--- a/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json
+++ b/room/integration-tests/kotlintestapp/schemas/android.arch.persistence.room.integration.kotlintestapp.TestDatabase/1.json
@@ -2,7 +2,7 @@
   "formatVersion": 1,
   "database": {
     "version": 1,
-    "identityHash": "0729a81dd89abcbdd49f45ab0807043d",
+    "identityHash": "f78c9a055453bd6db377a3fcc3007e54",
     "entities": [
       {
         "tableName": "Book",
@@ -199,11 +199,37 @@
         },
         "indices": [],
         "foreignKeys": []
+      },
+      {
+        "tableName": "DataClassFromDependency",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": true
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
       }
     ],
     "setupQueries": [
       "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
-      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"0729a81dd89abcbdd49f45ab0807043d\")"
+      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"f78c9a055453bd6db377a3fcc3007e54\")"
     ]
   }
 }
\ No newline at end of file
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt
index 74d8853..33162ee 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/TestDatabase.kt
@@ -19,19 +19,22 @@
 import android.arch.persistence.room.Database
 import android.arch.persistence.room.RoomDatabase
 import android.arch.persistence.room.integration.kotlintestapp.dao.BooksDao
+import android.arch.persistence.room.integration.kotlintestapp.dao.DependencyDao
 import android.arch.persistence.room.integration.kotlintestapp.dao.DerivedDao
 import android.arch.persistence.room.integration.kotlintestapp.vo.Author
 import android.arch.persistence.room.integration.kotlintestapp.vo.Book
 import android.arch.persistence.room.integration.kotlintestapp.vo.BookAuthor
+import android.arch.persistence.room.integration.kotlintestapp.vo.DataClassFromDependency
 import android.arch.persistence.room.integration.kotlintestapp.vo.NoArgClass
 import android.arch.persistence.room.integration.kotlintestapp.vo.Publisher
 
-@Database(entities = arrayOf(Book::class, Author::class, Publisher::class, BookAuthor::class,
-        NoArgClass::class),
-        version = 1)
+@Database(entities = [Book::class, Author::class, Publisher::class, BookAuthor::class,
+    NoArgClass::class, DataClassFromDependency::class], version = 1)
 abstract class TestDatabase : RoomDatabase() {
 
     abstract fun booksDao(): BooksDao
 
     abstract fun derivedDao(): DerivedDao
+
+    abstract fun dependencyDao(): DependencyDao
 }
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/dao/BooksDao.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/dao/BooksDao.kt
index c3c5ca7..d8cba31 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/dao/BooksDao.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/dao/BooksDao.kt
@@ -67,6 +67,9 @@
     fun getBookFlowable(bookId: String): Flowable<Book>
 
     @Query("SELECT * FROM book WHERE bookId = :bookId")
+    fun getBookJavaOptional(bookId: String): java.util.Optional<Book>
+
+    @Query("SELECT * FROM book WHERE bookId = :bookId")
     fun getBookOptional(bookId: String): Optional<Book>
 
     @Query("SELECT * FROM book WHERE bookId = :bookId")
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt
index d85ba28..82a8ab5 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/BooksDaoTest.kt
@@ -49,6 +49,24 @@
     }
 
     @Test
+    fun bookByIdJavaOptional() {
+        booksDao.addAuthors(TestUtil.AUTHOR_1)
+        booksDao.addPublishers(TestUtil.PUBLISHER)
+        booksDao.addBooks(TestUtil.BOOK_1)
+
+        assertThat(
+                booksDao.getBookJavaOptional(TestUtil.BOOK_1.bookId),
+                `is`<java.util.Optional<Book>>(java.util.Optional.of(TestUtil.BOOK_1)))
+    }
+
+    @Test
+    fun bookByIdJavaOptionalEmpty() {
+        assertThat(
+                booksDao.getBookJavaOptional(TestUtil.BOOK_1.bookId),
+                `is`<java.util.Optional<Book>>(java.util.Optional.empty()))
+    }
+
+    @Test
     fun bookByIdOptional() {
         booksDao.addAuthors(TestUtil.AUTHOR_1)
         booksDao.addPublishers(TestUtil.PUBLISHER)
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/DependencyDaoTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/DependencyDaoTest.kt
new file mode 100644
index 0000000..2008fca
--- /dev/null
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/android/arch/persistence/room/integration/kotlintestapp/test/DependencyDaoTest.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2018 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.arch.persistence.room.integration.kotlintestapp.test
+
+import android.arch.persistence.room.integration.kotlintestapp.vo.DataClassFromDependency
+import android.support.test.runner.AndroidJUnit4
+import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class DependencyDaoTest : TestDatabaseTest() {
+    @Test
+    fun insertAndGet() {
+        val dao = database.dependencyDao()
+        val data = DataClassFromDependency(
+                id = 3,
+                name = "foo"
+        )
+        dao.insert(data)
+        assertThat(dao.selectAll(), `is`(listOf(data)))
+    }
+}
\ No newline at end of file
diff --git a/room/integration-tests/kotlintestapp/src/main/java/android/arch/persistence/room/integration/kotlintestapp/dao/DependencyDao.kt b/room/integration-tests/kotlintestapp/src/main/java/android/arch/persistence/room/integration/kotlintestapp/dao/DependencyDao.kt
new file mode 100644
index 0000000..efe3c5b
--- /dev/null
+++ b/room/integration-tests/kotlintestapp/src/main/java/android/arch/persistence/room/integration/kotlintestapp/dao/DependencyDao.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 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.arch.persistence.room.integration.kotlintestapp.dao
+
+import android.arch.persistence.room.Dao
+import android.arch.persistence.room.Insert
+import android.arch.persistence.room.OnConflictStrategy
+import android.arch.persistence.room.Query
+import android.arch.persistence.room.integration.kotlintestapp.vo.DataClassFromDependency
+
+@Dao
+interface DependencyDao {
+    @Query("select * from DataClassFromDependency")
+    fun selectAll(): List<DataClassFromDependency>
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    fun insert(vararg input: DataClassFromDependency)
+}
diff --git a/room/integration-tests/kotlintestapp/src/main/java/android/arch/persistence/room/integration/kotlintestapp/vo/DataClassFromDependency.kt b/room/integration-tests/kotlintestapp/src/main/java/android/arch/persistence/room/integration/kotlintestapp/vo/DataClassFromDependency.kt
new file mode 100644
index 0000000..258ada6
--- /dev/null
+++ b/room/integration-tests/kotlintestapp/src/main/java/android/arch/persistence/room/integration/kotlintestapp/vo/DataClassFromDependency.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2018 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.arch.persistence.room.integration.kotlintestapp.vo
+
+import android.arch.persistence.room.Entity
+import android.arch.persistence.room.PrimaryKey
+
+/**
+ * used to test the case where kotlin classes from dependencies cannot be read properly.
+ * Since the main db in this app is in the test module, the original classes serve as a dependency.
+ */
+@Entity
+data class DataClassFromDependency(
+        @PrimaryKey(autoGenerate = true)
+        val id: Int,
+        val name: String)
\ No newline at end of file
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java
index dff2940..ba78fe8 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/NestedRecyclerViewActivity.java
@@ -18,6 +18,7 @@
 
 import android.graphics.Color;
 import android.os.Parcelable;
+import android.support.annotation.NonNull;
 import android.support.v7.widget.DividerItemDecoration;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -135,7 +136,7 @@
         }
 
         @Override
-        public void onViewRecycled(ViewHolder holder) {
+        public void onViewRecycled(@NonNull ViewHolder holder) {
             mSavedStates.set(holder.getAdapterPosition(),
                     holder.mRecyclerView.getLayoutManager().onSaveInstanceState());
         }
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java
index 679af89..e2b5643 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/widget/touch/ItemTouchHelperActivity.java
@@ -16,14 +16,11 @@
 
 package com.example.android.supportv7.widget.touch;
 
-import com.example.android.supportv7.Cheeses;
-import com.example.android.supportv7.R;
-import com.example.android.supportv7.widget.util.ConfigToggle;
-import com.example.android.supportv7.widget.util.ConfigViewHolder;
-
 import android.app.Activity;
 import android.graphics.Canvas;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.support.v7.widget.CardView;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -34,6 +31,11 @@
 import android.widget.Button;
 import android.widget.TextView;
 
+import com.example.android.supportv7.Cheeses;
+import com.example.android.supportv7.R;
+import com.example.android.supportv7.widget.util.ConfigToggle;
+import com.example.android.supportv7.widget.util.ConfigViewHolder;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -103,32 +105,34 @@
     public ItemTouchHelper.Callback createCallback() {
         return new ItemTouchHelper.Callback() {
             @Override
-            public int getMovementFlags(RecyclerView recyclerView,
-                    RecyclerView.ViewHolder viewHolder) {
+            public int getMovementFlags(@NonNull RecyclerView recyclerView,
+                    @NonNull RecyclerView.ViewHolder viewHolder) {
                 return ItemTouchHelperActivity.this.getMovementFlags(recyclerView, viewHolder);
             }
 
             @Override
-            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
-                    RecyclerView.ViewHolder target) {
+            public boolean onMove(@NonNull RecyclerView recyclerView,
+                    @NonNull RecyclerView.ViewHolder viewHolder,
+                    @NonNull RecyclerView.ViewHolder target) {
                 mAdapter.move(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                 return true;
             }
 
             @Override
-            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
                 mAdapter.delete(viewHolder.getAdapterPosition());
             }
 
             @Override
-            public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
+            public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder,
+                    int actionState) {
                 super.onSelectedChanged(viewHolder, actionState);
                 ItemTouchHelperActivity.this.onSelectedChanged(viewHolder, actionState);
             }
 
             @Override
-            public void onChildDraw(Canvas c, RecyclerView recyclerView,
-                    RecyclerView.ViewHolder viewHolder,
+            public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
+                    @NonNull RecyclerView.ViewHolder viewHolder,
                     float dX, float dY, int actionState, boolean isCurrentlyActive) {
                 if (ItemTouchHelperActivity.this.onChildDraw(c, recyclerView, viewHolder,
                         dX, dY, actionState, isCurrentlyActive)) {
@@ -139,7 +143,7 @@
             }
 
             @Override
-            public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
+            public void onChildDrawOver(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
                     RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
                     boolean isCurrentlyActive) {
                 if (ItemTouchHelperActivity.this.onChildDrawOver(c, recyclerView, viewHolder,
@@ -161,7 +165,8 @@
             }
 
             @Override
-            public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+            public void clearView(@NonNull RecyclerView recyclerView,
+                    @NonNull RecyclerView.ViewHolder viewHolder) {
                 super.clearView(recyclerView, viewHolder);
                 ItemTouchHelperActivity.this.clearView(viewHolder);
             }
@@ -203,10 +208,9 @@
     }
 
     public ItemTouchViewHolder onCreateViewHolder(ViewGroup parent) {
-        ItemTouchViewHolder itemTouchViewHolder = new ItemTouchViewHolder(
+        return new ItemTouchViewHolder(
                 LayoutInflater.from(parent.getContext())
                         .inflate(R.layout.touch_item, parent, false));
-        return itemTouchViewHolder;
     }
 
     abstract public int getMovementFlags(RecyclerView recyclerView,
diff --git a/samples/SupportCarDemos/src/main/res/layout/activity_paged_list_view.xml b/samples/SupportCarDemos/src/main/res/layout/activity_paged_list_view.xml
index 5b9a1a5..bafa40c 100644
--- a/samples/SupportCarDemos/src/main/res/layout/activity_paged_list_view.xml
+++ b/samples/SupportCarDemos/src/main/res/layout/activity_paged_list_view.xml
@@ -24,6 +24,6 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         app:showPagedListViewDivider="true"
-        app:offsetScrollBar="true"/>
+        app:gutter="start"/>
 </FrameLayout>
 
diff --git a/samples/SupportContentDemos/build.gradle b/samples/SupportContentDemos/build.gradle
index ad52f77..d2b55f9 100644
--- a/samples/SupportContentDemos/build.gradle
+++ b/samples/SupportContentDemos/build.gradle
@@ -19,7 +19,9 @@
 }
 
 dependencies {
-    implementation(project(":design"))
+    implementation("com.android.support:design:28.0.0-SNAPSHOT", { transitive = false })
+    implementation(project(":transition"))
+    implementation(project(":recyclerview-v7"))
     implementation(project(":appcompat-v7"))
     implementation(project(":support-content"))
 }
diff --git a/samples/SupportDesignDemos/build.gradle b/samples/SupportDesignDemos/build.gradle
index 89dc8b0..51d6884 100644
--- a/samples/SupportDesignDemos/build.gradle
+++ b/samples/SupportDesignDemos/build.gradle
@@ -3,7 +3,10 @@
 }
 
 dependencies {
-    implementation(project(":design"))
+    implementation("com.android.support:design:28.0.0-SNAPSHOT", { transitive = false })
+    implementation(project(":transition"))
+    implementation(project(":recyclerview-v7"))
+    implementation(project(":appcompat-v7"))
 }
 
 android {
diff --git a/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml b/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml
index f469af2..4d1dca7 100644
--- a/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml
+++ b/samples/SupportPreferenceDemos/src/main/res/xml/preferences.xml
@@ -31,6 +31,12 @@
         android:title="@string/title_stylish_preference"
         android:summary="@string/summary_stylish_preference" />
 
+    <Preference
+        android:key="preference_with_icon"
+        android:title="Preference with icon"
+        android:summary="This preference has an icon"
+        android:icon="@android:drawable/ic_menu_camera" />
+
     <PreferenceCategory
         android:title="@string/inline_preferences">
 
@@ -39,6 +45,11 @@
             android:title="@string/title_checkbox_preference"
             android:summary="@string/summary_checkbox_preference" />
 
+        <SwitchPreference
+            android:key="switch_preference"
+            android:title="Switch preference"
+            android:summary="This is a switch" />
+
         <DropDownPreference
             android:key="dropdown_preference"
             android:title="@string/title_dropdown_preference"
diff --git a/samples/SupportSliceDemos/OWNERS b/samples/SupportSliceDemos/OWNERS
new file mode 100644
index 0000000..921a517
--- /dev/null
+++ b/samples/SupportSliceDemos/OWNERS
@@ -0,0 +1,2 @@
+jmonk@google.com
+madym@google.com
diff --git a/samples/SupportSliceDemos/build.gradle b/samples/SupportSliceDemos/build.gradle
new file mode 100644
index 0000000..a0b236d
--- /dev/null
+++ b/samples/SupportSliceDemos/build.gradle
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+import static android.support.dependencies.DependenciesKt.*
+
+plugins {
+    id("SupportAndroidTestAppPlugin")
+}
+
+dependencies {
+    implementation(project(":slices-view"))
+    implementation(project(":slices-builders"))
+    implementation(project(":slices-core"))
+    implementation("com.android.support:design:28.0.0-SNAPSHOT", { transitive = false })
+    implementation(project(":transition"))
+    implementation(project(":recyclerview-v7"))
+    implementation(project(":appcompat-v7"))
+    implementation(project(":cardview-v7"))
+    api(ARCH_LIFECYCLE_EXTENSIONS, libs.exclude_annotations_transitive)
+}
+
+android {
+    defaultConfig {
+        applicationId "com.example.androidx.slice.demos"
+    }
+}
+
+supportTestApp {
+    minSdkVersion = 26
+}
diff --git a/samples/SupportSliceDemos/src/main/AndroidManifest.xml b/samples/SupportSliceDemos/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..5285c34
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/AndroidManifest.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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="com.example.androidx.slice.demos">
+
+    <uses-sdk tools:overrideLibrary="androidx.app.slice.view, androidx.app.slice.builders, androidx.app.slice.core" />
+
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.BIND_SLICE" />
+
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:roundIcon="@mipmap/ic_launcher_round"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity
+            android:name=".SliceBrowser"
+            android:label="@string/app_name"
+            android:theme="@style/AppTheme.NoActionBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+            <intent-filter>
+                <action android:name="androidx.intent.SLICE_ACTION"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
+
+        <provider android:authorities="com.example.androidx.slice.demos"
+                  android:name=".SampleSliceProvider"
+                  android:grantUriPermissions="true">
+            <intent-filter>
+                <action android:name="androidx.intent.SLICE_ACTION"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </provider>
+
+        <receiver
+            android:name=".SliceBroadcastReceiver"
+            android:exported="true" >
+            <intent-filter>
+                <action android:name="com.example.androidx.slice.action.*"/>
+            </intent-filter>
+        </receiver>
+    </application>
+
+</manifest>
diff --git a/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
new file mode 100644
index 0000000..85af90f
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
@@ -0,0 +1,480 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.androidx.slice.demos;
+
+import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
+
+import android.app.PendingIntent;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.net.wifi.WifiManager;
+import android.os.Handler;
+import android.provider.Settings;
+import android.support.annotation.NonNull;
+import android.text.SpannableString;
+import android.text.format.DateUtils;
+import android.text.style.ForegroundColorSpan;
+
+import java.util.Calendar;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceProvider;
+import androidx.app.slice.builders.GridBuilder;
+import androidx.app.slice.builders.ListBuilder;
+import androidx.app.slice.builders.MessagingSliceBuilder;
+
+/**
+ * Examples of using slice template builders.
+ */
+public class SampleSliceProvider extends SliceProvider {
+
+    public static final String ACTION_WIFI_CHANGED =
+            "com.example.androidx.slice.action.WIFI_CHANGED";
+    public static final String ACTION_TOAST =
+            "com.example.androidx.slice.action.TOAST";
+    public static final String EXTRA_TOAST_MESSAGE = "com.example.androidx.extra.TOAST_MESSAGE";
+    public static final String ACTION_TOAST_RANGE_VALUE =
+            "com.example.androidx.slice.action.TOAST_RANGE_VALUE";
+
+    public static final int LOADING_DELAY_MS = 4000;
+
+    public static final String[] URI_PATHS = {"message", "wifi", "note", "ride", "toggle",
+            "toggle2", "contact", "gallery", "weather", "reservation", "loadlist", "loadlist2",
+            "loadgrid", "loadgrid2", "inputrange", "range"};
+
+    /**
+     * @return Uri with the provided path
+     */
+    public static Uri getUri(String path, Context context) {
+        return new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(context.getPackageName())
+                .appendPath(path)
+                .build();
+    }
+
+    @Override
+    public boolean onCreateSliceProvider() {
+        return true;
+    }
+
+    @NonNull
+    @Override
+    public Uri onMapIntentToUri(Intent intent) {
+        return getUri("wifi", getContext());
+    }
+
+    @Override
+    public Slice onBindSlice(Uri sliceUri) {
+        String path = sliceUri.getPath();
+        switch (path) {
+            // TODO: add list / grid slices with 'see more' options
+            case "/message":
+                return createMessagingSlice(sliceUri);
+            case "/wifi":
+                return createWifiSlice(sliceUri);
+            case "/note":
+                return createNoteSlice(sliceUri);
+            case "/ride":
+                return createRideSlice(sliceUri);
+            case "/toggle":
+                return createCustomToggleSlice(sliceUri);
+            case "/toggle2":
+                return createTwoCustomToggleSlices(sliceUri);
+            case "/contact":
+                return createContact(sliceUri);
+            case "/gallery":
+                return createGallery(sliceUri);
+            case "/weather":
+                return createWeather(sliceUri);
+            case "/reservation":
+                return createReservationSlice(sliceUri);
+            case "/loadlist":
+                return createLoadingSlice(sliceUri, false /* loadAll */, true /* isList */);
+            case "/loadlist2":
+                return createLoadingSlice(sliceUri, true /* loadAll */, true /* isList */);
+            case "/loadgrid":
+                return createLoadingSlice(sliceUri, false /* loadAll */, false /* isList */);
+            case "/loadgrid2":
+                return createLoadingSlice(sliceUri, true /* loadAll */, false /* isList */);
+            case "/inputrange":
+                return createStarRatingInputRange(sliceUri);
+            case "/range":
+                return createDownloadProgressRange(sliceUri);
+        }
+        throw new IllegalArgumentException("Unknown uri " + sliceUri);
+    }
+
+    private Slice createWeather(Uri sliceUri) {
+        return new GridBuilder(getContext(), sliceUri)
+                .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_1))
+                        .addText("MON")
+                        .addTitleText("69\u00B0"))
+                .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_2))
+                        .addText("TUE")
+                        .addTitleText("71\u00B0"))
+                .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_3))
+                        .addText("WED")
+                        .addTitleText("76\u00B0"))
+                .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_4))
+                        .addText("THU")
+                        .addTitleText("72\u00B0"))
+                .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_1))
+                        .addText("FRI")
+                        .addTitleText("68\u00B0"))
+                .build();
+    }
+
+    private Slice createGallery(Uri sliceUri) {
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xff4285F4)
+                .addRow(b -> b
+                    .setTitle("Family trip to Hawaii")
+                    .setSubtitle("Sep 30, 2017 - Oct 2, 2017")
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_cast),
+                            getBroadcastIntent(ACTION_TOAST, "cast photo album"))
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_share),
+                            getBroadcastIntent(ACTION_TOAST, "share photo album")))
+                .addGrid(b -> b
+                    .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_1)))
+                    .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_2)))
+                    .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_3)))
+                    .addCell(cb -> cb
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_4))))
+                .build();
+    }
+
+    private Slice createContact(Uri sliceUri) {
+        final long lastCalled = System.currentTimeMillis() - 20 * DateUtils.MINUTE_IN_MILLIS;
+        CharSequence lastCalledString = DateUtils.getRelativeTimeSpanString(lastCalled,
+                Calendar.getInstance().getTimeInMillis(),
+                DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xff3949ab)
+                .setHeader(b -> b
+                        .setTitle("Mady Pitza")
+                        .setSummarySubtitle("Called " + lastCalledString)
+                        .setContentIntent(getBroadcastIntent(ACTION_TOAST, "See contact info")))
+                .addRow(b -> b
+                        .setTitleItem(Icon.createWithResource(getContext(), R.drawable.ic_call))
+                        .setTitle("314-259-2653")
+                        .setSubtitle("Call lasted 1 hr 17 min")
+                        .addEndItem(lastCalled))
+                .addRow(b -> b
+                        .setTitleItem(Icon.createWithResource(getContext(), R.drawable.ic_text))
+                        .setTitle("You: Coooooool see you then")
+                        .addEndItem(System.currentTimeMillis() - 40 * DateUtils.MINUTE_IN_MILLIS))
+                .addGrid(b -> b
+                        .addCell(cb -> cb
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_call))
+                            .addText("Call")
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "call")))
+                        .addCell(cb -> cb
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_text))
+                            .addText("Text")
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "text")))
+                        .addCell(cb ->cb
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_video))
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "video"))
+                            .addText("Video"))
+                        .addCell(cb -> cb
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_email))
+                            .addText("Email")
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "email"))))
+                .build();
+    }
+
+    private Slice createMessagingSlice(Uri sliceUri) {
+        // TODO: Remote input.
+        return new MessagingSliceBuilder(getContext(), sliceUri)
+                .add(b -> b
+                        .addText("yo home \uD83C\uDF55, I emailed you the info")
+                        .addTimestamp(System.currentTimeMillis() - 20 * DateUtils.MINUTE_IN_MILLIS)
+                        .addSource(Icon.createWithResource(getContext(), R.drawable.mady)))
+                .add(b -> b
+                        .addText("just bought my tickets")
+                        .addTimestamp(System.currentTimeMillis() - 10 * DateUtils.MINUTE_IN_MILLIS))
+                .add(b -> b
+                        .addText("yay! can't wait for getContext() weekend!\n"
+                                + "\uD83D\uDE00")
+                        .addTimestamp(System.currentTimeMillis() - 5 * DateUtils.MINUTE_IN_MILLIS)
+                        .addSource(Icon.createWithResource(getContext(), R.drawable.mady)))
+                .build();
+
+    }
+
+    private Slice createNoteSlice(Uri sliceUri) {
+        // TODO: Remote input.
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xfff4b400)
+                .addRow(b -> b
+                    .setTitle("Create new note")
+                    .setSubtitle("with this note taking app")
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_create),
+                            getBroadcastIntent(ACTION_TOAST, "create note"))
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_voice),
+                            getBroadcastIntent(ACTION_TOAST, "voice note"))
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_camera),
+                            getIntent("android.media.action.IMAGE_CAPTURE")))
+                .build();
+    }
+
+    private Slice createReservationSlice(Uri sliceUri) {
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xffFF5252)
+                .addRow(b -> b
+                    .setTitle("Upcoming trip to Seattle")
+                    .setSubtitle("Feb 1 - 19 | 2 guests")
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_location),
+                            getBroadcastIntent(ACTION_TOAST, "show reservation location on map"))
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_text),
+                            getBroadcastIntent(ACTION_TOAST, "contact host")))
+                .addGrid(b -> b
+                    .addCell(cb -> cb
+                        .addLargeImage(
+                                Icon.createWithResource(getContext(), R.drawable.reservation))))
+                .addGrid(b -> b
+                    .addCell(cb -> cb
+                        .addTitleText("Check In")
+                        .addText("12:00 PM, Feb 1"))
+                    .addCell(cb -> cb
+                        .addTitleText("Check Out")
+                        .addText("11:00 AM, Feb 19")))
+                .build();
+    }
+
+    private Slice createRideSlice(Uri sliceUri) {
+        final ForegroundColorSpan colorSpan = new ForegroundColorSpan(0xff0F9D58);
+        SpannableString headerSubtitle = new SpannableString("Ride in 4 min");
+        headerSubtitle.setSpan(colorSpan, 8, headerSubtitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+        SpannableString homeSubtitle = new SpannableString("12 miles | 12 min | $9.00");
+        homeSubtitle.setSpan(colorSpan, 20, homeSubtitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+        SpannableString workSubtitle = new SpannableString("44 miles | 1 hour 45 min | $31.41");
+        workSubtitle.setSpan(colorSpan, 27, workSubtitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xff0F9D58)
+                .setHeader(b -> b
+                    .setTitle("Get ride")
+                    .setSubtitle(headerSubtitle)
+                    .setSummarySubtitle("Ride to work in 12 min | Ride home in 1 hour 45 min")
+                    .setContentIntent(getBroadcastIntent(ACTION_TOAST, "get ride")))
+                .addRow(b -> b
+                    .setTitle("Work")
+                    .setSubtitle(workSubtitle)
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_work),
+                            getBroadcastIntent(ACTION_TOAST, "work")))
+                .addRow(b -> b
+                    .setTitle("Home")
+                    .setSubtitle(homeSubtitle)
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_home),
+                            getBroadcastIntent(ACTION_TOAST, "home")))
+                .build();
+    }
+
+    private Slice createCustomToggleSlice(Uri sliceUri) {
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xffff4081)
+                .addRow(b -> b
+                    .setTitle("Custom toggle")
+                    .setSubtitle("It can support two states")
+                    .addToggle(getBroadcastIntent(ACTION_TOAST, "star toggled"),
+                            true /* isChecked */,
+                            Icon.createWithResource(getContext(), R.drawable.toggle_star)))
+                .build();
+    }
+
+    private Slice createTwoCustomToggleSlices(Uri sliceUri) {
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xffff4081)
+                .addRow(b -> b
+                        .setTitle("2 toggles")
+                        .setSubtitle("each supports two states")
+                        .addToggle(getBroadcastIntent(ACTION_TOAST, "first star toggled"),
+                                true /* isChecked */,
+                                Icon.createWithResource(getContext(), R.drawable.toggle_star))
+                        .addToggle(getBroadcastIntent(ACTION_TOAST, "second star toggled"),
+                                false /* isChecked */,
+                                Icon.createWithResource(getContext(), R.drawable.toggle_star)))
+                .build();
+    }
+
+    private Slice createWifiSlice(Uri sliceUri) {
+        // Get wifi state
+        WifiManager wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
+        int wifiState = wifiManager.getWifiState();
+        boolean wifiEnabled = false;
+        String state;
+        switch (wifiState) {
+            case WifiManager.WIFI_STATE_DISABLED:
+            case WifiManager.WIFI_STATE_DISABLING:
+                state = "disconnected";
+                break;
+            case WifiManager.WIFI_STATE_ENABLED:
+            case WifiManager.WIFI_STATE_ENABLING:
+                state = wifiManager.getConnectionInfo().getSSID();
+                wifiEnabled = true;
+                break;
+            case WifiManager.WIFI_STATE_UNKNOWN:
+            default:
+                state = ""; // just don't show anything?
+                break;
+        }
+        boolean finalWifiEnabled = wifiEnabled;
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xff4285f4)
+                .addRow(b -> b
+                    .setTitle("Wi-fi")
+                    .setTitleItem(Icon.createWithResource(getContext(), R.drawable.ic_wifi))
+                    .setSubtitle(state)
+                    .addToggle(getBroadcastIntent(ACTION_WIFI_CHANGED, null), finalWifiEnabled)
+                    .setContentIntent(getIntent(Settings.ACTION_WIFI_SETTINGS)))
+                .build();
+    }
+
+    private Slice createStarRatingInputRange(Uri sliceUri) {
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xffff4081)
+                .addInputRange(c -> c
+                        .setTitle("Star rating")
+                        .setThumb(Icon.createWithResource(getContext(), R.drawable.ic_star_on))
+                        .setAction(getBroadcastIntent(ACTION_TOAST_RANGE_VALUE, null))
+                        .setMax(5)
+                        .setValue(3))
+                .build();
+    }
+
+    private Slice createDownloadProgressRange(Uri sliceUri) {
+        return new ListBuilder(getContext(), sliceUri)
+                .setColor(0xffff4081)
+                .addRange(c -> c
+                        .setTitle("Download progress")
+                        .setMax(100)
+                        .setValue(75))
+                .build();
+    }
+
+    private Handler mHandler = new Handler();
+    private Runnable mLoader;
+    private boolean mLoaded = false;
+
+    private Slice createLoadingSlice(Uri sliceUri, boolean loadAll, boolean isList) {
+        if (!mLoaded || mLoader != null) {
+            // Need to load content or we're still loading so just return partial
+            if (!mLoaded) {
+                mLoader = () -> {
+                    // Note that we've loaded things
+                    mLoader = null;
+                    mLoaded = true;
+                    // Notify to update the slice
+                    getContext().getContentResolver().notifyChange(sliceUri, null);
+                };
+                mHandler.postDelayed(mLoader, LOADING_DELAY_MS);
+            }
+            if (loadAll) {
+                return isList
+                        ? new ListBuilder(getContext(), sliceUri).build()
+                        : new GridBuilder(getContext(), sliceUri).build();
+            }
+            return createPartialSlice(sliceUri, true, isList);
+        } else {
+            mLoaded = false;
+            return createPartialSlice(sliceUri, false, isList);
+        }
+    }
+
+    private Slice createPartialSlice(Uri sliceUri, boolean isPartial, boolean isList) {
+        Icon icon = Icon.createWithResource(getContext(), R.drawable.ic_star_on);
+        PendingIntent intent = getBroadcastIntent(ACTION_TOAST, "star tapped");
+        PendingIntent intent2 = getBroadcastIntent(ACTION_TOAST, "toggle tapped");
+        if (isPartial) {
+            if (isList) {
+                return new ListBuilder(getContext(), sliceUri)
+                        .addRow(b -> createRow(b, "Slice that has content to load",
+                                "Temporary subtitle", icon, intent, true))
+                        .addRow(b -> createRow(b, null, null, null, intent, true))
+                        .addRow(b -> b.setTitle("My title").addToggle(intent2, false, true))
+                        .build();
+            } else {
+                return new GridBuilder(getContext(), sliceUri)
+                        .addCell(b -> createCell(b, null, null, null, true))
+                        .addCell(b -> createCell(b, "Two stars", null, icon, true))
+                        .addCell(b -> createCell(b, null, null, null, true))
+                        .build();
+            }
+        } else {
+            if (isList) {
+                return new ListBuilder(getContext(), sliceUri)
+                        .addRow(b -> createRow(b, "Slice that has content to load",
+                                "Subtitle loaded", icon, intent, false))
+                        .addRow(b -> createRow(b, "Loaded row", "Loaded subtitle",
+                                icon, intent, false))
+                        .addRow(b -> b.setTitle("My title").addToggle(intent2, false))
+                        .build();
+            } else {
+                return new GridBuilder(getContext(), sliceUri)
+                        .addCell(b -> createCell(b, "One star", "meh", icon, false))
+                        .addCell(b -> createCell(b, "Two stars", "good", icon, false))
+                        .addCell(b -> createCell(b, "Three stars", "best", icon, false))
+                        .build();
+            }
+        }
+    }
+
+    private ListBuilder.RowBuilder createRow(ListBuilder.RowBuilder rb, String title,
+            String subtitle, Icon icon, PendingIntent content, boolean isLoading) {
+        return rb.setTitle(title, isLoading)
+          .setSubtitle(subtitle, isLoading)
+          .addEndItem(icon, isLoading)
+          .setContentIntent(content);
+    }
+
+    private GridBuilder.CellBuilder createCell(GridBuilder.CellBuilder cb, String text1,
+            String text2, Icon icon, boolean isLoading) {
+        return cb.addText(text1, isLoading).addText(text2, isLoading).addImage(icon, isLoading);
+    }
+
+    private PendingIntent getIntent(String action) {
+        Intent intent = new Intent(action);
+        PendingIntent pi = PendingIntent.getActivity(getContext(), 0, intent, 0);
+        return pi;
+    }
+
+    private PendingIntent getBroadcastIntent(String action, String message) {
+        Intent intent = new Intent(action);
+        intent.setClass(getContext(), SliceBroadcastReceiver.class);
+        // Ensure a new PendingIntent is created for each message.
+        int requestCode = 0;
+        if (message != null) {
+            intent.putExtra(EXTRA_TOAST_MESSAGE, message);
+            requestCode = message.hashCode();
+        }
+        return PendingIntent.getBroadcast(getContext(), requestCode, intent,
+                PendingIntent.FLAG_UPDATE_CURRENT);
+    }
+}
diff --git a/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SliceBroadcastReceiver.java b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SliceBroadcastReceiver.java
new file mode 100644
index 0000000..9e87dc0
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SliceBroadcastReceiver.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.androidx.slice.demos;
+
+import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
+import static androidx.app.slice.core.SliceHints.EXTRA_RANGE_VALUE;
+import static com.example.androidx.slice.demos.SampleSliceProvider.getUri;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.wifi.WifiManager;
+import android.os.Handler;
+import android.widget.Toast;
+
+/**
+ * Responds to actions performed on slices and notifies slices of updates in state changes.
+ */
+public class SliceBroadcastReceiver extends BroadcastReceiver {
+
+    @Override
+    public void onReceive(Context context, Intent i) {
+        String action = i.getAction();
+        switch (action) {
+            case SampleSliceProvider.ACTION_WIFI_CHANGED:
+                WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+                boolean newState = i.getBooleanExtra(EXTRA_TOGGLE_STATE, wm.isWifiEnabled());
+                wm.setWifiEnabled(newState);
+                // Wait a bit for wifi to update (TODO: is there a better way to do this?)
+                Handler h = new Handler();
+                h.postDelayed(() -> {
+                    context.getContentResolver().notifyChange(getUri("wifi", context), null);
+                }, 1000);
+                break;
+            case SampleSliceProvider.ACTION_TOAST:
+                String message = i.getExtras().getString(SampleSliceProvider.EXTRA_TOAST_MESSAGE,
+                        "no message");
+                Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
+                break;
+            case SampleSliceProvider.ACTION_TOAST_RANGE_VALUE:
+                int range = i.getExtras().getInt(EXTRA_RANGE_VALUE, 0);
+                Toast.makeText(context, "value: " + range, Toast.LENGTH_SHORT).show();
+                break;
+        }
+    }
+}
diff --git a/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SliceBrowser.java b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SliceBrowser.java
new file mode 100644
index 0000000..7015743
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SliceBrowser.java
@@ -0,0 +1,295 @@
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.androidx.slice.demos;
+
+import static com.example.androidx.slice.demos.SampleSliceProvider.URI_PATHS;
+import static com.example.androidx.slice.demos.SampleSliceProvider.getUri;
+
+import android.arch.lifecycle.LiveData;
+import android.content.ContentResolver;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.BaseColumns;
+import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.util.ArrayMap;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.SubMenu;
+import android.view.ViewGroup;
+import android.widget.CursorAdapter;
+import android.widget.SearchView;
+import android.widget.SimpleCursorAdapter;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.widget.EventInfo;
+import androidx.app.slice.widget.SliceLiveData;
+import androidx.app.slice.widget.SliceView;
+
+/**
+ * Example use of SliceView. Uses a search bar to select/auto-complete a slice uri which is
+ * then displayed in the selected mode with SliceView.
+ */
+@RequiresApi(api = 28)
+public class SliceBrowser extends AppCompatActivity implements SliceView.OnSliceActionListener {
+
+    private static final String TAG = "SlicePresenter";
+
+    private static final String SLICE_METADATA_KEY = "android.metadata.SLICE_URI";
+    private static final boolean TEST_INTENT = false;
+    private static final boolean TEST_THEMES = false;
+
+    private ArrayList<Uri> mSliceUris = new ArrayList<Uri>();
+    private int mSelectedMode;
+    private ViewGroup mContainer;
+    private SearchView mSearchView;
+    private SimpleCursorAdapter mAdapter;
+    private SubMenu mTypeMenu;
+    private LiveData<Slice> mSliceLiveData;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_layout);
+
+        Toolbar toolbar = findViewById(R.id.search_toolbar);
+        setSupportActionBar(toolbar);
+
+        // Shows the slice
+        mContainer = findViewById(R.id.slice_preview);
+        mSearchView = findViewById(R.id.search_view);
+
+        final String[] from = new String[]{"uri"};
+        final int[] to = new int[]{android.R.id.text1};
+        mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1,
+                null, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
+        mSearchView.setSuggestionsAdapter(mAdapter);
+        mSearchView.setIconifiedByDefault(false);
+        mSearchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
+            @Override
+            public boolean onSuggestionClick(int position) {
+                mSearchView.setQuery(((Cursor) mAdapter.getItem(position)).getString(1), true);
+                return true;
+            }
+
+            @Override
+            public boolean onSuggestionSelect(int position) {
+                mSearchView.setQuery(((Cursor) mAdapter.getItem(position)).getString(1), true);
+                return true;
+            }
+        });
+        mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+            @Override
+            public boolean onQueryTextSubmit(String s) {
+                addSlice(Uri.parse(s));
+                mSearchView.clearFocus();
+                return false;
+            }
+
+            @Override
+            public boolean onQueryTextChange(String s) {
+                populateAdapter(s);
+                return false;
+            }
+        });
+
+        mSelectedMode = (savedInstanceState != null)
+                ? savedInstanceState.getInt("SELECTED_MODE", SliceView.MODE_LARGE)
+                : SliceView.MODE_LARGE;
+        if (savedInstanceState != null) {
+            mSearchView.setQuery(savedInstanceState.getString("SELECTED_QUERY"), true);
+        }
+
+        grantPackage(getPackageName());
+        // TODO: Listen for changes.
+        updateAvailableSlices();
+        if (TEST_INTENT) {
+            addSlice(new Intent("androidx.intent.SLICE_ACTION").setPackage(getPackageName()));
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        mTypeMenu = menu.addSubMenu("Type");
+        mTypeMenu.setIcon(R.drawable.ic_large);
+        mTypeMenu.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+        mTypeMenu.add("Shortcut");
+        mTypeMenu.add("Small");
+        mTypeMenu.add("Large");
+        menu.add("Auth");
+        super.onCreateOptionsMenu(menu);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getTitle().toString()) {
+            case "Auth":
+                authAllSlices();
+                return true;
+            case "Shortcut":
+                mTypeMenu.setIcon(R.drawable.ic_shortcut);
+                mSelectedMode = SliceView.MODE_SHORTCUT;
+                updateSliceModes();
+                return true;
+            case "Small":
+                mTypeMenu.setIcon(R.drawable.ic_small);
+                mSelectedMode = SliceView.MODE_SMALL;
+                updateSliceModes();
+                return true;
+            case "Large":
+                mTypeMenu.setIcon(R.drawable.ic_large);
+                mSelectedMode = SliceView.MODE_LARGE;
+                updateSliceModes();
+                return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putInt("SELECTED_MODE", mSelectedMode);
+        outState.putString("SELECTED_QUERY", mSearchView.getQuery().toString());
+    }
+
+    private void authAllSlices() {
+        List<ApplicationInfo> packages = getPackageManager().getInstalledApplications(0);
+        packages.forEach(info -> {
+            grantPackage(info.packageName);
+        });
+    }
+
+    private void grantPackage(String packageName) {
+        for (int i = 0; i < URI_PATHS.length; i++) {
+            grantUriPermission(packageName, getUri(URI_PATHS[i], getApplicationContext()),
+                    Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+                            | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+        }
+    }
+
+    private void updateAvailableSlices() {
+        mSliceUris.clear();
+        List<PackageInfo> packageInfos = getPackageManager()
+                .getInstalledPackages(PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA);
+        for (PackageInfo pi : packageInfos) {
+            ActivityInfo[] activityInfos = pi.activities;
+            if (activityInfos != null) {
+                for (ActivityInfo ai : activityInfos) {
+                    if (ai.metaData != null) {
+                        String sliceUri = ai.metaData.getString(SLICE_METADATA_KEY);
+                        if (sliceUri != null) {
+                            mSliceUris.add(Uri.parse(sliceUri));
+                        }
+                    }
+                }
+            }
+        }
+        for (int i = 0; i < URI_PATHS.length; i++) {
+            mSliceUris.add(getUri(URI_PATHS[i], getApplicationContext()));
+        }
+        populateAdapter(String.valueOf(mSearchView.getQuery()));
+    }
+
+    private void addSlice(Intent intent) {
+        SliceView v = TEST_THEMES
+                ? (SliceView) getLayoutInflater().inflate(R.layout.slice_view, mContainer, false)
+                : new SliceView(getApplicationContext());
+        v.setOnSliceActionListener(this);
+        v.setTag(intent);
+        if (mSliceLiveData != null) {
+            mSliceLiveData.removeObservers(this);
+        }
+        mContainer.removeAllViews();
+        mContainer.addView(v);
+        mSliceLiveData = SliceLiveData.fromIntent(this, intent);
+        v.setMode(mSelectedMode);
+        mSliceLiveData.observe(this, v);
+    }
+
+    private void addSlice(Uri uri) {
+        if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
+            SliceView v = TEST_THEMES
+                    ? (SliceView) getLayoutInflater().inflate(
+                            R.layout.slice_view, mContainer, false)
+                    : new SliceView(getApplicationContext());
+            v.setOnSliceActionListener(this);
+            v.setTag(uri);
+            if (mSliceLiveData != null) {
+                mSliceLiveData.removeObservers(this);
+            }
+            mContainer.removeAllViews();
+            mContainer.addView(v);
+            mSliceLiveData = SliceLiveData.fromUri(this, uri);
+            v.setMode(mSelectedMode);
+            mSliceLiveData.observe(this, v);
+        } else {
+            Log.w(TAG, "Invalid uri, skipping slice: " + uri);
+        }
+    }
+
+    private void updateSliceModes() {
+        final int count = mContainer.getChildCount();
+        for (int i = 0; i < count; i++) {
+            ((SliceView) mContainer.getChildAt(i)).setMode(mSelectedMode);
+        }
+    }
+
+    private void populateAdapter(String query) {
+        final MatrixCursor c = new MatrixCursor(new String[]{BaseColumns._ID, "uri"});
+        ArrayMap<String, Integer> ranking = new ArrayMap<>();
+        ArrayList<String> suggestions = new ArrayList();
+        mSliceUris.forEach(uri -> {
+            String uriString = uri.toString();
+            if (uriString.contains(query)) {
+                ranking.put(uriString, uriString.indexOf(query));
+                suggestions.add(uriString);
+            }
+        });
+        suggestions.sort(new Comparator<String>() {
+            @Override
+            public int compare(String o1, String o2) {
+                return Integer.compare(ranking.get(o1), ranking.get(o2));
+            }
+        });
+        for (int i = 0; i < suggestions.size(); i++) {
+            c.addRow(new Object[]{i, suggestions.get(i)});
+        }
+        mAdapter.changeCursor(c);
+    }
+
+    @Override
+    public void onSliceAction(@NonNull EventInfo info, @NonNull SliceItem item) {
+        Log.w(TAG, "onSliceAction, info: " + info);
+        Log.w(TAG, "onSliceAction, sliceItem: \n" + item);
+    }
+}
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_call.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_call.xml
new file mode 100644
index 0000000..ebf9de6
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_call.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z"/>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_camera.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_camera.xml
new file mode 100644
index 0000000..74b6bf9
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_camera.xml
@@ -0,0 +1,32 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#000000"
+        android:pathData="M 12 8.8 C 13.7673111995 8.8 15.2 10.2326888005 15.2 12 C 15.2 13.7673111995 13.7673111995 15.2 12 15.2 C 10.2326888005 15.2 8.8 13.7673111995 8.8 12 C 8.8 10.2326888005 10.2326888005 8.8 12 8.8 Z" />
+    <path
+        android:fillColor="#000000"
+        android:pathData="M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9
+2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5
+5-2.24 5-5 5z" />
+    <path
+        android:pathData="M0 0h24v24H0z" />
+</vector>
\ No newline at end of file
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_car.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_car.xml
new file mode 100644
index 0000000..6bab660
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_car.xml
@@ -0,0 +1,31 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#000000"
+        android:pathData="M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21 .42 -1.42 1.01L3 12v8c0
+.55 .45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55 .45 1 1 1h1c.55 0 1-.45
+1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5 .67 1.5
+1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5 .67 1.5
+1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z" />
+    <path
+        android:pathData="M0 0h24v24H0z" />
+</vector>
\ No newline at end of file
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_cast.xml
similarity index 68%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to samples/SupportSliceDemos/src/main/res/drawable/ic_cast.xml
index 123acd2..4f62c5e 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_cast.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2018 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.
@@ -13,16 +12,14 @@
   ~ 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.
--->
+  -->
 
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M21,3L3,3c-1.1,0 -2,0.9 -2,2v3h2L3,5h18v14h-7v2h7c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM1,18v3h3c0,-1.66 -1.34,-3 -3,-3zM1,14v2c2.76,0 5,2.24 5,5h2c0,-3.87 -3.13,-7 -7,-7zM1,10v2c4.97,0 9,4.03 9,9h2c0,-6.08 -4.93,-11 -11,-11z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_create.xml
similarity index 72%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to samples/SupportSliceDemos/src/main/res/drawable/ic_create.xml
index 123acd2..d1666a8 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_create.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_email.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_email.xml
new file mode 100644
index 0000000..ce97ab8
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_email.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,8l-8,5 -8,-5L4,6l8,5 8,-5v2z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_home.xml
similarity index 65%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to samples/SupportSliceDemos/src/main/res/drawable/ic_home.xml
index 123acd2..b278230 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_home.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,16 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
 
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
+        android:fillColor="#000000"
+        android:pathData="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" />
+    <path
+        android:pathData="M0 0h24v24H0z" />
 </vector>
\ No newline at end of file
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_large.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_large.xml
new file mode 100644
index 0000000..79ac590
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_large.xml
@@ -0,0 +1,28 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48.0dp"
+        android:height="48.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M34.0,2.02L14.0,2.0c-2.21,0.0 -4.0,1.79 -4.0,4.0l0.0,36.0c0.0,2.21 1.79,4.0 4.0,4.0l20.0,0.0c2.21,0.0 4.0,-1.79 4.0,-4.0L38.0,6.0c0.0,-2.21 -1.79,-3.98 -4.0,-3.98zM34.0,38.0L14.0,38.0L14.0,10.0l20.0,0.0l0.0,28.0z"/>
+    <path
+        android:strokeColor="#FF000000"
+        android:strokeWidth="2"
+        android:pathData="M16,18 l16,0 l0,10 l-16,0z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_location.xml
similarity index 72%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to samples/SupportSliceDemos/src/main/res/drawable/ic_location.xml
index 123acd2..2f2db39 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_location.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2018 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.
@@ -13,16 +12,14 @@
   ~ 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.
--->
+  -->
 
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_share.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_share.xml
new file mode 100644
index 0000000..4f68d87
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_share.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Copyright 2018 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.
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_shortcut.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_shortcut.xml
new file mode 100644
index 0000000..bf9572a
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_shortcut.xml
@@ -0,0 +1,34 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="48.0dp"
+    android:viewportHeight="48.0"
+    android:viewportWidth="48.0"
+    android:width="48.0dp">
+    <path
+        android:fillColor="#e2e2e2"
+        android:pathData="M24.0,24.0m-19.0,0.0a19.0,19.0 0.0,1.0 1.0,38.0 0.0a19.0,19.0 0.0,1.0 1.0,-38.0 0.0"/>
+    <group
+        android:scaleX=".7"
+        android:scaleY=".7"
+        android:translateX="7.2"
+        android:translateY="7.2">
+
+        <path
+            android:fillColor="#ff000000"
+            android:pathData="M12.0,36.0c0.0,1.0 0.9,2.0 2.0,2.0l2.0,0.0l0.0,7.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0l0.0,-7.0l4.0,0.0l0.0,7.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0l0.0,-7.0l2.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L36.0,16.0L12.0,16.0l0.0,20.0zM7.0,16.0c-1.66,0.0 -3.0,1.34 -3.0,3.0l0.0,14.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0L10.0,19.0c0.0,-1.66 -1.34,-3.0 -3.0,-3.0zm34.0,0.0c-1.66,0.0 -3.0,1.34 -3.0,3.0l0.0,14.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0L44.0,19.0c0.0,-1.66 -1.34,-3.0 -3.0,-3.0zM31.06,4.32l2.61,-2.61c0.39,-0.3 0.39,-1.02 0.0,-1.41 -0.39,-0.39 -1.02,-0.39 -1.41,0.0L29.3,3.25C27.7,2.46 25.91,2.0 24.0,2.0c-1.92,0.0 -3.7,0.46 -5.33,1.26L15.0,0.29c-0.39,-0.39 -1.02,-0.39 -1.41,0.0 -0.3,0.39 -0.39,1.02 0.0,1.41l2.62,2.62C13.94,6.51 12.0,10.03 12.0,14.0l24.0,0.0c0.0,-3.98 -1.95,-7.5 -4.94,-9.68zM20.0,10.0l-2.0,0.0L18.0,8.0l2.0,0.0l0.0,2.0zm10.0,0.0l-2.0,0.0L28.0,8.0l2.0,0.0l0.0,2.0z"/>
+    </group>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_small.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_small.xml
new file mode 100644
index 0000000..8fd43df
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_small.xml
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48.0dp"
+        android:height="48.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M34.0,2.02L14.0,2.0c-2.21,0.0 -4.0,1.79 -4.0,4.0l0.0,36.0c0.0,2.21 1.79,4.0 4.0,4.0l20.0,0.0c2.21,0.0 4.0,-1.79 4.0,-4.0L38.0,6.0c0.0,-2.21 -1.79,-3.98 -4.0,-3.98zM34.0,38.0L14.0,38.0L14.0,10.0l20.0,0.0l0.0,28.0z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M16,18 l16,0 l0,4 l-16,0z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_star_off.xml
similarity index 70%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to samples/SupportSliceDemos/src/main/res/drawable/ic_star_off.xml
index 123acd2..7f023b3 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_star_off.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_star_on.xml
similarity index 77%
rename from design/res/drawable-anydpi-v21/design_ic_visibility.xml
rename to samples/SupportSliceDemos/src/main/res/drawable/ic_star_on.xml
index 123acd2..f3ca086 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_star_on.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_text.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_text.xml
new file mode 100644
index 0000000..d2876bf
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_text.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_video.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_video.xml
new file mode 100644
index 0000000..e23eac8
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_video.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_voice.xml
similarity index 69%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to samples/SupportSliceDemos/src/main/res/drawable/ic_voice.xml
index 123acd2..8f465bb 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_voice.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M12,15c1.66,0 2.99,-1.34 2.99,-3L15,6c0,-1.66 -1.34,-3 -3,-3S9,4.34 9,6v6c0,1.66 1.34,3 3,3zM17.3,12c0,3 -2.54,5.1 -5.3,5.1S6.7,15 6.7,12L5,12c0,3.42 2.72,6.23 6,6.72L11,22h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_wifi.xml
similarity index 63%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to samples/SupportSliceDemos/src/main/res/drawable/ic_wifi.xml
index 123acd2..4fbfd60 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_wifi.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,17 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M12.01,21.49L23.64,7c-0.45,-0.34 -4.93,-4 -11.64,-4C5.28,3 0.81,6.66 0.36,7l11.63,14.49 0.01,0.01 0.01,-0.01z"
+        android:fillAlpha=".3"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M3.53,10.95l8.46,10.54 0.01,0.01 0.01,-0.01 8.46,-10.54C20.04,10.62 16.81,8 12,8c-4.81,0 -8.04,2.62 -8.47,2.95z"/>
+</vector>
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/ic_work.xml b/samples/SupportSliceDemos/src/main/res/drawable/ic_work.xml
new file mode 100644
index 0000000..6806402
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/ic_work.xml
@@ -0,0 +1,28 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:pathData="M0 0h24v24H0z" />
+    <path
+        android:fillColor="#000000"
+        android:pathData="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99 .89 -1.99 2L2
+19c0 1.11 .89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z" />
+</vector>
\ No newline at end of file
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/mady.jpg b/samples/SupportSliceDemos/src/main/res/drawable/mady.jpg
new file mode 100644
index 0000000..8b61f1b
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/mady.jpg
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/reservation.png b/samples/SupportSliceDemos/src/main/res/drawable/reservation.png
new file mode 100644
index 0000000..16acc98
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/reservation.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/slices_1.jpg b/samples/SupportSliceDemos/src/main/res/drawable/slices_1.jpg
new file mode 100644
index 0000000..31cc065
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/slices_1.jpg
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/slices_2.jpg b/samples/SupportSliceDemos/src/main/res/drawable/slices_2.jpg
new file mode 100644
index 0000000..adbe1d3
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/slices_2.jpg
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/slices_3.jpg b/samples/SupportSliceDemos/src/main/res/drawable/slices_3.jpg
new file mode 100644
index 0000000..6617019
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/slices_3.jpg
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/slices_4.jpg b/samples/SupportSliceDemos/src/main/res/drawable/slices_4.jpg
new file mode 100644
index 0000000..d00a8b3
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/slices_4.jpg
Binary files differ
diff --git a/design/tests/res/drawable/test_drawable_state_list.xml b/samples/SupportSliceDemos/src/main/res/drawable/toggle_star.xml
similarity index 71%
rename from design/tests/res/drawable/test_drawable_state_list.xml
rename to samples/SupportSliceDemos/src/main/res/drawable/toggle_star.xml
index f125913..e964925 100644
--- a/design/tests/res/drawable/test_drawable_state_list.xml
+++ b/samples/SupportSliceDemos/src/main/res/drawable/toggle_star.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!-- 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.
@@ -13,9 +13,12 @@
      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_checked="true" android:drawable="@drawable/test_background_blue" />
-    <item android:drawable="@drawable/test_background_green" />
-</selector>
-
+    <item
+        android:id="@+id/on"
+        android:state_checked="true"
+        android:drawable="@drawable/ic_star_on" />
+    <item
+        android:id="@+id/off"
+        android:drawable="@drawable/ic_star_off" />
+</selector>
\ No newline at end of file
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/weather_1.png b/samples/SupportSliceDemos/src/main/res/drawable/weather_1.png
new file mode 100644
index 0000000..7c4034e
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/weather_1.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/weather_2.png b/samples/SupportSliceDemos/src/main/res/drawable/weather_2.png
new file mode 100644
index 0000000..f1b6672
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/weather_2.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/weather_3.png b/samples/SupportSliceDemos/src/main/res/drawable/weather_3.png
new file mode 100644
index 0000000..a5db683
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/weather_3.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/drawable/weather_4.png b/samples/SupportSliceDemos/src/main/res/drawable/weather_4.png
new file mode 100644
index 0000000..0b7f3b0
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/drawable/weather_4.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/layout/activity_demo.xml b/samples/SupportSliceDemos/src/main/res/layout/activity_demo.xml
new file mode 100644
index 0000000..f557f40
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/layout/activity_demo.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.example.android.support.content.demos.ContentPagerDemoActivity">
+
+    <android.support.v7.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="?attr/actionBarSize"
+        android:background="?attr/colorPrimary"
+        android:theme="@style/AppTheme.AppBarOverlay"
+        app:popupTheme="@style/AppTheme.PopupOverlay"/>
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+</LinearLayout>
diff --git a/samples/SupportSliceDemos/src/main/res/layout/activity_layout.xml b/samples/SupportSliceDemos/src/main/res/layout/activity_layout.xml
new file mode 100644
index 0000000..6a087a3
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/layout/activity_layout.xml
@@ -0,0 +1,75 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="top"
+    android:orientation="vertical" >
+
+    <FrameLayout
+        android:id="@+id/search_bar_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="#f2f2f2">
+        <android.support.v7.widget.CardView
+            android:id="@+id/search_bar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_margin="8dp"
+            app:cardCornerRadius="2dp"
+            app:cardBackgroundColor="?android:attr/colorBackground"
+            app:cardElevation="2dp">
+            <android.support.v7.widget.Toolbar
+                android:id="@+id/search_toolbar"
+                android:layout_width="match_parent"
+                android:layout_height="48dp"
+                android:background="?android:attr/selectableItemBackground"
+                android:contentInsetStart="0dp"
+                android:contentInsetStartWithNavigation="0dp"
+                android:theme="?android:attr/actionBarTheme">
+                <SearchView
+                    android:id="@+id/search_view"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:iconifiedByDefault="false"
+                    android:imeOptions="actionSearch|flagNoExtractUi"
+                    android:queryHint="content://..."
+                    android:searchIcon="@null"/>
+            </android.support.v7.widget.Toolbar>
+        </android.support.v7.widget.CardView>
+    </FrameLayout>
+
+
+    <ScrollView
+        android:id="@+id/container"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1" >
+
+        <FrameLayout
+            android:id="@+id/slice_preview"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="8dp"
+            android:orientation="vertical"
+            android:background="?android:attr/colorBackground"
+            android:elevation="10dp" />
+    </ScrollView>
+
+</LinearLayout>
diff --git a/design/tests/res/layout/design_appbar_with_scrollbars.xml b/samples/SupportSliceDemos/src/main/res/layout/slice_view.xml
similarity index 79%
rename from design/tests/res/layout/design_appbar_with_scrollbars.xml
rename to samples/SupportSliceDemos/src/main/res/layout/slice_view.xml
index 6c89a2a..8d5eb61 100644
--- a/design/tests/res/layout/design_appbar_with_scrollbars.xml
+++ b/samples/SupportSliceDemos/src/main/res/layout/slice_view.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2017 The Android Open Source Project
+  ~ Copyright 2018 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.
@@ -15,8 +15,8 @@
   ~ limitations under the License.
   -->
 
-<android.support.design.widget.AppBarLayout
+<androidx.app.slice.widget.SliceView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="200dp"
-    android:theme="@style/AppBarWithScrollbars"/>
\ No newline at end of file
+    android:layout_height="wrap_content"
+    style="@style/CustomSliceView"/>
\ No newline at end of file
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-hdpi/ic_launcher.png b/samples/SupportSliceDemos/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-hdpi/ic_launcher_round.png b/samples/SupportSliceDemos/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9a078e3
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-mdpi/ic_launcher.png b/samples/SupportSliceDemos/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-mdpi/ic_launcher_round.png b/samples/SupportSliceDemos/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..efc028a
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-xhdpi/ic_launcher.png b/samples/SupportSliceDemos/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/samples/SupportSliceDemos/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..3af2608
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png b/samples/SupportSliceDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/samples/SupportSliceDemos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9bec2e6
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/samples/SupportSliceDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..aee44e1
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/SupportSliceDemos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/samples/SupportSliceDemos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..34947cd
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/design/res/values/integers.xml b/samples/SupportSliceDemos/src/main/res/values/colors.xml
similarity index 75%
rename from design/res/values/integers.xml
rename to samples/SupportSliceDemos/src/main/res/values/colors.xml
index a0d6fc7..86b4304 100644
--- a/design/res/values/integers.xml
+++ b/samples/SupportSliceDemos/src/main/res/values/colors.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright (C) 2017 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.
@@ -13,8 +13,10 @@
   ~ 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>
-    <integer name="bottom_sheet_slide_duration">150</integer>
-    <integer name="app_bar_elevation_anim_duration">150</integer>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
 </resources>
diff --git a/design/tests/res/values-sw600dp/dimens.xml b/samples/SupportSliceDemos/src/main/res/values/strings.xml
similarity index 77%
rename from design/tests/res/values-sw600dp/dimens.xml
rename to samples/SupportSliceDemos/src/main/res/values/strings.xml
index 67765c5..89583bd 100644
--- a/design/tests/res/values-sw600dp/dimens.xml
+++ b/samples/SupportSliceDemos/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!-- Copyright (C) 2017 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.
@@ -13,6 +13,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<resources>
-    <dimen name="custom_snackbar_max_width">540dp</dimen>
-</resources>
\ No newline at end of file
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name">Slice Browser</string>
+</resources>
diff --git a/samples/SupportSliceDemos/src/main/res/values/styles.xml b/samples/SupportSliceDemos/src/main/res/values/styles.xml
new file mode 100644
index 0000000..a01e0aa
--- /dev/null
+++ b/samples/SupportSliceDemos/src/main/res/values/styles.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+    </style>
+
+    <style name="AppTheme.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
+    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
+
+    <style name="CustomSliceView" parent="Widget.SliceView">
+        <item name="titleColor">@color/colorAccent</item>
+        <item name="tintColor">@color/colorAccent</item>
+        <item name="headerTitleSize">20sp</item>
+        <item name="headerSubtitleSize">16sp</item>
+        <item name="android:paddingLeft">14dp</item>
+        <item name="android:paddingTop">8dp</item>
+        <item name="android:paddingRight">20dp</item>
+        <item name="android:paddingBottom">8dp</item>
+    </style>
+</resources>
diff --git a/settings.gradle b/settings.gradle
index 059f57a..a5704cc 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,122 +1,85 @@
 /////////////////////////////
 //
+// Buildscript utils
+//
+/////////////////////////////
+
+
+// Calling includeProject(name, filePath) is shorthand for:
+//
+//   include(name)
+//   project(name).projectDir = new File(filePath)
+//
+// Note that <name> directly controls the Gradle project name, and also indirectly sets:
+//   the project name in the IDE
+//   the Maven artifactId
+//
+def includeProject(name, filePath) {
+  settings.include(name)
+
+  def file
+  if (filePath instanceof String) {
+    file = new File(filePath)
+  } else {
+    file = filePath
+  }
+  project(name).projectDir = file
+}
+
+
+
+
+/////////////////////////////
+//
 // Libraries
 //
 /////////////////////////////
 
-include ':support-annotations'
-project(':support-annotations').projectDir = new File(rootDir, 'annotations')
-
-include ':support-compat'
-project(':support-compat').projectDir = new File(rootDir, 'compat')
-
-include ':support-media-compat'
-project(':support-media-compat').projectDir = new File(rootDir, 'media-compat')
-
-include ':support-core-ui'
-project(':support-core-ui').projectDir = new File(rootDir, 'core-ui')
-
-include ':support-fragment'
-project(':support-fragment').projectDir = new File(rootDir, 'fragment')
-
-include ':support-core-utils'
-project(':support-core-utils').projectDir = new File(rootDir, 'core-utils')
-
-include ':support-v4'
-project(':support-v4').projectDir = new File(rootDir, 'v4')
-
-include ':appcompat-v7'
-project(':appcompat-v7').projectDir = new File(rootDir, 'v7/appcompat')
-
-include ':gridlayout-v7'
-project(':gridlayout-v7').projectDir = new File(rootDir, 'v7/gridlayout')
-
-include ':mediarouter-v7'
-project(':mediarouter-v7').projectDir = new File(rootDir, 'v7/mediarouter')
-
-include ':palette-v7'
-project(':palette-v7').projectDir = new File(rootDir, 'v7/palette')
-
-include ':recyclerview-v7'
-project(':recyclerview-v7').projectDir = new File(rootDir, 'v7/recyclerview')
-
-include ':recyclerview-selection'
-project(':recyclerview-selection').projectDir = new File(rootDir, 'recyclerview-selection')
-
-include ':cardview-v7'
-project(':cardview-v7').projectDir = new File(rootDir, 'v7/cardview')
-
-include ':preference-v7'
-project(':preference-v7').projectDir = new File(rootDir, 'v7/preference')
-
-include ':preference-v14'
-project(':preference-v14').projectDir = new File(rootDir, 'v14/preference')
-
-include ':preference-leanback-v17'
-project(':preference-leanback-v17').projectDir = new File(rootDir, 'preference-leanback')
-
-include ':support-v13'
-project(':support-v13').projectDir = new File(rootDir, 'v13')
-
-include ':leanback-v17'
-project(':leanback-v17').projectDir = new File(rootDir, 'leanback')
-
-include ':design'
-project(':design').projectDir = new File(rootDir, 'design')
-
-include ':percent'
-project(':percent').projectDir = new File(rootDir, 'percent')
-
-include ':customtabs'
-project(':customtabs').projectDir = new File(rootDir, 'customtabs')
-
-include ':recommendation'
-project(':recommendation').projectDir = new File(rootDir, 'recommendation')
-
-include ':support-vector-drawable'
-project(':support-vector-drawable').projectDir = new File(rootDir, 'graphics/drawable/static')
-
-include ':animated-vector-drawable'
-project(':animated-vector-drawable').projectDir = new File(rootDir, 'graphics/drawable/animated')
-
-include ':transition'
-project(':transition').projectDir = new File(rootDir, 'transition')
-
-include ':support-dynamic-animation'
-project(':support-dynamic-animation').projectDir = new File(rootDir, 'dynamic-animation')
-
-include ':viewpager2'
-project(':viewpager2').projectDir = new File(rootDir, 'viewpager2')
-
-include ':exifinterface'
-project(':exifinterface').projectDir = new File(rootDir, 'exifinterface')
-
-include ':wear'
-project(':wear').projectDir = new File(rootDir, 'wear')
-
-include ':support-tv-provider'
-project(':support-tv-provider').projectDir = new File(rootDir, 'tv-provider')
-
-include ':support-emoji'
-project(':support-emoji').projectDir = new File(rootDir, 'emoji/core')
-
-include ':support-emoji-bundled'
-project(':support-emoji-bundled').projectDir = new File(rootDir, 'emoji/bundled')
-
-include ':support-emoji-appcompat'
-project(':support-emoji-appcompat').projectDir = new File(rootDir, 'emoji/appcompat')
-
-include ':support-content'
-project(':support-content').projectDir = new File(rootDir, 'content')
-
-include ':car'
-project(':car').projectDir = new File(rootDir, 'car')
-
-include ':webkit'
-project(':webkit').projectDir = new File(rootDir, 'webkit')
-
-include ':webkit-codegen'
-project(':webkit-codegen').projectDir = new File(rootDir, 'webkit-codegen')
+includeProject(":support-annotations", "annotations")
+includeProject(":support-compat", "compat")
+includeProject(":support-media-compat", "media-compat")
+includeProject(":support-core-ui", "core-ui")
+includeProject(":support-fragment", "fragment")
+includeProject(":support-core-utils", "core-utils")
+includeProject(":support-v4", "v4")
+includeProject(":appcompat-v7", "v7/appcompat")
+includeProject(":gridlayout-v7", "v7/gridlayout")
+includeProject(":mediarouter-v7", "v7/mediarouter")
+includeProject(":palette-v7", "v7/palette")
+includeProject(":recyclerview-v7", "v7/recyclerview")
+includeProject(":recyclerview-selection", "recyclerview-selection")
+includeProject(":cardview-v7", "v7/cardview")
+includeProject(":preference-v7", "v7/preference")
+includeProject(":preference-v14", "v14/preference")
+includeProject(":preference-leanback-v17", "preference-leanback")
+includeProject(":support-v13", "v13")
+includeProject(":leanback-v17", "leanback")
+includeProject(":percent", "percent")
+includeProject(":customtabs", "customtabs")
+includeProject(":recommendation", "recommendation")
+includeProject(":support-vector-drawable", "graphics/drawable/static")
+includeProject(":animated-vector-drawable", "graphics/drawable/animated")
+includeProject(":transition", "transition")
+includeProject(":support-dynamic-animation", "dynamic-animation")
+includeProject(":viewpager2", "viewpager2")
+includeProject(":exifinterface", "exifinterface")
+includeProject(":wear", "wear")
+includeProject(":support-tv-provider", "tv-provider")
+includeProject(":support-emoji", "emoji/core")
+includeProject(":support-emoji-bundled", "emoji/bundled")
+includeProject(":support-emoji-appcompat", "emoji/appcompat")
+includeProject(":support-content", "content")
+includeProject(":car", "car")
+includeProject(":webkit", "webkit")
+includeProject(":slices-core", "slices/core")
+includeProject(":slices-view", "slices/view")
+includeProject(":slices-builders", "slices/builders")
+includeProject(":textclassifier", "textclassifier")
+includeProject(":webkit-codegen", "webkit-codegen")
+includeProject(":jetifier-core", "jetifier/jetifier/core")
+includeProject(":jetifier-gradle-plugin", "jetifier/jetifier/gradle-plugin")
+includeProject(":jetifier-standalone", "jetifier/jetifier/standalone")
+includeProject(":jetifier-preprocessor", "jetifier/jetifier/preprocessor")
 
 /////////////////////////////
 //
@@ -124,66 +87,34 @@
 //
 /////////////////////////////
 
-File samplesRoot = new File(rootDir, 'samples')
+File samplesRoot = new File(rootDir, "samples")
 
-include ':support-content-demos'
-project(':support-content-demos').projectDir = new File(samplesRoot, 'SupportContentDemos')
+includeProject(":support-content-demos", new File(samplesRoot, "SupportContentDemos"))
+includeProject(":support-design-demos", new File(samplesRoot, "SupportDesignDemos"))
+includeProject(":support-leanback-demos", new File(samplesRoot, "SupportLeanbackDemos"))
+includeProject(":support-leanback-jank", new File(samplesRoot, "SupportLeanbackJank"))
+includeProject(":support-percent-demos", new File(samplesRoot, "SupportPercentDemos"))
+includeProject(":support-preference-demos", new File(samplesRoot, "SupportPreferenceDemos"))
+includeProject(":support-transition-demos", new File(samplesRoot, "SupportTransitionDemos"))
+includeProject(":support-v4-demos", new File(samplesRoot, "Support4Demos"))
+includeProject(":support-v7-demos", new File(samplesRoot, "Support7Demos"))
+includeProject(":support-v13-demos", new File(samplesRoot, "Support13Demos"))
+includeProject(":support-vector-drawable-demos", new File(samplesRoot, "SupportVectorDrawableDemos"))
+includeProject(":support-animation-demos", new File(samplesRoot, "SupportAnimationDemos"))
+includeProject(":viewpager2-demos", new File(samplesRoot, "ViewPager2Demos"))
+includeProject(":support-wear-demos", new File(samplesRoot, "SupportWearDemos"))
+includeProject(":support-app-navigation", new File(samplesRoot, "SupportAppNavigation"))
+includeProject(":support-emoji-demos", new File(samplesRoot, "SupportEmojiDemos"))
+includeProject(":support-car-demos", new File(samplesRoot, "SupportCarDemos"))
+includeProject(":support-slices-demos", new File(samplesRoot, "SupportSliceDemos"))
 
-include ':support-design-demos'
-project(':support-design-demos').projectDir = new File(samplesRoot, 'SupportDesignDemos')
-
-include ':support-leanback-demos'
-project(':support-leanback-demos').projectDir = new File(samplesRoot, 'SupportLeanbackDemos')
-
-include ':support-leanback-jank'
-project(':support-leanback-jank').projectDir = new File(samplesRoot, 'SupportLeanbackJank')
-
-include ':support-percent-demos'
-project(':support-percent-demos').projectDir = new File(samplesRoot, 'SupportPercentDemos')
-
-include ':support-preference-demos'
-project(':support-preference-demos').projectDir = new File(samplesRoot, 'SupportPreferenceDemos')
-
-include ':support-transition-demos'
-project(':support-transition-demos').projectDir = new File(samplesRoot, 'SupportTransitionDemos')
-
-include ':support-v4-demos'
-project(':support-v4-demos').projectDir = new File(samplesRoot, 'Support4Demos')
-
-include ':support-v7-demos'
-project(':support-v7-demos').projectDir = new File(samplesRoot, 'Support7Demos')
-
-include ':support-v13-demos'
-project(':support-v13-demos').projectDir = new File(samplesRoot, 'Support13Demos')
-
-include ':support-vector-drawable-demos'
-project(':support-vector-drawable-demos').projectDir = new File(samplesRoot, 'SupportVectorDrawableDemos')
-
-include ':support-animation-demos'
-project(':support-animation-demos').projectDir = new File(samplesRoot, 'SupportAnimationDemos')
-
-include ':viewpager2-demos'
-project(':viewpager2-demos').projectDir = new File(samplesRoot, 'ViewPager2Demos')
-
-include ':support-wear-demos'
-project(':support-wear-demos').projectDir = new File(samplesRoot, 'SupportWearDemos')
-
-include ':support-app-navigation'
-project(':support-app-navigation').projectDir = new File(samplesRoot, 'SupportAppNavigation')
-
-include ':support-emoji-demos'
-project(':support-emoji-demos').projectDir = new File(samplesRoot, 'SupportEmojiDemos')
-
-include ':support-car-demos'
-project(':support-car-demos').projectDir = new File(samplesRoot, 'SupportCarDemos')
 /////////////////////////////
 //
 // Testing libraries
 //
 /////////////////////////////
 
-include ':support-testutils'
-project(':support-testutils').projectDir = new File(rootDir, 'testutils')
+includeProject(":support-testutils", "testutils")
 
 /////////////////////////////
 //
@@ -191,20 +122,11 @@
 //
 /////////////////////////////
 
-include ':support-media-compat-test-client'
-project(':support-media-compat-test-client').projectDir = new File(rootDir, 'media-compat/version-compat-tests/current/client')
-
-include ':support-media-compat-test-client-previous'
-project(':support-media-compat-test-client-previous').projectDir = new File(rootDir, 'media-compat/version-compat-tests/previous/client')
-
-include ':support-media-compat-test-service'
-project(':support-media-compat-test-service').projectDir = new File(rootDir, 'media-compat/version-compat-tests/current/service')
-
-include ':support-media-compat-test-service-previous'
-project(':support-media-compat-test-service-previous').projectDir = new File(rootDir, 'media-compat/version-compat-tests/previous/service')
-
-include ':support-media-compat-test-lib'
-project(':support-media-compat-test-lib').projectDir = new File(rootDir, 'media-compat/version-compat-tests/lib')
+includeProject(":support-media-compat-test-client", "media-compat/version-compat-tests/current/client")
+includeProject(":support-media-compat-test-client-previous", "media-compat/version-compat-tests/previous/client")
+includeProject(":support-media-compat-test-service", "media-compat/version-compat-tests/current/service")
+includeProject(":support-media-compat-test-service-previous", "media-compat/version-compat-tests/previous/service")
+includeProject(":support-media-compat-test-lib", "media-compat/version-compat-tests/lib")
 
 /////////////////////////////
 //
@@ -212,14 +134,10 @@
 //
 /////////////////////////////
 
-File externalRoot = new File(rootDir, '../../external')
+apply(from: "include-composite-deps.gradle")
+File externalRoot = new File(rootDir, "../../external")
 
-includeBuild new File(externalRoot, 'doclava')
-
-includeBuild new File(externalRoot, 'jdiff')
-
-include ':noto-emoji-compat'
-project(':noto-emoji-compat').projectDir = new File(externalRoot, 'noto-fonts/emoji-compat')
+includeProject(":noto-emoji-compat", new File(externalRoot, "noto-fonts/emoji-compat"))
 
 ///// FLATFOOT START
 
diff --git a/slices/OWNERS b/slices/OWNERS
new file mode 100644
index 0000000..921a517
--- /dev/null
+++ b/slices/OWNERS
@@ -0,0 +1,2 @@
+jmonk@google.com
+madym@google.com
diff --git a/slices/builders/api/current.txt b/slices/builders/api/current.txt
new file mode 100644
index 0000000..8a953cb
--- /dev/null
+++ b/slices/builders/api/current.txt
@@ -0,0 +1,106 @@
+package androidx.app.slice.builders {
+
+  public class GridBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public GridBuilder(android.content.Context, android.net.Uri);
+    ctor public GridBuilder(androidx.app.slice.builders.ListBuilder);
+    method public androidx.app.slice.builders.GridBuilder addCell(androidx.app.slice.builders.GridBuilder.CellBuilder);
+    method public androidx.app.slice.builders.GridBuilder addCell(java.util.function.Consumer<androidx.app.slice.builders.GridBuilder.CellBuilder>);
+    method public androidx.app.slice.builders.GridBuilder addSeeMoreAction(android.app.PendingIntent);
+    method public androidx.app.slice.builders.GridBuilder addSeeMoreCell(androidx.app.slice.builders.GridBuilder.CellBuilder);
+    method public androidx.app.slice.builders.GridBuilder addSeeMoreCell(java.util.function.Consumer<androidx.app.slice.builders.GridBuilder.CellBuilder>);
+  }
+
+  public static final class GridBuilder.CellBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public GridBuilder.CellBuilder(androidx.app.slice.builders.GridBuilder);
+    ctor public GridBuilder.CellBuilder(androidx.app.slice.builders.GridBuilder, android.net.Uri);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addImage(android.graphics.drawable.Icon);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addImage(android.graphics.drawable.Icon, boolean);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addLargeImage(android.graphics.drawable.Icon);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addLargeImage(android.graphics.drawable.Icon, boolean);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addText(java.lang.CharSequence);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addText(java.lang.CharSequence, boolean);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addTitleText(java.lang.CharSequence);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder addTitleText(java.lang.CharSequence, boolean);
+    method public androidx.app.slice.builders.GridBuilder.CellBuilder setContentIntent(android.app.PendingIntent);
+  }
+
+  public class ListBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public ListBuilder(android.content.Context, android.net.Uri);
+    method public androidx.app.slice.builders.ListBuilder addGrid(androidx.app.slice.builders.GridBuilder);
+    method public androidx.app.slice.builders.ListBuilder addGrid(java.util.function.Consumer<androidx.app.slice.builders.GridBuilder>);
+    method public androidx.app.slice.builders.ListBuilder addInputRange(androidx.app.slice.builders.ListBuilder.InputRangeBuilder);
+    method public androidx.app.slice.builders.ListBuilder addInputRange(java.util.function.Consumer<androidx.app.slice.builders.ListBuilder.InputRangeBuilder>);
+    method public androidx.app.slice.builders.ListBuilder addRange(androidx.app.slice.builders.ListBuilder.RangeBuilder);
+    method public androidx.app.slice.builders.ListBuilder addRange(java.util.function.Consumer<androidx.app.slice.builders.ListBuilder.RangeBuilder>);
+    method public androidx.app.slice.builders.ListBuilder addRow(androidx.app.slice.builders.ListBuilder.RowBuilder);
+    method public androidx.app.slice.builders.ListBuilder addRow(java.util.function.Consumer<androidx.app.slice.builders.ListBuilder.RowBuilder>);
+    method public androidx.app.slice.builders.ListBuilder addSeeMoreAction(android.app.PendingIntent);
+    method public androidx.app.slice.builders.ListBuilder addSeeMoreRow(androidx.app.slice.builders.ListBuilder.RowBuilder);
+    method public androidx.app.slice.builders.ListBuilder addSeeMoreRow(java.util.function.Consumer<androidx.app.slice.builders.ListBuilder.RowBuilder>);
+    method public androidx.app.slice.builders.ListBuilder setActions(androidx.app.slice.builders.ListBuilder.ActionBuilder);
+    method public androidx.app.slice.builders.ListBuilder setActions(java.util.function.Consumer<androidx.app.slice.builders.ListBuilder.ActionBuilder>);
+    method public androidx.app.slice.builders.ListBuilder setHeader(androidx.app.slice.builders.ListBuilder.HeaderBuilder);
+    method public androidx.app.slice.builders.ListBuilder setHeader(java.util.function.Consumer<androidx.app.slice.builders.ListBuilder.HeaderBuilder>);
+  }
+
+  public static class ListBuilder.ActionBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public ListBuilder.ActionBuilder(androidx.app.slice.builders.ListBuilder);
+    method public androidx.app.slice.builders.ListBuilder.ActionBuilder addAction(android.app.PendingIntent, android.graphics.drawable.Icon, java.lang.CharSequence, int);
+    method public androidx.app.slice.builders.ListBuilder.ActionBuilder addAction(android.app.PendingIntent, android.graphics.drawable.Icon, java.lang.CharSequence);
+  }
+
+  public static class ListBuilder.HeaderBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public ListBuilder.HeaderBuilder(androidx.app.slice.builders.ListBuilder);
+    method public androidx.app.slice.builders.ListBuilder.HeaderBuilder setContentIntent(android.app.PendingIntent);
+    method public androidx.app.slice.builders.ListBuilder.HeaderBuilder setSubtitle(java.lang.CharSequence);
+    method public androidx.app.slice.builders.ListBuilder.HeaderBuilder setSummarySubtitle(java.lang.CharSequence);
+    method public androidx.app.slice.builders.ListBuilder.HeaderBuilder setTitle(java.lang.CharSequence);
+  }
+
+  public static class ListBuilder.InputRangeBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public ListBuilder.InputRangeBuilder(androidx.app.slice.builders.ListBuilder);
+    method public androidx.app.slice.builders.ListBuilder.InputRangeBuilder setAction(android.app.PendingIntent);
+    method public androidx.app.slice.builders.ListBuilder.InputRangeBuilder setMax(int);
+    method public androidx.app.slice.builders.ListBuilder.InputRangeBuilder setThumb(android.graphics.drawable.Icon);
+    method public androidx.app.slice.builders.ListBuilder.InputRangeBuilder setTitle(java.lang.CharSequence);
+    method public androidx.app.slice.builders.ListBuilder.InputRangeBuilder setValue(int);
+  }
+
+  public static class ListBuilder.RangeBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public ListBuilder.RangeBuilder(androidx.app.slice.builders.ListBuilder);
+    method public androidx.app.slice.builders.ListBuilder.RangeBuilder setMax(int);
+    method public androidx.app.slice.builders.ListBuilder.RangeBuilder setTitle(java.lang.CharSequence);
+    method public androidx.app.slice.builders.ListBuilder.RangeBuilder setValue(int);
+  }
+
+  public static class ListBuilder.RowBuilder extends androidx.app.slice.builders.TemplateSliceBuilder {
+    ctor public ListBuilder.RowBuilder(androidx.app.slice.builders.ListBuilder);
+    ctor public ListBuilder.RowBuilder(androidx.app.slice.builders.ListBuilder, android.net.Uri);
+    ctor public ListBuilder.RowBuilder(android.content.Context, android.net.Uri);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addEndItem(long);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addEndItem(android.graphics.drawable.Icon);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addEndItem(android.graphics.drawable.Icon, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addEndItem(android.graphics.drawable.Icon, android.app.PendingIntent);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addEndItem(android.graphics.drawable.Icon, android.app.PendingIntent, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addToggle(android.app.PendingIntent, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addToggle(android.app.PendingIntent, boolean, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addToggle(android.app.PendingIntent, boolean, android.graphics.drawable.Icon);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder addToggle(android.app.PendingIntent, boolean, android.graphics.drawable.Icon, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setContentIntent(android.app.PendingIntent);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setSubtitle(java.lang.CharSequence);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setSubtitle(java.lang.CharSequence, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setTitle(java.lang.CharSequence);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setTitle(java.lang.CharSequence, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setTitleItem(long);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setTitleItem(android.graphics.drawable.Icon);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setTitleItem(android.graphics.drawable.Icon, boolean);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setTitleItem(android.graphics.drawable.Icon, android.app.PendingIntent);
+    method public androidx.app.slice.builders.ListBuilder.RowBuilder setTitleItem(android.graphics.drawable.Icon, android.app.PendingIntent, boolean);
+  }
+
+  public abstract class TemplateSliceBuilder {
+    method public androidx.app.slice.Slice build();
+  }
+
+}
+
diff --git a/slices/builders/build.gradle b/slices/builders/build.gradle
new file mode 100644
index 0000000..ae7407b
--- /dev/null
+++ b/slices/builders/build.gradle
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+import static android.support.dependencies.DependenciesKt.*
+import android.support.LibraryVersions
+import android.support.LibraryGroups
+
+plugins {
+    id("SupportAndroidLibraryPlugin")
+}
+
+dependencies {
+    implementation(project(":slices-core"))
+    implementation project(":support-annotations")
+}
+
+supportLibrary {
+    name = "Slice builders"
+    publish = true
+    mavenVersion = LibraryVersions.SUPPORT_LIBRARY
+    mavenGroup = LibraryGroups.SLICES
+    inceptionYear = "2017"
+    description = "A set of builders to create templates using SliceProvider APIs"
+    minSdkVersion = 24
+}
diff --git a/slices/builders/lint-baseline.xml b/slices/builders/lint-baseline.xml
new file mode 100644
index 0000000..2cadde1
--- /dev/null
+++ b/slices/builders/lint-baseline.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="4" by="lint 3.0.0">
+
+</issues>
diff --git a/design/AndroidManifest.xml b/slices/builders/src/main/AndroidManifest.xml
similarity index 82%
copy from design/AndroidManifest.xml
copy to slices/builders/src/main/AndroidManifest.xml
index 0eb8b85..75e31f1 100644
--- a/design/AndroidManifest.xml
+++ b/slices/builders/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2017 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.
@@ -14,6 +14,6 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.support.design">
-    <uses-sdk android:minSdkVersion="14" />
+          package="androidx.app.slice.builders">
+    <uses-sdk android:minSdkVersion="28"/>
 </manifest>
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/GridBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/GridBuilder.java
new file mode 100644
index 0000000..0dff405
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/GridBuilder.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.builders;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.app.PendingIntent;
+import android.content.Context;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+
+import java.util.function.Consumer;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpecs;
+import androidx.app.slice.builders.impl.GridBuilderBasicImpl;
+import androidx.app.slice.builders.impl.GridBuilderListV1Impl;
+import androidx.app.slice.builders.impl.TemplateBuilderImpl;
+
+
+/**
+ * Builder to construct a row of slice content in a grid format.
+ * <p>
+ * A grid row is composed of cells, each cell can have a combination of text and images. For more
+ * details see {@link CellBuilder}.
+ * </p>
+ */
+public class GridBuilder extends TemplateSliceBuilder {
+
+    private androidx.app.slice.builders.impl.GridBuilder mImpl;
+    private boolean mHasSeeMore;
+
+    /**
+     * Create a builder which will construct a slice displayed in a grid format.
+     * @param uri Uri to tag for this slice.
+     */
+    public GridBuilder(@NonNull Context context, @NonNull Uri uri) {
+        super(new Slice.Builder(uri), context);
+    }
+
+    /**
+     * Create a builder which will construct a slice displayed in a grid format.
+     * @param parent The builder constructing the parent slice.
+     */
+    public GridBuilder(@NonNull ListBuilder parent) {
+        super(parent.getImpl().createGridBuilder());
+    }
+
+    @Override
+    @NonNull
+    public Slice build() {
+        return mImpl.buildIndividual();
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    @Override
+    protected TemplateBuilderImpl selectImpl() {
+        if (checkCompatible(SliceSpecs.GRID)) {
+            return new GridBuilderListV1Impl(getBuilder(), SliceSpecs.GRID);
+        } else if (checkCompatible(SliceSpecs.BASIC)) {
+            return new GridBuilderBasicImpl(getBuilder(), SliceSpecs.GRID);
+        }
+        return null;
+    }
+
+    @Override
+    void setImpl(TemplateBuilderImpl impl) {
+        mImpl = (androidx.app.slice.builders.impl.GridBuilder) impl;
+    }
+
+    /**
+     * Add a cell to the grid builder.
+     */
+    @NonNull
+    public GridBuilder addCell(@NonNull CellBuilder builder) {
+        mImpl.addCell((TemplateBuilderImpl) builder.mImpl);
+        return this;
+    }
+
+    /**
+     * Add a cell to the grid builder.
+     */
+    @RequiresApi(Build.VERSION_CODES.N)
+    @NonNull
+    public GridBuilder addCell(@NonNull Consumer<CellBuilder> c) {
+        CellBuilder b = new CellBuilder(this);
+        c.accept(b);
+        return addCell(b);
+    }
+
+    /**
+     * If all content in a slice cannot be shown, the cell added here may be displayed where the
+     * content is cut off.
+     * <p>
+     * This method should only be used if you want to display a custom cell to indicate more
+     * content, consider using {@link #addSeeMoreAction(PendingIntent)} otherwise. If you do
+     * choose to specify a custom cell, the cell should have
+     * {@link CellBuilder#setContentIntent(PendingIntent)} specified to take the user to an
+     * activity to see all of the content.
+     * </p>
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    @NonNull
+    public GridBuilder addSeeMoreCell(@NonNull CellBuilder builder) {
+        if (mHasSeeMore) {
+            throw new IllegalStateException("Trying to add see more cell when one has "
+                    + "already been added");
+        }
+        mImpl.addSeeMoreCell((TemplateBuilderImpl) builder.mImpl);
+        mHasSeeMore = true;
+        return this;
+    }
+
+    /**
+     * If all content in a slice cannot be shown, the cell added here may be displayed where the
+     * content is cut off.
+     * <p>
+     * This method should only be used if you want to display a custom cell to indicate more
+     * content, consider using {@link #addSeeMoreAction(PendingIntent)} otherwise. If you do
+     * choose to specify a custom cell, the cell should have
+     * {@link CellBuilder#setContentIntent(PendingIntent)} specified to take the user to an
+     * activity to see all of the content.
+     * </p>
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    @RequiresApi(Build.VERSION_CODES.N)
+    @NonNull
+    public GridBuilder addSeeMoreCell(@NonNull Consumer<CellBuilder> c) {
+        CellBuilder b = new CellBuilder(this);
+        c.accept(b);
+        return addSeeMoreCell(b);
+    }
+
+    /**
+     * If all content in a slice cannot be shown, a "see more" affordance may be displayed where
+     * the content is cut off. The action added here should take the user to an activity to see
+     * all of the content, and will be invoked when the "see more" affordance is tapped.
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    @NonNull
+    public GridBuilder addSeeMoreAction(@NonNull PendingIntent intent) {
+        if (mHasSeeMore) {
+            throw new IllegalStateException("Trying to add see more action when one has "
+                    + "already been added");
+        }
+        mImpl.addSeeMoreAction(intent);
+        mHasSeeMore = true;
+        return this;
+    }
+
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public androidx.app.slice.builders.impl.GridBuilder getImpl() {
+        return mImpl;
+    }
+
+    /**
+     * Sub-builder to construct a cell to be displayed in a grid.
+     * <p>
+     * Content added to a cell will be displayed in order vertically, for example the below code
+     * would construct a cell with "First text", and image below it, and then "Second text" below
+     * the image.
+     *
+     * <pre class="prettyprint">
+     * CellBuilder cb = new CellBuilder(parent, sliceUri);
+     * cb.addText("First text")
+     *   .addImage(middleIcon)
+     *   .addText("Second text");
+     * </pre>
+     *
+     * A cell can have at most two text items and one image.
+     * </p>
+     */
+    public static final class CellBuilder extends TemplateSliceBuilder {
+        private androidx.app.slice.builders.impl.GridBuilder.CellBuilder mImpl;
+
+        /**
+         * Create a builder which will construct a slice displayed as a cell in a grid.
+         * @param parent The builder constructing the parent slice.
+         */
+        public CellBuilder(@NonNull GridBuilder parent) {
+            super(parent.mImpl.createGridBuilder());
+        }
+
+        /**
+         * Create a builder which will construct a slice displayed as a cell in a grid.
+         * @param uri Uri to tag for this slice.
+         */
+        public CellBuilder(@NonNull GridBuilder parent, @NonNull Uri uri) {
+            super(parent.mImpl.createGridBuilder(uri));
+        }
+
+        @Override
+        void setImpl(TemplateBuilderImpl impl) {
+            mImpl = (androidx.app.slice.builders.impl.GridBuilder.CellBuilder) impl;
+        }
+
+        /**
+         * Adds text to the cell. There can be at most two text items, the first two added
+         * will be used, others will be ignored.
+         */
+        @NonNull
+        public CellBuilder addText(@NonNull CharSequence text) {
+            return addText(text, false /* isLoading */);
+        }
+
+        /**
+         * Adds text to the cell. There can be at most two text items, the first two added
+         * will be used, others will be ignored.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public CellBuilder addText(@Nullable CharSequence text, boolean isLoading) {
+            mImpl.addText(text, isLoading);
+            return this;
+        }
+
+        /**
+         * Adds text to the cell. Text added with this method will be styled as a title.
+         * There can be at most two text items, the first two added will be used, others
+         * will be ignored.
+         */
+        @NonNull
+        public CellBuilder addTitleText(@NonNull CharSequence text) {
+            return addTitleText(text, false /* isLoading */);
+        }
+
+        /**
+         * Adds text to the cell. Text added with this method will be styled as a title.
+         * There can be at most two text items, the first two added will be used, others
+         * will be ignored.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public CellBuilder addTitleText(@Nullable CharSequence text, boolean isLoading) {
+            mImpl.addTitleText(text, isLoading);
+            return this;
+        }
+
+        /**
+         * Adds an image to the cell that should be displayed as large as the cell allows.
+         * There can be at most one image, the first one added will be used, others will be ignored.
+         *
+         * @param image the image to display in the cell.
+         */
+        @NonNull
+        public CellBuilder addLargeImage(@NonNull Icon image) {
+            return addLargeImage(image, false /* isLoading */);
+        }
+
+        /**
+         * Adds an image to the cell that should be displayed as large as the cell allows.
+         * There can be at most one image, the first one added will be used, others will be ignored.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public CellBuilder addLargeImage(@Nullable Icon image, boolean isLoading) {
+            mImpl.addLargeImage(image, isLoading);
+            return this;
+        }
+
+        /**
+         * Adds an image to the cell. There can be at most one image, the first one added
+         * will be used, others will be ignored.
+         *
+         * @param image the image to display in the cell.
+         */
+        @NonNull
+        public CellBuilder addImage(@NonNull Icon image) {
+            return addImage(image, false /* isLoading */);
+        }
+
+        /**
+         * Adds an image to the cell. There can be at most one image, the first one added
+         * will be used, others will be ignored.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public CellBuilder addImage(@Nullable Icon image, boolean isLoading) {
+            mImpl.addImage(image, isLoading);
+            return this;
+        }
+
+        /**
+         * Sets the action to be invoked if the user taps on this cell in the row.
+         */
+        @NonNull
+        public CellBuilder setContentIntent(@NonNull PendingIntent intent) {
+            mImpl.setContentIntent(intent);
+            return this;
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/ListBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/ListBuilder.java
new file mode 100644
index 0000000..dbd3a98
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/ListBuilder.java
@@ -0,0 +1,879 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.builders;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+
+import android.app.PendingIntent;
+import android.content.Context;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+
+import java.util.function.Consumer;
+
+import androidx.app.slice.SliceSpecs;
+import androidx.app.slice.builders.impl.ListBuilderBasicImpl;
+import androidx.app.slice.builders.impl.ListBuilderV1Impl;
+import androidx.app.slice.builders.impl.TemplateBuilderImpl;
+
+/**
+ * Builder to construct slice content in a list format.
+ * <p>
+ * Use this builder for showing rows of content which is composed of text, images, and actions. For
+ * more details see {@link RowBuilder}.
+ * </p>
+ * <p>
+ * Slices can be displayed in different formats:
+ * <ul>
+ *     <li>Shortcut - The slice is displayed as an icon with a text label.</li>
+ *     <li>Small - Only a single row of content is displayed in small format, to specify which
+ *         row to display in small format see {@link #setHeader(HeaderBuilder)}.</li>
+ *     <li>Large - As many rows of content are shown as possible. If the presenter of the slice
+ *         allows scrolling then all rows of content will be displayed in a scrollable view.</li>
+ * </ul>
+ * </p>
+ *
+ * @see RowBuilder
+ */
+public class ListBuilder extends TemplateSliceBuilder {
+
+    private boolean mHasSeeMore;
+    private androidx.app.slice.builders.impl.ListBuilder mImpl;
+
+    /**
+     * Create a builder which will construct a slice that will display rows of content.
+     * @param uri Uri to tag for this slice.
+     */
+    public ListBuilder(@NonNull Context context, @NonNull Uri uri) {
+        super(context, uri);
+    }
+
+    @Override
+    void setImpl(TemplateBuilderImpl impl) {
+        mImpl = (androidx.app.slice.builders.impl.ListBuilder) impl;
+    }
+
+    /**
+     * Add a row to list builder.
+     */
+    @NonNull
+    public ListBuilder addRow(@NonNull RowBuilder builder) {
+        mImpl.addRow((TemplateBuilderImpl) builder.mImpl);
+        return this;
+    }
+
+    /**
+     * Add a row the list builder.
+     */
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    @NonNull
+    public ListBuilder addRow(@NonNull Consumer<RowBuilder> c) {
+        RowBuilder b = new RowBuilder(this);
+        c.accept(b);
+        return addRow(b);
+    }
+
+    /**
+     * Add a grid row to the list builder.
+     */
+    @NonNull
+    public ListBuilder addGrid(@NonNull GridBuilder builder) {
+        mImpl.addGrid((TemplateBuilderImpl) builder.getImpl());
+        return this;
+    }
+
+    /**
+     * Add a grid row to the list builder.
+     */
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    @NonNull
+    public ListBuilder addGrid(@NonNull Consumer<GridBuilder> c) {
+        GridBuilder b = new GridBuilder(this);
+        c.accept(b);
+        return addGrid(b);
+    }
+
+    /**
+     * Adds a header to this template.
+     * <p>
+     * The header should contain a title that is representative of the content in this slice along
+     * with an intent that links to the app activity associated with this content.
+     */
+    @NonNull
+    public ListBuilder setHeader(@NonNull HeaderBuilder builder) {
+        mImpl.setHeader((TemplateBuilderImpl) builder.mImpl);
+        return this;
+    }
+
+    /**
+     * Adds a header to this template.
+     * <p>
+     * The header should contain a title that is representative of the content in this slice along
+     * with an intent that links to the app activity associated with this content.
+     */
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    @NonNull
+    public ListBuilder setHeader(@NonNull Consumer<HeaderBuilder> c) {
+        HeaderBuilder b = new HeaderBuilder(this);
+        c.accept(b);
+        return setHeader(b);
+    }
+
+    /**
+     * Sets the group of actions for this template. These actions may be shown on the template in
+     * large or small formats. Generally these actions will be displayed in the order they were
+     * added to the {@link ActionBuilder}, however, if not all actions can be displayed then
+     * actions with a higher priority may be shown first.
+     *
+     * @see ActionBuilder#addAction(PendingIntent, Icon, CharSequence, int)
+     */
+    @NonNull
+    public ListBuilder setActions(@NonNull ActionBuilder builder) {
+        mImpl.setActions((TemplateBuilderImpl) builder.mImpl);
+        return this;
+    }
+
+    /**
+     * Sets the group of actions for this template. These actions may be shown on the template in
+     * large or small formats. Generally these actions will be displayed in the order they were
+     * added to the {@link ActionBuilder}, however, if not all actions can be displayed then
+     * actions with a higher priority may be shown first.
+     *
+     * @see ActionBuilder#addAction(PendingIntent, Icon, CharSequence, int)
+     */
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    @NonNull
+    public ListBuilder setActions(@NonNull Consumer<ActionBuilder> c) {
+        ActionBuilder b = new ActionBuilder(this);
+        c.accept(b);
+        return setActions(b);
+    }
+
+    /**
+     * Sets the color to tint items displayed by this template (e.g. icons).
+     * @hide
+     */
+    @RestrictTo(LIBRARY_GROUP)
+    @NonNull
+    public ListBuilder setColor(int color) {
+        mImpl.setColor(color);
+        return this;
+    }
+
+    /**
+     * If all content in a slice cannot be shown, the row added here may be displayed where the
+     * content is cut off. This row should have an affordance to take the user to an activity to
+     * see all of the content.
+     * <p>
+     * This method should only be used if you want to display a custom row to indicate more
+     * content, consider using {@link #addSeeMoreAction(PendingIntent)} otherwise. If you do
+     * choose to specify a custom row, the row should have a content intent or action end item
+     * specified to take the user to an activity to see all of the content.
+     * </p>
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    @NonNull
+    public ListBuilder addSeeMoreRow(@NonNull RowBuilder builder) {
+        if (mHasSeeMore) {
+            throw new IllegalArgumentException("Trying to add see more row when one has "
+                    + "already been added");
+        }
+        mImpl.addSeeMoreRow((TemplateBuilderImpl) builder.mImpl);
+        mHasSeeMore = true;
+        return this;
+    }
+
+    /**
+     * If all content in a slice cannot be shown, the row added here may be displayed where the
+     * content is cut off. This row should have an affordance to take the user to an activity to
+     * see all of the content.
+     * <p>
+     * This method should only be used if you want to display a custom row to indicate more
+     * content, consider using {@link #addSeeMoreAction(PendingIntent)} otherwise. If you do
+     * choose to specify a custom row, the row should have a content intent or action end item
+     * specified to take the user to an activity to see all of the content.
+     * </p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    @NonNull
+    public ListBuilder addSeeMoreRow(@NonNull Consumer<RowBuilder> c) {
+        RowBuilder b = new RowBuilder(this);
+        c.accept(b);
+        return addSeeMoreRow(b);
+    }
+
+    /**
+     * If all content in a slice cannot be shown, a "see more" affordance may be displayed where
+     * the content is cut off. The action added here should take the user to an activity to see
+     * all of the content, and will be invoked when the "see more" affordance is tapped.
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    @NonNull
+    public ListBuilder addSeeMoreAction(@NonNull PendingIntent intent) {
+        if (mHasSeeMore) {
+            throw new IllegalArgumentException("Trying to add see more action when one has "
+                    + "already been added");
+        }
+        mImpl.addSeeMoreAction(intent);
+        mHasSeeMore = true;
+        return this;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    @Override
+    protected TemplateBuilderImpl selectImpl() {
+        if (checkCompatible(SliceSpecs.LIST)) {
+            return new ListBuilderV1Impl(getBuilder(), SliceSpecs.LIST);
+        } else if (checkCompatible(SliceSpecs.BASIC)) {
+            return new ListBuilderBasicImpl(getBuilder(), SliceSpecs.BASIC);
+        }
+        return null;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public androidx.app.slice.builders.impl.ListBuilder getImpl() {
+        return mImpl;
+    }
+
+    /**
+     * Add an input range row to the list builder.
+     */
+    @NonNull
+    public ListBuilder addInputRange(@NonNull InputRangeBuilder b) {
+        mImpl.addInputRange((TemplateBuilderImpl) b.mImpl);
+        return this;
+    }
+
+    /**
+     * Add an input range row to the list builder.
+     */
+    @NonNull
+    public ListBuilder addInputRange(@NonNull Consumer<InputRangeBuilder> c) {
+        InputRangeBuilder inputRangeBuilder = new InputRangeBuilder(this);
+        c.accept(inputRangeBuilder);
+        return addInputRange(inputRangeBuilder);
+    }
+
+    /**
+     * Add a range row to the list builder.
+     */
+    @NonNull
+    public ListBuilder addRange(@NonNull RangeBuilder rangeBuilder) {
+        mImpl.addRange((TemplateBuilderImpl) rangeBuilder.mImpl);
+        return this;
+    }
+
+    /**
+     * Add a range row to the list builder.
+     */
+    @NonNull
+    public ListBuilder addRange(@NonNull Consumer<RangeBuilder> c) {
+        RangeBuilder rangeBuilder = new RangeBuilder(this);
+        c.accept(rangeBuilder);
+        return addRange(rangeBuilder);
+    }
+
+    /**
+     * Builder to construct a range row.
+     */
+    public static class RangeBuilder extends TemplateSliceBuilder {
+        private androidx.app.slice.builders.impl.ListBuilder.RangeBuilder mImpl;
+
+        public RangeBuilder(@NonNull ListBuilder parent) {
+            super(parent.mImpl.createRangeBuilder());
+        }
+
+        /**
+         * Set the upper limit of the range. The default is 100.
+         */
+        @NonNull
+        public RangeBuilder setMax(int max) {
+            mImpl.setMax(max);
+            return this;
+        }
+
+        /**
+         * Set the current value of the range.
+         */
+        @NonNull
+        public RangeBuilder setValue(int value) {
+            mImpl.setValue(value);
+            return this;
+        }
+
+        /**
+         * Set the title.
+         */
+        @NonNull
+        public RangeBuilder setTitle(@NonNull CharSequence title) {
+            mImpl.setTitle(title);
+            return this;
+        }
+
+        @Override
+        void setImpl(TemplateBuilderImpl impl) {
+            mImpl = (androidx.app.slice.builders.impl.ListBuilder.RangeBuilder) impl;
+        }
+    }
+
+    /**
+     * Builder to construct a input range row.
+     */
+    public static class InputRangeBuilder extends TemplateSliceBuilder {
+        private androidx.app.slice.builders.impl.ListBuilder.InputRangeBuilder mImpl;
+
+        public InputRangeBuilder(@NonNull ListBuilder parent) {
+            super(parent.mImpl.createInputRangeBuilder());
+        }
+
+        /**
+         * Set the upper limit of the range. The default is 100.
+         */
+        @NonNull
+        public InputRangeBuilder setMax(int max) {
+            mImpl.setMax(max);
+            return this;
+        }
+
+        /**
+         * Set the current value of the range.
+         */
+        @NonNull
+        public InputRangeBuilder setValue(int value) {
+            mImpl.setValue(value);
+            return this;
+        }
+
+        /**
+         * Set the title.
+         */
+        @NonNull
+        public InputRangeBuilder setTitle(@NonNull CharSequence title) {
+            mImpl.setTitle(title);
+            return this;
+        }
+
+
+        /**
+         * Set the {@link PendingIntent} to send when the current value is updated.
+         */
+        @NonNull
+        public InputRangeBuilder setAction(@NonNull PendingIntent action) {
+            mImpl.setAction(action);
+            return this;
+        }
+
+        /**
+         * Set the {@link Icon} to be displayed as the thumb on the input range.
+         */
+        @NonNull
+        public InputRangeBuilder setThumb(@NonNull Icon thumb) {
+            mImpl.setThumb(thumb);
+            return this;
+        }
+
+        @Override
+        void setImpl(TemplateBuilderImpl impl) {
+            mImpl = (androidx.app.slice.builders.impl.ListBuilder.InputRangeBuilder) impl;
+        }
+    }
+
+    /**
+     * Sub-builder to construct a row of slice content.
+     * <p>
+     * Row content can have:
+     * <ul>
+     *     <li>Title item - This is only displayed if this is a list item in a large template, it
+     *     will not be shown if this template is being used for small format. The item appears at
+     *     the start of the template. There can only be one title item displayed, and it could be a
+     *     timestamp, image, or a tappable icon.</li>
+     *     <li>Title - Formatted as a title.</li>
+     *     <li>Subtitle - Appears below the title (if one exists) and is formatted as normal text.
+     *     </li>
+     *     <li>End item -  Appears at the end of the template, there can be multiple end items but
+     *     they are only shown if there's enough space. End items can be a timestamp, image, or a
+     *     tappable icon.</li>
+     * </ul>
+     * </p>
+     *
+     * @see ListBuilder
+     */
+    public static class RowBuilder extends TemplateSliceBuilder {
+
+        private androidx.app.slice.builders.impl.ListBuilder.RowBuilder mImpl;
+
+        private boolean mHasEndActionOrToggle;
+        private boolean mHasEndImage;
+        private boolean mHasDefaultToggle;
+        private boolean mHasTimestamp;
+
+        /**
+         * Create a builder which will construct a slice displayed in a row format.
+         * @param parent The builder constructing the parent slice.
+         */
+        public RowBuilder(@NonNull ListBuilder parent) {
+            super(parent.mImpl.createRowBuilder());
+        }
+
+        /**
+         * Create a builder which will construct a slice displayed in a row format.
+         * @param uri Uri to tag for this slice.
+         */
+        public RowBuilder(@NonNull ListBuilder parent, @NonNull Uri uri) {
+            super(parent.mImpl.createRowBuilder(uri));
+        }
+
+        /**
+         * Create a builder which will construct a slice displayed in a row format.
+         * @param uri Uri to tag for this slice.
+         */
+        public RowBuilder(@NonNull Context context, @NonNull Uri uri) {
+            super(new ListBuilder(context, uri).mImpl.createRowBuilder(uri));
+        }
+
+        /**
+         * Sets the title item to be the provided timestamp. Only one timestamp can be added, if
+         * one is already added this will throw {@link IllegalArgumentException}.
+         * <p>
+         * There can only be one title item, this will replace any other title
+         * items that may have been set.
+         */
+        @NonNull
+        public RowBuilder setTitleItem(long timeStamp) {
+            if (mHasTimestamp) {
+                throw new IllegalArgumentException("Trying to add a timestamp when one has "
+                        + "already been added");
+            }
+            mImpl.setTitleItem(timeStamp);
+            mHasTimestamp = true;
+            return this;
+        }
+
+        /**
+         * Sets the title item to be the provided icon. There can only be one title item, this
+         * will replace any other title items that may have been set.
+         */
+        @NonNull
+        public RowBuilder setTitleItem(@NonNull Icon icon) {
+            mImpl.setTitleItem(icon);
+            return this;
+        }
+
+        /**
+         * Sets the title item to be the provided icon. There can only be one title item, this
+         * will replace any other title items that may have been set.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder setTitleItem(@Nullable Icon icon, boolean isLoading) {
+            mImpl.setTitleItem(icon, isLoading);
+            return this;
+        }
+
+        /**
+         * Sets the title item to be a tappable icon. There can only be one title item, this will
+         * replace any other title items that may have been set.
+         */
+        @NonNull
+        public RowBuilder setTitleItem(@NonNull Icon icon, @NonNull PendingIntent action) {
+            return setTitleItem(icon, action, false /* isLoading */);
+        }
+
+        /**
+         * Sets the title item to be a tappable icon. There can only be one title item, this will
+         * replace any other title items that may have been set.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder setTitleItem(@NonNull Icon icon, @NonNull PendingIntent action,
+                boolean isLoading) {
+            mImpl.setTitleItem(icon, action, isLoading);
+            return this;
+        }
+
+        /**
+         * Sets the action to be invoked if the user taps on the main content of the template.
+         */
+        @NonNull
+        public RowBuilder setContentIntent(@NonNull PendingIntent action) {
+            mImpl.setContentIntent(action);
+            return this;
+        }
+
+        /**
+         * Sets the title text.
+         */
+        @NonNull
+        public RowBuilder setTitle(@NonNull CharSequence title) {
+            mImpl.setTitle(title);
+            return this;
+        }
+
+        /**
+         * Sets the title text.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder setTitle(@Nullable CharSequence title, boolean isLoading) {
+            mImpl.setTitle(title, isLoading);
+            return this;
+        }
+
+        /**
+         * Sets the subtitle text.
+         */
+        @NonNull
+        public RowBuilder setSubtitle(@NonNull CharSequence subtitle) {
+            return setSubtitle(subtitle, false /* isLoading */);
+        }
+
+        /**
+         * Sets the subtitle text.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder setSubtitle(@Nullable CharSequence subtitle, boolean isLoading) {
+            mImpl.setSubtitle(subtitle, isLoading);
+            return this;
+        }
+
+        /**
+         * Adds a timestamp to be displayed at the end of the row. Only one timestamp can be added,
+         * if one is already added this will throw {@link IllegalArgumentException}.
+         */
+        @NonNull
+        public RowBuilder addEndItem(long timeStamp) {
+            if (mHasTimestamp) {
+                throw new IllegalArgumentException("Trying to add a timestamp when one has "
+                        + "already been added");
+            }
+            mImpl.addEndItem(timeStamp);
+            mHasTimestamp = true;
+            return this;
+        }
+
+        /**
+         * Adds an icon to be displayed at the end of the row. A mixture of icons and tappable
+         * icons is not permitted. If an action has already been added this will throw
+         * {@link IllegalArgumentException}.
+         */
+        @NonNull
+        public RowBuilder addEndItem(@NonNull Icon icon) {
+            return addEndItem(icon, false /* isLoading */);
+        }
+
+        /**
+         * Adds an icon to be displayed at the end of the row. A mixture of icons and tappable
+         * icons is not permitted. If an action has already been added this will throw
+         * {@link IllegalArgumentException}.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder addEndItem(@NonNull Icon icon, boolean isLoading) {
+            if (mHasEndActionOrToggle) {
+                throw new IllegalArgumentException("Trying to add an icon to end items when an"
+                        + "action has already been added. End items cannot have a mixture of "
+                        + "tappable icons and icons.");
+            }
+            mImpl.addEndItem(icon, isLoading);
+            mHasEndImage = true;
+            return this;
+        }
+
+        /**
+         * Adds a tappable icon to be displayed at the end of the row. A mixture of icons and
+         * tappable icons is not permitted. If an icon has already been added, this will throw
+         * {@link IllegalArgumentException}.
+         */
+        @NonNull
+        public RowBuilder addEndItem(@NonNull Icon icon, @NonNull PendingIntent action) {
+            return addEndItem(icon, action, false /* isLoading */);
+        }
+
+        /**
+         * Adds a tappable icon to be displayed at the end of the row. A mixture of icons and
+         * tappable icons is not permitted. If an icon has already been added, this will throw
+         * {@link IllegalArgumentException}.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder addEndItem(@Nullable Icon icon, @Nullable PendingIntent action,
+                boolean isLoading) {
+            mImpl.addEndItem(icon, action, isLoading);
+            return this;
+        }
+
+        /**
+         * Adds a toggle action to be displayed at the end of the row. A mixture of icons and
+         * tappable icons is not permitted. If an icon has already been added, this will throw an
+         * {@link IllegalArgumentException}.
+         */
+        @NonNull
+        public RowBuilder addToggle(@NonNull PendingIntent action, boolean isChecked) {
+            return addToggle(action, isChecked, null, false /* isLoading */);
+        }
+
+        /**
+         * Adds a toggle action to be displayed at the end of the row. A mixture of icons and
+         * tappable icons is not permitted. If an icon has already been added, this will throw an
+         * {@link IllegalArgumentException}.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder addToggle(@NonNull PendingIntent action, boolean isChecked,
+                boolean isLoading) {
+            return addToggleInternal(action, isChecked, null, isLoading);
+        }
+
+        /**
+         * Adds a toggle action to be displayed with custom icons to represent checked and
+         * unchecked state at the end of the row. A mixture of icons and tappable icons is not
+         * permitted. If an icon has already been added, this will throw an
+         * {@link IllegalArgumentException}.
+         */
+        @NonNull
+        public RowBuilder addToggle(@NonNull PendingIntent action, boolean isChecked,
+                @NonNull Icon icon) {
+            return addToggle(action, isChecked, icon, false /* isLoading */);
+        }
+
+        /**
+         * Adds a toggle action to be displayed with custom icons to represent checked and
+         * unchecked state at the end of the row. A mixture of icons and tappable icons is not
+         * permitted. If an icon has already been added, this will throw an
+         * {@link IllegalArgumentException}.
+         * <p>
+         * Use this method to specify content that will appear in the template once it's been
+         * loaded.
+         * </p>
+         * @param isLoading indicates whether the app is doing work to load the added content in the
+         *                  background or not.
+         */
+        @NonNull
+        public RowBuilder addToggle(@NonNull PendingIntent action, boolean isChecked,
+                @NonNull Icon icon, boolean isLoading) {
+            return addToggleInternal(action, isChecked, icon, isLoading);
+        }
+
+        private RowBuilder addToggleInternal(@NonNull PendingIntent action, boolean isChecked,
+                @Nullable Icon icon, boolean isLoading) {
+            if (mHasEndImage) {
+                throw new IllegalStateException("Trying to add a toggle to end items when an "
+                        + "icon has already been added. End items cannot have a mixture of "
+                        + "tappable icons and icons.");
+            }
+            if (mHasDefaultToggle) {
+                throw new IllegalStateException("Only one non-custom toggle can be added "
+                        + "in a single row. If you would like to include multiple toggles "
+                        + "in a row, set a custom icon for each toggle.");
+            }
+            mImpl.addToggle(action, isChecked, icon, isLoading);
+            mHasDefaultToggle = icon == null;
+            mHasEndActionOrToggle = true;
+            return this;
+        }
+
+        @Override
+        void setImpl(TemplateBuilderImpl impl) {
+            mImpl = (androidx.app.slice.builders.impl.ListBuilder.RowBuilder) impl;
+        }
+    }
+
+    /**
+     * Builder to construct a header. A header is displayed at the top of a list and can have
+     * a title, subtitle, and an action.
+     *
+     * @see ListBuilder#setHeader(HeaderBuilder)
+     */
+    public static class HeaderBuilder extends TemplateSliceBuilder {
+        private androidx.app.slice.builders.impl.ListBuilder.HeaderBuilder mImpl;
+
+        /**
+         * Create builder for header templates.
+         */
+        public HeaderBuilder(@NonNull ListBuilder parent) {
+            super(parent.mImpl.createHeaderBuilder());
+        }
+
+        /**
+         * Create builder for header templates.
+         * @hide
+         */
+        @RestrictTo(LIBRARY_GROUP)
+        public HeaderBuilder(@NonNull ListBuilder parent, @NonNull Uri uri) {
+            super(parent.mImpl.createHeaderBuilder(uri));
+        }
+
+        /**
+         * Sets the title to be shown in this header.
+         */
+        @NonNull
+        public HeaderBuilder setTitle(@NonNull CharSequence title) {
+            mImpl.setTitle(title);
+            return this;
+        }
+
+        /**
+         * Sets the subtitle to be shown in this header.
+         */
+        @NonNull
+        public HeaderBuilder setSubtitle(@NonNull CharSequence subtitle) {
+            mImpl.setSubtitle(subtitle);
+            return this;
+        }
+
+        /**
+         * Sets the summary subtitle to be shown in this header. If unset, the normal subtitle
+         * will be used. The summary is used when the parent template is presented in a
+         * small format.
+         */
+        @NonNull
+        public HeaderBuilder setSummarySubtitle(@NonNull CharSequence summarySubtitle) {
+            mImpl.setSummarySubtitle(summarySubtitle);
+            return this;
+        }
+
+        /**
+         * Sets the pending intent to activate when the header is activated.
+         */
+        @NonNull
+        public HeaderBuilder setContentIntent(@NonNull PendingIntent intent) {
+            mImpl.setContentIntent(intent);
+            return this;
+        }
+
+        @Override
+        void setImpl(TemplateBuilderImpl impl) {
+            mImpl = (androidx.app.slice.builders.impl.ListBuilder.HeaderBuilder) impl;
+        }
+    }
+
+    /**
+     * Builder to construct a group of actions.
+     *
+     * @see ListBuilder#setActions(ActionBuilder)
+     */
+    public static class ActionBuilder extends TemplateSliceBuilder  {
+        private androidx.app.slice.builders.impl.ListBuilder.ActionBuilder mImpl;
+
+        /**
+         * Create a builder to construct a group of actions
+         */
+        public ActionBuilder(@NonNull ListBuilder parent) {
+            super(parent.mImpl.createActionBuilder());
+        }
+
+        /**
+         * Create a builder to construct a group of actions
+         * @hide
+         */
+        @RestrictTo(LIBRARY_GROUP)
+        public ActionBuilder(@NonNull ListBuilder parent, @NonNull Uri uri) {
+            super(parent.mImpl.createHeaderBuilder(uri));
+        }
+
+        /**
+         * Adds an action to this builder.
+         *
+         * @param action the pending intent to send when the action is activated.
+         * @param actionIcon the icon to display for this action.
+         * @param contentDescription the content description to use for accessibility.
+         * @param priority what priority to display this action in, with the lowest priority having
+         *                 the highest ranking.
+         */
+        @NonNull
+        public ActionBuilder addAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
+                @NonNull CharSequence contentDescription, int priority) {
+            mImpl.addAction(action, actionIcon, contentDescription, priority);
+            return this;
+        }
+
+        /**
+         * Adds an action to this builder.
+         *
+         * @param action the pending intent to send when the action is activated.
+         * @param actionIcon the icon to display for this action.
+         * @param contentDescription the content description to use for accessibility.
+         */
+        @NonNull
+        public ActionBuilder addAction(@NonNull PendingIntent action, @NonNull Icon actionIcon,
+                @NonNull CharSequence contentDescription) {
+            return addAction(action, actionIcon, contentDescription, -1);
+        }
+
+        @Override
+        void setImpl(TemplateBuilderImpl impl) {
+            mImpl = (androidx.app.slice.builders.impl.ListBuilder.ActionBuilder) impl;
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/MessagingSliceBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/MessagingSliceBuilder.java
new file mode 100644
index 0000000..e51fd0b
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/MessagingSliceBuilder.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.builders;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+
+import android.content.Context;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+
+import java.util.function.Consumer;
+
+import androidx.app.slice.SliceSpecs;
+import androidx.app.slice.builders.impl.MessagingBasicImpl;
+import androidx.app.slice.builders.impl.MessagingBuilder;
+import androidx.app.slice.builders.impl.MessagingListV1Impl;
+import androidx.app.slice.builders.impl.MessagingV1Impl;
+import androidx.app.slice.builders.impl.TemplateBuilderImpl;
+
+/**
+ * Builder to construct slice content in a messaging format.
+ * @hide
+ */
+@RestrictTo(LIBRARY_GROUP)
+public class MessagingSliceBuilder extends TemplateSliceBuilder {
+
+    /**
+     * The maximum number of messages that will be retained in the Slice itself (the
+     * number displayed is up to the platform).
+     */
+    public static final int MAXIMUM_RETAINED_MESSAGES = 50;
+
+    private MessagingBuilder mBuilder;
+
+    /**
+     * Create a MessagingSliceBuilder with the specified uri.
+     */
+    public MessagingSliceBuilder(@NonNull Context context, @NonNull Uri uri) {
+        super(context, uri);
+    }
+
+    /**
+     * Add a subslice to this builder.
+     */
+    public MessagingSliceBuilder add(MessageBuilder builder) {
+        mBuilder.add((TemplateBuilderImpl) builder.mImpl);
+        return this;
+    }
+
+    /**
+     * Add a subslice to this builder.
+     */
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    public MessagingSliceBuilder add(Consumer<MessageBuilder> c) {
+        MessageBuilder b = new MessageBuilder(this);
+        c.accept(b);
+        return add(b);
+    }
+
+    @Override
+    void setImpl(TemplateBuilderImpl impl) {
+        mBuilder = (MessagingBuilder) impl;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    @Override
+    protected TemplateBuilderImpl selectImpl() {
+        if (checkCompatible(SliceSpecs.MESSAGING)) {
+            return new MessagingV1Impl(getBuilder(), SliceSpecs.MESSAGING);
+        } else if (checkCompatible(SliceSpecs.LIST)) {
+            return new MessagingListV1Impl(getBuilder(), SliceSpecs.LIST);
+        } else if (checkCompatible(SliceSpecs.BASIC)) {
+            return new MessagingBasicImpl(getBuilder(), SliceSpecs.BASIC);
+        }
+        return null;
+    }
+
+    /**
+     * Builder for adding a message to {@link MessagingSliceBuilder}.
+     */
+    public static final class MessageBuilder extends TemplateSliceBuilder {
+
+        private MessagingBuilder.MessageBuilder mImpl;
+
+        /**
+         * Creates a MessageBuilder with the specified parent.
+         */
+        public MessageBuilder(MessagingSliceBuilder parent) {
+            super(parent.mBuilder.createMessageBuilder());
+        }
+
+        /**
+         * Add the icon used to display contact in the messaging experience
+         */
+        public MessageBuilder addSource(Icon source) {
+            mImpl.addSource(source);
+            return this;
+        }
+
+        /**
+         * Add the text to be used for this message.
+         */
+        public MessageBuilder addText(CharSequence text) {
+            mImpl.addText(text);
+            return this;
+        }
+
+        /**
+         * Add the time at which this message arrived in ms since Unix epoch
+         */
+        public MessageBuilder addTimestamp(long timestamp) {
+            mImpl.addTimestamp(timestamp);
+            return this;
+        }
+
+        @Override
+        void setImpl(TemplateBuilderImpl impl) {
+            mImpl = (MessagingBuilder.MessageBuilder) impl;
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/TemplateSliceBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/TemplateSliceBuilder.java
new file mode 100644
index 0000000..f0a495c
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/TemplateSliceBuilder.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.builders;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.content.Context;
+import android.net.Uri;
+import android.support.annotation.RestrictTo;
+import android.util.Log;
+import android.util.Pair;
+
+import java.util.Arrays;
+import java.util.List;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceProvider;
+import androidx.app.slice.SliceSpec;
+import androidx.app.slice.SliceSpecs;
+import androidx.app.slice.builders.impl.TemplateBuilderImpl;
+
+/**
+ * Base class of builders of various template types.
+ */
+public abstract class TemplateSliceBuilder {
+
+    private static final String TAG = "TemplateSliceBuilder";
+
+    private final Slice.Builder mBuilder;
+    private final Context mContext;
+    private final TemplateBuilderImpl mImpl;
+    private List<SliceSpec> mSpecs;
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    protected TemplateSliceBuilder(TemplateBuilderImpl impl) {
+        mContext = null;
+        mBuilder = null;
+        mImpl = impl;
+        setImpl(impl);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    protected TemplateSliceBuilder(Slice.Builder b, Context context) {
+        mBuilder = b;
+        mContext = context;
+        mSpecs = getSpecs();
+        mImpl = selectImpl();
+        if (mImpl == null) {
+            throw new IllegalArgumentException("No valid specs found");
+        }
+        setImpl(mImpl);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public TemplateSliceBuilder(Context context, Uri uri) {
+        mBuilder = new Slice.Builder(uri);
+        mContext = context;
+        mSpecs = getSpecs();
+        mImpl = selectImpl();
+        if (mImpl == null) {
+            throw new IllegalArgumentException("No valid specs found");
+        }
+        setImpl(mImpl);
+    }
+
+    /**
+     * Construct the slice.
+     */
+    public Slice build() {
+        return mImpl.build();
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    protected Slice.Builder getBuilder() {
+        return mBuilder;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    abstract void setImpl(TemplateBuilderImpl impl);
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    protected TemplateBuilderImpl selectImpl() {
+        return null;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    protected boolean checkCompatible(SliceSpec candidate) {
+        final int size = mSpecs.size();
+        for (int i = 0; i < size; i++) {
+            if (mSpecs.get(i).canRender(candidate)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private List<SliceSpec> getSpecs() {
+        if (SliceProvider.getCurrentSpecs() != null) {
+            return SliceProvider.getCurrentSpecs();
+        }
+        // TODO: Support getting specs from pinned info.
+        Log.w(TAG, "Not currently bunding a slice");
+        return Arrays.asList(SliceSpecs.BASIC);
+    }
+
+    /**
+     * This is for typing, to clean up the code.
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    static <T> Pair<SliceSpec, Class<? extends TemplateBuilderImpl>> pair(SliceSpec spec,
+            Class<T> cls) {
+        return new Pair(spec, cls);
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilder.java
new file mode 100644
index 0000000..302e1b3
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilder.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.app.PendingIntent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public interface GridBuilder {
+    /**
+     * Create an TemplateBuilderImpl that implements {@link CellBuilder}.
+     */
+    TemplateBuilderImpl createGridBuilder();
+
+    /**
+     * Create an TemplateBuilderImpl that implements {@link CellBuilder} with the specified Uri.
+     */
+    TemplateBuilderImpl createGridBuilder(Uri uri);
+
+    /**
+     * Add a cell to this builder. Expected to be a builder from {@link #createGridBuilder}.
+     */
+    void addCell(TemplateBuilderImpl impl);
+
+    /**
+     * If all content in a slice cannot be shown, the cell added here will be displayed where the
+     * content is cut off. This cell should have an affordance to take the user to an activity to
+     * see all of the content. Expected to be a builder from {@link #createGridBuilder}.
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    void addSeeMoreCell(TemplateBuilderImpl impl);
+
+    /**
+     * If all content in a slice cannot be shown, a "see more" affordance will be displayed where
+     * the content is cut off. The action added here should take the user to an activity to see
+     * all of the content, and will be invoked when the "see more" affordance is tapped.
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    void addSeeMoreAction(PendingIntent intent);
+
+    /**
+     * Builds a standalone slice of this grid builder (i.e. not contained within a List).
+     */
+    Slice buildIndividual();
+
+    /**
+     */
+    interface CellBuilder {
+        /**
+         * Adds text to the cell. There can be at most two text items, the first two added
+         * will be used, others will be ignored.
+         */
+        @NonNull
+        void addText(@NonNull CharSequence text);
+
+        /**
+         * Adds text to the cell. There can be at most two text items, the first two added
+         * will be used, others will be ignored.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        @NonNull
+        void addText(@Nullable CharSequence text, boolean isLoading);
+
+        /**
+         * Adds text to the cell. Text added with this method will be styled as a title.
+         * There can be at most two text items, the first two added will be used, others
+         * will be ignored.
+         */
+        @NonNull
+        void addTitleText(@NonNull CharSequence text);
+
+        /**
+         * Adds text to the cell. Text added with this method will be styled as a title.
+         * There can be at most two text items, the first two added will be used, others
+         * will be ignored.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        @NonNull
+        void addTitleText(@Nullable CharSequence text, boolean isLoading);
+
+        /**
+         * Adds an image to the cell that should be displayed as large as the cell allows.
+         * There can be at most one image, the first one added will be used, others will be ignored.
+         *
+         * @param image the image to display in the cell.
+         */
+        @NonNull
+        void addLargeImage(@NonNull Icon image);
+
+        /**
+         * Adds an image to the cell that should be displayed as large as the cell allows.
+         * There can be at most one image, the first one added will be used, others will be ignored.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        @NonNull
+        void addLargeImage(@Nullable Icon image, boolean isLoading);
+
+        /**
+         * Adds an image to the cell. There can be at most one image, the first one added
+         * will be used, others will be ignored.
+         *
+         * @param image the image to display in the cell.
+         */
+        @NonNull
+        void addImage(@NonNull Icon image);
+
+        /**
+         * Adds an image to the cell. There can be at most one image, the first one added
+         * will be used, others will be ignored.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.l.
+         */
+        @NonNull
+        void addImage(@NonNull Icon image, boolean isLoading);
+
+        /**
+         * Sets the action to be invoked if the user taps on this cell in the row.
+         */
+        @NonNull
+        void setContentIntent(@NonNull PendingIntent intent);
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilderBasicImpl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilderBasicImpl.java
new file mode 100644
index 0000000..67bbfa1
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilderBasicImpl.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.app.PendingIntent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpec;
+
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class GridBuilderBasicImpl extends TemplateBuilderImpl implements GridBuilder {
+
+    /**
+     */
+    public GridBuilderBasicImpl(Slice.Builder b, SliceSpec spec) {
+        super(b, spec);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createGridBuilder() {
+        return new CellBuilder(this);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createGridBuilder(Uri uri) {
+        return new CellBuilder(uri);
+    }
+
+    /**
+     */
+    @Override
+    public void addCell(TemplateBuilderImpl impl) {
+        // TODO: Consider extracting some grid content for the basic version.
+    }
+
+    /**
+     */
+    @Override
+    public void addSeeMoreCell(TemplateBuilderImpl impl) {
+    }
+
+    /**
+     */
+    @Override
+    public void addSeeMoreAction(PendingIntent intent) {
+    }
+
+    /**
+     */
+    @Override
+    public Slice buildIndividual() {
+        // Empty slice, nothing useful from a grid to basic.
+        return getBuilder().build();
+    }
+
+    /**
+     */
+    @Override
+    public void apply(Slice.Builder builder) {
+
+    }
+
+    /**
+     */
+    public static final class CellBuilder extends TemplateBuilderImpl implements
+            GridBuilder.CellBuilder {
+
+        /**
+         */
+        public CellBuilder(@NonNull GridBuilderBasicImpl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public CellBuilder(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addText(@NonNull CharSequence text) {
+        }
+
+        /**
+         */
+        @Override
+        public void addText(@Nullable CharSequence text, boolean isLoading) {
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addTitleText(@NonNull CharSequence text) {
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addTitleText(@Nullable CharSequence text, boolean isLoading) {
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addLargeImage(@NonNull Icon image) {
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addLargeImage(@Nullable Icon image, boolean isLoading) {
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addImage(@NonNull Icon image) {
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addImage(@Nullable Icon image, boolean isLoading) {
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setContentIntent(@NonNull PendingIntent intent) {
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilderListV1Impl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilderListV1Impl.java
new file mode 100644
index 0000000..fe755bd
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/GridBuilderListV1Impl.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.builders.impl;
+
+import static android.app.slice.Slice.HINT_HORIZONTAL;
+import static android.app.slice.Slice.HINT_LARGE;
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+import static android.app.slice.Slice.HINT_PARTIAL;
+import static android.app.slice.Slice.HINT_SEE_MORE;
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.app.PendingIntent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpec;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class GridBuilderListV1Impl extends TemplateBuilderImpl implements GridBuilder {
+
+    /**
+     */
+    public GridBuilderListV1Impl(@NonNull Slice.Builder builder, SliceSpec spec) {
+        super(builder, spec);
+    }
+
+    /**
+     */
+    @Override
+    public void apply(Slice.Builder builder) {
+        builder.addHints(HINT_HORIZONTAL, HINT_LIST_ITEM);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createGridBuilder() {
+        return new CellBuilder(this);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createGridBuilder(Uri uri) {
+        return new CellBuilder(uri);
+    }
+
+    /**
+     */
+    @Override
+    public void addCell(TemplateBuilderImpl builder) {
+        getBuilder().addSubSlice(builder.build());
+    }
+
+
+    /**
+     */
+    @Override
+    public void addSeeMoreCell(@NonNull TemplateBuilderImpl builder) {
+        builder.getBuilder().addHints(HINT_SEE_MORE);
+        getBuilder().addSubSlice(builder.build());
+    }
+
+    /**
+     */
+    @Override
+    public void addSeeMoreAction(PendingIntent intent) {
+        getBuilder().addSubSlice(
+                new Slice.Builder(getBuilder())
+                        .addHints(HINT_SEE_MORE)
+                        .addAction(intent, new Slice.Builder(getBuilder()).build(), null)
+                        .build());
+    }
+
+    /**
+     */
+    @Override
+    public Slice buildIndividual() {
+        return new Slice.Builder(getBuilder()).addHints(HINT_HORIZONTAL, HINT_LIST_ITEM)
+                .addSubSlice(getBuilder()
+                        .addHints(HINT_HORIZONTAL, HINT_LIST_ITEM).build()).build();
+    }
+
+    /**
+     */
+    public static final class CellBuilder extends TemplateBuilderImpl implements
+            GridBuilder.CellBuilder {
+
+        private PendingIntent mContentIntent;
+
+        /**
+         */
+        public CellBuilder(@NonNull GridBuilderListV1Impl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public CellBuilder(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addText(@NonNull CharSequence text) {
+            addText(text, false /* isLoading */);
+        }
+
+        /**
+         */
+        @Override
+        public void addText(@Nullable CharSequence text, boolean isLoading) {
+            @Slice.SliceHint String[] hints = isLoading
+                    ? new String[] {HINT_PARTIAL}
+                    : new String[0];
+            getBuilder().addText(text, null, hints);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addTitleText(@NonNull CharSequence text) {
+            addTitleText(text, false /* isLoading */);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addTitleText(@Nullable CharSequence text, boolean isLoading) {
+            @Slice.SliceHint String[] hints = isLoading
+                    ? new String[] {HINT_PARTIAL, HINT_LARGE}
+                    : new String[] {HINT_LARGE};
+            getBuilder().addText(text, null, hints);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addLargeImage(@NonNull Icon image) {
+            addLargeImage(image, false /* isLoading */);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addLargeImage(@Nullable Icon image, boolean isLoading) {
+            @Slice.SliceHint String[] hints = isLoading
+                    ? new String[] {HINT_PARTIAL, HINT_LARGE}
+                    : new String[] {HINT_LARGE};
+            getBuilder().addIcon(image, null, hints);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addImage(@NonNull Icon image) {
+            addImage(image, false /* isLoading */);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addImage(@Nullable Icon image, boolean isLoading) {
+            @Slice.SliceHint String[] hints = isLoading
+                    ? new String[] {HINT_PARTIAL}
+                    : new String[0];
+            getBuilder().addIcon(image, null, hints);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setContentIntent(@NonNull PendingIntent intent) {
+            mContentIntent = intent;
+        }
+
+        /**
+         * @hide
+         */
+        @RestrictTo(LIBRARY)
+        @Override
+        public void apply(Slice.Builder b) {
+        }
+
+        /**
+         */
+        @Override
+        @NonNull
+        public Slice build() {
+            if (mContentIntent != null) {
+                return new Slice.Builder(getBuilder())
+                        .addHints(HINT_HORIZONTAL, HINT_LIST_ITEM)
+                        .addAction(mContentIntent, getBuilder().build(), null)
+                        .build();
+            }
+            return getBuilder().addHints(HINT_HORIZONTAL, HINT_LIST_ITEM).build();
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilder.java
new file mode 100644
index 0000000..d92083e
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilder.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.app.PendingIntent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public interface ListBuilder {
+
+    /**
+     * Add a row to list builder.
+     */
+    void addRow(TemplateBuilderImpl impl);
+    /**
+     * Add a grid row to the list builder.
+     */
+    void addGrid(TemplateBuilderImpl impl);
+
+    /**
+     * Adds a header to this template.
+     * <p>
+     * The header should contain a title that is representative of the content in this slice along
+     * with an intent that links to the app activity associated with this content.
+     */
+    void setHeader(TemplateBuilderImpl impl);
+
+    /**
+     * Sets the group of actions for this template. These actions may be shown on the template in
+     * large or small formats.
+     */
+    void setActions(TemplateBuilderImpl impl);
+
+    /**
+     * Add an input range row to the list builder.
+     */
+    void addInputRange(TemplateBuilderImpl builder);
+
+    /**
+     * Add a range row to the list builder.
+     */
+    void addRange(TemplateBuilderImpl builder);
+
+    /**
+     * If all content in a slice cannot be shown, the row added here will be displayed where the
+     * content is cut off. This row should have an affordance to take the user to an activity to
+     * see all of the content.
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    void addSeeMoreRow(TemplateBuilderImpl builder);
+    /**
+     * If all content in a slice cannot be shown, a "see more" affordance will be displayed where
+     * the content is cut off. The action added here should take the user to an activity to see
+     * all of the content, and will be invoked when the "see more" affordance is tapped.
+     * <p>
+     * Only one see more affordance can be added, this throws {@link IllegalStateException} if
+     * a row or action has been previously added.
+     * </p>
+     */
+    void addSeeMoreAction(PendingIntent intent);
+
+    /**
+     * Sets the color to tint items displayed by this template (e.g. icons).
+     */
+    void setColor(int color);
+
+    /**
+     * Create a builder that implements {@link RowBuilder}.
+     */
+    TemplateBuilderImpl createRowBuilder();
+    /**
+     * Create a builder that implements {@link RowBuilder}.
+     */
+    TemplateBuilderImpl createRowBuilder(Uri uri);
+    /**
+     * Create a builder that implements {@link GridBuilder}.
+     */
+    TemplateBuilderImpl createGridBuilder();
+    /**
+     * Create a builder that implements {@link HeaderBuilder}.
+     */
+    TemplateBuilderImpl createHeaderBuilder();
+    /**
+     * Create a builder that implements {@link HeaderBuilder}.
+     */
+    TemplateBuilderImpl createHeaderBuilder(Uri uri);
+    /**
+     * Create a builder that implements {@link ActionBuilder}.
+     */
+    TemplateBuilderImpl createActionBuilder();
+    /**
+     * Create a builder that implements {@link ActionBuilder}.
+     */
+    TemplateBuilderImpl createActionBuilder(Uri uri);
+
+    /**
+     * Create a builder that implements {@link InputRangeBuilder}.
+     */
+    TemplateBuilderImpl createInputRangeBuilder();
+
+    /**
+     * Create a builder that implements {@link RangeBuilder}.
+     */
+    TemplateBuilderImpl createRangeBuilder();
+
+    /**
+     * Builder to construct a range.
+     */
+    interface RangeBuilder {
+        /**
+         * Set the upper limit.
+         */
+        void setMax(int max);
+
+        /**
+         * Set the current value.
+         */
+        void setValue(int value);
+
+        /**
+         * Set the title.
+         */
+        void setTitle(@NonNull CharSequence title);
+    }
+
+    /**
+     * Builder to construct an input range.
+     */
+    interface InputRangeBuilder extends RangeBuilder {
+        /**
+         * Set the {@link PendingIntent} to send when the value changes.
+         */
+        void setAction(@NonNull PendingIntent action);
+
+        /**
+         * Set the {@link Icon} to be displayed as the thumb on the input range.
+         */
+        void setThumb(@NonNull Icon thumb);
+    }
+
+    /**
+     */
+    interface RowBuilder {
+
+        /**
+         * Sets the title item to be the provided timestamp. Only one timestamp can be added, if
+         * one is already added this will throw {@link IllegalArgumentException}.
+         * <p>
+         * There can only be one title item, this will replace any other title
+         * items that may have been set.
+         */
+        void setTitleItem(long timeStamp);
+
+        /**
+         * Sets the title item to be the provided icon. There can only be one title item, this
+         * will replace any other title items that may have been set.
+         */
+        void setTitleItem(Icon icon);
+
+        /**
+         * Sets the title item to be the provided icon. There can only be one title item, this
+         * will replace any other title items that may have been set.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        void setTitleItem(Icon icon, boolean isLoading);
+
+        /**
+         * Sets the title item to be a tappable icon. There can only be one title item, this will
+         * replace any other title items that may have been set.
+         */
+        void setTitleItem(Icon icon, PendingIntent action);
+
+        /**
+         * Sets the title item to be a tappable icon. There can only be one title item, this will
+         * replace any other title items that may have been set.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        void setTitleItem(Icon icon, PendingIntent action, boolean isLoading);
+
+        /**
+         * Sets the action to be invoked if the user taps on the main content of the template.
+         */
+        void setContentIntent(PendingIntent action);
+
+        /**
+         * Sets the title text.
+         */
+        void setTitle(CharSequence title);
+
+        /**
+         * Sets the title text.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        void setTitle(CharSequence title, boolean isLoading);
+
+        /**
+         * Sets the subtitle text.
+         */
+        void setSubtitle(CharSequence subtitle);
+
+        /**
+         * Sets the subtitle text.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        void setSubtitle(CharSequence subtitle, boolean isLoading);
+
+        /**
+         * Adds a timestamp to be displayed at the end of the row.
+         */
+        void addEndItem(long timeStamp);
+
+        /**
+         * Adds an icon to be displayed at the end of the row.
+         */
+        void addEndItem(Icon icon);
+
+        /**
+         * Adds an icon to be displayed at the end of the row.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        void addEndItem(Icon icon, boolean isLoading);
+
+        /**
+         * Adds a tappable icon to be displayed at the end of the row.
+         */
+        void addEndItem(Icon icon, PendingIntent action);
+
+        /**
+         * Adds a tappable icon to be displayed at the end of the row.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        void addEndItem(Icon icon, PendingIntent action, boolean isLoading);
+
+        /**
+         * Adds a toggle action to the template with custom icons to represent checked and unchecked
+         * state.
+         */
+        void addToggle(PendingIntent action, boolean isChecked, Icon icon);
+
+        /**
+         * Adds a toggle action to the template with custom icons to represent checked and unchecked
+         * state.
+         * <p>
+         * When set to true, the parameter {@code isLoading} indicates that the app is doing work
+         * to load this content in the background, in this case the template displays a placeholder
+         * until updated.
+         */
+        void addToggle(PendingIntent action, boolean isChecked, Icon icon, boolean isLoading);
+    }
+
+
+    /**
+     * Builder to construct a header. A header is displayed at the top of a list and can have
+     * a title, subtitle, and an action.
+     */
+    public interface HeaderBuilder {
+
+        /**
+         * Sets the title to be shown in this header.
+         */
+        void setTitle(CharSequence title);
+
+        /**
+         * Sets the subtitle to be shown in this header.
+         */
+        void setSubtitle(CharSequence subtitle);
+
+        /**
+         * Sets the summary subtitle to be shown in this header. If unset, the normal subtitle
+         * will be used. The summary is used when the parent template is presented in a
+         * small format.
+         */
+        void setSummarySubtitle(CharSequence summarySubtitle);
+
+        /**
+         * Sets the pending intent to activate when the header is activated.
+         */
+        void setContentIntent(PendingIntent intent);
+    }
+
+    /**
+     * Builder to construct a group of actions.
+     */
+    public interface ActionBuilder {
+
+        /**
+         * Adds an action to this builder.
+         *
+         * @param action the pending intent to send when the action is activated.
+         * @param actionIcon the icon to display for this action.
+         * @param contentDescription the content description to use for accessibility.
+         * @param priority what priority to display this action in, with the lowest priority having
+         *                 the highest ranking.
+         */
+        void addAction(PendingIntent action, Icon actionIcon, CharSequence contentDescription,
+                int priority);
+    }
+}
+
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilderBasicImpl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilderBasicImpl.java
new file mode 100644
index 0000000..8657c90
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilderBasicImpl.java
@@ -0,0 +1,389 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.app.PendingIntent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpec;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class ListBuilderBasicImpl extends TemplateBuilderImpl implements ListBuilder {
+
+    /**
+     */
+    public ListBuilderBasicImpl(Slice.Builder b, SliceSpec spec) {
+        super(b, spec);
+    }
+
+    /**
+     */
+    @Override
+    public void addRow(TemplateBuilderImpl impl) {
+        // Do nothing.
+    }
+
+    /**
+     */
+    @Override
+    public void addGrid(TemplateBuilderImpl impl) {
+        // Do nothing.
+    }
+
+    /**
+     */
+    @Override
+    public void setActions(TemplateBuilderImpl impl) {
+        // Do nothing.
+    }
+
+    /**
+     */
+    @Override
+    public void setHeader(TemplateBuilderImpl impl) {
+        // Do nothing.
+    }
+
+    @Override
+    public void addInputRange(TemplateBuilderImpl builder) {
+        // Do nothing.
+    }
+
+    @Override
+    public void addRange(TemplateBuilderImpl builder) {
+        // Do nothing.
+    }
+
+    /**
+     */
+    @Override
+    public void addSeeMoreRow(TemplateBuilderImpl builder) {
+    }
+
+    /**
+     */
+    @Override
+    public void addSeeMoreAction(PendingIntent intent) {
+    }
+
+    /**
+     */
+    @Override
+    public void setColor(int color) {
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createRowBuilder() {
+        return new RowBuilderImpl(this);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createRowBuilder(Uri uri) {
+        return new RowBuilderImpl(uri);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createGridBuilder() {
+        return new GridBuilderBasicImpl(createChildBuilder(), null);
+    }
+
+    @Override
+    public TemplateBuilderImpl createHeaderBuilder() {
+        return new HeaderBuilderImpl(this);
+    }
+
+    @Override
+    public TemplateBuilderImpl createHeaderBuilder(Uri uri) {
+        return new HeaderBuilderImpl(uri);
+    }
+
+    @Override
+    public TemplateBuilderImpl createActionBuilder() {
+        return new ActionBuilderImpl(this);
+    }
+
+    @Override
+    public TemplateBuilderImpl createActionBuilder(Uri uri) {
+        return new ActionBuilderImpl(uri);
+    }
+
+    @Override
+    public TemplateBuilderImpl createInputRangeBuilder() {
+        return new ListBuilderV1Impl.InputRangeBuilderImpl(getBuilder());
+    }
+
+    @Override
+    public TemplateBuilderImpl createRangeBuilder() {
+        return new ListBuilderV1Impl.RangeBuilderImpl(getBuilder());
+    }
+
+    /**
+     */
+    @Override
+    public void apply(Slice.Builder builder) {
+
+    }
+
+    /**
+     */
+    public static class RowBuilderImpl extends TemplateBuilderImpl
+            implements ListBuilder.RowBuilder {
+        private Icon mIcon;
+        private CharSequence mTitle;
+        private CharSequence mSubtitle;
+
+        /**
+         */
+        public RowBuilderImpl(@NonNull ListBuilderBasicImpl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public RowBuilderImpl(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        @Override
+        public void addEndItem(Icon icon) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void addEndItem(Icon icon, boolean isLoading) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void addEndItem(Icon icon, PendingIntent action) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void addEndItem(Icon icon, PendingIntent action, boolean isLoading) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void addToggle(PendingIntent action, boolean isChecked, Icon icon) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void addToggle(PendingIntent action, boolean isChecked, Icon icon,
+                boolean isLoading) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setTitleItem(long timeStamp) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setTitleItem(Icon icon) {
+            mIcon = icon;
+        }
+
+        /**
+         */
+        @Override
+        public void setTitleItem(Icon icon, boolean isLoading) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setTitleItem(Icon icon, PendingIntent action) {
+            mIcon = icon;
+        }
+
+        /**
+         */
+        @Override
+        public void setTitleItem(Icon icon, PendingIntent action, boolean isLoading) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setContentIntent(PendingIntent action) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setTitle(CharSequence title) {
+            mTitle = title;
+        }
+
+        /**
+         */
+        @Override
+        public void setTitle(CharSequence title, boolean isLoading) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setSubtitle(CharSequence subtitle) {
+            mSubtitle = subtitle;
+        }
+
+        /**
+         */
+        @Override
+        public void setSubtitle(CharSequence subtitle, boolean isLoading) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void addEndItem(long timeStamp) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+
+        }
+    }
+
+    /**
+     */
+    public static class HeaderBuilderImpl extends TemplateBuilderImpl
+            implements ListBuilder.HeaderBuilder {
+
+        /**
+         */
+        public HeaderBuilderImpl(@NonNull ListBuilderBasicImpl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public HeaderBuilderImpl(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setTitle(CharSequence title) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setSubtitle(CharSequence subtitle) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setSummarySubtitle(CharSequence summarySubtitle) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void setContentIntent(PendingIntent intent) {
+
+        }
+    }
+
+    /**
+     */
+    public static class ActionBuilderImpl extends TemplateBuilderImpl
+            implements ListBuilder.ActionBuilder {
+
+        /**
+         */
+        public ActionBuilderImpl(@NonNull ListBuilderBasicImpl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public ActionBuilderImpl(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+
+        }
+
+        /**
+         */
+        @Override
+        public void addAction(PendingIntent action, Icon actionIcon,
+                CharSequence contentDescription, int priority) {
+
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilderV1Impl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilderV1Impl.java
new file mode 100644
index 0000000..4ec4ac0
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilderV1Impl.java
@@ -0,0 +1,611 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.app.slice.Slice.HINT_ACTIONS;
+import static android.app.slice.Slice.HINT_LARGE;
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.Slice.HINT_PARTIAL;
+import static android.app.slice.Slice.HINT_SEE_MORE;
+import static android.app.slice.Slice.HINT_SELECTED;
+import static android.app.slice.Slice.HINT_SUMMARY;
+import static android.app.slice.Slice.HINT_TITLE;
+import static android.app.slice.Slice.SUBTYPE_COLOR;
+import static android.app.slice.Slice.SUBTYPE_CONTENT_DESCRIPTION;
+import static android.app.slice.Slice.SUBTYPE_PRIORITY;
+import static android.app.slice.Slice.SUBTYPE_TOGGLE;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+import static androidx.app.slice.core.SliceHints.SUBTYPE_MAX;
+import static androidx.app.slice.core.SliceHints.SUBTYPE_RANGE;
+import static androidx.app.slice.core.SliceHints.SUBTYPE_VALUE;
+
+import android.app.PendingIntent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+
+import java.util.ArrayList;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.SliceSpec;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class ListBuilderV1Impl extends TemplateBuilderImpl implements ListBuilder {
+
+    private Slice mSliceActions;
+    private Slice mSliceHeader;
+
+    /**
+     */
+    public ListBuilderV1Impl(Slice.Builder b, SliceSpec spec) {
+        super(b, spec);
+    }
+
+    /**
+     */
+    @Override
+    public void apply(Slice.Builder builder) {
+        if (mSliceHeader != null) {
+            builder.addSubSlice(mSliceHeader);
+        }
+        if (mSliceActions != null) {
+            builder.addSubSlice(mSliceActions);
+        }
+    }
+
+    /**
+     * Add a row to list builder.
+     */
+    @NonNull
+    @Override
+    public void addRow(@NonNull TemplateBuilderImpl builder) {
+        getBuilder().addSubSlice(builder.build());
+    }
+
+    /**
+     */
+    @NonNull
+    @Override
+    public void addGrid(@NonNull TemplateBuilderImpl builder) {
+        getBuilder().addSubSlice(builder.build());
+    }
+
+    /**
+     */
+    @Override
+    public void setHeader(@NonNull TemplateBuilderImpl builder) {
+        mSliceHeader = builder.build();
+    }
+
+    /**
+     */
+    @Override
+    public void setActions(@NonNull TemplateBuilderImpl builder) {
+        mSliceActions = builder.build();
+    }
+
+    @Override
+    public void addInputRange(TemplateBuilderImpl builder) {
+        getBuilder().addSubSlice(builder.build(), SUBTYPE_RANGE);
+    }
+
+    @Override
+    public void addRange(TemplateBuilderImpl builder) {
+        getBuilder().addSubSlice(builder.build(), SUBTYPE_RANGE);
+    }
+
+    /**
+     */
+    @Override
+    public void addSeeMoreRow(TemplateBuilderImpl builder) {
+        builder.getBuilder().addHints(HINT_SEE_MORE);
+        getBuilder().addSubSlice(builder.build());
+    }
+
+    /**
+     */
+    @Override
+    public void addSeeMoreAction(PendingIntent intent) {
+        getBuilder().addSubSlice(
+                new Slice.Builder(getBuilder())
+                        .addHints(HINT_SEE_MORE)
+                        .addAction(intent, new Slice.Builder(getBuilder()).build(), null)
+                        .build());
+    }
+
+
+    /**
+     * Builder to construct an input row.
+     */
+    public static class RangeBuilderImpl extends TemplateBuilderImpl implements RangeBuilder {
+        private int mMax = 100;
+        private int mValue = 0;
+        private CharSequence mTitle;
+
+        public RangeBuilderImpl(Slice.Builder sb) {
+            super(sb, null);
+        }
+
+        @Override
+        public void setMax(int max) {
+            mMax = max;
+        }
+
+        @Override
+        public void setValue(int value) {
+            mValue = value;
+        }
+
+        @Override
+        public void setTitle(@NonNull CharSequence title) {
+            mTitle = title;
+        }
+
+        @Override
+        public void apply(Slice.Builder builder) {
+            if (mTitle != null) {
+                builder.addText(mTitle, null, HINT_TITLE);
+            }
+            builder.addHints(HINT_LIST_ITEM)
+                    .addInt(mMax, SUBTYPE_MAX)
+                    .addInt(mValue, SUBTYPE_VALUE);
+        }
+    }
+
+    /**
+     * Builder to construct an input range row.
+     */
+    public static class InputRangeBuilderImpl
+            extends RangeBuilderImpl implements InputRangeBuilder {
+        private PendingIntent mAction;
+        private Icon mThumb;
+
+        public InputRangeBuilderImpl(Slice.Builder sb) {
+            super(sb);
+        }
+
+        @Override
+        public void setAction(@NonNull PendingIntent action) {
+            mAction = action;
+        }
+
+        @Override
+        public void setThumb(@NonNull Icon thumb) {
+            mThumb = thumb;
+        }
+
+        @Override
+        public void apply(Slice.Builder builder) {
+            if (mAction == null) {
+                throw new IllegalStateException("Input ranges must have an associated action.");
+            }
+            Slice.Builder sb = new Slice.Builder(builder);
+            super.apply(sb);
+            if (mThumb != null) {
+                sb.addIcon(mThumb, null);
+            }
+            builder.addAction(mAction, sb.build(), SUBTYPE_RANGE).addHints(HINT_LIST_ITEM);
+        }
+    }
+
+    /**
+     */
+    @NonNull
+    @Override
+    public void setColor(int color) {
+        getBuilder().addInt(color, SUBTYPE_COLOR);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createRowBuilder() {
+        return new RowBuilderImpl(this);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createRowBuilder(Uri uri) {
+        return new RowBuilderImpl(uri);
+    }
+
+
+    @Override
+    public TemplateBuilderImpl createInputRangeBuilder() {
+        return new InputRangeBuilderImpl(createChildBuilder());
+    }
+
+    @Override
+    public TemplateBuilderImpl createRangeBuilder() {
+        return new RangeBuilderImpl(createChildBuilder());
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createGridBuilder() {
+        return new GridBuilderListV1Impl(createChildBuilder(), null);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createHeaderBuilder() {
+        return new HeaderBuilderImpl(this);
+    }
+
+    @Override
+    public TemplateBuilderImpl createHeaderBuilder(Uri uri) {
+        return new HeaderBuilderImpl(uri);
+    }
+
+    @Override
+    public TemplateBuilderImpl createActionBuilder() {
+        return new ActionBuilderImpl(this);
+    }
+
+    @Override
+    public TemplateBuilderImpl createActionBuilder(Uri uri) {
+        return new ActionBuilderImpl(uri);
+    }
+
+    /**
+     */
+    public static class RowBuilderImpl extends TemplateBuilderImpl
+            implements ListBuilder.RowBuilder {
+
+        private PendingIntent mContentIntent;
+        private SliceItem mTitleItem;
+        private SliceItem mSubtitleItem;
+        private SliceItem mStartItem;
+        private ArrayList<SliceItem> mEndItems = new ArrayList<>();
+
+        /**
+         */
+        public RowBuilderImpl(@NonNull ListBuilderV1Impl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public RowBuilderImpl(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        public RowBuilderImpl(Slice.Builder builder) {
+            super(builder, null);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setTitleItem(long timeStamp) {
+            mStartItem = new SliceItem(timeStamp, FORMAT_TIMESTAMP, null, new String[]{HINT_TITLE});
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setTitleItem(@NonNull Icon icon) {
+            setTitleItem(icon, false /* isLoading */);
+        }
+
+        /**
+         */
+        @Override
+        public void setTitleItem(@Nullable Icon icon, boolean isLoading) {
+            mStartItem = new SliceItem(icon, FORMAT_IMAGE, null, new String[]{HINT_TITLE});
+            if (isLoading) {
+                mStartItem.addHint(HINT_PARTIAL);
+            }
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setTitleItem(@NonNull Icon icon, @NonNull PendingIntent action) {
+            setTitleItem(icon, action, false /* isLoading */);
+        }
+
+        /**
+         */
+        @Override
+        public void setTitleItem(Icon icon, PendingIntent action, boolean isLoading) {
+            Slice actionSlice = new Slice.Builder(getBuilder()).addIcon(icon, null).build();
+            mStartItem = new SliceItem(action, actionSlice, FORMAT_ACTION, null,
+                    new String[]{HINT_TITLE});
+            if (isLoading) {
+                mStartItem.addHint(HINT_PARTIAL);
+            }
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setContentIntent(@NonNull PendingIntent action) {
+            mContentIntent = action;
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setTitle(CharSequence title) {
+            setTitle(title, false /* isLoading */);
+        }
+
+        /**
+         */
+        @Override
+        public void setTitle(CharSequence title, boolean isLoading) {
+            mTitleItem = new SliceItem(title, FORMAT_TEXT, null, new String[] {HINT_TITLE});
+            if (isLoading) {
+                mTitleItem.addHint(HINT_PARTIAL);
+            }
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void setSubtitle(CharSequence subtitle) {
+            setSubtitle(subtitle, false /* isLoading */);
+        }
+
+        /**
+         */
+        @Override
+        public void setSubtitle(CharSequence subtitle, boolean isLoading) {
+            mSubtitleItem = new SliceItem(subtitle, FORMAT_TEXT, null, new String[0]);
+            if (isLoading) {
+                mSubtitleItem.addHint(HINT_PARTIAL);
+            }
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addEndItem(long timeStamp) {
+            mEndItems.add(new SliceItem(timeStamp, FORMAT_TIMESTAMP, null, new String[0]));
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addEndItem(@NonNull Icon icon) {
+            addEndItem(icon, false /* isLoading */);
+        }
+
+        /**
+         */
+        @Override
+        public void addEndItem(Icon icon, boolean isLoading) {
+            SliceItem item = new SliceItem(icon, FORMAT_IMAGE, null,
+                    new String[] {HINT_NO_TINT, HINT_LARGE});
+            if (isLoading) {
+                item.addHint(HINT_PARTIAL);
+            }
+            mEndItems.add(item);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addEndItem(@NonNull Icon icon, @NonNull PendingIntent action) {
+            addEndItem(icon, action, false /* isLoading */);
+        }
+
+        /**
+         */
+        @Override
+        public void addEndItem(Icon icon, PendingIntent action, boolean isLoading) {
+            Slice actionSlice = new Slice.Builder(getBuilder()).addIcon(icon, null).build();
+            SliceItem item = new SliceItem(action, actionSlice, FORMAT_ACTION, null,
+                    new String[0]);
+            if (isLoading) {
+                item.addHint(HINT_PARTIAL);
+            }
+            mEndItems.add(item);
+        }
+
+        /**
+         */
+        @NonNull
+        @Override
+        public void addToggle(@NonNull PendingIntent action, boolean isChecked,
+                @NonNull Icon icon) {
+            addToggle(action, isChecked, icon, false /* isLoading */);
+        }
+
+        @Override
+        public void addToggle(PendingIntent action, boolean isChecked, Icon icon,
+                boolean isLoading) {
+            @Slice.SliceHint String[] hints = isChecked
+                    ? new String[] {HINT_SELECTED}
+                    : new String[0];
+            Slice.Builder actionSliceBuilder = new Slice.Builder(getBuilder()).addHints(hints);
+            if (icon != null) {
+                actionSliceBuilder.addIcon(icon, null);
+            }
+            Slice actionSlice = actionSliceBuilder.build();
+            SliceItem item = new SliceItem(action, actionSlice, FORMAT_ACTION, SUBTYPE_TOGGLE,
+                    hints);
+            if (isLoading) {
+                item.addHint(HINT_PARTIAL);
+            }
+            mEndItems.add(item);
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder b) {
+            Slice.Builder wrapped = b;
+            if (mContentIntent != null) {
+                b = new Slice.Builder(wrapped);
+            }
+            if (mStartItem != null) {
+                b.addItem(mStartItem);
+            }
+            if (mTitleItem != null) {
+                b.addItem(mTitleItem);
+            }
+            if (mSubtitleItem != null) {
+                b.addItem(mSubtitleItem);
+            }
+            for (int i = 0; i < mEndItems.size(); i++) {
+                SliceItem item = mEndItems.get(i);
+                b.addItem(item);
+            }
+            if (mContentIntent != null) {
+                wrapped.addAction(mContentIntent, b.build(), null);
+            }
+            wrapped.addHints(HINT_LIST_ITEM);
+        }
+    }
+
+    /**
+     */
+    public static class HeaderBuilderImpl extends TemplateBuilderImpl
+            implements ListBuilder.HeaderBuilder {
+
+        private CharSequence mTitle;
+        private CharSequence mSubtitle;
+        private CharSequence mSummarySubtitle;
+        private PendingIntent mContentIntent;
+
+        /**
+         */
+        public HeaderBuilderImpl(@NonNull ListBuilderV1Impl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public HeaderBuilderImpl(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder b) {
+            Slice.Builder wrapped = b;
+            if (mContentIntent != null) {
+                b = new Slice.Builder(wrapped);
+            }
+            if (mTitle != null) {
+                b.addText(mTitle, null /* subtype */, HINT_TITLE);
+            }
+            if (mSubtitle != null) {
+                b.addText(mSubtitle, null /* subtype */);
+            }
+            if (mSummarySubtitle != null) {
+                b.addText(mSummarySubtitle, null /* subtype */, HINT_SUMMARY);
+            }
+            if (mContentIntent != null) {
+                wrapped.addAction(mContentIntent, b.build(), null /* subtype */);
+            }
+        }
+
+        /**
+         */
+        @Override
+        public void setTitle(CharSequence title) {
+            mTitle = title;
+        }
+
+        /**
+         */
+        @Override
+        public void setSubtitle(CharSequence subtitle) {
+            mSubtitle = subtitle;
+        }
+
+        /**
+         */
+        @Override
+        public void setSummarySubtitle(CharSequence summarySubtitle) {
+            mSummarySubtitle = summarySubtitle;
+        }
+
+        /**
+         */
+        @Override
+        public void setContentIntent(PendingIntent intent) {
+            mContentIntent = intent;
+        }
+    }
+
+    /**
+     */
+    public static class ActionBuilderImpl extends TemplateBuilderImpl
+            implements ListBuilder.ActionBuilder {
+
+        /**
+         */
+        public ActionBuilderImpl(@NonNull ListBuilderV1Impl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        public ActionBuilderImpl(@NonNull Uri uri) {
+            super(new Slice.Builder(uri), null);
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+            builder.addHints(HINT_ACTIONS);
+        }
+
+        /**
+         */
+        @Override
+        public void addAction(PendingIntent action, Icon actionIcon,
+                CharSequence contentDescription, int priority) {
+            getBuilder().addAction(action, new Slice.Builder(getBuilder())
+                    .addIcon(actionIcon, null /* subtype */)
+                    .addInt(priority, SUBTYPE_PRIORITY /* subtype */)
+                    .addText(contentDescription, SUBTYPE_CONTENT_DESCRIPTION)
+                    .addHints(HINT_ACTIONS).build(), null /* subtype */);
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingBasicImpl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingBasicImpl.java
new file mode 100644
index 0000000..843302c
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingBasicImpl.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.graphics.drawable.Icon;
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpec;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class MessagingBasicImpl extends TemplateBuilderImpl implements
+        MessagingBuilder {
+    private MessageBuilder mLastMessage;
+
+    /**
+     */
+    public MessagingBasicImpl(Slice.Builder builder, SliceSpec spec) {
+        super(builder, spec);
+    }
+
+    /**
+     */
+    @Override
+    public void apply(Slice.Builder builder) {
+        if (mLastMessage != null) {
+            if (mLastMessage.mIcon != null) {
+                builder.addIcon(mLastMessage.mIcon, null);
+            }
+            if (mLastMessage.mText != null) {
+                builder.addText(mLastMessage.mText, null);
+            }
+        }
+    }
+
+    /**
+     */
+    @Override
+    public void add(TemplateBuilderImpl builder) {
+        MessageBuilder b = (MessageBuilder) builder;
+        if (mLastMessage == null || mLastMessage.mTimestamp < b.mTimestamp) {
+            mLastMessage = b;
+        }
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createMessageBuilder() {
+        return new MessageBuilder(this);
+    }
+
+    /**
+     */
+    public static final class MessageBuilder extends TemplateBuilderImpl
+            implements MessagingBuilder.MessageBuilder {
+
+        private Icon mIcon;
+        private CharSequence mText;
+        private long mTimestamp;
+
+        /**
+         */
+        public MessageBuilder(MessagingBasicImpl parent) {
+            this(parent.createChildBuilder());
+        }
+
+        /**
+         */
+        private MessageBuilder(Slice.Builder builder) {
+            super(builder, null);
+        }
+
+        /**
+         */
+        @Override
+        public void addSource(Icon source) {
+            mIcon = source;
+        }
+
+        /**
+         */
+        @Override
+        public void addText(CharSequence text) {
+            mText = text;
+        }
+
+        /**
+         */
+        @Override
+        public void addTimestamp(long timestamp) {
+            mTimestamp = timestamp;
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingBuilder.java
new file mode 100644
index 0000000..635f160
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingBuilder.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.graphics.drawable.Icon;
+import android.support.annotation.RestrictTo;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public interface MessagingBuilder {
+    /**
+     * Add a subslice to this builder.
+     */
+    void add(TemplateBuilderImpl builder);
+
+    /**
+     * Create a builder that implements {@link MessageBuilder}
+     */
+    TemplateBuilderImpl createMessageBuilder();
+
+    /**
+     */
+    public interface MessageBuilder {
+
+        /**
+         * Add the icon used to display contact in the messaging experience
+         */
+        void addSource(Icon source);
+
+        /**
+         * Add the text to be used for this message.
+         */
+        void addText(CharSequence text);
+
+        /**
+         * Add the time at which this message arrived in ms since Unix epoch
+         */
+        void addTimestamp(long timestamp);
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingListV1Impl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingListV1Impl.java
new file mode 100644
index 0000000..408ad0b
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingListV1Impl.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.graphics.drawable.Icon;
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpec;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class MessagingListV1Impl extends TemplateBuilderImpl implements MessagingBuilder{
+
+    private final ListBuilderV1Impl mListBuilder;
+
+    /**
+     */
+    public MessagingListV1Impl(Slice.Builder b, SliceSpec spec) {
+        super(b, spec);
+        mListBuilder = new ListBuilderV1Impl(b, spec);
+    }
+
+    /**
+     */
+    @Override
+    public void add(TemplateBuilderImpl builder) {
+        MessageBuilder b = (MessageBuilder) builder;
+        mListBuilder.addRow(b.mListBuilder);
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createMessageBuilder() {
+        return new MessageBuilder(this);
+    }
+
+    /**
+     */
+    @Override
+    public void apply(Slice.Builder builder) {
+        mListBuilder.apply(builder);
+    }
+
+    /**
+     */
+    public static final class MessageBuilder extends TemplateBuilderImpl
+            implements MessagingBuilder.MessageBuilder {
+        private final ListBuilderV1Impl.RowBuilderImpl mListBuilder;
+
+        /**
+         */
+        public MessageBuilder(MessagingListV1Impl parent) {
+            this(parent.createChildBuilder());
+        }
+
+        private MessageBuilder(Slice.Builder builder) {
+            super(builder, null);
+            mListBuilder = new ListBuilderV1Impl.RowBuilderImpl(builder);
+        }
+
+        /**
+         */
+        @Override
+        public void addSource(Icon source) {
+            mListBuilder.setTitleItem(source);
+        }
+
+        /**
+         */
+        @Override
+        public void addText(CharSequence text) {
+            mListBuilder.setSubtitle(text);
+        }
+
+        /**
+         */
+        @Override
+        public void addTimestamp(long timestamp) {
+            mListBuilder.addEndItem(timestamp);
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+            mListBuilder.apply(builder);
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingV1Impl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingV1Impl.java
new file mode 100644
index 0000000..4e07139
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/MessagingV1Impl.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.builders.impl;
+
+import static android.app.slice.Slice.SUBTYPE_MESSAGE;
+
+import android.graphics.drawable.Icon;
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpec;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public class MessagingV1Impl extends TemplateBuilderImpl implements MessagingBuilder {
+
+    /**
+     */
+    public MessagingV1Impl(Slice.Builder b, SliceSpec spec) {
+        super(b, spec);
+    }
+
+    /**
+     */
+    @Override
+    public void add(TemplateBuilderImpl builder) {
+        getBuilder().addSubSlice(builder.build(), SUBTYPE_MESSAGE);
+    }
+
+    /**
+     */
+    @Override
+    public void apply(Slice.Builder builder) {
+
+    }
+
+    /**
+     */
+    @Override
+    public TemplateBuilderImpl createMessageBuilder() {
+        return new MessageBuilder(this);
+    }
+
+    /**
+     */
+    public static final class MessageBuilder extends TemplateBuilderImpl
+            implements MessagingBuilder.MessageBuilder {
+        /**
+         */
+        public MessageBuilder(MessagingV1Impl parent) {
+            super(parent.createChildBuilder(), null);
+        }
+
+        /**
+         */
+        @Override
+        public void addSource(Icon source) {
+            getBuilder().addIcon(source, android.app.slice.Slice.SUBTYPE_SOURCE);
+        }
+
+        /**
+         */
+        @Override
+        public void addText(CharSequence text) {
+            getBuilder().addText(text, null);
+        }
+
+        /**
+         */
+        @Override
+        public void addTimestamp(long timestamp) {
+            getBuilder().addTimestamp(timestamp, null);
+        }
+
+        /**
+         */
+        @Override
+        public void apply(Slice.Builder builder) {
+        }
+    }
+}
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/TemplateBuilderImpl.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/TemplateBuilderImpl.java
new file mode 100644
index 0000000..294677e
--- /dev/null
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/TemplateBuilderImpl.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.builders.impl;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.support.annotation.RestrictTo;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceSpec;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public abstract class TemplateBuilderImpl {
+
+    private final Slice.Builder mSliceBuilder;
+    private final SliceSpec mSpec;
+
+    protected TemplateBuilderImpl(Slice.Builder b, SliceSpec spec) {
+        mSliceBuilder = b;
+        mSpec = spec;
+    }
+
+    /**
+     * Construct the slice.
+     */
+    public Slice build() {
+        mSliceBuilder.setSpec(mSpec);
+        apply(mSliceBuilder);
+        return mSliceBuilder.build();
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public Slice.Builder getBuilder() {
+        return mSliceBuilder;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public Slice.Builder createChildBuilder() {
+        return new Slice.Builder(mSliceBuilder);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public abstract void apply(Slice.Builder builder);
+}
diff --git a/slices/core/api/current.txt b/slices/core/api/current.txt
new file mode 100644
index 0000000..77936d6
--- /dev/null
+++ b/slices/core/api/current.txt
@@ -0,0 +1,38 @@
+package androidx.app.slice {
+
+  public final class Slice {
+    method public java.util.List<java.lang.String> getHints();
+    method public java.util.List<androidx.app.slice.SliceItem> getItems();
+    method public android.net.Uri getUri();
+  }
+
+  public class SliceConvert {
+    ctor public SliceConvert();
+    method public static android.app.slice.Slice unwrap(androidx.app.slice.Slice);
+    method public static androidx.app.slice.Slice wrap(android.app.slice.Slice);
+  }
+
+  public class SliceItem {
+    method public android.app.PendingIntent getAction();
+    method public java.lang.String getFormat();
+    method public java.util.List<java.lang.String> getHints();
+    method public android.graphics.drawable.Icon getIcon();
+    method public int getInt();
+    method public androidx.app.slice.Slice getSlice();
+    method public java.lang.String getSubType();
+    method public java.lang.CharSequence getText();
+    method public long getTimestamp();
+    method public boolean hasHint(java.lang.String);
+  }
+
+  public abstract class SliceProvider extends android.content.ContentProvider {
+    ctor public SliceProvider();
+    method public abstract androidx.app.slice.Slice onBindSlice(android.net.Uri);
+    method public abstract boolean onCreateSliceProvider();
+    method public android.net.Uri onMapIntentToUri(android.content.Intent);
+    method public void onSlicePinned(android.net.Uri);
+    method public void onSliceUnpinned(android.net.Uri);
+  }
+
+}
+
diff --git a/slices/core/build.gradle b/slices/core/build.gradle
new file mode 100644
index 0000000..879b409
--- /dev/null
+++ b/slices/core/build.gradle
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+import static android.support.dependencies.DependenciesKt.*
+
+import android.support.LibraryGroups
+import android.support.LibraryVersions
+
+plugins {
+    id("SupportAndroidLibraryPlugin")
+}
+
+dependencies {
+    implementation project(":support-annotations")
+    implementation project(":appcompat-v7")
+
+    androidTestImplementation(TEST_RUNNER)
+    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy)
+    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy)
+}
+
+supportLibrary {
+    name = "Common utilities for slices"
+    publish = true
+    mavenVersion = LibraryVersions.SUPPORT_LIBRARY
+    mavenGroup = LibraryGroups.SLICES
+    inceptionYear = "2017"
+    description = "The slices core library provides utilities for the slices view and provider libraries"
+    minSdkVersion = 24
+}
diff --git a/slices/core/lint-baseline.xml b/slices/core/lint-baseline.xml
new file mode 100644
index 0000000..2cadde1
--- /dev/null
+++ b/slices/core/lint-baseline.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="4" by="lint 3.0.0">
+
+</issues>
diff --git a/slices/core/src/androidTest/AndroidManifest.xml b/slices/core/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..90dbbcc
--- /dev/null
+++ b/slices/core/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="androidx.app.slice.core.test">
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
+
+    <application>
+        <provider android:name="androidx.app.slice.SliceTestProvider"
+            android:authorities="androidx.app.slice.core.test"
+            android:process=":provider"
+            android:exported="true" />
+    </application>
+
+</manifest>
diff --git a/design/tests/NO_DOCS b/slices/core/src/androidTest/NO_DOCS
similarity index 92%
copy from design/tests/NO_DOCS
copy to slices/core/src/androidTest/NO_DOCS
index 0c81e4a..092a39c 100644
--- a/design/tests/NO_DOCS
+++ b/slices/core/src/androidTest/NO_DOCS
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Android Open Source Project
+# 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.
diff --git a/slices/core/src/androidTest/java/androidx/app/slice/SliceTest.java b/slices/core/src/androidTest/java/androidx/app/slice/SliceTest.java
new file mode 100644
index 0000000..0ede29d
--- /dev/null
+++ b/slices/core/src/androidTest/java/androidx/app/slice/SliceTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2017 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 androidx.app.slice;
+
+import static android.app.slice.Slice.HINT_LARGE;
+import static android.app.slice.Slice.HINT_LIST;
+import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.Slice.HINT_TITLE;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+import static android.app.slice.SliceProvider.SLICE_TYPE;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.app.PendingIntent.CanceledException;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import androidx.app.slice.core.test.R;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SliceTest {
+
+    public static boolean sFlag = false;
+
+    private static final Uri BASE_URI = Uri.parse("content://androidx.app.slice.core.test/");
+    private final Context mContext = InstrumentationRegistry.getContext();
+
+    @Test
+    public void testProcess() {
+        sFlag = false;
+        Slice.bindSlice(mContext,
+                BASE_URI.buildUpon().appendPath("set_flag").build(),
+                Collections.<SliceSpec>emptyList());
+        assertFalse(sFlag);
+    }
+
+    @Test
+    public void testType() {
+        assertEquals(SLICE_TYPE, mContext.getContentResolver().getType(BASE_URI));
+    }
+
+    @Test
+    public void testSliceUri() {
+        Slice s = Slice.bindSlice(mContext, BASE_URI, Collections.<SliceSpec>emptyList());
+        assertEquals(BASE_URI, s.getUri());
+    }
+
+    @Test
+    public void testSubSlice() {
+        Uri uri = BASE_URI.buildUpon().appendPath("subslice").build();
+        Slice s = Slice.bindSlice(mContext, uri, Collections.<SliceSpec>emptyList());
+        assertEquals(uri, s.getUri());
+        assertEquals(1, s.getItems().size());
+
+        SliceItem item = s.getItems().get(0);
+        assertEquals(FORMAT_SLICE, item.getFormat());
+        assertEquals("subslice", item.getSubType());
+        // The item should start with the same Uri as the parent, but be different.
+        assertTrue(item.getSlice().getUri().toString().startsWith(uri.toString()));
+        assertNotEquals(uri, item.getSlice().getUri());
+    }
+
+    @Test
+    public void testText() {
+        Uri uri = BASE_URI.buildUpon().appendPath("text").build();
+        Slice s = Slice.bindSlice(mContext, uri, Collections.<SliceSpec>emptyList());
+        assertEquals(uri, s.getUri());
+        assertEquals(1, s.getItems().size());
+
+        SliceItem item = s.getItems().get(0);
+        assertEquals(FORMAT_TEXT, item.getFormat());
+        // TODO: Test spannables here.
+        assertEquals("Expected text", item.getText());
+    }
+
+    @Test
+    public void testIcon() {
+        Uri uri = BASE_URI.buildUpon().appendPath("icon").build();
+        Slice s = Slice.bindSlice(mContext, uri, Collections.<SliceSpec>emptyList());
+        assertEquals(uri, s.getUri());
+        assertEquals(1, s.getItems().size());
+
+        SliceItem item = s.getItems().get(0);
+        assertEquals(FORMAT_IMAGE, item.getFormat());
+        assertEquals(Icon.createWithResource(mContext, R.drawable.size_48x48).toString(),
+                item.getIcon().toString());
+    }
+
+    @Test
+    public void testAction() {
+        sFlag = false;
+        final CountDownLatch latch = new CountDownLatch(1);
+        BroadcastReceiver receiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                sFlag = true;
+                latch.countDown();
+            }
+        };
+        mContext.registerReceiver(receiver,
+                new IntentFilter(mContext.getPackageName() + ".action"));
+        Uri uri = BASE_URI.buildUpon().appendPath("action").build();
+        Slice s = Slice.bindSlice(mContext, uri, Collections.<SliceSpec>emptyList());
+        assertEquals(uri, s.getUri());
+        assertEquals(1, s.getItems().size());
+
+        SliceItem item = s.getItems().get(0);
+        assertEquals(FORMAT_ACTION, item.getFormat());
+        try {
+            item.getAction().send();
+        } catch (CanceledException e) {
+        }
+
+        try {
+            latch.await(100, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        assertTrue(sFlag);
+        mContext.unregisterReceiver(receiver);
+    }
+
+    @Test
+    public void testInt() {
+        Uri uri = BASE_URI.buildUpon().appendPath("int").build();
+        Slice s = Slice.bindSlice(mContext, uri, Collections.<SliceSpec>emptyList());
+        assertEquals(uri, s.getUri());
+        assertEquals(1, s.getItems().size());
+
+        SliceItem item = s.getItems().get(0);
+        assertEquals(FORMAT_INT, item.getFormat());
+        assertEquals(0xff121212, item.getInt());
+    }
+
+    @Test
+    public void testTimestamp() {
+        Uri uri = BASE_URI.buildUpon().appendPath("timestamp").build();
+        Slice s = Slice.bindSlice(mContext, uri, Collections.<SliceSpec>emptyList());
+        assertEquals(uri, s.getUri());
+        assertEquals(1, s.getItems().size());
+
+        SliceItem item = s.getItems().get(0);
+        assertEquals(FORMAT_TIMESTAMP, item.getFormat());
+        assertEquals(43, item.getTimestamp());
+    }
+
+    @Test
+    public void testHints() {
+        // Note this tests that hints are propagated through to the client but not that any specific
+        // hints have any effects.
+        Uri uri = BASE_URI.buildUpon().appendPath("hints").build();
+        Slice s = Slice.bindSlice(mContext, uri, Collections.<SliceSpec>emptyList());
+        assertEquals(uri, s.getUri());
+
+        assertEquals(Arrays.asList(HINT_LIST), s.getHints());
+        assertEquals(Arrays.asList(HINT_TITLE), s.getItems().get(0).getHints());
+        assertEquals(Arrays.asList(HINT_NO_TINT, HINT_LARGE),
+                s.getItems().get(1).getHints());
+    }
+}
diff --git a/slices/core/src/androidTest/java/androidx/app/slice/SliceTestProvider.java b/slices/core/src/androidTest/java/androidx/app/slice/SliceTestProvider.java
new file mode 100644
index 0000000..9320bc9
--- /dev/null
+++ b/slices/core/src/androidTest/java/androidx/app/slice/SliceTestProvider.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2017 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 androidx.app.slice;
+
+import static android.app.slice.Slice.HINT_LARGE;
+import static android.app.slice.Slice.HINT_LIST;
+import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.Slice.HINT_TITLE;
+
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+
+import androidx.app.slice.Slice.Builder;
+import androidx.app.slice.core.test.R;
+
+public class SliceTestProvider extends androidx.app.slice.SliceProvider {
+
+    @Override
+    public boolean onCreateSliceProvider() {
+        return true;
+    }
+
+    @Override
+    public Slice onBindSlice(Uri sliceUri) {
+        switch (sliceUri.getPath()) {
+            case "/set_flag":
+                SliceTest.sFlag = true;
+                break;
+            case "/subslice":
+                Builder b = new Builder(sliceUri);
+                return b.addSubSlice(new Slice.Builder(b).build(), "subslice").build();
+            case "/text":
+                return new Slice.Builder(sliceUri).addText("Expected text", "text").build();
+            case "/icon":
+                return new Slice.Builder(sliceUri).addIcon(
+                        Icon.createWithResource(getContext(), R.drawable.size_48x48),
+                        "icon").build();
+            case "/action":
+                Builder builder = new Builder(sliceUri);
+                Slice subSlice = new Slice.Builder(builder).build();
+                PendingIntent broadcast = PendingIntent.getBroadcast(getContext(), 0,
+                        new Intent(getContext().getPackageName() + ".action"), 0);
+                return builder.addAction(broadcast, subSlice, "action").build();
+            case "/int":
+                return new Slice.Builder(sliceUri).addInt(0xff121212, "int").build();
+            case "/timestamp":
+                return new Slice.Builder(sliceUri).addTimestamp(43, "timestamp").build();
+            case "/hints":
+                return new Slice.Builder(sliceUri)
+                        .addHints(HINT_LIST)
+                        .addText("Text", null, HINT_TITLE)
+                        .addIcon(Icon.createWithResource(getContext(), R.drawable.size_48x48),
+                                null, HINT_NO_TINT, HINT_LARGE)
+                        .build();
+        }
+        return new Slice.Builder(sliceUri).build();
+    }
+
+}
diff --git a/slices/core/src/androidTest/java/androidx/app/slice/compat/CompatPinnedListTest.java b/slices/core/src/androidTest/java/androidx/app/slice/compat/CompatPinnedListTest.java
new file mode 100644
index 0000000..18bb606
--- /dev/null
+++ b/slices/core/src/androidTest/java/androidx/app/slice/compat/CompatPinnedListTest.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.compat;
+
+import static android.content.Context.MODE_PRIVATE;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import android.content.Context;
+import android.net.Uri;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import androidx.app.slice.SliceSpec;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class CompatPinnedListTest {
+
+    private final Context mContext = InstrumentationRegistry.getContext();
+    private CompatPinnedList mCompatPinnedList;
+    private List<SliceSpec> mSpecs;
+
+    private static final SliceSpec[] FIRST_SPECS = new SliceSpec[]{
+            new SliceSpec("spec1", 3),
+            new SliceSpec("spec2", 3),
+            new SliceSpec("spec3", 2),
+            new SliceSpec("spec4", 1),
+    };
+
+    private static final SliceSpec[] SECOND_SPECS = new SliceSpec[]{
+            new SliceSpec("spec2", 1),
+            new SliceSpec("spec3", 2),
+            new SliceSpec("spec4", 3),
+            new SliceSpec("spec5", 4),
+    };
+
+    @Before
+    public void setup() {
+        mCompatPinnedList = new CompatPinnedList(mContext, "test_file");
+        mSpecs = Collections.emptyList();
+    }
+
+    @After
+    public void tearDown() {
+        mContext.getSharedPreferences("test_file", MODE_PRIVATE).edit().clear().commit();
+    }
+
+    @Test
+    public void testAddFirstPin() {
+        assertTrue(mCompatPinnedList.addPin(Uri.parse("content://something/something"), "my_pkg",
+                mSpecs));
+    }
+
+    @Test
+    public void testAddSecondPin() {
+        assertTrue(mCompatPinnedList.addPin(Uri.parse("content://something/something"), "my_pkg",
+                mSpecs));
+        assertFalse(mCompatPinnedList.addPin(Uri.parse("content://something/something"), "my_pkg2",
+                mSpecs));
+    }
+
+    @Test
+    public void testAddMultipleUris() {
+        assertTrue(mCompatPinnedList.addPin(Uri.parse("content://something/something"), "my_pkg",
+                mSpecs));
+        assertTrue(mCompatPinnedList.addPin(Uri.parse("content://something/something2"), "my_pkg",
+                mSpecs));
+    }
+
+    @Test
+    public void testRemovePin() {
+        mCompatPinnedList.addPin(Uri.parse("content://something/something"), "my_pkg", mSpecs);
+        mCompatPinnedList.addPin(Uri.parse("content://something/something"), "my_pkg2", mSpecs);
+        assertFalse(mCompatPinnedList.removePin(Uri.parse("content://something/something"),
+                    "my_pkg"));
+        assertTrue(mCompatPinnedList.removePin(Uri.parse("content://something/something"),
+                    "my_pkg2"));
+    }
+
+    @Test
+    public void testMergeSpecs() {
+        Uri uri = Uri.parse("content://something/something");
+
+        assertEquals(Collections.emptyList(), mCompatPinnedList.getSpecs(uri));
+
+        mCompatPinnedList.addPin(uri, "my_pkg", Arrays.asList(FIRST_SPECS));
+        assertArrayEquals(FIRST_SPECS, mCompatPinnedList.getSpecs(uri).toArray(new SliceSpec[0]));
+
+        mCompatPinnedList.addPin(uri, "my_pkg2", Arrays.asList(SECOND_SPECS));
+        assertArrayEquals(new SliceSpec[]{
+                // spec1 is gone because it's not in the second set.
+                new SliceSpec("spec2", 1), // spec2 is 1 because it's smaller in the second set.
+                new SliceSpec("spec3", 2), // spec3 is the same in both sets
+                new SliceSpec("spec4", 1), // spec4 is 1 because it's smaller in the first set.
+                // spec5 is gone because it's not in the first set.
+        }, mCompatPinnedList.getSpecs(uri).toArray(new SliceSpec[0]));
+
+    }
+}
diff --git a/slices/core/src/androidTest/res/drawable/size_48x48.jpg b/slices/core/src/androidTest/res/drawable/size_48x48.jpg
new file mode 100644
index 0000000..5c2291e
--- /dev/null
+++ b/slices/core/src/androidTest/res/drawable/size_48x48.jpg
Binary files differ
diff --git a/design/AndroidManifest.xml b/slices/core/src/main/AndroidManifest.xml
similarity index 70%
copy from design/AndroidManifest.xml
copy to slices/core/src/main/AndroidManifest.xml
index 0eb8b85..ac37d3c 100644
--- a/design/AndroidManifest.xml
+++ b/slices/core/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -14,6 +14,11 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.support.design">
-    <uses-sdk android:minSdkVersion="14" />
+          package="androidx.app.slice.core">
+    <uses-sdk android:minSdkVersion="28"/>
+
+    <application>
+        <activity android:name="androidx.app.slice.compat.SlicePermissionActivity">
+        </activity>
+    </application>
 </manifest>
diff --git a/slices/core/src/main/java/androidx/app/slice/ArrayUtils.java b/slices/core/src/main/java/androidx/app/slice/ArrayUtils.java
new file mode 100644
index 0000000..669f66a
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/ArrayUtils.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2017 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 androidx.app.slice;
+
+
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
+
+import java.lang.reflect.Array;
+import java.util.Objects;
+
+/**
+ * @hide
+ */
+@RestrictTo(Scope.LIBRARY)
+class ArrayUtils {
+
+    public static <T> boolean contains(T[] array, T item) {
+        for (T t : array) {
+            if (Objects.equals(t, item)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static <T> T[] appendElement(Class<T> kind, T[] array, T element) {
+        final T[] result;
+        final int end;
+        if (array != null) {
+            end = array.length;
+            result = (T[]) Array.newInstance(kind, end + 1);
+            System.arraycopy(array, 0, result, 0, end);
+        } else {
+            end = 0;
+            result = (T[]) Array.newInstance(kind, 1);
+        }
+        result[end] = element;
+        return result;
+    }
+
+    public static <T> T[] removeElement(Class<T> kind, T[] array, T element) {
+        if (array != null) {
+            if (!contains(array, element)) {
+                return array;
+            }
+            final int length = array.length;
+            for (int i = 0; i < length; i++) {
+                if (Objects.equals(array[i], element)) {
+                    if (length == 1) {
+                        return null;
+                    }
+                    T[] result = (T[]) Array.newInstance(kind, length - 1);
+                    System.arraycopy(array, 0, result, 0, i);
+                    System.arraycopy(array, i + 1, result, i, length - i - 1);
+                    return result;
+                }
+            }
+        }
+        return array;
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/Slice.java b/slices/core/src/main/java/androidx/app/slice/Slice.java
new file mode 100644
index 0000000..779460e
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/Slice.java
@@ -0,0 +1,486 @@
+/*
+ * Copyright (C) 2017 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 androidx.app.slice;
+
+import static android.app.slice.Slice.HINT_ACTIONS;
+import static android.app.slice.Slice.HINT_HORIZONTAL;
+import static android.app.slice.Slice.HINT_LARGE;
+import static android.app.slice.Slice.HINT_LIST;
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.Slice.HINT_PARTIAL;
+import static android.app.slice.Slice.HINT_SEE_MORE;
+import static android.app.slice.Slice.HINT_SELECTED;
+import static android.app.slice.Slice.HINT_SUMMARY;
+import static android.app.slice.Slice.HINT_TITLE;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_REMOTE_INPUT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+import static androidx.app.slice.SliceConvert.unwrap;
+
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
+import android.app.RemoteInput;
+import android.content.ContentProvider;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
+import android.support.annotation.StringDef;
+import android.support.v4.os.BuildCompat;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import androidx.app.slice.compat.SliceProviderCompat;
+
+/**
+ * A slice is a piece of app content and actions that can be surfaced outside of the app.
+ *
+ * <p>They are constructed using {@link androidx.app.slice.builders.TemplateSliceBuilder}s
+ * in a tree structure that provides the OS some information about how the content should be
+ * displayed.
+ */
+public final class Slice {
+
+    private static final String HINTS = "hints";
+    private static final String ITEMS = "items";
+    private static final String URI = "uri";
+    private static final String SPEC_TYPE = "type";
+    private static final String SPEC_REVISION = "revision";
+    private final SliceSpec mSpec;
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    @StringDef({HINT_TITLE, HINT_LIST, HINT_LIST_ITEM, HINT_LARGE, HINT_ACTIONS, HINT_SELECTED,
+            HINT_HORIZONTAL, HINT_NO_TINT, HINT_PARTIAL, HINT_SUMMARY, HINT_SEE_MORE})
+    public @interface SliceHint{ }
+
+    private final SliceItem[] mItems;
+    private final @SliceHint String[] mHints;
+    private Uri mUri;
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    Slice(ArrayList<SliceItem> items, @SliceHint String[] hints, Uri uri,
+            SliceSpec spec) {
+        mHints = hints;
+        mItems = items.toArray(new SliceItem[items.size()]);
+        mUri = uri;
+        mSpec = spec;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public Slice(Bundle in) {
+        mHints = in.getStringArray(HINTS);
+        Parcelable[] items = in.getParcelableArray(ITEMS);
+        mItems = new SliceItem[items.length];
+        for (int i = 0; i < mItems.length; i++) {
+            if (items[i] instanceof Bundle) {
+                mItems[i] = new SliceItem((Bundle) items[i]);
+            }
+        }
+        mUri = in.getParcelable(URI);
+        mSpec = in.containsKey(SPEC_TYPE)
+                ? new SliceSpec(in.getString(SPEC_TYPE), in.getInt(SPEC_REVISION))
+                : null;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public Bundle toBundle() {
+        Bundle b = new Bundle();
+        b.putStringArray(HINTS, mHints);
+        Parcelable[] p = new Parcelable[mItems.length];
+        for (int i = 0; i < mItems.length; i++) {
+            p[i] = mItems[i].toBundle();
+        }
+        b.putParcelableArray(ITEMS, p);
+        b.putParcelable(URI, mUri);
+        if (mSpec != null) {
+            b.putString(SPEC_TYPE, mSpec.getType());
+            b.putInt(SPEC_REVISION, mSpec.getRevision());
+        }
+        return b;
+    }
+
+    /**
+     * @return The spec for this slice
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public @Nullable SliceSpec getSpec() {
+        return mSpec;
+    }
+
+    /**
+     * @return The Uri that this Slice represents.
+     */
+    public Uri getUri() {
+        return mUri;
+    }
+
+    /**
+     * @return All child {@link SliceItem}s that this Slice contains.
+     */
+    public List<SliceItem> getItems() {
+        return Arrays.asList(mItems);
+    }
+
+    /**
+     * @return All hints associated with this Slice.
+     */
+    public @SliceHint List<String> getHints() {
+        return Arrays.asList(mHints);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY_GROUP)
+    public boolean hasHint(@SliceHint String hint) {
+        return ArrayUtils.contains(mHints, hint);
+    }
+
+    /**
+     * A Builder used to construct {@link Slice}s
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY_GROUP)
+    public static class Builder {
+
+        private final Uri mUri;
+        private ArrayList<SliceItem> mItems = new ArrayList<>();
+        private @SliceHint ArrayList<String> mHints = new ArrayList<>();
+        private SliceSpec mSpec;
+
+        /**
+         * Create a builder which will construct a {@link Slice} for the Given Uri.
+         * @param uri Uri to tag for this slice.
+         */
+        public Builder(@NonNull Uri uri) {
+            mUri = uri;
+        }
+
+        /**
+         * Create a builder for a {@link Slice} that is a sub-slice of the slice
+         * being constructed by the provided builder.
+         * @param parent The builder constructing the parent slice
+         */
+        public Builder(@NonNull Slice.Builder parent) {
+            mUri = parent.mUri.buildUpon().appendPath("_gen")
+                    .appendPath(String.valueOf(mItems.size())).build();
+        }
+
+        /**
+         * Add the spec for this slice.
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        public Builder setSpec(SliceSpec spec) {
+            mSpec = spec;
+            return this;
+        }
+
+        /**
+         * Add hints to the Slice being constructed
+         */
+        public Builder addHints(@SliceHint String... hints) {
+            mHints.addAll(Arrays.asList(hints));
+            return this;
+        }
+
+        /**
+         * Add hints to the Slice being constructed
+         */
+        public Builder addHints(@SliceHint List<String> hints) {
+            return addHints(hints.toArray(new String[hints.size()]));
+        }
+
+        /**
+         * Add a sub-slice to the slice being constructed
+         */
+        public Builder addSubSlice(@NonNull Slice slice) {
+            return addSubSlice(slice, null);
+        }
+
+        /**
+         * Add a sub-slice to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Builder addSubSlice(@NonNull Slice slice, String subType) {
+            mItems.add(new SliceItem(slice, FORMAT_SLICE, subType, slice.getHints().toArray(
+                    new String[slice.getHints().size()])));
+            return this;
+        }
+
+        /**
+         * Add an action to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Slice.Builder addAction(@NonNull PendingIntent action,
+                @NonNull Slice s, @Nullable String subType) {
+            @SliceHint String[] hints = s != null
+                    ? s.getHints().toArray(new String[s.getHints().size()]) : new String[0];
+            mItems.add(new SliceItem(action, s, FORMAT_ACTION, subType, hints));
+            return this;
+        }
+
+        /**
+         * Add text to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Builder addText(CharSequence text, @Nullable String subType,
+                @SliceHint String... hints) {
+            mItems.add(new SliceItem(text, FORMAT_TEXT, subType, hints));
+            return this;
+        }
+
+        /**
+         * Add text to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Builder addText(CharSequence text, @Nullable String subType,
+                @SliceHint List<String> hints) {
+            return addText(text, subType, hints.toArray(new String[hints.size()]));
+        }
+
+        /**
+         * Add an image to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Builder addIcon(Icon icon, @Nullable String subType,
+                @SliceHint String... hints) {
+            mItems.add(new SliceItem(icon, FORMAT_IMAGE, subType, hints));
+            return this;
+        }
+
+        /**
+         * Add an image to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Builder addIcon(Icon icon, @Nullable String subType,
+                @SliceHint List<String> hints) {
+            return addIcon(icon, subType, hints.toArray(new String[hints.size()]));
+        }
+
+        /**
+         * Add remote input to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,
+                @SliceHint List<String> hints) {
+            return addRemoteInput(remoteInput, subType, hints.toArray(new String[hints.size()]));
+        }
+
+        /**
+         * Add remote input to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,
+                @SliceHint String... hints) {
+            mItems.add(new SliceItem(remoteInput, FORMAT_REMOTE_INPUT, subType, hints));
+            return this;
+        }
+
+        /**
+         * Add a int to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Builder addInt(int value, @Nullable String subType,
+                @SliceHint String... hints) {
+            mItems.add(new SliceItem(value, FORMAT_INT, subType, hints));
+            return this;
+        }
+
+        /**
+         * Add a int to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Builder addInt(int value, @Nullable String subType,
+                @SliceHint List<String> hints) {
+            return addInt(value, subType, hints.toArray(new String[hints.size()]));
+        }
+
+        /**
+         * Add a timestamp to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Slice.Builder addTimestamp(long time, @Nullable String subType,
+                @SliceHint String... hints) {
+            mItems.add(new SliceItem(time, FORMAT_TIMESTAMP, subType, hints));
+            return this;
+        }
+
+        /**
+         * Add a timestamp to the slice being constructed
+         * @param subType Optional template-specific type information
+         * @see {@link SliceItem#getSubType()}
+         */
+        public Slice.Builder addTimestamp(long time, @Nullable String subType,
+                @SliceHint List<String> hints) {
+            return addTimestamp(time, subType, hints.toArray(new String[hints.size()]));
+        }
+
+        /**
+         * Add a SliceItem to the slice being constructed.
+         * @hide
+         */
+        @RestrictTo(Scope.LIBRARY)
+        public Slice.Builder addItem(SliceItem item) {
+            mItems.add(item);
+            return this;
+        }
+
+        /**
+         * Construct the slice.
+         */
+        public Slice build() {
+            return new Slice(mItems, mHints.toArray(new String[mHints.size()]), mUri, mSpec);
+        }
+    }
+
+    /**
+     * @hide
+     * @return A string representation of this slice.
+     */
+    @RestrictTo(Scope.LIBRARY)
+    @Override
+    public String toString() {
+        return toString("");
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public String toString(String indent) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < mItems.length; i++) {
+            sb.append(indent);
+            if (FORMAT_SLICE.equals(mItems[i].getFormat())) {
+                sb.append("slice:\n");
+                sb.append(mItems[i].getSlice().toString(indent + "   "));
+            } else if (FORMAT_ACTION.equals(mItems[i].getFormat())) {
+                sb.append("action:\n");
+                sb.append(mItems[i].getSlice().toString(indent + "   "));
+            } else if (FORMAT_TEXT.equals(mItems[i].getFormat())) {
+                sb.append("text: ");
+                sb.append(mItems[i].getText());
+                sb.append("\n");
+            } else {
+                sb.append(SliceItem.typeToString(mItems[i].getFormat()));
+                sb.append("\n");
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Turns a slice Uri into slice content.
+     *
+     * @hide
+     * @param context Context to be used.
+     * @param uri The URI to a slice provider
+     * @return The Slice provided by the app or null if none is given.
+     * @see Slice
+     */
+    @RestrictTo(Scope.LIBRARY_GROUP)
+    @SuppressWarnings("NewApi")
+    public static @Nullable Slice bindSlice(Context context, @NonNull Uri uri,
+                List<SliceSpec> supportedSpecs) {
+        if (BuildCompat.isAtLeastP()) {
+            return callBindSlice(context, uri, supportedSpecs);
+        } else {
+            return SliceProviderCompat.bindSlice(context, uri, supportedSpecs);
+        }
+    }
+
+    @TargetApi(28)
+    private static Slice callBindSlice(Context context, Uri uri,
+            List<SliceSpec> supportedSpecs) {
+        return SliceConvert.wrap(android.app.slice.Slice.bindSlice(
+                context.getContentResolver(), uri, unwrap(supportedSpecs)));
+    }
+
+
+    /**
+     * Turns a slice intent into slice content. Expects an explicit intent. If there is no
+     * {@link ContentProvider} associated with the given intent this will throw
+     * {@link IllegalArgumentException}.
+     *
+     * @hide
+     * @param context The context to use.
+     * @param intent The intent associated with a slice.
+     * @return The Slice provided by the app or null if none is given.
+     * @see Slice
+     * @see SliceProvider#onMapIntentToUri(Intent)
+     * @see Intent
+     */
+    @RestrictTo(Scope.LIBRARY_GROUP)
+    @SuppressWarnings("NewApi")
+    public static @Nullable Slice bindSlice(Context context, @NonNull Intent intent,
+                List<SliceSpec> supportedSpecs) {
+        if (BuildCompat.isAtLeastP()) {
+            return callBindSlice(context, intent, supportedSpecs);
+        } else {
+            return SliceProviderCompat.bindSlice(context, intent, supportedSpecs);
+        }
+    }
+
+    @TargetApi(28)
+    private static Slice callBindSlice(Context context, Intent intent,
+            List<SliceSpec> supportedSpecs) {
+        return SliceConvert.wrap(android.app.slice.Slice.bindSlice(
+                context, intent, unwrap(supportedSpecs)));
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/SliceConvert.java b/slices/core/src/main/java/androidx/app/slice/SliceConvert.java
new file mode 100644
index 0000000..0bacae7
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/SliceConvert.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2017 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 androidx.app.slice;
+
+
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_REMOTE_INPUT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Convert between {@link androidx.app.slice.Slice} and {@link android.app.slice.Slice}
+ */
+@RequiresApi(28)
+public class SliceConvert {
+
+    /**
+     * Convert {@link androidx.app.slice.Slice} to {@link android.app.slice.Slice}
+     */
+    public static android.app.slice.Slice unwrap(androidx.app.slice.Slice slice) {
+        android.app.slice.Slice.Builder builder = new android.app.slice.Slice.Builder(
+                slice.getUri());
+        builder.addHints(slice.getHints());
+        builder.setSpec(unwrap(slice.getSpec()));
+        for (androidx.app.slice.SliceItem item : slice.getItems()) {
+            switch (item.getFormat()) {
+                case FORMAT_SLICE:
+                    builder.addSubSlice(unwrap(item.getSlice()), item.getSubType());
+                    break;
+                case FORMAT_IMAGE:
+                    builder.addIcon(item.getIcon(), item.getSubType(), item.getHints());
+                    break;
+                case FORMAT_REMOTE_INPUT:
+                    builder.addRemoteInput(item.getRemoteInput(), item.getSubType(),
+                            item.getHints());
+                    break;
+                case FORMAT_ACTION:
+                    builder.addAction(item.getAction(), unwrap(item.getSlice()), item.getSubType());
+                    break;
+                case FORMAT_TEXT:
+                    builder.addText(item.getText(), item.getSubType(), item.getHints());
+                    break;
+                case FORMAT_INT:
+                    builder.addInt(item.getInt(), item.getSubType(), item.getHints());
+                    break;
+                case FORMAT_TIMESTAMP:
+                    builder.addTimestamp(item.getTimestamp(), item.getSubType(), item.getHints());
+                    break;
+            }
+        }
+        return builder.build();
+    }
+
+    private static android.app.slice.SliceSpec unwrap(androidx.app.slice.SliceSpec spec) {
+        if (spec == null) return null;
+        return new android.app.slice.SliceSpec(spec.getType(), spec.getRevision());
+    }
+
+    static List<android.app.slice.SliceSpec> unwrap(
+            List<androidx.app.slice.SliceSpec> supportedSpecs) {
+        List<android.app.slice.SliceSpec> ret = new ArrayList<>();
+        for (androidx.app.slice.SliceSpec spec : supportedSpecs) {
+            ret.add(unwrap(spec));
+        }
+        return ret;
+    }
+
+    /**
+     * Convert {@link android.app.slice.Slice} to {@link androidx.app.slice.Slice}
+     */
+    public static androidx.app.slice.Slice wrap(android.app.slice.Slice slice) {
+        androidx.app.slice.Slice.Builder builder = new androidx.app.slice.Slice.Builder(
+                slice.getUri());
+        builder.addHints(slice.getHints());
+        builder.setSpec(wrap(slice.getSpec()));
+        for (android.app.slice.SliceItem item : slice.getItems()) {
+            switch (item.getFormat()) {
+                case FORMAT_SLICE:
+                    builder.addSubSlice(wrap(item.getSlice()), item.getSubType());
+                    break;
+                case FORMAT_IMAGE:
+                    builder.addIcon(item.getIcon(), item.getSubType(), item.getHints());
+                    break;
+                case FORMAT_REMOTE_INPUT:
+                    builder.addRemoteInput(item.getRemoteInput(), item.getSubType(),
+                            item.getHints());
+                    break;
+                case FORMAT_ACTION:
+                    builder.addAction(item.getAction(), wrap(item.getSlice()), item.getSubType());
+                    break;
+                case FORMAT_TEXT:
+                    builder.addText(item.getText(), item.getSubType(), item.getHints());
+                    break;
+                case FORMAT_INT:
+                    builder.addInt(item.getInt(), item.getSubType(), item.getHints());
+                    break;
+                case FORMAT_TIMESTAMP:
+                    builder.addTimestamp(item.getTimestamp(), item.getSubType(), item.getHints());
+                    break;
+            }
+        }
+        return builder.build();
+    }
+
+    private static androidx.app.slice.SliceSpec wrap(android.app.slice.SliceSpec spec) {
+        if (spec == null) return null;
+        return new androidx.app.slice.SliceSpec(spec.getType(), spec.getRevision());
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public static List<androidx.app.slice.SliceSpec> wrap(
+            List<android.app.slice.SliceSpec> supportedSpecs) {
+        List<androidx.app.slice.SliceSpec> ret = new ArrayList<>();
+        for (android.app.slice.SliceSpec spec : supportedSpecs) {
+            ret.add(wrap(spec));
+        }
+        return ret;
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/SliceItem.java b/slices/core/src/main/java/androidx/app/slice/SliceItem.java
new file mode 100644
index 0000000..e7d2729
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/SliceItem.java
@@ -0,0 +1,391 @@
+/*
+ * Copyright (C) 2017 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 androidx.app.slice;
+
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_REMOTE_INPUT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+
+import android.app.PendingIntent;
+import android.app.RemoteInput;
+import android.graphics.drawable.Icon;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
+import android.support.annotation.StringDef;
+import android.text.TextUtils;
+import android.util.Pair;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * A SliceItem is a single unit in the tree structure of a {@link Slice}.
+ * <p>
+ * A SliceItem a piece of content and some hints about what that content
+ * means or how it should be displayed. The types of content can be:
+ * <li>{@link android.app.slice.SliceItem#FORMAT_SLICE}</li>
+ * <li>{@link android.app.slice.SliceItem#FORMAT_TEXT}</li>
+ * <li>{@link android.app.slice.SliceItem#FORMAT_IMAGE}</li>
+ * <li>{@link android.app.slice.SliceItem#FORMAT_ACTION}</li>
+ * <li>{@link android.app.slice.SliceItem#FORMAT_INT}</li>
+ * <li>{@link android.app.slice.SliceItem#FORMAT_TIMESTAMP}</li>
+ * <p>
+ * The hints that a {@link SliceItem} are a set of strings which annotate
+ * the content. The hints that are guaranteed to be understood by the system
+ * are defined on {@link Slice}.
+ */
+public class SliceItem {
+
+    private static final String HINTS = "hints";
+    private static final String FORMAT = "format";
+    private static final String SUBTYPE = "subtype";
+    private static final String OBJ = "obj";
+    private static final String OBJ_2 = "obj_2";
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    @StringDef({FORMAT_SLICE, FORMAT_TEXT, FORMAT_IMAGE, FORMAT_ACTION, FORMAT_INT,
+            FORMAT_TIMESTAMP, FORMAT_REMOTE_INPUT})
+    public @interface SliceType {
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    protected @Slice.SliceHint String[] mHints;
+    private final String mFormat;
+    private final String mSubType;
+    private final Object mObj;
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public SliceItem(Object obj, @SliceType String format, String subType,
+            @Slice.SliceHint String[] hints) {
+        mHints = hints;
+        mFormat = format;
+        mSubType = subType;
+        mObj = obj;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public SliceItem(Object obj, @SliceType String format, String subType,
+            @Slice.SliceHint List<String> hints) {
+        this (obj, format, subType, hints.toArray(new String[hints.size()]));
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public SliceItem(PendingIntent intent, Slice slice, String format, String subType,
+            @Slice.SliceHint String[] hints) {
+        this(new Pair<>(intent, slice), format, subType, hints);
+    }
+
+    /**
+     * Gets all hints associated with this SliceItem.
+     *
+     * @return Array of hints.
+     */
+    public @NonNull @Slice.SliceHint List<String> getHints() {
+        return Arrays.asList(mHints);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public void addHint(@Slice.SliceHint String hint) {
+        mHints = ArrayUtils.appendElement(String.class, mHints, hint);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public void removeHint(String hint) {
+        ArrayUtils.removeElement(String.class, mHints, hint);
+    }
+
+    /**
+     * Get the format of this SliceItem.
+     * <p>
+     * The format will be one of the following types supported by the platform:
+     * <li>{@link android.app.slice.SliceItem#FORMAT_SLICE}</li>
+     * <li>{@link android.app.slice.SliceItem#FORMAT_TEXT}</li>
+     * <li>{@link android.app.slice.SliceItem#FORMAT_IMAGE}</li>
+     * <li>{@link android.app.slice.SliceItem#FORMAT_ACTION}</li>
+     * <li>{@link android.app.slice.SliceItem#FORMAT_INT}</li>
+     * <li>{@link android.app.slice.SliceItem#FORMAT_TIMESTAMP}</li>
+     * <li>{@link android.app.slice.SliceItem#FORMAT_REMOTE_INPUT}</li>
+     * @see #getSubType() ()
+     */
+    public @SliceType String getFormat() {
+        return mFormat;
+    }
+
+    /**
+     * Get the sub-type of this SliceItem.
+     * <p>
+     * Subtypes provide additional information about the type of this information beyond basic
+     * interpretations inferred by {@link #getFormat()}. For example a slice may contain
+     * many {@link android.app.slice.SliceItem#FORMAT_TEXT} items, but only some of them may be
+     * {@link android.app.slice.Slice#SUBTYPE_MESSAGE}.
+     * @see #getFormat()
+     */
+    public String getSubType() {
+        return mSubType;
+    }
+
+    /**
+     * @return The text held by this {@link android.app.slice.SliceItem#FORMAT_TEXT} SliceItem
+     */
+    public CharSequence getText() {
+        return (CharSequence) mObj;
+    }
+
+    /**
+     * @return The icon held by this {@link android.app.slice.SliceItem#FORMAT_IMAGE} SliceItem
+     */
+    @RequiresApi(23)
+    public Icon getIcon() {
+        return (Icon) mObj;
+    }
+
+    /**
+     * @return The pending intent held by this {@link android.app.slice.SliceItem#FORMAT_ACTION}
+     * SliceItem
+     */
+    public PendingIntent getAction() {
+        return ((Pair<PendingIntent, Slice>) mObj).first;
+    }
+
+    /**
+     * @return The remote input held by this {@link android.app.slice.SliceItem#FORMAT_REMOTE_INPUT}
+     * SliceItem
+     * @hide
+     */
+    @RequiresApi(20)
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public RemoteInput getRemoteInput() {
+        return (RemoteInput) mObj;
+    }
+
+    /**
+     * @return The color held by this {@link android.app.slice.SliceItem#FORMAT_INT} SliceItem
+     */
+    public int getInt() {
+        return (Integer) mObj;
+    }
+
+    /**
+     * @return The slice held by this {@link android.app.slice.SliceItem#FORMAT_ACTION} or
+     * {@link android.app.slice.SliceItem#FORMAT_SLICE} SliceItem
+     */
+    public Slice getSlice() {
+        if (FORMAT_ACTION.equals(getFormat())) {
+            return ((Pair<PendingIntent, Slice>) mObj).second;
+        }
+        return (Slice) mObj;
+    }
+
+    /**
+     * @return The timestamp held by this {@link android.app.slice.SliceItem#FORMAT_TIMESTAMP}
+     * SliceItem
+     */
+    public long getTimestamp() {
+        return (Long) mObj;
+    }
+
+    /**
+     * @param hint The hint to check for
+     * @return true if this item contains the given hint
+     */
+    public boolean hasHint(@Slice.SliceHint String hint) {
+        return ArrayUtils.contains(mHints, hint);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public SliceItem(Bundle in) {
+        mHints = in.getStringArray(HINTS);
+        mFormat = in.getString(FORMAT);
+        mSubType = in.getString(SUBTYPE);
+        mObj = readObj(mFormat, in);
+    }
+
+    /**
+     * @hide
+     * @return
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public Bundle toBundle() {
+        Bundle b = new Bundle();
+        b.putStringArray(HINTS, mHints);
+        b.putString(FORMAT, mFormat);
+        b.putString(SUBTYPE, mSubType);
+        writeObj(b, mObj, mFormat);
+        return b;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public boolean hasHints(@Slice.SliceHint String[] hints) {
+        if (hints == null) return true;
+        for (String hint : hints) {
+            if (!TextUtils.isEmpty(hint) && !ArrayUtils.contains(mHints, hint)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public boolean hasAnyHints(@Slice.SliceHint String... hints) {
+        if (hints == null) return false;
+        for (String hint : hints) {
+            if (ArrayUtils.contains(mHints, hint)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void writeObj(Bundle dest, Object obj, String type) {
+        switch (type) {
+            case FORMAT_IMAGE:
+            case FORMAT_REMOTE_INPUT:
+                dest.putParcelable(OBJ, (Parcelable) obj);
+                break;
+            case FORMAT_SLICE:
+                dest.putParcelable(OBJ, ((Slice) obj).toBundle());
+                break;
+            case FORMAT_ACTION:
+                dest.putParcelable(OBJ, ((Pair<PendingIntent, Slice>) obj).first);
+                dest.putBundle(OBJ_2, ((Pair<PendingIntent, Slice>) obj).second.toBundle());
+                break;
+            case FORMAT_TEXT:
+                dest.putCharSequence(OBJ, (CharSequence) obj);
+                break;
+            case FORMAT_INT:
+                dest.putInt(OBJ, (Integer) mObj);
+                break;
+            case FORMAT_TIMESTAMP:
+                dest.putLong(OBJ, (Long) mObj);
+                break;
+        }
+    }
+
+    private static Object readObj(String type, Bundle in) {
+        switch (type) {
+            case FORMAT_IMAGE:
+            case FORMAT_REMOTE_INPUT:
+                return in.getParcelable(OBJ);
+            case FORMAT_SLICE:
+                return new Slice(in.getBundle(OBJ));
+            case FORMAT_TEXT:
+                return in.getCharSequence(OBJ);
+            case FORMAT_ACTION:
+                return new Pair<>(
+                        (PendingIntent) in.getParcelable(OBJ),
+                        new Slice(in.getBundle(OBJ_2)));
+            case FORMAT_INT:
+                return in.getInt(OBJ);
+            case FORMAT_TIMESTAMP:
+                return in.getLong(OBJ);
+        }
+        throw new RuntimeException("Unsupported type " + type);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(Scope.LIBRARY)
+    public static String typeToString(String format) {
+        switch (format) {
+            case FORMAT_SLICE:
+                return "Slice";
+            case FORMAT_TEXT:
+                return "Text";
+            case FORMAT_IMAGE:
+                return "Image";
+            case FORMAT_ACTION:
+                return "Action";
+            case FORMAT_INT:
+                return "Int";
+            case FORMAT_TIMESTAMP:
+                return "Timestamp";
+            case FORMAT_REMOTE_INPUT:
+                return "RemoteInput";
+        }
+        return "Unrecognized format: " + format;
+    }
+
+    /**
+     * @hide
+     * @return A string representation of this slice item.
+     */
+    @RestrictTo(Scope.LIBRARY)
+    @Override
+    public String toString() {
+        return toString("");
+    }
+
+    private String toString(String indent) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(indent);
+        if (FORMAT_SLICE.equals(mFormat)) {
+            sb.append("slice:\n");
+            sb.append(getSlice().toString(indent + "   "));
+        } else if (FORMAT_ACTION.equals(mFormat)) {
+            sb.append("action:\n");
+            sb.append(getSlice().toString(indent + "   "));
+        } else if (FORMAT_TEXT.equals(mFormat)) {
+            sb.append("text: ");
+            sb.append(getText());
+            sb.append("\n");
+        } else {
+            sb.append(SliceItem.typeToString(getFormat()));
+            sb.append("\n");
+        }
+        return sb.toString();
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/SliceProvider.java b/slices/core/src/main/java/androidx/app/slice/SliceProvider.java
new file mode 100644
index 0000000..80b9879
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/SliceProvider.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2017 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 androidx.app.slice;
+
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ProviderInfo;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+import android.support.v4.os.BuildCompat;
+
+import java.util.List;
+
+import androidx.app.slice.compat.ContentProviderWrapper;
+import androidx.app.slice.compat.SliceProviderCompat;
+import androidx.app.slice.compat.SliceProviderWrapperContainer;
+
+/**
+ * A SliceProvider allows an app to provide content to be displayed in system spaces. This content
+ * is templated and can contain actions, and the behavior of how it is surfaced is specific to the
+ * system surface.
+ * <p>
+ * Slices are not currently live content. They are bound once and shown to the user. If the content
+ * changes due to a callback from user interaction, then
+ * {@link ContentResolver#notifyChange(Uri, ContentObserver)} should be used to notify the system.
+ * </p>
+ * <p>
+ * The provider needs to be declared in the manifest to provide the authority for the app. The
+ * authority for most slices is expected to match the package of the application.
+ * </p>
+ *
+ * <pre class="prettyprint">
+ * {@literal
+ * <provider
+ *     android:name="com.android.mypkg.MySliceProvider"
+ *     android:authorities="com.android.mypkg" />}
+ * </pre>
+ * <p>
+ * Slices can be identified by a Uri or by an Intent. To link an Intent with a slice, the provider
+ * must have an {@link IntentFilter} matching the slice intent. When a slice is being requested via
+ * an intent, {@link #onMapIntentToUri(Intent)} can be called and is expected to return an
+ * appropriate Uri representing the slice.
+ *
+ * <pre class="prettyprint">
+ * {@literal
+ * <provider
+ *     android:name="com.android.mypkg.MySliceProvider"
+ *     android:authorities="com.android.mypkg">
+ *     <intent-filter>
+ *         <action android:name="android.intent.action.MY_SLICE_INTENT" />
+ *     </intent-filter>
+ * </provider>}
+ * </pre>
+ *
+ * @see android.app.slice.Slice
+ */
+public abstract class SliceProvider extends ContentProviderWrapper {
+
+    private static List<SliceSpec> sSpecs;
+
+    @Override
+    public void attachInfo(Context context, ProviderInfo info) {
+        ContentProvider impl;
+        if (BuildCompat.isAtLeastP()) {
+            impl = new SliceProviderWrapperContainer.SliceProviderWrapper(this);
+        } else {
+            impl = new SliceProviderCompat(this);
+        }
+        super.attachInfo(context, info, impl);
+    }
+
+    /**
+     * Implement this to initialize your slice provider on startup.
+     * This method is called for all registered slice providers on the
+     * application main thread at application launch time.  It must not perform
+     * lengthy operations, or application startup will be delayed.
+     *
+     * <p>You should defer nontrivial initialization (such as opening,
+     * upgrading, and scanning databases) until the slice provider is used
+     * (via #onBindSlice, etc).  Deferred initialization
+     * keeps application startup fast, avoids unnecessary work if the provider
+     * turns out not to be needed, and stops database errors (such as a full
+     * disk) from halting application launch.
+     *
+     * @return true if the provider was successfully loaded, false otherwise
+     */
+    public abstract boolean onCreateSliceProvider();
+
+    /**
+     * Implemented to create a slice. Will be called on the main thread.
+     * <p>
+     * onBindSlice should return as quickly as possible so that the UI tied
+     * to this slice can be responsive. No network or other IO will be allowed
+     * during onBindSlice. Any loading that needs to be done should happen
+     * off the main thread with a call to {@link ContentResolver#notifyChange(Uri, ContentObserver)}
+     * when the app is ready to provide the complete data in onBindSlice.
+     * <p>
+     *
+     * @see {@link Slice}.
+     * @see {@link android.app.slice.Slice#HINT_PARTIAL}
+     */
+    // TODO: Provide alternate notifyChange that takes in the slice (i.e. notifyChange(Uri, Slice)).
+    public abstract Slice onBindSlice(Uri sliceUri);
+
+    /**
+     * Called to inform an app that a slice has been pinned.
+     * <p>
+     * Pinning is a way that slice hosts use to notify apps of which slices
+     * they care about updates for. When a slice is pinned the content is
+     * expected to be relatively fresh and kept up to date.
+     * <p>
+     * Being pinned does not provide any escalated privileges for the slice
+     * provider. So apps should do things such as turn on syncing or schedule
+     * a job in response to a onSlicePinned.
+     * <p>
+     * Pinned state is not persisted through a reboot, and apps can expect a
+     * new call to onSlicePinned for any slices that should remain pinned
+     * after a reboot occurs.
+     *
+     * @param sliceUri The uri of the slice being unpinned.
+     * @see #onSliceUnpinned(Uri)
+     */
+    public void onSlicePinned(Uri sliceUri) {
+    }
+
+    /**
+     * Called to inform an app that a slices is no longer pinned.
+     * <p>
+     * This means that no other apps on the device care about updates to this
+     * slice anymore and therefore it is not important to be updated. Any syncs
+     * or jobs related to this slice should be cancelled.
+     * @see #onSlicePinned(Uri)
+     */
+    public void onSliceUnpinned(Uri sliceUri) {
+    }
+
+    /**
+     * This method must be overridden if an {@link IntentFilter} is specified on the SliceProvider.
+     * In that case, this method can be called and is expected to return a non-null Uri representing
+     * a slice. Otherwise this will throw {@link UnsupportedOperationException}.
+     *
+     * @return Uri representing the slice associated with the provided intent.
+     * @see {@link android.app.slice.Slice}
+     */
+    public @NonNull Uri onMapIntentToUri(Intent intent) {
+        throw new UnsupportedOperationException(
+                "This provider has not implemented intent to uri mapping");
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public static void setSpecs(List<SliceSpec> specs) {
+        sSpecs = specs;
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static List<SliceSpec> getCurrentSpecs() {
+        return sSpecs;
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/SliceSpec.java b/slices/core/src/main/java/androidx/app/slice/SliceSpec.java
new file mode 100644
index 0000000..0d7a157
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/SliceSpec.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2017 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 androidx.app.slice;
+
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+
+/**
+ * Class describing the structure of the data contained within a slice.
+ * <p>
+ * A data version contains a string which describes the type of structure
+ * and a revision which denotes this specific implementation. Revisions are expected
+ * to be backwards compatible and monotonically increasing. Meaning if a
+ * SliceSpec has the same type and an equal or lesser revision,
+ * it is expected to be compatible.
+ * <p>
+ * Apps rendering slices will provide a list of supported versions to the OS which
+ * will also be given to the app. Apps should only return a {@link Slice} with a
+ * {@link SliceSpec} that one of the supported {@link SliceSpec}s provided
+ * {@link #canRender}.
+ *
+ * @hide
+ * @see Slice
+ * @see SliceProvider#onBindSlice(Uri)
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SliceSpec {
+
+    private final String mType;
+    private final int mRevision;
+
+    public SliceSpec(@NonNull String type, int revision) {
+        mType = type;
+        mRevision = revision;
+    }
+
+    /**
+     * Gets the type of the version.
+     */
+    public String getType() {
+        return mType;
+    }
+
+    /**
+     * Gets the revision of the version.
+     */
+    public int getRevision() {
+        return mRevision;
+    }
+
+    /**
+     * Indicates that this spec can be used to render the specified spec.
+     * <p>
+     * Rendering support is not bi-directional (e.g. Spec v3 can render
+     * Spec v2, but Spec v2 cannot render Spec v3).
+     *
+     * @param candidate candidate format of data.
+     * @return true if versions are compatible.
+     * @see androidx.app.slice.widget.SliceView
+     */
+    public boolean canRender(@NonNull SliceSpec candidate) {
+        if (!mType.equals(candidate.mType)) return false;
+        return mRevision >= candidate.mRevision;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof SliceSpec)) return false;
+        SliceSpec other = (SliceSpec) obj;
+        return mType.equals(other.mType) && mRevision == other.mRevision;
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/SliceSpecs.java b/slices/core/src/main/java/androidx/app/slice/SliceSpecs.java
new file mode 100644
index 0000000..ed4658d
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/SliceSpecs.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2017 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 androidx.app.slice;
+
+import android.support.annotation.RestrictTo;
+
+/**
+ * Constants for each of the slice specs
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SliceSpecs {
+
+    /**
+     * Most basic slice, only has icon, title, and summary.
+     */
+    public static final SliceSpec BASIC = new SliceSpec("androidx.app.slice.BASIC", 1);
+
+    /**
+     * List of rows, each row has start/end items, title, summary.
+     * Also supports grid rows.
+     */
+    public static final SliceSpec LIST = new SliceSpec("androidx.app.slice.LIST", 1);
+
+    /**
+     * Messaging template. Each message contains a timestamp and a message, it optionally contains
+     * a source of where the message came from.
+     */
+    public static final SliceSpec MESSAGING = new SliceSpec("androidx.app.slice.MESSAGING", 1);
+
+    /**
+     * Grid template.
+     * Lists can contain grids, so use the same spec for both. Grid needs a spec to use because
+     * it can be a top level builder.
+     */
+    public static final SliceSpec GRID = LIST;
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/compat/CompatPinnedList.java b/slices/core/src/main/java/androidx/app/slice/compat/CompatPinnedList.java
new file mode 100644
index 0000000..7a3b900
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/compat/CompatPinnedList.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.compat;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.os.SystemClock;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.VisibleForTesting;
+import android.support.v4.util.ArraySet;
+import android.text.TextUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+
+import androidx.app.slice.SliceSpec;
+
+/**
+ * Tracks the current packages requesting pinning of any given slice. It will clear the
+ * list after a reboot since the packages are no longer requesting pinning.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public class CompatPinnedList {
+
+    private static final String LAST_BOOT = "last_boot";
+    private static final String PIN_PREFIX = "pinned_";
+    private static final String SPEC_NAME_PREFIX = "spec_names_";
+    private static final String SPEC_REV_PREFIX = "spec_revs_";
+
+    // Max skew between bootup times that we think its probably rebooted.
+    // There could be some difference in our calculated boot up time if the thread
+    // sleeps between currentTimeMillis and elapsedRealtime.
+    // Its probably safe to assume the device can't boot twice within 2 secs.
+    private static final long BOOT_THRESHOLD = 2000;
+
+    private final Context mContext;
+    private final String mPrefsName;
+
+    public CompatPinnedList(Context context, String prefsName) {
+        mContext = context;
+        mPrefsName = prefsName;
+    }
+
+    private SharedPreferences getPrefs() {
+        SharedPreferences prefs = mContext.getSharedPreferences(mPrefsName, Context.MODE_PRIVATE);
+        long lastBootTime = prefs.getLong(LAST_BOOT, 0);
+        long currentBootTime = getBootTime();
+        if (Math.abs(lastBootTime - currentBootTime) > BOOT_THRESHOLD) {
+            prefs.edit()
+                    .clear()
+                    .putLong(LAST_BOOT, currentBootTime)
+                    .commit();
+        }
+        return prefs;
+    }
+
+    private Set<String> getPins(Uri uri) {
+        return getPrefs().getStringSet(PIN_PREFIX + uri.toString(), new ArraySet<String>());
+    }
+
+    /**
+     * Get the list of specs for a pinned Uri.
+     */
+    public synchronized List<SliceSpec> getSpecs(Uri uri) {
+        List<SliceSpec> specs = new ArrayList<>();
+        SharedPreferences prefs = getPrefs();
+        String specNamesStr = prefs.getString(SPEC_NAME_PREFIX + uri.toString(), null);
+        String specRevsStr = prefs.getString(SPEC_REV_PREFIX + uri.toString(), null);
+        if (TextUtils.isEmpty(specNamesStr) || TextUtils.isEmpty(specRevsStr)) {
+            return Collections.emptyList();
+        }
+        String[] specNames = specNamesStr.split(",");
+        String[] specRevs = specRevsStr.split(",");
+        if (specNames.length != specRevs.length) {
+            return Collections.emptyList();
+        }
+        for (int i = 0; i < specNames.length; i++) {
+            specs.add(new SliceSpec(specNames[i], Integer.parseInt(specRevs[i])));
+        }
+        return specs;
+    }
+
+    private void setPins(Uri uri, Set<String> pins) {
+        getPrefs().edit()
+                .putStringSet(PIN_PREFIX + uri.toString(), pins)
+                .commit();
+    }
+
+    private void setSpecs(Uri uri, List<SliceSpec> specs) {
+        String[] specNames = new String[specs.size()];
+        String[] specRevs = new String[specs.size()];
+        for (int i = 0; i < specs.size(); i++) {
+            specNames[i] = specs.get(i).getType();
+            specRevs[i] = String.valueOf(specs.get(i).getRevision());
+        }
+        getPrefs().edit()
+                .putString(SPEC_NAME_PREFIX + uri.toString(), TextUtils.join(",", specNames))
+                .putString(SPEC_REV_PREFIX + uri.toString(), TextUtils.join(",", specRevs))
+                .commit();
+    }
+
+    @VisibleForTesting
+    protected long getBootTime() {
+        return System.currentTimeMillis() - SystemClock.elapsedRealtime();
+    }
+
+    /**
+     * Adds a pin for a specific uri/pkg pair and returns true if the
+     * uri was not previously pinned.
+     */
+    public synchronized boolean addPin(Uri uri, String pkg, List<SliceSpec> specs) {
+        Set<String> pins = getPins(uri);
+        boolean wasNotPinned = pins.isEmpty();
+        pins.add(pkg);
+        setPins(uri, pins);
+        if (wasNotPinned) {
+            setSpecs(uri, specs);
+        } else {
+            setSpecs(uri, mergeSpecs(getSpecs(uri), specs));
+        }
+        return wasNotPinned;
+    }
+
+    /**
+     * Removes a pin for a specific uri/pkg pair and returns true if the
+     * uri is no longer pinned (but was).
+     */
+    public synchronized boolean removePin(Uri uri, String pkg) {
+        Set<String> pins = getPins(uri);
+        if (pins.isEmpty() || !pins.contains(pkg)) {
+            return false;
+        }
+        pins.remove(pkg);
+        setPins(uri, pins);
+        return pins.size() == 0;
+    }
+
+    private static List<SliceSpec> mergeSpecs(List<SliceSpec> specs,
+            List<SliceSpec> supportedSpecs) {
+        for (int i = 0; i < specs.size(); i++) {
+            SliceSpec s = specs.get(i);
+            SliceSpec other = findSpec(supportedSpecs, s.getType());
+            if (other == null) {
+                specs.remove(i--);
+            } else if (other.getRevision() < s.getRevision()) {
+                specs.set(i, other);
+            }
+        }
+        return specs;
+    }
+
+    private static SliceSpec findSpec(List<SliceSpec> specs, String type) {
+        for (SliceSpec spec : specs) {
+            if (Objects.equals(spec.getType(), type)) {
+                return spec;
+            }
+        }
+        return null;
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/compat/ContentProviderWrapper.java b/slices/core/src/main/java/androidx/app/slice/compat/ContentProviderWrapper.java
new file mode 100644
index 0000000..9e02b3a
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/compat/ContentProviderWrapper.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2017 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 androidx.app.slice.compat;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.pm.ProviderInfo;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
+
+/**
+ * @hide
+ */
+// TODO: Remove as soon as we have better systems in place for this.
+@RestrictTo(Scope.LIBRARY)
+public class ContentProviderWrapper extends ContentProvider {
+
+    private ContentProvider mImpl;
+
+    /**
+     * Triggers an attach with the object to wrap.
+     */
+    public void attachInfo(Context context, ProviderInfo info, ContentProvider impl) {
+        mImpl = impl;
+        super.attachInfo(context, info);
+        mImpl.attachInfo(context, info);
+    }
+
+    @Override
+    public final boolean onCreate() {
+        return mImpl.onCreate();
+    }
+
+    @Nullable
+    @Override
+    public final Cursor query(@NonNull Uri uri, @Nullable String[] projection,
+            @Nullable String selection, @Nullable String[] selectionArgs,
+            @Nullable String sortOrder) {
+        return mImpl.query(uri, projection, selection, selectionArgs, sortOrder);
+    }
+
+    @Nullable
+    @Override
+    @RequiresApi(28)
+    public final Cursor query(@NonNull Uri uri, @Nullable String[] projection,
+            @Nullable Bundle queryArgs, @Nullable CancellationSignal cancellationSignal) {
+        return mImpl.query(uri, projection, queryArgs, cancellationSignal);
+    }
+
+    @Nullable
+    @Override
+    public final Cursor query(@NonNull Uri uri, @Nullable String[] projection,
+            @Nullable String selection, @Nullable String[] selectionArgs,
+            @Nullable String sortOrder, @Nullable CancellationSignal cancellationSignal) {
+        return mImpl.query(uri, projection, selection, selectionArgs, sortOrder,
+                cancellationSignal);
+    }
+
+    @Nullable
+    @Override
+    public final String getType(@NonNull Uri uri) {
+        return mImpl.getType(uri);
+    }
+
+    @Nullable
+    @Override
+    public final Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
+        return mImpl.insert(uri, values);
+    }
+
+    @Override
+    public final int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
+        return mImpl.bulkInsert(uri, values);
+    }
+
+    @Override
+    public final int delete(@NonNull Uri uri, @Nullable String selection,
+            @Nullable String[] selectionArgs) {
+        return mImpl.delete(uri, selection, selectionArgs);
+    }
+
+    @Override
+    public final int update(@NonNull Uri uri, @Nullable ContentValues values,
+            @Nullable String selection, @Nullable String[] selectionArgs) {
+        return mImpl.update(uri, values, selection, selectionArgs);
+    }
+
+    @Nullable
+    @Override
+    public final Bundle call(@NonNull String method, @Nullable String arg,
+            @Nullable Bundle extras) {
+        return mImpl.call(method, arg, extras);
+    }
+
+    @Nullable
+    @Override
+    public final Uri canonicalize(@NonNull Uri url) {
+        return mImpl.canonicalize(url);
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/compat/SlicePermissionActivity.java b/slices/core/src/main/java/androidx/app/slice/compat/SlicePermissionActivity.java
new file mode 100644
index 0000000..78170ab
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/compat/SlicePermissionActivity.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.compat;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.annotation.RestrictTo;
+import android.util.Log;
+import android.widget.TextView;
+
+import androidx.app.slice.core.R;
+
+/**
+ * Dialog that grants slice permissions for an app.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public class SlicePermissionActivity extends Activity implements OnClickListener,
+        OnDismissListener {
+
+    private static final String TAG = "SlicePermissionActivity";
+
+    private Uri mUri;
+    private String mCallingPkg;
+    private String mProviderPkg;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        mUri = getIntent().getParcelableExtra(SliceProviderCompat.EXTRA_BIND_URI);
+        mCallingPkg = getIntent().getStringExtra(SliceProviderCompat.EXTRA_PKG);
+        mProviderPkg = getIntent().getStringExtra(SliceProviderCompat.EXTRA_PROVIDER_PKG);
+
+        try {
+            PackageManager pm = getPackageManager();
+            CharSequence app1 = pm.getApplicationInfo(mCallingPkg, 0).loadLabel(pm);
+            CharSequence app2 = pm.getApplicationInfo(mProviderPkg, 0).loadLabel(pm);
+            AlertDialog dialog = new AlertDialog.Builder(this)
+                    .setTitle(getString(R.string.abc_slice_permission_title, app1, app2))
+                    .setView(R.layout.abc_slice_permission_request)
+                    .setNegativeButton(R.string.abc_slice_permission_deny, this)
+                    .setPositiveButton(R.string.abc_slice_permission_allow, this)
+                    .setOnDismissListener(this)
+                    .show();
+            TextView t1 = dialog.getWindow().getDecorView().findViewById(R.id.text1);
+            t1.setText(getString(R.string.abc_slice_permission_text_1, app2));
+            TextView t2 = dialog.getWindow().getDecorView().findViewById(R.id.text2);
+            t2.setText(getString(R.string.abc_slice_permission_text_2, app2));
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "Couldn't find package", e);
+            finish();
+        }
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        if (which == DialogInterface.BUTTON_POSITIVE) {
+            grantUriPermission(mCallingPkg, mUri.buildUpon().path("").build(),
+                    Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+                            | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+                            | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
+            getContentResolver().notifyChange(mUri, null);
+        }
+        finish();
+    }
+
+    @Override
+    public void onDismiss(DialogInterface dialog) {
+        finish();
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/compat/SliceProviderCompat.java b/slices/core/src/main/java/androidx/app/slice/compat/SliceProviderCompat.java
new file mode 100644
index 0000000..d1a8e65
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/compat/SliceProviderCompat.java
@@ -0,0 +1,527 @@
+/*
+ * Copyright (C) 2017 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 androidx.app.slice.compat;
+
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+import static android.app.slice.SliceProvider.SLICE_TYPE;
+
+import android.Manifest.permission;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.ContentProvider;
+import android.content.ContentProviderClient;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Parcelable;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.StrictMode;
+import android.os.StrictMode.ThreadPolicy;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.RestrictTo.Scope;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceProvider;
+import androidx.app.slice.SliceSpec;
+import androidx.app.slice.core.R;
+
+/**
+ * @hide
+ */
+@RestrictTo(Scope.LIBRARY)
+public class SliceProviderCompat extends ContentProvider {
+
+    private static final String TAG = "SliceProvider";
+
+    public static final String EXTRA_BIND_URI = "slice_uri";
+    public static final String METHOD_SLICE = "bind_slice";
+    public static final String METHOD_MAP_INTENT = "map_slice";
+    public static final String METHOD_PIN = "pin_slice";
+    public static final String METHOD_UNPIN = "unpin_slice";
+    public static final String METHOD_GET_PINNED_SPECS = "get_specs";
+
+    public static final String EXTRA_INTENT = "slice_intent";
+    public static final String EXTRA_SLICE = "slice";
+    public static final String EXTRA_SUPPORTED_SPECS = "specs";
+    public static final String EXTRA_SUPPORTED_SPECS_REVS = "revs";
+    public static final String EXTRA_PKG = "pkg";
+    public static final String EXTRA_PROVIDER_PKG = "provider_pkg";
+    private static final String DATA_PREFIX = "slice_data_";
+
+    private static final boolean DEBUG = false;
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+    private SliceProvider mSliceProvider;
+    private CompatPinnedList mPinnedList;
+    private String mBindingPkg;
+
+    public SliceProviderCompat(SliceProvider provider) {
+        mSliceProvider = provider;
+    }
+
+    /**
+     * Return the package name of the caller that initiated the binding request
+     * currently happening. The returned package will have been
+     * verified to belong to the calling UID. Returns {@code null} if not
+     * currently performing an {@link SliceProvider#onBindSlice(Uri)}.
+     */
+    public final @Nullable String getBindingPackage() {
+        return mBindingPkg;
+    }
+
+    @Override
+    public boolean onCreate() {
+        mPinnedList = new CompatPinnedList(getContext(),
+                DATA_PREFIX + mSliceProvider.getClass().getName());
+        return mSliceProvider.onCreateSliceProvider();
+    }
+
+    @Override
+    public final int update(Uri uri, ContentValues values, String selection,
+            String[] selectionArgs) {
+        if (DEBUG) Log.d(TAG, "update " + uri);
+        return 0;
+    }
+
+    @Override
+    public final int delete(Uri uri, String selection, String[] selectionArgs) {
+        if (DEBUG) Log.d(TAG, "delete " + uri);
+        return 0;
+    }
+
+    @Override
+    public final Cursor query(Uri uri, String[] projection, String selection,
+            String[] selectionArgs, String sortOrder) {
+        if (DEBUG) Log.d(TAG, "query " + uri);
+        return null;
+    }
+
+    @Override
+    public final Cursor query(Uri uri, String[] projection, String selection, String[]
+            selectionArgs, String sortOrder, CancellationSignal cancellationSignal) {
+        if (DEBUG) Log.d(TAG, "query " + uri);
+        return null;
+    }
+
+    @Override
+    public final Cursor query(Uri uri, String[] projection, Bundle queryArgs,
+            CancellationSignal cancellationSignal) {
+        if (DEBUG) Log.d(TAG, "query " + uri);
+        return null;
+    }
+
+    @Override
+    public final Uri insert(Uri uri, ContentValues values) {
+        if (DEBUG) Log.d(TAG, "insert " + uri);
+        return null;
+    }
+
+    @Override
+    public final String getType(Uri uri) {
+        if (DEBUG) Log.d(TAG, "getFormat " + uri);
+        return SLICE_TYPE;
+    }
+
+    @Override
+    public Bundle call(String method, String arg, Bundle extras) {
+        if (method.equals(METHOD_SLICE)) {
+            Uri uri = extras.getParcelable(EXTRA_BIND_URI);
+            if (Binder.getCallingUid() != Process.myUid()) {
+                getContext().enforceUriPermission(uri, permission.BIND_SLICE,
+                        permission.BIND_SLICE, Binder.getCallingPid(), Binder.getCallingUid(),
+                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
+                        "Slice binding requires the permission BIND_SLICE");
+            }
+            List<SliceSpec> specs = getSpecs(extras);
+
+            Slice s = handleBindSlice(uri, specs, getCallingPackage());
+            Bundle b = new Bundle();
+            b.putParcelable(EXTRA_SLICE, s.toBundle());
+            return b;
+        } else if (method.equals(METHOD_MAP_INTENT)) {
+            if (Binder.getCallingUid() != Process.myUid()) {
+                getContext().enforceCallingPermission(permission.BIND_SLICE,
+                        "Slice binding requires the permission BIND_SLICE");
+            }
+            Intent intent = extras.getParcelable(EXTRA_INTENT);
+            Uri uri = mSliceProvider.onMapIntentToUri(intent);
+            Bundle b = new Bundle();
+            if (uri != null) {
+                List<SliceSpec> specs = getSpecs(extras);
+                Slice s = handleBindSlice(uri, specs, getCallingPackage());
+                b.putParcelable(EXTRA_SLICE, s.toBundle());
+            } else {
+                b.putParcelable(EXTRA_SLICE, null);
+            }
+            return b;
+        } else if (method.equals(METHOD_PIN)) {
+            Uri uri = extras.getParcelable(EXTRA_BIND_URI);
+            List<SliceSpec> specs = getSpecs(extras);
+            String pkg = extras.getString(EXTRA_PKG);
+            if (mPinnedList.addPin(uri, pkg, specs)) {
+                handleSlicePinned(uri);
+            }
+            return null;
+        } else if (method.equals(METHOD_UNPIN)) {
+            Uri uri = extras.getParcelable(EXTRA_BIND_URI);
+            String pkg = extras.getString(EXTRA_PKG);
+            if (mPinnedList.removePin(uri, pkg)) {
+                handleSliceUnpinned(uri);
+            }
+            return null;
+        } else if (method.equals(METHOD_GET_PINNED_SPECS)) {
+            Uri uri = extras.getParcelable(EXTRA_BIND_URI);
+            Bundle b = new Bundle();
+            addSpecs(b, mPinnedList.getSpecs(uri));
+            return b;
+        }
+        return super.call(method, arg, extras);
+    }
+
+    private void handleSlicePinned(final Uri sliceUri) {
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            mSliceProvider.onSlicePinned(sliceUri);
+        } else {
+            final CountDownLatch latch = new CountDownLatch(1);
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    mSliceProvider.onSlicePinned(sliceUri);
+                    latch.countDown();
+                }
+            });
+            try {
+                latch.await();
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private void handleSliceUnpinned(final Uri sliceUri) {
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            mSliceProvider.onSliceUnpinned(sliceUri);
+        } else {
+            final CountDownLatch latch = new CountDownLatch(1);
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    mSliceProvider.onSliceUnpinned(sliceUri);
+                    latch.countDown();
+                }
+            });
+            try {
+                latch.await();
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private Slice handleBindSlice(final Uri sliceUri, final List<SliceSpec> specs,
+            final String callingPkg) {
+        // This can be removed once Slice#bindSlice is removed and everyone is using
+        // SliceManager#bindSlice.
+        String pkg = callingPkg != null ? callingPkg
+                : getContext().getPackageManager().getNameForUid(Binder.getCallingUid());
+        if (Binder.getCallingUid() != Process.myUid()) {
+            try {
+                getContext().enforceUriPermission(sliceUri,
+                        Binder.getCallingPid(), Binder.getCallingUid(),
+                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
+                        "Slice binding requires write access to Uri");
+            } catch (SecurityException e) {
+                return createPermissionSlice(getContext(), sliceUri, pkg);
+            }
+        }
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            return onBindSliceStrict(sliceUri, specs, callingPkg);
+        } else {
+            final CountDownLatch latch = new CountDownLatch(1);
+            final Slice[] output = new Slice[1];
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    output[0] = onBindSliceStrict(sliceUri, specs, callingPkg);
+                    latch.countDown();
+                }
+            });
+            try {
+                latch.await();
+                return output[0];
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    /**
+     * Generate a slice that contains a permission request.
+     */
+    public static Slice createPermissionSlice(Context context, Uri sliceUri,
+            String callingPackage) {
+        return new Slice.Builder(sliceUri)
+                .addAction(createPermissionIntent(context, sliceUri, callingPackage),
+                        new Slice.Builder(sliceUri.buildUpon().appendPath("permission").build())
+                                .addText(getPermissionString(context, callingPackage), null)
+                                .build(), null)
+                .addHints(HINT_LIST_ITEM)
+                .build();
+    }
+
+    /**
+     * Create a PendingIntent pointing at the permission dialog.
+     */
+    public static PendingIntent createPermissionIntent(Context context, Uri sliceUri,
+            String callingPackage) {
+        Intent intent = new Intent();
+        intent.setComponent(new ComponentName(context.getPackageName(),
+                "androidx.app.slice.compat.SlicePermissionActivity"));
+        intent.putExtra(EXTRA_BIND_URI, sliceUri);
+        intent.putExtra(EXTRA_PKG, callingPackage);
+        intent.putExtra(EXTRA_PROVIDER_PKG, context.getPackageName());
+        // Unique pending intent.
+        intent.setData(sliceUri.buildUpon().appendQueryParameter("package", callingPackage)
+                .build());
+
+        return PendingIntent.getActivity(context, 0, intent, 0);
+    }
+
+    /**
+     * Get string describing permission request.
+     */
+    public static CharSequence getPermissionString(Context context, String callingPackage) {
+        PackageManager pm = context.getPackageManager();
+        try {
+            return context.getString(R.string.abc_slices_permission_request,
+                    pm.getApplicationInfo(callingPackage, 0).loadLabel(pm),
+                    context.getApplicationInfo().loadLabel(pm));
+        } catch (PackageManager.NameNotFoundException e) {
+            // This shouldn't be possible since the caller is verified.
+            throw new RuntimeException("Unknown calling app", e);
+        }
+    }
+
+    private Slice onBindSliceStrict(Uri sliceUri, List<SliceSpec> specs, String callingPackage) {
+        ThreadPolicy oldPolicy = StrictMode.getThreadPolicy();
+        try {
+            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
+                    .detectAll()
+                    .penaltyDeath()
+                    .build());
+            SliceProvider.setSpecs(specs);
+            try {
+                mBindingPkg = callingPackage;
+                return mSliceProvider.onBindSlice(sliceUri);
+            } finally {
+                mBindingPkg = null;
+                SliceProvider.setSpecs(null);
+            }
+        } finally {
+            StrictMode.setThreadPolicy(oldPolicy);
+        }
+    }
+
+    /**
+     * Compat version of {@link Slice#bindSlice}.
+     */
+    public static Slice bindSlice(Context context, Uri uri,
+            List<SliceSpec> supportedSpecs) {
+        ContentProviderClient provider = context.getContentResolver()
+                .acquireContentProviderClient(uri);
+        if (provider == null) {
+            throw new IllegalArgumentException("Unknown URI " + uri);
+        }
+        try {
+            Bundle extras = new Bundle();
+            extras.putParcelable(EXTRA_BIND_URI, uri);
+            addSpecs(extras, supportedSpecs);
+            final Bundle res = provider.call(METHOD_SLICE, null, extras);
+            if (res == null) {
+                return null;
+            }
+            Parcelable bundle = res.getParcelable(EXTRA_SLICE);
+            if (!(bundle instanceof Bundle)) {
+                return null;
+            }
+            return new Slice((Bundle) bundle);
+        } catch (RemoteException e) {
+            // Arbitrary and not worth documenting, as Activity
+            // Manager will kill this process shortly anyway.
+            return null;
+        } finally {
+            provider.close();
+        }
+    }
+
+    private static void addSpecs(Bundle extras, List<SliceSpec> supportedSpecs) {
+        ArrayList<String> types = new ArrayList<>();
+        ArrayList<Integer> revs = new ArrayList<>();
+        for (SliceSpec spec : supportedSpecs) {
+            types.add(spec.getType());
+            revs.add(spec.getRevision());
+        }
+        extras.putStringArrayList(EXTRA_SUPPORTED_SPECS, types);
+        extras.putIntegerArrayList(EXTRA_SUPPORTED_SPECS_REVS, revs);
+    }
+
+    private static List<SliceSpec> getSpecs(Bundle extras) {
+        ArrayList<SliceSpec> specs = new ArrayList<>();
+        ArrayList<String> types = extras.getStringArrayList(EXTRA_SUPPORTED_SPECS);
+        ArrayList<Integer> revs = extras.getIntegerArrayList(EXTRA_SUPPORTED_SPECS_REVS);
+        for (int i = 0; i < types.size(); i++) {
+            specs.add(new SliceSpec(types.get(i), revs.get(i)));
+        }
+        return specs;
+    }
+
+    /**
+     * Compat version of {@link Slice#bindSlice}.
+     */
+    public static Slice bindSlice(Context context, Intent intent,
+            List<SliceSpec> supportedSpecs) {
+        ContentResolver resolver = context.getContentResolver();
+
+        // Check if the intent has data for the slice uri on it and use that
+        final Uri intentData = intent.getData();
+        if (intentData != null && SLICE_TYPE.equals(resolver.getType(intentData))) {
+            return bindSlice(context, intentData, supportedSpecs);
+        }
+        // Otherwise ask the app
+        List<ResolveInfo> providers =
+                context.getPackageManager().queryIntentContentProviders(intent, 0);
+        if (providers == null) {
+            throw new IllegalArgumentException("Unable to resolve intent " + intent);
+        }
+        String authority = providers.get(0).providerInfo.authority;
+        Uri uri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(authority).build();
+        ContentProviderClient provider = resolver.acquireContentProviderClient(uri);
+        if (provider == null) {
+            throw new IllegalArgumentException("Unknown URI " + uri);
+        }
+        try {
+            Bundle extras = new Bundle();
+            extras.putParcelable(EXTRA_INTENT, intent);
+            addSpecs(extras, supportedSpecs);
+            final Bundle res = provider.call(METHOD_MAP_INTENT, null, extras);
+            if (res == null) {
+                return null;
+            }
+            Parcelable bundle = res.getParcelable(EXTRA_SLICE);
+            if (!(bundle instanceof Bundle)) {
+                return null;
+            }
+            return new Slice((Bundle) bundle);
+        } catch (RemoteException e) {
+            // Arbitrary and not worth documenting, as Activity
+            // Manager will kill this process shortly anyway.
+            return null;
+        } finally {
+            provider.close();
+        }
+    }
+
+    /**
+     * Compat version of {@link android.app.slice.SliceManager#pinSlice}.
+     */
+    public static void pinSlice(Context context, Uri uri,
+            List<SliceSpec> supportedSpecs) {
+        ContentProviderClient provider = context.getContentResolver()
+                .acquireContentProviderClient(uri);
+        if (provider == null) {
+            throw new IllegalArgumentException("Unknown URI " + uri);
+        }
+        try {
+            Bundle extras = new Bundle();
+            extras.putParcelable(EXTRA_BIND_URI, uri);
+            extras.putString(EXTRA_PKG, context.getPackageName());
+            addSpecs(extras, supportedSpecs);
+            provider.call(METHOD_PIN, null, extras);
+        } catch (RemoteException e) {
+            // Arbitrary and not worth documenting, as Activity
+            // Manager will kill this process shortly anyway.
+        } finally {
+            provider.close();
+        }
+    }
+
+    /**
+     * Compat version of {@link android.app.slice.SliceManager#unpinSlice}.
+     */
+    public static void unpinSlice(Context context, Uri uri,
+            List<SliceSpec> supportedSpecs) {
+        ContentProviderClient provider = context.getContentResolver()
+                .acquireContentProviderClient(uri);
+        if (provider == null) {
+            throw new IllegalArgumentException("Unknown URI " + uri);
+        }
+        try {
+            Bundle extras = new Bundle();
+            extras.putParcelable(EXTRA_BIND_URI, uri);
+            extras.putString(EXTRA_PKG, context.getPackageName());
+            addSpecs(extras, supportedSpecs);
+            provider.call(METHOD_UNPIN, null, extras);
+        } catch (RemoteException e) {
+            // Arbitrary and not worth documenting, as Activity
+            // Manager will kill this process shortly anyway.
+        } finally {
+            provider.close();
+        }
+    }
+
+    /**
+     * Compat version of {@link android.app.slice.SliceManager#getPinnedSpecs(Uri)}.
+     */
+    public static List<SliceSpec> getPinnedSpecs(Context context, Uri uri) {
+        ContentProviderClient provider = context.getContentResolver()
+                .acquireContentProviderClient(uri);
+        if (provider == null) {
+            throw new IllegalArgumentException("Unknown URI " + uri);
+        }
+        try {
+            Bundle extras = new Bundle();
+            extras.putParcelable(EXTRA_BIND_URI, uri);
+            final Bundle res = provider.call(METHOD_GET_PINNED_SPECS, null, extras);
+            if (res == null) {
+                return null;
+            }
+            return getSpecs(res);
+        } catch (RemoteException e) {
+            // Arbitrary and not worth documenting, as Activity
+            // Manager will kill this process shortly anyway.
+            return null;
+        } finally {
+            provider.close();
+        }
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/compat/SliceProviderWrapperContainer.java b/slices/core/src/main/java/androidx/app/slice/compat/SliceProviderWrapperContainer.java
new file mode 100644
index 0000000..ebc2ad1
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/compat/SliceProviderWrapperContainer.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.compat;
+
+import static androidx.app.slice.SliceConvert.wrap;
+
+import android.annotation.TargetApi;
+import android.app.slice.Slice;
+import android.app.slice.SliceProvider;
+import android.app.slice.SliceSpec;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+
+import java.util.List;
+
+import androidx.app.slice.SliceConvert;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(28)
+public class SliceProviderWrapperContainer {
+
+    /**
+     */
+    public static class SliceProviderWrapper extends SliceProvider {
+
+        private androidx.app.slice.SliceProvider mSliceProvider;
+
+        public SliceProviderWrapper(androidx.app.slice.SliceProvider provider) {
+            mSliceProvider = provider;
+        }
+
+        @Override
+        public boolean onCreate() {
+            return mSliceProvider.onCreateSliceProvider();
+        }
+
+        @Override
+        public Slice onBindSlice(Uri sliceUri, List<SliceSpec> supportedVersions) {
+            androidx.app.slice.SliceProvider.setSpecs(wrap(supportedVersions));
+            try {
+                return SliceConvert.unwrap(mSliceProvider.onBindSlice(sliceUri));
+            } finally {
+                androidx.app.slice.SliceProvider.setSpecs(null);
+            }
+        }
+
+        @Override
+        public void onSlicePinned(Uri sliceUri) {
+            mSliceProvider.onSlicePinned(sliceUri);
+        }
+
+        @Override
+        public void onSliceUnpinned(Uri sliceUri) {
+            mSliceProvider.onSliceUnpinned(sliceUri);
+        }
+
+        /**
+         * Maps intents to uris.
+         */
+        @Override
+        public @NonNull Uri onMapIntentToUri(Intent intent) {
+            return mSliceProvider.onMapIntentToUri(intent);
+        }
+    }
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/core/SliceHints.java b/slices/core/src/main/java/androidx/app/slice/core/SliceHints.java
new file mode 100644
index 0000000..e566825
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/core/SliceHints.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.core;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+
+import android.support.annotation.RestrictTo;
+
+/**
+ * Temporary class to contain hint constants for slices to be used.
+ * @hide
+ */
+@RestrictTo(LIBRARY_GROUP)
+public class SliceHints {
+    /**
+     * Subtype to range an item representing a range.
+     */
+    public static final String SUBTYPE_RANGE = "range";
+
+    /**
+     * Subtype indicating that this content is the maximum value for a range.
+     */
+    public static final String SUBTYPE_MAX = "max";
+
+    /**
+     * Subtype indicating that this content is the current value for a range.
+     */
+    public static final String SUBTYPE_VALUE = "value";
+
+    /**
+     * Key to retrieve an extra added to an intent when the value of an input range has changed.
+     */
+    public static final String EXTRA_RANGE_VALUE = "android.app.slice.extra.RANGE_VALUE";
+}
diff --git a/slices/core/src/main/java/androidx/app/slice/core/SliceQuery.java b/slices/core/src/main/java/androidx/app/slice/core/SliceQuery.java
new file mode 100644
index 0000000..f0f2371
--- /dev/null
+++ b/slices/core/src/main/java/androidx/app/slice/core/SliceQuery.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.core;
+
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+
+import android.annotation.TargetApi;
+import android.support.annotation.RestrictTo;
+import android.text.TextUtils;
+
+import java.util.ArrayDeque;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Queue;
+import java.util.Spliterators;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+
+/**
+ * Utilities for finding content within a Slice.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+// TODO: Not expect 24.
+@TargetApi(24)
+public class SliceQuery {
+
+    /**
+     */
+    public static boolean hasAnyHints(SliceItem item, String... hints) {
+        if (hints == null) return false;
+        List<String> itemHints = item.getHints();
+        for (String hint : hints) {
+            if (itemHints.contains(hint)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     */
+    public static boolean hasHints(SliceItem item, String... hints) {
+        if (hints == null) return true;
+        List<String> itemHints = item.getHints();
+        for (String hint : hints) {
+            if (!TextUtils.isEmpty(hint) && !itemHints.contains(hint)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     */
+    public static boolean hasHints(Slice item, String... hints) {
+        if (hints == null) return true;
+        List<String> itemHints = item.getHints();
+        for (String hint : hints) {
+            if (!TextUtils.isEmpty(hint) && !itemHints.contains(hint)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     */
+    public static SliceItem findNotContaining(SliceItem container, List<SliceItem> list) {
+        SliceItem ret = null;
+        while (ret == null && list.size() != 0) {
+            SliceItem remove = list.remove(0);
+            if (!contains(container, remove)) {
+                ret = remove;
+            }
+        }
+        return ret;
+    }
+
+    /**
+     */
+    private static boolean contains(SliceItem container, final SliceItem item) {
+        if (container == null || item == null) return false;
+        return stream(container).filter(new Predicate<SliceItem>() {
+            @Override
+            public boolean test(SliceItem s) {
+                return s == item;
+            }
+        }).findAny().isPresent();
+    }
+
+    /**
+     */
+    public static List<SliceItem> findAll(SliceItem s, String format) {
+        return findAll(s, format, (String[]) null, null);
+    }
+
+    /**
+     */
+    public static List<SliceItem> findAll(Slice s, String format, String hints, String nonHints) {
+        return findAll(s, format, new String[]{ hints }, new String[]{ nonHints });
+    }
+
+    /**
+     */
+    public static List<SliceItem> findAll(SliceItem s, String format, String hints,
+            String nonHints) {
+        return findAll(s, format, new String[]{ hints }, new String[]{ nonHints });
+    }
+
+    /**
+     */
+    public static List<SliceItem> findAll(Slice s, final String format, final String[] hints,
+            final String[] nonHints) {
+        return stream(s).filter(new Predicate<SliceItem>() {
+            @Override
+            public boolean test(SliceItem item) {
+                return checkFormat(item, format)
+                        && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
+            }
+        }).collect(Collectors.<SliceItem>toList());
+    }
+
+    /**
+     */
+    public static List<SliceItem> findAll(SliceItem s, final String format, final String[] hints,
+            final String[] nonHints) {
+        return stream(s).filter(new Predicate<SliceItem>() {
+            @Override
+            public boolean test(SliceItem item) {
+                return checkFormat(item, format)
+                        && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
+            }
+        }).collect(Collectors.<SliceItem>toList());
+    }
+
+    /**
+     */
+    public static SliceItem find(Slice s, String format, String hints, String nonHints) {
+        return find(s, format, new String[]{ hints }, new String[]{ nonHints });
+    }
+
+    /**
+     */
+    public static SliceItem find(Slice s, String format) {
+        return find(s, format, (String[]) null, null);
+    }
+
+    /**
+     */
+    public static SliceItem find(SliceItem s, String format) {
+        return find(s, format, (String[]) null, null);
+    }
+
+    /**
+     */
+    public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {
+        return find(s, format, new String[]{ hints }, new String[]{ nonHints });
+    }
+
+    /**
+     */
+    public static SliceItem find(Slice s, final String format, final String[] hints,
+            final String[] nonHints) {
+        return stream(s).filter(new Predicate<SliceItem>() {
+            @Override
+            public boolean test(SliceItem item) {
+                return checkFormat(item, format)
+                        && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
+            }
+        }).findFirst().orElse(null);
+    }
+
+    /**
+     */
+    public static SliceItem findSubtype(Slice s, final String format, final String subtype) {
+        return stream(s).filter(new Predicate<SliceItem>() {
+            @Override
+            public boolean test(SliceItem item) {
+                return checkFormat(item, format) && checkSubtype(item, subtype);
+            }
+        }).findFirst().orElse(null);
+    }
+
+    /**
+     */
+    public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {
+        return stream(s).filter(new Predicate<SliceItem>() {
+            @Override
+            public boolean test(SliceItem item) {
+                return checkFormat(item, format) && checkSubtype(item, subtype);
+            }
+        }).findFirst().orElse(null);
+    }
+
+    /**
+     */
+    public static SliceItem find(SliceItem s, final String format, final String[] hints,
+            final String[] nonHints) {
+        return stream(s).filter(new Predicate<SliceItem>() {
+            @Override
+            public boolean test(SliceItem item) {
+                return checkFormat(item, format)
+                        && (hasHints(item, hints) && !hasAnyHints(item, nonHints));
+            }
+        }).findFirst().orElse(null);
+    }
+
+    private static boolean checkFormat(SliceItem item, String format) {
+        return format == null || format.equals(item.getFormat());
+    }
+
+    private static boolean checkSubtype(SliceItem item, String subtype) {
+        return subtype == null || subtype.equals(item.getSubType());
+    }
+
+    /**
+     */
+    public static Stream<SliceItem> stream(SliceItem slice) {
+        Queue<SliceItem> items = new ArrayDeque<>();
+        items.add(slice);
+        return getSliceItemStream(items);
+    }
+
+    /**
+     */
+    public static Stream<SliceItem> stream(Slice slice) {
+        Queue<SliceItem> items = new ArrayDeque<>();
+        items.addAll(slice.getItems());
+        return getSliceItemStream(items);
+    }
+
+    /**
+     */
+    private static Stream<SliceItem> getSliceItemStream(final Queue<SliceItem> items) {
+        Iterator<SliceItem> iterator = new Iterator<SliceItem>() {
+            @Override
+            public boolean hasNext() {
+                return items.size() != 0;
+            }
+
+            @Override
+            public SliceItem next() {
+                SliceItem item = items.poll();
+                if (FORMAT_SLICE.equals(item.getFormat())
+                        || FORMAT_ACTION.equals(item.getFormat())) {
+                    items.addAll(item.getSlice().getItems());
+                }
+                return item;
+            }
+        };
+        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 0), false);
+    }
+}
diff --git a/slices/core/src/main/res-public/values-v28/strings.xml b/slices/core/src/main/res-public/values-v28/strings.xml
new file mode 100644
index 0000000..cb2a320
--- /dev/null
+++ b/slices/core/src/main/res-public/values-v28/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="slice_provider">androidx.app.slice.compat.SliceProviderWrapperContainer.SliceProviderWrapper</string>
+</resources>
\ No newline at end of file
diff --git a/slices/core/src/main/res-public/values/strings.xml b/slices/core/src/main/res-public/values/strings.xml
new file mode 100644
index 0000000..d492a38
--- /dev/null
+++ b/slices/core/src/main/res-public/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="slice_provider">androidx.app.slice.compat.SliceProviderCompat</string>
+</resources>
diff --git a/slices/core/src/main/res/layout/abc_slice_permission_request.xml b/slices/core/src/main/res/layout/abc_slice_permission_request.xml
new file mode 100644
index 0000000..43f895b
--- /dev/null
+++ b/slices/core/src/main/res/layout/abc_slice_permission_request.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2018 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.
+-->
+<!-- Extends LinearLayout -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingStart="16dp"
+    android:paddingEnd="16dp"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/text2"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="8dp"
+        android:paddingStart="8dp"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:text="@string/abc_slice_permission_text_1" />
+
+    <TextView
+        android:id="@+id/text1"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingStart="8dp"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:paddingBottom="16dp"
+        android:text="@string/abc_slice_permission_text_2" />
+
+</LinearLayout>
diff --git a/slices/core/src/main/res/values/strings.xml b/slices/core/src/main/res/values/strings.xml
new file mode 100644
index 0000000..2959af8
--- /dev/null
+++ b/slices/core/src/main/res/values/strings.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+~ Copyright 2018 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">
+
+    <!-- Text describing a permission request for one app to show another app's
+         slices [CHAR LIMIT=NONE] -->
+    <string name="abc_slices_permission_request"><xliff:g id="app" example="Example App">%1$s</xliff:g> wants to show <xliff:g id="app_2" example="Other Example App">%2$s</xliff:g> slices</string>
+
+    <!-- Title of prompt requesting access to display slices [CHAR LIMIT=NONE] -->
+    <string name="abc_slice_permission_title">Allow <xliff:g id="app" example="Example App">%1$s</xliff:g> to show <xliff:g id="app_2" example="Other Example App">%2$s</xliff:g> slices?</string>
+
+    <!-- Description of what kind of access is given to a slice host [CHAR LIMIT=NONE] -->
+    <string name="abc_slice_permission_text_1"> - It can read information from <xliff:g id="app" example="Example App">%1$s</xliff:g></string>
+    <!-- Description of what kind of access is given to a slice host [CHAR LIMIT=NONE] -->
+    <string name="abc_slice_permission_text_2"> - It can take actions inside <xliff:g id="app" example="Example App">%1$s</xliff:g></string>
+
+    <!-- Text on checkbox allowing the app to show slices from all apps [CHAR LIMIT=NONE] -->
+    <string name="abc_slice_permission_checkbox">Allow <xliff:g id="app" example="Example App">%1$s</xliff:g> to show slices from any app</string>
+
+    <!-- Option to grant the slice permission request on the screen [CHAR LIMIT=15] -->
+    <string name="abc_slice_permission_allow">Allow</string>
+
+    <!-- Option to grant the slice permission request on the screen [CHAR LIMIT=15] -->
+    <string name="abc_slice_permission_deny">Deny</string>
+
+</resources>
diff --git a/slices/view/api/current.txt b/slices/view/api/current.txt
new file mode 100644
index 0000000..d158818
--- /dev/null
+++ b/slices/view/api/current.txt
@@ -0,0 +1,94 @@
+package androidx.app.slice {
+
+  public abstract class SliceManager {
+    method public abstract androidx.app.slice.Slice bindSlice(android.net.Uri);
+    method public abstract androidx.app.slice.Slice bindSlice(android.content.Intent);
+    method public static androidx.app.slice.SliceManager getInstance(android.content.Context);
+    method public abstract void pinSlice(android.net.Uri);
+    method public abstract void registerSliceCallback(android.net.Uri, androidx.app.slice.SliceManager.SliceCallback);
+    method public abstract void registerSliceCallback(android.net.Uri, java.util.concurrent.Executor, androidx.app.slice.SliceManager.SliceCallback);
+    method public abstract void unpinSlice(android.net.Uri);
+    method public abstract void unregisterSliceCallback(android.net.Uri, androidx.app.slice.SliceManager.SliceCallback);
+  }
+
+  public static abstract interface SliceManager.SliceCallback {
+    method public abstract void onSliceUpdated(androidx.app.slice.Slice);
+  }
+
+  public class SliceUtils {
+    method public static int getLoadingState(androidx.app.slice.Slice);
+    method public static androidx.app.slice.Slice parseSlice(java.io.InputStream, java.lang.String) throws java.io.IOException;
+    method public static void serializeSlice(androidx.app.slice.Slice, android.content.Context, java.io.OutputStream, java.lang.String, androidx.app.slice.SliceUtils.SerializeOptions) throws java.io.IOException;
+    field public static final int LOADING_ALL = 0; // 0x0
+    field public static final int LOADING_COMPLETE = 2; // 0x2
+    field public static final int LOADING_PARTIAL = 1; // 0x1
+  }
+
+  public static class SliceUtils.SerializeOptions {
+    ctor public SliceUtils.SerializeOptions();
+    method public androidx.app.slice.SliceUtils.SerializeOptions setActionMode(int);
+    method public androidx.app.slice.SliceUtils.SerializeOptions setImageMode(int);
+    field public static final int MODE_DISABLE = 2; // 0x2
+    field public static final int MODE_REMOVE = 1; // 0x1
+    field public static final int MODE_THROW = 0; // 0x0
+  }
+
+}
+
+package androidx.app.slice.widget {
+
+  public class EventInfo {
+    ctor public EventInfo(int, int, int, int);
+    method public void setPosition(int, int, int);
+    field public static final int ACTION_TYPE_BUTTON = 1; // 0x1
+    field public static final int ACTION_TYPE_CONTENT = 3; // 0x3
+    field public static final int ACTION_TYPE_SLIDER = 2; // 0x2
+    field public static final int ACTION_TYPE_TOGGLE = 0; // 0x0
+    field public static final int POSITION_CELL = 2; // 0x2
+    field public static final int POSITION_END = 1; // 0x1
+    field public static final int POSITION_START = 0; // 0x0
+    field public static final int ROW_TYPE_GRID = 1; // 0x1
+    field public static final int ROW_TYPE_LIST = 0; // 0x0
+    field public static final int ROW_TYPE_MESSAGING = 2; // 0x2
+    field public static final int ROW_TYPE_SHORTCUT = -1; // 0xffffffff
+    field public static final int STATE_OFF = 0; // 0x0
+    field public static final int STATE_ON = 1; // 0x1
+    field public int actionCount;
+    field public int actionIndex;
+    field public int actionPosition;
+    field public int actionType;
+    field public int rowIndex;
+    field public int rowTemplateType;
+    field public int sliceMode;
+    field public int state;
+  }
+
+  public final class SliceLiveData {
+    ctor public SliceLiveData();
+    method public static android.arch.lifecycle.LiveData<androidx.app.slice.Slice> fromIntent(android.content.Context, android.content.Intent);
+    method public static android.arch.lifecycle.LiveData<androidx.app.slice.Slice> fromUri(android.content.Context, android.net.Uri);
+  }
+
+  public class SliceView extends android.view.ViewGroup implements android.arch.lifecycle.Observer {
+    ctor public SliceView(android.content.Context);
+    ctor public SliceView(android.content.Context, android.util.AttributeSet);
+    ctor public SliceView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SliceView(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getMode();
+    method public void onChanged(androidx.app.slice.Slice);
+    method public void setMode(int);
+    method public void setOnSliceActionListener(androidx.app.slice.widget.SliceView.OnSliceActionListener);
+    method public void setScrollable(boolean);
+    method public void setSlice(androidx.app.slice.Slice);
+    method public void setTint(int);
+    field public static final int MODE_LARGE = 2; // 0x2
+    field public static final int MODE_SHORTCUT = 3; // 0x3
+    field public static final int MODE_SMALL = 1; // 0x1
+  }
+
+  public static abstract interface SliceView.OnSliceActionListener {
+    method public abstract void onSliceAction(androidx.app.slice.widget.EventInfo, androidx.app.slice.SliceItem);
+  }
+
+}
+
diff --git a/slices/view/build.gradle b/slices/view/build.gradle
new file mode 100644
index 0000000..93e9fc5
--- /dev/null
+++ b/slices/view/build.gradle
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+import static android.support.dependencies.DependenciesKt.*
+import android.support.LibraryVersions
+import android.support.LibraryGroups
+
+plugins {
+    id("SupportAndroidLibraryPlugin")
+}
+
+dependencies {
+    implementation(project(":slices-core"))
+    implementation(project(":slices-builders"))
+    implementation(project(":recyclerview-v7"))
+    api(ARCH_LIFECYCLE_EXTENSIONS, libs.exclude_annotations_transitive)
+
+    androidTestImplementation(TEST_RUNNER)
+    androidTestImplementation(ESPRESSO_CORE)
+    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy)
+    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy)
+}
+
+android {
+}
+
+supportLibrary {
+    name = "Slice views"
+    publish = true
+    mavenVersion = LibraryVersions.SUPPORT_LIBRARY
+    mavenGroup = LibraryGroups.SLICES
+    inceptionYear = "2017"
+    description = "A library that handles rendering of slice content into supported templates"
+    minSdkVersion = 24
+}
diff --git a/slices/view/lint-baseline.xml b/slices/view/lint-baseline.xml
new file mode 100644
index 0000000..49d372e
--- /dev/null
+++ b/slices/view/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="4" by="lint 3.0.0">
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: SliceView.MODE_SMALL, SliceView.MODE_LARGE, SliceView.MODE_SHORTCUT"
+        errorLine1="        return mMode;"
+        errorLine2="               ~~~~~">
+        <location
+            file="src/main/java/androidx/app/slice/widget/SliceView.java"
+            line="290"
+            column="16"/>
+    </issue>
+
+</issues>
diff --git a/slices/view/src/androidTest/AndroidManifest.xml b/slices/view/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..ec64cc1
--- /dev/null
+++ b/slices/view/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 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"
+          package="androidx.app.slice.view.test">
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
+
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
+    <application>
+        <provider android:name="androidx.app.slice.SliceManagerTest$TestSliceProvider"
+                  android:authorities="androidx.app.slice.view.test"
+                  android:exported="true"/>
+
+        <activity android:name="androidx.app.slice.render.SliceRenderActivity"
+            android:theme="@style/AppTheme.NoActionBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/design/tests/NO_DOCS b/slices/view/src/androidTest/NO_DOCS
similarity index 92%
copy from design/tests/NO_DOCS
copy to slices/view/src/androidTest/NO_DOCS
index 0c81e4a..4dad694 100644
--- a/design/tests/NO_DOCS
+++ b/slices/view/src/androidTest/NO_DOCS
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Android Open Source Project
+# Copyright (C) 2017 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.
diff --git a/slices/view/src/androidTest/java/androidx/app/slice/SliceManagerTest.java b/slices/view/src/androidTest/java/androidx/app/slice/SliceManagerTest.java
new file mode 100644
index 0000000..a20a5cc
--- /dev/null
+++ b/slices/view/src/androidTest/java/androidx/app/slice/SliceManagerTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2018 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 androidx.app.slice;
+
+import static junit.framework.Assert.assertEquals;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.os.BuildCompat;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+
+import androidx.app.slice.widget.SliceLiveData;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SliceManagerTest {
+
+    private final Context mContext = InstrumentationRegistry.getContext();
+    private SliceProvider mSliceProvider;
+    private SliceManager mManager;
+
+    @Before
+    public void setup() {
+        TestSliceProvider.sSliceProviderReceiver = mSliceProvider = mock(SliceProvider.class);
+        mManager = createSliceManager(mContext);
+    }
+
+    private SliceManager createSliceManager(Context context) {
+        if (BuildCompat.isAtLeastP()) {
+            android.app.slice.SliceManager manager = mock(android.app.slice.SliceManager.class);
+            doAnswer(new Answer<Void>() {
+                @Override
+                public Void answer(InvocationOnMock invocation) throws Throwable {
+                    TestSliceProvider.sSliceProviderReceiver.onSlicePinned(
+                            (Uri) invocation.getArguments()[0]);
+                    return null;
+                }
+            }).when(manager).pinSlice(any(Uri.class), any(List.class));
+            doAnswer(new Answer<Void>() {
+                @Override
+                public Void answer(InvocationOnMock invocation) throws Throwable {
+                    TestSliceProvider.sSliceProviderReceiver.onSliceUnpinned(
+                            (Uri) invocation.getArguments()[0]);
+                    return null;
+                }
+            }).when(manager).unpinSlice(any(Uri.class));
+            return new SliceManagerWrapper(context, manager);
+        } else {
+            return SliceManager.getInstance(context);
+        }
+    }
+
+    @Test
+    public void testPin() {
+        Uri uri = new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(mContext.getPackageName())
+                .build();
+        mManager.pinSlice(uri);
+        verify(mSliceProvider).onSlicePinned(eq(uri));
+    }
+
+    @Test
+    public void testUnpin() {
+        Uri uri = new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(mContext.getPackageName())
+                .build();
+        mManager.pinSlice(uri);
+        clearInvocations(mSliceProvider);
+        mManager.unpinSlice(uri);
+        verify(mSliceProvider).onSliceUnpinned(eq(uri));
+    }
+
+    @Test
+    public void testCallback() {
+        if (BuildCompat.isAtLeastP()) {
+            return;
+        }
+        Uri uri = new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(mContext.getPackageName())
+                .build();
+        Slice s = new Slice.Builder(uri).build();
+        SliceManager.SliceCallback callback = mock(SliceManager.SliceCallback.class);
+        when(mSliceProvider.onBindSlice(eq(uri))).thenReturn(s);
+        mManager.registerSliceCallback(uri, new Executor() {
+            @Override
+            public void execute(@NonNull Runnable command) {
+                command.run();
+            }
+        }, callback);
+
+        mContext.getContentResolver().notifyChange(uri, null);
+
+        verify(callback, timeout(2000)).onSliceUpdated(any(Slice.class));
+    }
+
+    @Test
+    public void testPinnedSpecs() {
+        if (BuildCompat.isAtLeastP()) {
+            return;
+        }
+        Uri uri = new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(mContext.getPackageName())
+                .build();
+        mManager.pinSlice(uri);
+        verify(mSliceProvider).onSlicePinned(eq(uri));
+
+        assertEquals(SliceLiveData.SUPPORTED_SPECS, mManager.getPinnedSpecs(uri));
+    }
+
+    public static class TestSliceProvider extends SliceProvider {
+
+        public static SliceProvider sSliceProviderReceiver;
+
+        @Override
+        public boolean onCreateSliceProvider() {
+            if (sSliceProviderReceiver != null) {
+                sSliceProviderReceiver.onCreateSliceProvider();
+            }
+            return true;
+        }
+
+        @Override
+        public Slice onBindSlice(Uri sliceUri) {
+            if (sSliceProviderReceiver != null) {
+                return sSliceProviderReceiver.onBindSlice(sliceUri);
+            }
+            return null;
+        }
+
+        @NonNull
+        @Override
+        public Uri onMapIntentToUri(Intent intent) {
+            if (sSliceProviderReceiver != null) {
+                return sSliceProviderReceiver.onMapIntentToUri(intent);
+            }
+            return null;
+        }
+
+        @Override
+        public void onSlicePinned(Uri sliceUri) {
+            if (sSliceProviderReceiver != null) {
+                sSliceProviderReceiver.onSlicePinned(sliceUri);
+            }
+        }
+
+        @Override
+        public void onSliceUnpinned(Uri sliceUri) {
+            if (sSliceProviderReceiver != null) {
+                sSliceProviderReceiver.onSliceUnpinned(sliceUri);
+            }
+        }
+    }
+}
diff --git a/slices/view/src/androidTest/java/androidx/app/slice/SliceXmlTest.java b/slices/view/src/androidTest/java/androidx/app/slice/SliceXmlTest.java
new file mode 100644
index 0000000..5e4444d
--- /dev/null
+++ b/slices/view/src/androidTest/java/androidx/app/slice/SliceXmlTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2017 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 androidx.app.slice;
+
+
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SliceXmlTest {
+
+    private final Context mContext = InstrumentationRegistry.getContext();
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testThrowForAction() throws IOException {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        Slice s = new Slice.Builder(Uri.parse("content://pkg/slice"))
+                .addAction(null, null, null)
+                .build();
+        SliceUtils.serializeSlice(s, mContext, outputStream, "UTF-8", new SliceUtils
+                .SerializeOptions());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testThrowForRemoteInput() throws IOException {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        Slice s = new Slice.Builder(Uri.parse("content://pkg/slice"))
+                .addRemoteInput(null, null)
+                .build();
+        SliceUtils.serializeSlice(s, mContext, outputStream, "UTF-8", new SliceUtils
+                .SerializeOptions());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testThrowForImage() throws IOException {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        Slice s = new Slice.Builder(Uri.parse("content://pkg/slice"))
+                .addIcon(null, null)
+                .build();
+        SliceUtils.serializeSlice(s, mContext, outputStream, "UTF-8", new SliceUtils
+                .SerializeOptions());
+    }
+
+    @Test
+    public void testNoThrowForAction() throws IOException {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        Slice s = new Slice.Builder(Uri.parse("content://pkg/slice"))
+                .addAction(null, null, null)
+                .build();
+        SliceUtils.serializeSlice(s, mContext, outputStream, "UTF-8", new SliceUtils
+                .SerializeOptions().setActionMode(SliceUtils.SerializeOptions.MODE_REMOVE));
+    }
+
+    @Test
+    public void testNoThrowForRemoteInput() throws IOException {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        Slice s = new Slice.Builder(Uri.parse("content://pkg/slice"))
+                .addRemoteInput(null, null)
+                .build();
+        SliceUtils.serializeSlice(s, mContext, outputStream, "UTF-8", new SliceUtils
+                .SerializeOptions().setActionMode(SliceUtils.SerializeOptions.MODE_REMOVE));
+    }
+
+    @Test
+    public void testNoThrowForImage() throws IOException {
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        Slice s = new Slice.Builder(Uri.parse("content://pkg/slice"))
+                .addIcon(null, null)
+                .build();
+        SliceUtils.serializeSlice(s, mContext, outputStream, "UTF-8", new SliceUtils
+                .SerializeOptions().setImageMode(SliceUtils.SerializeOptions.MODE_REMOVE));
+    }
+
+    @Test
+    public void testSerialization() throws IOException {
+        Bitmap b = Bitmap.createBitmap(50, 25, Bitmap.Config.ARGB_8888);
+        new Canvas(b).drawColor(0xffff0000);
+        // Create a slice containing all the types in a hierarchy.
+        Slice before = new Slice.Builder(Uri.parse("content://pkg/slice"))
+                .addSubSlice(new Slice.Builder(Uri.parse("content://pkg/slice/sub"))
+                        .addTimestamp(System.currentTimeMillis(), null, "Hint")
+                        .build())
+                .addIcon(Icon.createWithBitmap(b), null)
+                .addText("Some text", null)
+                .addAction(null, new Slice.Builder(Uri.parse("content://pkg/slice/sub"))
+                        .addText("Action text", null)
+                        .build(), null)
+                .addInt(0xff00ff00, "subtype")
+                .addHints("Hint 1", "Hint 2")
+                .build();
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+        SliceUtils.serializeSlice(before, mContext, outputStream, "UTF-8",
+                new SliceUtils.SerializeOptions()
+                        .setImageMode(SliceUtils.SerializeOptions.MODE_DISABLE)
+                        .setActionMode(SliceUtils.SerializeOptions.MODE_DISABLE));
+
+        byte[] bytes = outputStream.toByteArray();
+        ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
+        Slice after = SliceUtils.parseSlice(inputStream, "UTF-8");
+
+        assertEquivalent(before, after);
+    }
+
+    private void assertEquivalent(Slice desired, Slice actual) {
+        assertEquals(desired.getUri(), actual.getUri());
+        assertEquals(desired.getHints(), actual.getHints());
+        assertEquals(desired.getItems().size(), actual.getItems().size());
+
+        for (int i = 0; i < desired.getItems().size(); i++) {
+            assertEquivalent(desired.getItems().get(i), actual.getItems().get(i));
+        }
+    }
+
+    private void assertEquivalent(SliceItem desired, SliceItem actual) {
+        boolean isSliceType = FORMAT_SLICE.equals(desired.getFormat())
+                || FORMAT_ACTION.equals(desired.getFormat());
+        if (isSliceType) {
+            assertTrue(FORMAT_SLICE.equals(actual.getFormat())
+                    || FORMAT_ACTION.equals(actual.getFormat()));
+        } else {
+            assertEquals(desired.getFormat(), actual.getFormat());
+            if (FORMAT_TEXT.equals(desired.getFormat())) {
+                assertEquals(String.valueOf(desired.getText()), String.valueOf(actual.getText()));
+            }
+        }
+    }
+}
diff --git a/slices/view/src/androidTest/java/androidx/app/slice/render/RenderTest.java b/slices/view/src/androidTest/java/androidx/app/slice/render/RenderTest.java
new file mode 100644
index 0000000..6cf6182
--- /dev/null
+++ b/slices/view/src/androidTest/java/androidx/app/slice/render/RenderTest.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.render;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class RenderTest {
+
+    private final Context mContext = InstrumentationRegistry.getContext();
+
+    @Test
+    public void testRender() throws InterruptedException {
+        final CountDownLatch latch = new CountDownLatch(1);
+        BroadcastReceiver receiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                latch.countDown();
+            }
+        };
+        mContext.registerReceiver(receiver,
+                new IntentFilter(SliceRenderActivity.ACTION_RENDER_DONE));
+        mContext.startActivity(new Intent(mContext, SliceRenderActivity.class)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+        latch.await(30000, TimeUnit.MILLISECONDS);
+    }
+}
diff --git a/slices/view/src/androidTest/java/androidx/app/slice/render/SliceCreator.java b/slices/view/src/androidTest/java/androidx/app/slice/render/SliceCreator.java
new file mode 100644
index 0000000..114d0e1
--- /dev/null
+++ b/slices/view/src/androidTest/java/androidx/app/slice/render/SliceCreator.java
@@ -0,0 +1,307 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.render;
+
+import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
+
+import android.app.PendingIntent;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.net.wifi.WifiManager;
+import android.provider.Settings;
+import android.text.SpannableString;
+import android.text.format.DateUtils;
+import android.text.style.ForegroundColorSpan;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.builders.GridBuilder;
+import androidx.app.slice.builders.ListBuilder;
+import androidx.app.slice.builders.MessagingSliceBuilder;
+import androidx.app.slice.view.test.R;
+
+/**
+ * Examples of using slice template builders.
+ */
+public class SliceCreator {
+
+    public static final String ACTION_WIFI_CHANGED =
+            "com.example.androidx.slice.action.WIFI_CHANGED";
+    public static final String ACTION_TOAST =
+            "com.example.androidx.slice.action.TOAST";
+    public static final String EXTRA_TOAST_MESSAGE = "com.example.androidx.extra.TOAST_MESSAGE";
+
+    public static final String[] URI_PATHS = {"message", "wifi", "note", "ride", "toggle",
+            "toggle2", "contact", "gallery", "weather"};
+
+    private final Context mContext;
+
+    public SliceCreator(Context context) {
+        mContext = context;
+    }
+
+    private Context getContext() {
+        return mContext;
+    }
+
+    /**
+     * @return Uri with the provided path
+     */
+    public static Uri getUri(String path, Context context) {
+        return new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority("androidx.app.slice.view.test")
+                .appendPath(path)
+                .build();
+    }
+
+    public Slice onBindSlice(Uri sliceUri) {
+        String path = sliceUri.getPath();
+        switch (path) {
+            case "/message":
+                return createMessagingSlice(sliceUri);
+            case "/wifi":
+                return createWifiSlice(sliceUri);
+            case "/note":
+                return createNoteSlice(sliceUri);
+            case "/ride":
+                return createRideSlice(sliceUri);
+            case "/toggle":
+                return createCustomToggleSlice(sliceUri);
+            case "/toggle2":
+                return createTwoCustomToggleSlices(sliceUri);
+            case "/contact":
+                return createContact(sliceUri);
+            case "/gallery":
+                return createGallery(sliceUri);
+            case "/weather":
+                return createWeather(sliceUri);
+        }
+        throw new IllegalArgumentException("Unknown uri " + sliceUri);
+    }
+
+    private Slice createWeather(Uri sliceUri) {
+        GridBuilder b = new GridBuilder(getContext(), sliceUri);
+        return b.addCell(new GridBuilder.CellBuilder(b)
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_1))
+                        .addText("MON")
+                        .addTitleText("69\u00B0"))
+                .addCell(new GridBuilder.CellBuilder(b)
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_2))
+                        .addText("TUE")
+                        .addTitleText("71\u00B0"))
+                .addCell(new GridBuilder.CellBuilder(b)
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_3))
+                        .addText("WED")
+                        .addTitleText("76\u00B0"))
+                .addCell(new GridBuilder.CellBuilder(b)
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_4))
+                        .addText("THU")
+                        .addTitleText("72\u00B0"))
+                .addCell(new GridBuilder.CellBuilder(b)
+                        .addLargeImage(Icon.createWithResource(getContext(), R.drawable.weather_1))
+                        .addText("FRI")
+                        .addTitleText("68\u00B0"))
+                .build();
+    }
+
+    private Slice createGallery(Uri sliceUri) {
+        GridBuilder b = new GridBuilder(getContext(), sliceUri);
+        return b.addCell(new GridBuilder.CellBuilder(b)
+                    .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_1)))
+                .addCell(new GridBuilder.CellBuilder(b)
+                    .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_2)))
+                .addCell(new GridBuilder.CellBuilder(b)
+                    .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_3)))
+                .addCell(new GridBuilder.CellBuilder(b)
+                    .addLargeImage(Icon.createWithResource(getContext(), R.drawable.slices_4)))
+                .build();
+    }
+
+    private Slice createContact(Uri sliceUri) {
+        ListBuilder b = new ListBuilder(getContext(), sliceUri);
+        ListBuilder.RowBuilder rb = new ListBuilder.RowBuilder(b);
+        GridBuilder gb = new GridBuilder(b);
+        return b.setColor(0xff3949ab)
+                .addRow(rb
+                        .setTitle("Mady Pitza")
+                        .setSubtitle("Frequently contacted contact")
+                        .addEndItem(Icon.createWithResource(getContext(), R.drawable.mady)))
+                .addGrid(gb
+                        .addCell(new GridBuilder.CellBuilder(gb)
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_call))
+                            .addText("Call")
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "call")))
+                        .addCell(new GridBuilder.CellBuilder(gb)
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_text))
+                            .addText("Text")
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "text")))
+                        .addCell(new GridBuilder.CellBuilder(gb)
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_video))
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "video"))
+                            .addText("Video"))
+                        .addCell(new GridBuilder.CellBuilder(gb)
+                            .addImage(Icon.createWithResource(getContext(), R.drawable.ic_email))
+                            .addText("Email")
+                            .setContentIntent(getBroadcastIntent(ACTION_TOAST, "email"))))
+                .build();
+    }
+
+    private Slice createMessagingSlice(Uri sliceUri) {
+        // TODO: Remote input.
+        MessagingSliceBuilder mb = new MessagingSliceBuilder(getContext(), sliceUri);
+        return mb
+                .add(new MessagingSliceBuilder.MessageBuilder(mb)
+                        .addText("yo home \uD83C\uDF55, I emailed you the info")
+                        .addTimestamp(System.currentTimeMillis() - 20 * DateUtils.MINUTE_IN_MILLIS)
+                        .addSource(Icon.createWithResource(getContext(), R.drawable.mady)))
+                .add(new MessagingSliceBuilder.MessageBuilder(mb)
+                        .addText("just bought my tickets")
+                        .addTimestamp(System.currentTimeMillis() - 10 * DateUtils.MINUTE_IN_MILLIS))
+                .add(new MessagingSliceBuilder.MessageBuilder(mb)
+                        .addText("yay! can't wait for getContext() weekend!\n"
+                                + "\uD83D\uDE00")
+                        .addTimestamp(System.currentTimeMillis() - 5 * DateUtils.MINUTE_IN_MILLIS)
+                        .addSource(Icon.createWithResource(getContext(), R.drawable.mady)))
+                .build();
+
+    }
+
+    private Slice createNoteSlice(Uri sliceUri) {
+        // TODO: Remote input.
+        ListBuilder lb = new ListBuilder(getContext(), sliceUri);
+        return lb.setColor(0xfff4b400)
+                .addRow(new ListBuilder.RowBuilder(lb)
+                    .setTitle("Create new note")
+                    .setSubtitle("with this note taking app")
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_create),
+                            getBroadcastIntent(ACTION_TOAST, "create note"))
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_voice),
+                            getBroadcastIntent(ACTION_TOAST, "voice note"))
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_camera),
+                            getIntent("android.media.action.IMAGE_CAPTURE")))
+                .build();
+    }
+
+    private Slice createRideSlice(Uri sliceUri) {
+        final ForegroundColorSpan colorSpan = new ForegroundColorSpan(0xff0F9D58);
+        SpannableString headerSubtitle = new SpannableString("Ride in 4 min");
+        headerSubtitle.setSpan(colorSpan, 8, headerSubtitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+        SpannableString homeSubtitle = new SpannableString("12 miles | 12 min | $9.00");
+        homeSubtitle.setSpan(colorSpan, 20, homeSubtitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+        SpannableString workSubtitle = new SpannableString("44 miles | 1 hour 45 min | $31.41");
+        workSubtitle.setSpan(colorSpan, 27, workSubtitle.length(), SPAN_EXCLUSIVE_EXCLUSIVE);
+
+        ListBuilder b = new ListBuilder(getContext(), sliceUri);
+        return b.setColor(0xff0F9D58)
+            .addRow(new ListBuilder.RowBuilder(b)
+                    .setContentIntent(getBroadcastIntent(ACTION_TOAST, "work"))
+                    .setTitle("Work")
+                    .setSubtitle(workSubtitle)
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_work),
+                        getBroadcastIntent(ACTION_TOAST, "work")))
+            .addRow(new ListBuilder.RowBuilder(b)
+                    .setContentIntent(getBroadcastIntent(ACTION_TOAST, "home"))
+                    .setTitle("Home")
+                    .setSubtitle(homeSubtitle)
+                    .addEndItem(Icon.createWithResource(getContext(), R.drawable.ic_home),
+                        getBroadcastIntent(ACTION_TOAST, "home")))
+            .build();
+    }
+
+    private Slice createCustomToggleSlice(Uri sliceUri) {
+        ListBuilder b = new ListBuilder(getContext(), sliceUri);
+        return b.setColor(0xffff4081)
+                .addRow(new ListBuilder.RowBuilder(b)
+                    .setTitle("Custom toggle")
+                    .setSubtitle("It can support two states")
+                    .addToggle(getBroadcastIntent(ACTION_TOAST, "star toggled"),
+                            true /* isChecked */,
+                            Icon.createWithResource(getContext(), R.drawable.toggle_star)))
+                .build();
+    }
+
+    private Slice createTwoCustomToggleSlices(Uri sliceUri) {
+        ListBuilder lb = new ListBuilder(getContext(), sliceUri);
+        return lb.setColor(0xffff4081)
+                .addRow(new ListBuilder.RowBuilder(lb)
+                        .setTitle("2 toggles")
+                        .setSubtitle("each supports two states")
+                        .addToggle(getBroadcastIntent(ACTION_TOAST, "first star toggled"),
+                                true /* isChecked */,
+                                Icon.createWithResource(getContext(), R.drawable.toggle_star))
+                        .addToggle(getBroadcastIntent(ACTION_TOAST, "second star toggled"),
+                                false /* isChecked */,
+                                Icon.createWithResource(getContext(), R.drawable.toggle_star)))
+                .build();
+    }
+
+    private Slice createWifiSlice(Uri sliceUri) {
+        // Get wifi state
+        WifiManager wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
+        int wifiState = wifiManager.getWifiState();
+        boolean wifiEnabled = false;
+        String state;
+        switch (wifiState) {
+            case WifiManager.WIFI_STATE_DISABLED:
+            case WifiManager.WIFI_STATE_DISABLING:
+                state = "disconnected";
+                break;
+            case WifiManager.WIFI_STATE_ENABLED:
+            case WifiManager.WIFI_STATE_ENABLING:
+                state = wifiManager.getConnectionInfo().getSSID();
+                wifiEnabled = true;
+                break;
+            case WifiManager.WIFI_STATE_UNKNOWN:
+            default:
+                state = ""; // just don't show anything?
+                break;
+        }
+        boolean finalWifiEnabled = wifiEnabled;
+        ListBuilder b = new ListBuilder(getContext(), sliceUri);
+        return b.setColor(0xff4285f4)
+                .addRow(new ListBuilder.RowBuilder(b)
+                    .setTitle("Wi-fi")
+                    .setTitleItem(Icon.createWithResource(getContext(), R.drawable.ic_wifi))
+                    .setSubtitle(state)
+                    .addToggle(getBroadcastIntent(ACTION_WIFI_CHANGED, null), finalWifiEnabled)
+                    .setContentIntent(getIntent(Settings.ACTION_WIFI_SETTINGS)))
+            .build();
+    }
+
+    private PendingIntent getIntent(String action) {
+        Intent intent = new Intent(action);
+        intent.setClassName(getContext().getPackageName(), SliceRenderActivity.class.getName());
+        PendingIntent pi = PendingIntent.getActivity(getContext(), 0, intent, 0);
+        return pi;
+    }
+
+    private PendingIntent getBroadcastIntent(String action, String message) {
+        Intent intent = new Intent(action);
+        intent.setClassName(getContext().getPackageName(), SliceRenderActivity.class.getName());
+        // Ensure a new PendingIntent is created for each message.
+        int requestCode = 0;
+        if (message != null) {
+            intent.putExtra(EXTRA_TOAST_MESSAGE, message);
+            requestCode = message.hashCode();
+        }
+        return PendingIntent.getBroadcast(getContext(), requestCode, intent,
+                PendingIntent.FLAG_UPDATE_CURRENT);
+    }
+}
diff --git a/slices/view/src/androidTest/java/androidx/app/slice/render/SliceRenderActivity.java b/slices/view/src/androidTest/java/androidx/app/slice/render/SliceRenderActivity.java
new file mode 100644
index 0000000..debb280
--- /dev/null
+++ b/slices/view/src/androidTest/java/androidx/app/slice/render/SliceRenderActivity.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.render;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+public class SliceRenderActivity extends Activity {
+    public static final String ACTION_RENDER_DONE = "androidx.app.slice.render.RENDER_DONE";
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        new SliceRenderer(this).renderAll(new Runnable() {
+
+            @Override
+            public void run() {
+                sendBroadcast(new Intent(ACTION_RENDER_DONE));
+                finish();
+            }
+        });
+    }
+}
diff --git a/slices/view/src/androidTest/java/androidx/app/slice/render/SliceRenderer.java b/slices/view/src/androidTest/java/androidx/app/slice/render/SliceRenderer.java
new file mode 100644
index 0000000..d2b8619
--- /dev/null
+++ b/slices/view/src/androidTest/java/androidx/app/slice/render/SliceRenderer.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.render;
+
+import static android.view.View.MeasureSpec.makeMeasureSpec;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.os.Handler;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.util.concurrent.CountDownLatch;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceProvider;
+import androidx.app.slice.view.test.R;
+import androidx.app.slice.widget.SliceLiveData;
+import androidx.app.slice.widget.SliceView;
+
+public class SliceRenderer {
+
+    private static final String TAG = "SliceRenderer";
+    private static final String SCREENSHOT_DIR = "slice-screenshots";
+    private static File sScreenshotDirectory;
+
+    private final Activity mContext;
+    private final View mLayout;
+    private final SliceView mSV1;
+    private final SliceView mSV2;
+    private final SliceView mSV3;
+    private final ViewGroup mParent;
+    private final Handler mHandler;
+    private final SliceCreator mSliceCreator;
+    private CountDownLatch mDoneLatch;
+
+    public SliceRenderer(Activity context) {
+        mContext = context;
+        mParent = new ViewGroup(mContext) {
+            @Override
+            protected void onLayout(boolean changed, int l, int t, int r, int b) {
+                int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 900,
+                        mContext.getResources().getDisplayMetrics());
+                int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200,
+                        mContext.getResources().getDisplayMetrics());
+                mLayout.measure(makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
+                        makeMeasureSpec(height, View.MeasureSpec.EXACTLY));
+                mLayout.layout(0, 0, width, height);
+            }
+
+            @Override
+            protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
+                return false;
+            }
+        };
+        mLayout = LayoutInflater.from(context).inflate(R.layout.render_layout, null);
+        mSV1 = mLayout.findViewById(R.id.sv1);
+        mSV1.setMode(SliceView.MODE_SHORTCUT);
+        mSV2 = mLayout.findViewById(R.id.sv2);
+        mSV2.setMode(SliceView.MODE_SMALL);
+        mSV3 = mLayout.findViewById(R.id.sv3);
+        mSV3.setMode(SliceView.MODE_LARGE);
+        disableAnims(mLayout);
+        mHandler = new Handler();
+        ((ViewGroup) mContext.getWindow().getDecorView()).addView(mParent);
+        mParent.addView(mLayout);
+        SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
+        mSliceCreator = new SliceCreator(mContext);
+    }
+
+    private void disableAnims(View view) {
+        if (view instanceof RecyclerView) {
+            ((RecyclerView) view).setItemAnimator(null);
+        }
+        if (view instanceof ViewGroup) {
+            ViewGroup viewGroup = (ViewGroup) view;
+            for (int i = 0; i < viewGroup.getChildCount(); i++) {
+                disableAnims(viewGroup.getChildAt(i));
+            }
+        }
+    }
+
+
+    private static File getScreenshotDirectory() {
+        if (sScreenshotDirectory == null) {
+            File storage = Environment.getExternalStorageDirectory();
+            sScreenshotDirectory = new File(storage, SCREENSHOT_DIR);
+            if (!sScreenshotDirectory.exists()) {
+                if (!sScreenshotDirectory.mkdirs()) {
+                    throw new RuntimeException(
+                            "Failed to create a screenshot directory.");
+                }
+            }
+        }
+        return sScreenshotDirectory;
+    }
+
+
+    private void doRender() {
+        File output = getScreenshotDirectory();
+        if (!output.exists()) {
+            output.mkdir();
+        }
+        mDoneLatch = new CountDownLatch(SliceCreator.URI_PATHS.length);
+        for (String slice : SliceCreator.URI_PATHS) {
+            doRender(slice, new File(output, String.format("%s.png", slice)));
+        }
+        Log.d(TAG, "Wrote render to " + output.getAbsolutePath());
+        mContext.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                ((ViewGroup) mParent.getParent()).removeView(mParent);
+            }
+        });
+        try {
+            mDoneLatch.await();
+        } catch (InterruptedException e) {
+        }
+    }
+
+    private void doRender(final String slice, final File file) {
+        Log.d(TAG, "Rendering " + slice + " to " + file.getAbsolutePath());
+
+        final Slice s = mSliceCreator.onBindSlice(SliceCreator.getUri(slice, mContext));
+
+        final CountDownLatch l = new CountDownLatch(1);
+        mContext.runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                mSV1.setSlice(s);
+                mSV2.setSlice(s);
+                mSV3.setSlice(s);
+                mSV1.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+                    @Override
+                    public void onLayoutChange(View v, int left, int top, int right, int bottom,
+                            int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                        mSV1.removeOnLayoutChangeListener(this);
+                        mSV1.postDelayed(new Runnable() {
+                            @Override
+                            public void run() {
+                                Log.d(TAG, "Drawing " + slice);
+                                Bitmap b = Bitmap.createBitmap(mLayout.getMeasuredWidth(),
+                                        mLayout.getMeasuredHeight(),
+                                        Bitmap.Config.ARGB_8888);
+
+                                mLayout.draw(new Canvas(b));
+                                try {
+                                    doCompress(slice, b, new FileOutputStream(file));
+                                } catch (FileNotFoundException e) {
+                                    throw new RuntimeException(e);
+                                }
+                                l.countDown();
+                            }
+                        }, 10);
+                    }
+                });
+            }
+        });
+        try {
+            l.await();
+        } catch (InterruptedException e) {
+        }
+    }
+
+    private void doCompress(final String slice, final Bitmap b, final FileOutputStream s) {
+        AsyncTask.execute(new Runnable() {
+            @Override
+            public void run() {
+                Log.d(TAG, "Compressing " + slice);
+                if (!b.compress(Bitmap.CompressFormat.PNG, 100, s)) {
+                    throw new RuntimeException("Unable to compress");
+                }
+
+                b.recycle();
+                Log.d(TAG, "Done " + slice);
+                mDoneLatch.countDown();
+            }
+        });
+    }
+
+    public void renderAll(final Runnable runnable) {
+        final ProgressDialog dialog = ProgressDialog.show(mContext, null, "Rendering...");
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                doRender();
+                mContext.runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        dialog.dismiss();
+                        runnable.run();
+                    }
+                });
+            }
+        }).start();
+    }
+}
diff --git a/slices/view/src/androidTest/res/drawable/ic_call.xml b/slices/view/src/androidTest/res/drawable/ic_call.xml
new file mode 100644
index 0000000..ebf9de6
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_call.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z"/>
+</vector>
diff --git a/slices/view/src/androidTest/res/drawable/ic_camera.xml b/slices/view/src/androidTest/res/drawable/ic_camera.xml
new file mode 100644
index 0000000..74b6bf9
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_camera.xml
@@ -0,0 +1,32 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#000000"
+        android:pathData="M 12 8.8 C 13.7673111995 8.8 15.2 10.2326888005 15.2 12 C 15.2 13.7673111995 13.7673111995 15.2 12 15.2 C 10.2326888005 15.2 8.8 13.7673111995 8.8 12 C 8.8 10.2326888005 10.2326888005 8.8 12 8.8 Z" />
+    <path
+        android:fillColor="#000000"
+        android:pathData="M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9
+2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5
+5-2.24 5-5 5z" />
+    <path
+        android:pathData="M0 0h24v24H0z" />
+</vector>
\ No newline at end of file
diff --git a/slices/view/src/androidTest/res/drawable/ic_car.xml b/slices/view/src/androidTest/res/drawable/ic_car.xml
new file mode 100644
index 0000000..6bab660
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_car.xml
@@ -0,0 +1,31 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#000000"
+        android:pathData="M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21 .42 -1.42 1.01L3 12v8c0
+.55 .45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55 .45 1 1 1h1c.55 0 1-.45
+1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5 .67 1.5
+1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5 .67 1.5
+1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z" />
+    <path
+        android:pathData="M0 0h24v24H0z" />
+</vector>
\ No newline at end of file
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/slices/view/src/androidTest/res/drawable/ic_create.xml
similarity index 72%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to slices/view/src/androidTest/res/drawable/ic_create.xml
index 123acd2..d1666a8 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/slices/view/src/androidTest/res/drawable/ic_create.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
+</vector>
diff --git a/slices/view/src/androidTest/res/drawable/ic_email.xml b/slices/view/src/androidTest/res/drawable/ic_email.xml
new file mode 100644
index 0000000..ce97ab8
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_email.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,8l-8,5 -8,-5L4,6l8,5 8,-5v2z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/slices/view/src/androidTest/res/drawable/ic_home.xml
similarity index 65%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to slices/view/src/androidTest/res/drawable/ic_home.xml
index 123acd2..b278230 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/slices/view/src/androidTest/res/drawable/ic_home.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,16 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
 
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
+        android:fillColor="#000000"
+        android:pathData="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" />
+    <path
+        android:pathData="M0 0h24v24H0z" />
 </vector>
\ No newline at end of file
diff --git a/slices/view/src/androidTest/res/drawable/ic_large.xml b/slices/view/src/androidTest/res/drawable/ic_large.xml
new file mode 100644
index 0000000..79ac590
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_large.xml
@@ -0,0 +1,28 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48.0dp"
+        android:height="48.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M34.0,2.02L14.0,2.0c-2.21,0.0 -4.0,1.79 -4.0,4.0l0.0,36.0c0.0,2.21 1.79,4.0 4.0,4.0l20.0,0.0c2.21,0.0 4.0,-1.79 4.0,-4.0L38.0,6.0c0.0,-2.21 -1.79,-3.98 -4.0,-3.98zM34.0,38.0L14.0,38.0L14.0,10.0l20.0,0.0l0.0,28.0z"/>
+    <path
+        android:strokeColor="#FF000000"
+        android:strokeWidth="2"
+        android:pathData="M16,18 l16,0 l0,10 l-16,0z"/>
+</vector>
diff --git a/slices/view/src/androidTest/res/drawable/ic_shortcut.xml b/slices/view/src/androidTest/res/drawable/ic_shortcut.xml
new file mode 100644
index 0000000..bf9572a
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_shortcut.xml
@@ -0,0 +1,34 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="48.0dp"
+    android:viewportHeight="48.0"
+    android:viewportWidth="48.0"
+    android:width="48.0dp">
+    <path
+        android:fillColor="#e2e2e2"
+        android:pathData="M24.0,24.0m-19.0,0.0a19.0,19.0 0.0,1.0 1.0,38.0 0.0a19.0,19.0 0.0,1.0 1.0,-38.0 0.0"/>
+    <group
+        android:scaleX=".7"
+        android:scaleY=".7"
+        android:translateX="7.2"
+        android:translateY="7.2">
+
+        <path
+            android:fillColor="#ff000000"
+            android:pathData="M12.0,36.0c0.0,1.0 0.9,2.0 2.0,2.0l2.0,0.0l0.0,7.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0l0.0,-7.0l4.0,0.0l0.0,7.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0l0.0,-7.0l2.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L36.0,16.0L12.0,16.0l0.0,20.0zM7.0,16.0c-1.66,0.0 -3.0,1.34 -3.0,3.0l0.0,14.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0L10.0,19.0c0.0,-1.66 -1.34,-3.0 -3.0,-3.0zm34.0,0.0c-1.66,0.0 -3.0,1.34 -3.0,3.0l0.0,14.0c0.0,1.66 1.34,3.0 3.0,3.0s3.0,-1.34 3.0,-3.0L44.0,19.0c0.0,-1.66 -1.34,-3.0 -3.0,-3.0zM31.06,4.32l2.61,-2.61c0.39,-0.3 0.39,-1.02 0.0,-1.41 -0.39,-0.39 -1.02,-0.39 -1.41,0.0L29.3,3.25C27.7,2.46 25.91,2.0 24.0,2.0c-1.92,0.0 -3.7,0.46 -5.33,1.26L15.0,0.29c-0.39,-0.39 -1.02,-0.39 -1.41,0.0 -0.3,0.39 -0.39,1.02 0.0,1.41l2.62,2.62C13.94,6.51 12.0,10.03 12.0,14.0l24.0,0.0c0.0,-3.98 -1.95,-7.5 -4.94,-9.68zM20.0,10.0l-2.0,0.0L18.0,8.0l2.0,0.0l0.0,2.0zm10.0,0.0l-2.0,0.0L28.0,8.0l2.0,0.0l0.0,2.0z"/>
+    </group>
+</vector>
diff --git a/slices/view/src/androidTest/res/drawable/ic_small.xml b/slices/view/src/androidTest/res/drawable/ic_small.xml
new file mode 100644
index 0000000..8fd43df
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_small.xml
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48.0dp"
+        android:height="48.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M34.0,2.02L14.0,2.0c-2.21,0.0 -4.0,1.79 -4.0,4.0l0.0,36.0c0.0,2.21 1.79,4.0 4.0,4.0l20.0,0.0c2.21,0.0 4.0,-1.79 4.0,-4.0L38.0,6.0c0.0,-2.21 -1.79,-3.98 -4.0,-3.98zM34.0,38.0L14.0,38.0L14.0,10.0l20.0,0.0l0.0,28.0z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M16,18 l16,0 l0,4 l-16,0z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/slices/view/src/androidTest/res/drawable/ic_star_off.xml
similarity index 70%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to slices/view/src/androidTest/res/drawable/ic_star_off.xml
index 123acd2..7f023b3 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/slices/view/src/androidTest/res/drawable/ic_star_off.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/slices/view/src/androidTest/res/drawable/ic_star_on.xml
similarity index 77%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to slices/view/src/androidTest/res/drawable/ic_star_on.xml
index 123acd2..f3ca086 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/slices/view/src/androidTest/res/drawable/ic_star_on.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
+</vector>
diff --git a/slices/view/src/androidTest/res/drawable/ic_text.xml b/slices/view/src/androidTest/res/drawable/ic_text.xml
new file mode 100644
index 0000000..d2876bf
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_text.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
+</vector>
diff --git a/slices/view/src/androidTest/res/drawable/ic_video.xml b/slices/view/src/androidTest/res/drawable/ic_video.xml
new file mode 100644
index 0000000..e23eac8
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_video.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/slices/view/src/androidTest/res/drawable/ic_voice.xml
similarity index 69%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to slices/view/src/androidTest/res/drawable/ic_voice.xml
index 123acd2..8f465bb 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/slices/view/src/androidTest/res/drawable/ic_voice.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,13 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M12,15c1.66,0 2.99,-1.34 2.99,-3L15,6c0,-1.66 -1.34,-3 -3,-3S9,4.34 9,6v6c0,1.66 1.34,3 3,3zM17.3,12c0,3 -2.54,5.1 -5.3,5.1S6.7,15 6.7,12L5,12c0,3.42 2.72,6.23 6,6.72L11,22h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
+</vector>
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/slices/view/src/androidTest/res/drawable/ic_wifi.xml
similarity index 63%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to slices/view/src/androidTest/res/drawable/ic_wifi.xml
index 123acd2..4fbfd60 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/slices/view/src/androidTest/res/drawable/ic_wifi.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,17 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
-
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
-</vector>
\ No newline at end of file
+        android:fillColor="#FF000000"
+        android:pathData="M12.01,21.49L23.64,7c-0.45,-0.34 -4.93,-4 -11.64,-4C5.28,3 0.81,6.66 0.36,7l11.63,14.49 0.01,0.01 0.01,-0.01z"
+        android:fillAlpha=".3"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M3.53,10.95l8.46,10.54 0.01,0.01 0.01,-0.01 8.46,-10.54C20.04,10.62 16.81,8 12,8c-4.81,0 -8.04,2.62 -8.47,2.95z"/>
+</vector>
diff --git a/slices/view/src/androidTest/res/drawable/ic_work.xml b/slices/view/src/androidTest/res/drawable/ic_work.xml
new file mode 100644
index 0000000..6806402
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/ic_work.xml
@@ -0,0 +1,28 @@
+<!--
+  ~ Copyright 2017 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:pathData="M0 0h24v24H0z" />
+    <path
+        android:fillColor="#000000"
+        android:pathData="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99 .89 -1.99 2L2
+19c0 1.11 .89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z" />
+</vector>
\ No newline at end of file
diff --git a/slices/view/src/androidTest/res/drawable/mady.jpg b/slices/view/src/androidTest/res/drawable/mady.jpg
new file mode 100644
index 0000000..8b61f1b
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/mady.jpg
Binary files differ
diff --git a/slices/view/src/androidTest/res/drawable/slices_1.jpg b/slices/view/src/androidTest/res/drawable/slices_1.jpg
new file mode 100644
index 0000000..31cc065
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/slices_1.jpg
Binary files differ
diff --git a/slices/view/src/androidTest/res/drawable/slices_2.jpg b/slices/view/src/androidTest/res/drawable/slices_2.jpg
new file mode 100644
index 0000000..adbe1d3
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/slices_2.jpg
Binary files differ
diff --git a/slices/view/src/androidTest/res/drawable/slices_3.jpg b/slices/view/src/androidTest/res/drawable/slices_3.jpg
new file mode 100644
index 0000000..6617019
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/slices_3.jpg
Binary files differ
diff --git a/slices/view/src/androidTest/res/drawable/slices_4.jpg b/slices/view/src/androidTest/res/drawable/slices_4.jpg
new file mode 100644
index 0000000..d00a8b3
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/slices_4.jpg
Binary files differ
diff --git a/design/tests/res/drawable/test_drawable_state_list.xml b/slices/view/src/androidTest/res/drawable/toggle_star.xml
similarity index 71%
copy from design/tests/res/drawable/test_drawable_state_list.xml
copy to slices/view/src/androidTest/res/drawable/toggle_star.xml
index f125913..e964925 100644
--- a/design/tests/res/drawable/test_drawable_state_list.xml
+++ b/slices/view/src/androidTest/res/drawable/toggle_star.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!-- 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.
@@ -13,9 +13,12 @@
      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_checked="true" android:drawable="@drawable/test_background_blue" />
-    <item android:drawable="@drawable/test_background_green" />
-</selector>
-
+    <item
+        android:id="@+id/on"
+        android:state_checked="true"
+        android:drawable="@drawable/ic_star_on" />
+    <item
+        android:id="@+id/off"
+        android:drawable="@drawable/ic_star_off" />
+</selector>
\ No newline at end of file
diff --git a/slices/view/src/androidTest/res/drawable/weather_1.png b/slices/view/src/androidTest/res/drawable/weather_1.png
new file mode 100644
index 0000000..7c4034e
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/weather_1.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/drawable/weather_2.png b/slices/view/src/androidTest/res/drawable/weather_2.png
new file mode 100644
index 0000000..f1b6672
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/weather_2.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/drawable/weather_3.png b/slices/view/src/androidTest/res/drawable/weather_3.png
new file mode 100644
index 0000000..a5db683
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/weather_3.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/drawable/weather_4.png b/slices/view/src/androidTest/res/drawable/weather_4.png
new file mode 100644
index 0000000..0b7f3b0
--- /dev/null
+++ b/slices/view/src/androidTest/res/drawable/weather_4.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/layout/activity_demo.xml b/slices/view/src/androidTest/res/layout/activity_demo.xml
new file mode 100644
index 0000000..f557f40
--- /dev/null
+++ b/slices/view/src/androidTest/res/layout/activity_demo.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.example.android.support.content.demos.ContentPagerDemoActivity">
+
+    <android.support.v7.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="?attr/actionBarSize"
+        android:background="?attr/colorPrimary"
+        android:theme="@style/AppTheme.AppBarOverlay"
+        app:popupTheme="@style/AppTheme.PopupOverlay"/>
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+</LinearLayout>
diff --git a/slices/view/src/androidTest/res/layout/render_layout.xml b/slices/view/src/androidTest/res/layout/render_layout.xml
new file mode 100644
index 0000000..a8ed779
--- /dev/null
+++ b/slices/view/src/androidTest/res/layout/render_layout.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2018 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="1200dp"
+              android:layout_height="400dp"
+              android:background="@android:color/black"
+              android:orientation="horizontal"
+              android:padding="20dp">
+
+
+    <FrameLayout android:layout_width="wrap_content"
+                 android:layout_height="wrap_content">
+        <androidx.app.slice.widget.SliceView
+            android:id="@+id/sv1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+    </FrameLayout>
+
+    <FrameLayout android:layout_width="400dp"
+                 android:layout_height="wrap_content"
+                 android:layout_marginStart="20dp">
+        <androidx.app.slice.widget.SliceView
+            android:id="@+id/sv2"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@android:color/white"
+            android:paddingEnd="16dp"
+            android:paddingStart="16dp"/>
+    </FrameLayout>
+
+    <FrameLayout android:layout_width="400dp"
+                 android:layout_height="wrap_content"
+                 android:layout_marginStart="20dp">
+        <androidx.app.slice.widget.SliceView
+            android:id="@+id/sv3"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@android:color/white"
+            android:paddingEnd="16dp"
+            android:paddingStart="16dp"/>
+    </FrameLayout>
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/slices/view/src/androidTest/res/mipmap-hdpi/ic_launcher.png b/slices/view/src/androidTest/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-hdpi/ic_launcher_round.png b/slices/view/src/androidTest/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9a078e3
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-mdpi/ic_launcher.png b/slices/view/src/androidTest/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-mdpi/ic_launcher_round.png b/slices/view/src/androidTest/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..efc028a
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-xhdpi/ic_launcher.png b/slices/view/src/androidTest/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-xhdpi/ic_launcher_round.png b/slices/view/src/androidTest/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..3af2608
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-xxhdpi/ic_launcher.png b/slices/view/src/androidTest/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-xxhdpi/ic_launcher_round.png b/slices/view/src/androidTest/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..9bec2e6
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-xxxhdpi/ic_launcher.png b/slices/view/src/androidTest/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..aee44e1
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/slices/view/src/androidTest/res/mipmap-xxxhdpi/ic_launcher_round.png b/slices/view/src/androidTest/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..34947cd
--- /dev/null
+++ b/slices/view/src/androidTest/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/design/res/values/integers.xml b/slices/view/src/androidTest/res/values/colors.xml
similarity index 75%
copy from design/res/values/integers.xml
copy to slices/view/src/androidTest/res/values/colors.xml
index a0d6fc7..86b4304 100644
--- a/design/res/values/integers.xml
+++ b/slices/view/src/androidTest/res/values/colors.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright (C) 2017 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.
@@ -13,8 +13,10 @@
   ~ 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>
-    <integer name="bottom_sheet_slide_duration">150</integer>
-    <integer name="app_bar_elevation_anim_duration">150</integer>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
 </resources>
diff --git a/design/tests/res/values-sw600dp/dimens.xml b/slices/view/src/androidTest/res/values/strings.xml
similarity index 77%
copy from design/tests/res/values-sw600dp/dimens.xml
copy to slices/view/src/androidTest/res/values/strings.xml
index 67765c5..89583bd 100644
--- a/design/tests/res/values-sw600dp/dimens.xml
+++ b/slices/view/src/androidTest/res/values/strings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!-- Copyright (C) 2017 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.
@@ -13,6 +13,6 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<resources>
-    <dimen name="custom_snackbar_max_width">540dp</dimen>
-</resources>
\ No newline at end of file
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name">Slice Browser</string>
+</resources>
diff --git a/slices/view/src/androidTest/res/values/styles.xml b/slices/view/src/androidTest/res/values/styles.xml
new file mode 100644
index 0000000..afb6bad
--- /dev/null
+++ b/slices/view/src/androidTest/res/values/styles.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+    </style>
+    <style name="AppTheme.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
+    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
+
+</resources>
diff --git a/design/AndroidManifest.xml b/slices/view/src/main/AndroidManifest.xml
similarity index 82%
copy from design/AndroidManifest.xml
copy to slices/view/src/main/AndroidManifest.xml
index 0eb8b85..5e9dd17 100644
--- a/design/AndroidManifest.xml
+++ b/slices/view/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -14,6 +14,6 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.support.design">
-    <uses-sdk android:minSdkVersion="14" />
+          package="androidx.app.slice.view">
+    <uses-sdk android:minSdkVersion="28"/>
 </manifest>
diff --git a/slices/view/src/main/java/androidx/app/slice/SliceManager.java b/slices/view/src/main/java/androidx/app/slice/SliceManager.java
new file mode 100644
index 0000000..ba8c376
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/SliceManager.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2018 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 androidx.app.slice;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.support.v4.os.BuildCompat;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+
+/**
+ * Class to handle interactions with {@link Slice}s.
+ * <p>
+ * The SliceManager manages permissions and pinned state for slices.
+ */
+public abstract class SliceManager {
+
+    /**
+     * Get a {@link SliceManager}.
+     */
+    @SuppressWarnings("NewApi")
+    public static @NonNull SliceManager getInstance(@NonNull Context context) {
+        if (BuildCompat.isAtLeastP()) {
+            return new SliceManagerWrapper(context);
+        } else {
+            return new SliceManagerCompat(context);
+        }
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    SliceManager() {
+    }
+
+    /**
+     * Adds a callback to a specific slice uri.
+     * <p>
+     * This is a convenience that performs a few slice actions at once. It will put
+     * the slice in a pinned state since there is a callback attached. It will also
+     * listen for content changes, when a content change observes, the android system
+     * will bind the new slice and provide it to all registered {@link SliceCallback}s.
+     *
+     * @param uri The uri of the slice being listened to.
+     * @param callback The listener that should receive the callbacks.
+     * @see SliceProvider#onSlicePinned(Uri)
+     */
+    public abstract void registerSliceCallback(@NonNull Uri uri, @NonNull SliceCallback callback);
+
+    /**
+     * Adds a callback to a specific slice uri.
+     * <p>
+     * This is a convenience that performs a few slice actions at once. It will put
+     * the slice in a pinned state since there is a callback attached. It will also
+     * listen for content changes, when a content change observes, the android system
+     * will bind the new slice and provide it to all registered {@link SliceCallback}s.
+     *
+     * @param uri The uri of the slice being listened to.
+     * @param callback The listener that should receive the callbacks.
+     * @see SliceProvider#onSlicePinned(Uri)
+     */
+    public abstract void registerSliceCallback(@NonNull Uri uri, @NonNull Executor executor,
+            @NonNull SliceCallback callback);
+
+    /**
+     * Removes a callback for a specific slice uri.
+     * <p>
+     * Removes the app from the pinned state (if there are no other apps/callbacks pinning it)
+     * in addition to removing the callback.
+     *
+     * @param uri The uri of the slice being listened to
+     * @param callback The listener that should no longer receive callbacks.
+     * @see #registerSliceCallback
+     */
+    public abstract void unregisterSliceCallback(@NonNull Uri uri, @NonNull SliceCallback callback);
+
+    /**
+     * Ensures that a slice is in a pinned state.
+     * <p>
+     * Pinned state is not persisted across reboots, so apps are expected to re-pin any slices
+     * they still care about after a reboot.
+     *
+     * @param uri The uri of the slice being pinned.
+     * @see SliceProvider#onSlicePinned(Uri)
+     */
+    public abstract void pinSlice(@NonNull Uri uri);
+
+    /**
+     * Remove a pin for a slice.
+     * <p>
+     * If the slice has no other pins/callbacks then the slice will be unpinned.
+     *
+     * @param uri The uri of the slice being unpinned.
+     * @see #pinSlice
+     * @see SliceProvider#onSliceUnpinned(Uri)
+     */
+    public abstract void unpinSlice(@NonNull Uri uri);
+
+    /**
+     * Get the current set of specs for a pinned slice.
+     * <p>
+     * This is the set of specs supported for a specific pinned slice. It will take
+     * into account all clients and returns only specs supported by all.
+     * @hide
+     * @see SliceSpec
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public abstract @NonNull List<SliceSpec> getPinnedSpecs(@NonNull Uri uri);
+
+    /**
+     * Turns a slice Uri into slice content.
+     *
+     * @param uri The URI to a slice provider
+     * @return The Slice provided by the app or null if none is given.
+     * @see Slice
+     */
+    public abstract @Nullable Slice bindSlice(@NonNull Uri uri);
+
+    /**
+     * Turns a slice intent into slice content. Expects an explicit intent. If there is no
+     * {@link android.content.ContentProvider} associated with the given intent this will throw
+     * {@link IllegalArgumentException}.
+     *
+     * @param intent The intent associated with a slice.
+     * @return The Slice provided by the app or null if none is given.
+     * @see Slice
+     * @see androidx.app.slice.SliceProvider#onMapIntentToUri(Intent)
+     * @see Intent
+     */
+    public abstract @Nullable Slice bindSlice(@NonNull Intent intent);
+
+    /**
+     * Class that listens to changes in {@link Slice}s.
+     */
+    public interface SliceCallback {
+
+        /**
+         * Called when slice is updated.
+         *
+         * @param s The updated slice.
+         * @see #registerSliceCallback
+         */
+        void onSliceUpdated(@NonNull Slice s);
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/SliceManagerCompat.java b/slices/view/src/main/java/androidx/app/slice/SliceManagerCompat.java
new file mode 100644
index 0000000..67613a5
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/SliceManagerCompat.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2018 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 androidx.app.slice;
+
+import static androidx.app.slice.widget.SliceLiveData.SUPPORTED_SPECS;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.util.ArrayMap;
+import android.util.Pair;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+
+import androidx.app.slice.compat.SliceProviderCompat;
+import androidx.app.slice.widget.SliceLiveData;
+
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+class SliceManagerCompat extends SliceManager {
+    private final ArrayMap<Pair<Uri, SliceCallback>, SliceListenerImpl> mListenerLookup =
+            new ArrayMap<>();
+    private final Context mContext;
+
+    SliceManagerCompat(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public void registerSliceCallback(@NonNull Uri uri, @NonNull SliceCallback callback) {
+        final Handler h = new Handler(Looper.getMainLooper());
+        registerSliceCallback(uri, new Executor() {
+            @Override
+            public void execute(@NonNull Runnable command) {
+                h.post(command);
+            }
+        }, callback);
+    }
+
+    @Override
+    public void registerSliceCallback(@NonNull Uri uri, @NonNull Executor executor,
+            @NonNull SliceCallback callback) {
+        pinSlice(uri);
+        getListener(uri, callback, new SliceListenerImpl(uri, executor, callback)).startListening();
+    }
+
+    @Override
+    public void unregisterSliceCallback(@NonNull Uri uri, @NonNull SliceCallback callback) {
+        unpinSlice(uri);
+        SliceListenerImpl impl = mListenerLookup.remove(new Pair<>(uri, callback));
+        if (impl != null) impl.stopListening();
+    }
+
+    @Override
+    public void pinSlice(@NonNull Uri uri) {
+        SliceProviderCompat.pinSlice(mContext, uri, SliceLiveData.SUPPORTED_SPECS);
+    }
+
+    @Override
+    public void unpinSlice(@NonNull Uri uri) {
+        SliceProviderCompat.unpinSlice(mContext, uri, SliceLiveData.SUPPORTED_SPECS);
+    }
+
+    @Override
+    public @NonNull List<SliceSpec> getPinnedSpecs(@NonNull Uri uri) {
+        return SliceProviderCompat.getPinnedSpecs(mContext, uri);
+    }
+
+    @Nullable
+    @Override
+    public Slice bindSlice(@NonNull Uri uri) {
+        return SliceProviderCompat.bindSlice(mContext, uri, SUPPORTED_SPECS);
+    }
+
+    @Nullable
+    @Override
+    public Slice bindSlice(@NonNull Intent intent) {
+        return SliceProviderCompat.bindSlice(mContext, intent, SUPPORTED_SPECS);
+    }
+
+    private SliceListenerImpl getListener(Uri uri, SliceCallback callback,
+            SliceListenerImpl listener) {
+        Pair<Uri, SliceCallback> key = new Pair<>(uri, callback);
+        if (mListenerLookup.containsKey(key)) {
+            mListenerLookup.get(key).stopListening();
+        }
+        mListenerLookup.put(key, listener);
+        return listener;
+    }
+
+    private class SliceListenerImpl {
+
+        private Uri mUri;
+        private final Executor mExecutor;
+        private final SliceCallback mCallback;
+
+        SliceListenerImpl(Uri uri, Executor executor, SliceCallback callback) {
+            mUri = uri;
+            mExecutor = executor;
+            mCallback = callback;
+        }
+
+        void startListening() {
+            mContext.getContentResolver().registerContentObserver(mUri, true, mObserver);
+        }
+
+        void stopListening() {
+            mContext.getContentResolver().unregisterContentObserver(mObserver);
+        }
+
+        private final Runnable mUpdateSlice = new Runnable() {
+            @Override
+            public void run() {
+                final Slice s = Slice.bindSlice(mContext, mUri, SUPPORTED_SPECS);
+                mExecutor.execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        mCallback.onSliceUpdated(s);
+                    }
+                });
+            }
+        };
+
+        private final ContentObserver mObserver = new ContentObserver(
+                new Handler(Looper.getMainLooper())) {
+            @Override
+            public void onChange(boolean selfChange) {
+                AsyncTask.execute(mUpdateSlice);
+            }
+        };
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/SliceManagerWrapper.java b/slices/view/src/main/java/androidx/app/slice/SliceManagerWrapper.java
new file mode 100644
index 0000000..8b2265c
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/SliceManagerWrapper.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2018 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 androidx.app.slice;
+
+import static androidx.app.slice.SliceConvert.unwrap;
+import static androidx.app.slice.widget.SliceLiveData.SUPPORTED_SPECS;
+
+import android.app.slice.Slice;
+import android.app.slice.SliceSpec;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RequiresApi;
+import android.support.annotation.RestrictTo;
+
+import java.util.List;
+import java.util.WeakHashMap;
+import java.util.concurrent.Executor;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@RequiresApi(api = 28)
+class SliceManagerWrapper extends SliceManager {
+    private final android.app.slice.SliceManager mManager;
+    private final WeakHashMap<SliceCallback, android.app.slice.SliceManager.SliceCallback>
+            mCallbacks = new WeakHashMap<>();
+    private final List<SliceSpec> mSpecs;
+    private final Context mContext;
+
+    SliceManagerWrapper(Context context) {
+        this(context, context.getSystemService(android.app.slice.SliceManager.class));
+    }
+
+    SliceManagerWrapper(Context context, android.app.slice.SliceManager manager) {
+        mContext = context;
+        mManager = manager;
+        mSpecs = unwrap(SUPPORTED_SPECS);
+    }
+
+    @Override
+    public void registerSliceCallback(@NonNull Uri uri,
+            @NonNull SliceCallback callback) {
+        mManager.registerSliceCallback(uri, addCallback(callback), mSpecs);
+    }
+
+    @Override
+    public void registerSliceCallback(@NonNull Uri uri, @NonNull Executor executor,
+            @NonNull SliceCallback callback) {
+        mManager.registerSliceCallback(uri, addCallback(callback), mSpecs, executor);
+    }
+
+    @Override
+    public void unregisterSliceCallback(@NonNull Uri uri,
+            @NonNull SliceCallback callback) {
+        mManager.unregisterSliceCallback(uri, mCallbacks.get(callback));
+    }
+
+    @Override
+    public void pinSlice(@NonNull Uri uri) {
+        mManager.pinSlice(uri, mSpecs);
+    }
+
+    @Override
+    public void unpinSlice(@NonNull Uri uri) {
+        mManager.unpinSlice(uri);
+    }
+
+    @Override
+    public @NonNull List<androidx.app.slice.SliceSpec> getPinnedSpecs(@NonNull Uri uri) {
+        return SliceConvert.wrap(mManager.getPinnedSpecs(uri));
+    }
+
+    @Nullable
+    @Override
+    public androidx.app.slice.Slice bindSlice(@NonNull Uri uri) {
+        return SliceConvert.wrap(android.app.slice.Slice.bindSlice(
+                mContext.getContentResolver(), uri, unwrap(SUPPORTED_SPECS)));
+    }
+
+    @Nullable
+    @Override
+    public androidx.app.slice.Slice bindSlice(@NonNull Intent intent) {
+        return SliceConvert.wrap(android.app.slice.Slice.bindSlice(
+                mContext, intent, unwrap(SUPPORTED_SPECS)));
+    }
+
+    private android.app.slice.SliceManager.SliceCallback addCallback(final SliceCallback callback) {
+        android.app.slice.SliceManager.SliceCallback ret = mCallbacks.get(callback);
+        if (ret == null) {
+            ret = new android.app.slice.SliceManager.SliceCallback() {
+                @Override
+                public void onSliceUpdated(Slice s) {
+                    callback.onSliceUpdated(SliceConvert.wrap(s));
+                }
+            };
+            mCallbacks.put(callback, ret);
+        }
+        return ret;
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/SliceUtils.java b/slices/view/src/main/java/androidx/app/slice/SliceUtils.java
new file mode 100644
index 0000000..6a6ab14
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/SliceUtils.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright 2017 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 androidx.app.slice;
+
+import static android.app.slice.Slice.HINT_PARTIAL;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_REMOTE_INPUT;
+
+import android.content.Context;
+import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import androidx.app.slice.core.SliceQuery;
+
+/**
+ * Utilities for dealing with slices.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SliceUtils {
+
+    private SliceUtils() {
+    }
+
+    /**
+     * Serialize a slice to an OutputStream.
+     * <p>
+     * The slice can later be read into slice form again with {@link #parseSlice}.
+     * Some slice types cannot be serialized, their handling is controlled by
+     * {@link SerializeOptions}.
+     *
+     * @param s The slice to serialize.
+     * @param context Context used to load any resources in the slice.
+     * @param output The output of the serialization.
+     * @param encoding The encoding to use for serialization.
+     * @param options Options defining how to handle non-serializable items.
+     */
+    public static void serializeSlice(@NonNull Slice s, @NonNull Context context,
+            @NonNull OutputStream output, @NonNull String encoding,
+            @NonNull SerializeOptions options) throws IOException {
+        SliceXml.serializeSlice(s, context, output, encoding, options);
+    }
+
+    /**
+     * Parse a slice that has been previously serialized.
+     * <p>
+     * Parses a slice that was serialized with {@link #serializeSlice}.
+     *
+     * @param input The input stream to read from.
+     * @param encoding The encoding to read as.
+     */
+    public static @NonNull Slice parseSlice(@NonNull InputStream input, @NonNull String encoding)
+            throws IOException {
+        return SliceXml.parseSlice(input, encoding);
+    }
+
+    /**
+     * Holds options for how to handle SliceItems that cannot be serialized.
+     */
+    public static class SerializeOptions {
+        /**
+         * Constant indicating that the an {@link IllegalArgumentException} should be thrown
+         * when this format is encountered.
+         */
+        public static final int MODE_THROW = 0;
+        /**
+         * Constant indicating that the SliceItem should be removed when this format is encountered.
+         */
+        public static final int MODE_REMOVE = 1;
+        /**
+         * Constant indicating that the SliceItem should be serialized as much as possible.
+         * <p>
+         * For images this means it will be replaced with an empty image. For actions, the
+         * action will be removed but the content of the action will be serialized.
+         */
+        public static final int MODE_DISABLE = 2;
+
+        @IntDef({MODE_THROW, MODE_REMOVE, MODE_DISABLE})
+        @interface FormatMode {
+        }
+
+        private int mActionMode = MODE_THROW;
+        private int mImageMode = MODE_THROW;
+
+        /**
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        public void checkThrow(String format) {
+            switch (format) {
+                case FORMAT_ACTION:
+                case FORMAT_REMOTE_INPUT:
+                    if (mActionMode != MODE_THROW) return;
+                    break;
+                case FORMAT_IMAGE:
+                    if (mImageMode != MODE_THROW) return;
+                    break;
+                default:
+                    return;
+            }
+            throw new IllegalArgumentException(format + " cannot be serialized");
+        }
+
+        /**
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        public @FormatMode int getActionMode() {
+            return mActionMode;
+        }
+
+        /**
+         * @hide
+         */
+        @RestrictTo(RestrictTo.Scope.LIBRARY)
+        public @FormatMode int getImageMode() {
+            return mImageMode;
+        }
+
+        /**
+         * Sets how {@link android.app.slice.SliceItem#FORMAT_ACTION} items should be handled.
+         *
+         * The default mode is {@link #MODE_THROW}.
+         * @param mode The desired mode.
+         */
+        public SerializeOptions setActionMode(@FormatMode int mode) {
+            mActionMode = mode;
+            return this;
+        }
+
+        /**
+         * Sets how {@link android.app.slice.SliceItem#FORMAT_IMAGE} items should be handled.
+         *
+         * The default mode is {@link #MODE_THROW}.
+         * @param mode The desired mode.
+         */
+        public SerializeOptions setImageMode(@FormatMode int mode) {
+            mImageMode = mode;
+            return this;
+        }
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @IntDef({
+            LOADING_ALL, LOADING_PARTIAL, LOADING_COMPLETE
+    })
+    public @interface SliceLoadingState{}
+
+    /**
+     * Indicates this slice is empty and waiting for content to be loaded.
+     */
+    public static final int LOADING_ALL = 0;
+    /**
+     * Indicates this slice has some content but is waiting for other content to be loaded.
+     */
+    public static final int LOADING_PARTIAL = 1;
+    /**
+     * Indicates this slice has fully loaded and is not waiting for other content.
+     */
+    public static final int LOADING_COMPLETE = 2;
+
+    /**
+     * @return the current loading state of the provided {@link Slice}.
+     *
+     * @see #LOADING_ALL
+     * @see #LOADING_PARTIAL
+     * @see #LOADING_COMPLETE
+     */
+    public static int getLoadingState(Slice slice) {
+        // Check loading state
+        boolean hasHintPartial =
+                SliceQuery.find(slice, null, HINT_PARTIAL, null) != null;
+        if (hasHintPartial && slice.getItems().size() == 0) {
+            // Empty slice
+            return LOADING_ALL;
+        } else if (hasHintPartial) {
+            // Slice with specific content to load
+            return LOADING_PARTIAL;
+        } else {
+            // Full slice
+            return LOADING_COMPLETE;
+        }
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/SliceXml.java b/slices/view/src/main/java/androidx/app/slice/SliceXml.java
new file mode 100644
index 0000000..2500ef6
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/SliceXml.java
@@ -0,0 +1,244 @@
+/*
+ * Copyright 2017 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 androidx.app.slice;
+
+import static org.xmlpull.v1.XmlPullParser.START_TAG;
+import static org.xmlpull.v1.XmlPullParser.TEXT;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.support.annotation.RestrictTo;
+import android.text.Html;
+import android.text.Spanned;
+import android.text.TextUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+class SliceXml {
+
+    private static final String NAMESPACE = null;
+
+    private static final String TAG_SLICE = "slice";
+    private static final String TAG_ITEM = "item";
+
+    private static final String ATTR_URI = "uri";
+    private static final String ATTR_FORMAT = "format";
+    private static final String ATTR_SUBTYPE = "subtype";
+    private static final String ATTR_HINTS = "hints";
+
+    public static Slice parseSlice(InputStream input, String encoding) throws IOException {
+        try {
+            XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
+            parser.setInput(input, encoding);
+
+            int outerDepth = parser.getDepth();
+            int type;
+            Slice s = null;
+            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                    && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+                if (type != START_TAG) {
+                    continue;
+                }
+                s = parseSlice(parser);
+            }
+            return s;
+        } catch (XmlPullParserException e) {
+            throw new IOException("Unable to init XML Serialization", e);
+        }
+    }
+
+    @SuppressLint("WrongConstant")
+    private static Slice parseSlice(XmlPullParser parser)
+            throws IOException, XmlPullParserException {
+        if (!TAG_SLICE.equals(parser.getName())) {
+            throw new IOException("Unexpected tag " + parser.getName());
+        }
+        int outerDepth = parser.getDepth();
+        int type;
+        String uri = parser.getAttributeValue(NAMESPACE, ATTR_URI);
+        Slice.Builder b = new Slice.Builder(Uri.parse(uri));
+        String[] hints = hints(parser.getAttributeValue(NAMESPACE, ATTR_HINTS));
+        b.addHints(hints);
+
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == START_TAG && TAG_ITEM.equals(parser.getName())) {
+                parseItem(b, parser);
+            }
+        }
+        return b.build();
+    }
+
+    @SuppressLint("WrongConstant")
+    private static void parseItem(Slice.Builder b, XmlPullParser parser)
+            throws IOException, XmlPullParserException {
+        int type;
+        int outerDepth = parser.getDepth();
+        String format = parser.getAttributeValue(NAMESPACE, ATTR_FORMAT);
+        String subtype = parser.getAttributeValue(NAMESPACE, ATTR_SUBTYPE);
+        String hintStr = parser.getAttributeValue(NAMESPACE, ATTR_HINTS);
+        String[] hints = hints(hintStr);
+        String v;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == TEXT) {
+                switch (format) {
+                    case android.app.slice.SliceItem.FORMAT_REMOTE_INPUT:
+                        // Nothing for now.
+                        break;
+                    case android.app.slice.SliceItem.FORMAT_IMAGE:
+                        v = parser.getText();
+                        if (!TextUtils.isEmpty(v)) {
+                            if (android.os.Build.VERSION.SDK_INT
+                                    >= android.os.Build.VERSION_CODES.M) {
+                                String[] split = v.split(",");
+                                int w = Integer.parseInt(split[0]);
+                                int h = Integer.parseInt(split[1]);
+                                Bitmap image = Bitmap.createBitmap(w, h, Bitmap.Config.ALPHA_8);
+                                b.addIcon(Icon.createWithBitmap(image), subtype, hints);
+                            }
+                        }
+                        break;
+                    case android.app.slice.SliceItem.FORMAT_INT:
+                        v = parser.getText();
+                        b.addInt(Integer.parseInt(v), subtype, hints);
+                        break;
+                    case android.app.slice.SliceItem.FORMAT_TEXT:
+                        v = parser.getText();
+                        b.addText(Html.fromHtml(v), subtype, hints);
+                        break;
+                    case android.app.slice.SliceItem.FORMAT_TIMESTAMP:
+                        v = parser.getText();
+                        b.addTimestamp(Long.parseLong(v), subtype, hints);
+                        break;
+                    default:
+                        throw new IllegalArgumentException("Unrecognized format " + format);
+                }
+            } else if (type == START_TAG && TAG_SLICE.equals(parser.getName())) {
+                b.addSubSlice(parseSlice(parser), subtype);
+            }
+        }
+    }
+
+    private static String[] hints(String hintStr) {
+        return TextUtils.isEmpty(hintStr) ? new String[0] : hintStr.split(",");
+    }
+
+    public static void serializeSlice(Slice s, Context context, OutputStream output,
+            String encoding, SliceUtils.SerializeOptions options) throws IOException {
+        try {
+            XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();
+            serializer.setOutput(output, encoding);
+            serializer.startDocument(encoding, null);
+
+            serialize(s, context, options, serializer);
+
+            serializer.endDocument();
+            serializer.flush();
+        } catch (XmlPullParserException e) {
+            throw new IOException("Unable to init XML Serialization", e);
+        }
+    }
+
+    private static void serialize(Slice s, Context context, SliceUtils.SerializeOptions options,
+            XmlSerializer serializer) throws IOException {
+        serializer.startTag(NAMESPACE, TAG_SLICE);
+        serializer.attribute(NAMESPACE, ATTR_URI, s.getUri().toString());
+        if (!s.getHints().isEmpty()) {
+            serializer.attribute(NAMESPACE, ATTR_HINTS, hintStr(s.getHints()));
+        }
+        for (SliceItem item : s.getItems()) {
+            serialize(item, context, options, serializer);
+        }
+
+        serializer.endTag(NAMESPACE, TAG_SLICE);
+    }
+
+    private static void serialize(SliceItem item, Context context,
+            SliceUtils.SerializeOptions options, XmlSerializer serializer) throws IOException {
+        String format = item.getFormat();
+        options.checkThrow(format);
+
+        serializer.startTag(NAMESPACE, TAG_ITEM);
+        serializer.attribute(NAMESPACE, ATTR_FORMAT, format);
+        if (item.getSubType() != null) {
+            serializer.attribute(NAMESPACE, ATTR_SUBTYPE, item.getSubType());
+        }
+        if (!item.getHints().isEmpty()) {
+            serializer.attribute(NAMESPACE, ATTR_HINTS, hintStr(item.getHints()));
+        }
+
+        switch (format) {
+            case android.app.slice.SliceItem.FORMAT_ACTION:
+                if (options.getActionMode() == SliceUtils.SerializeOptions.MODE_DISABLE) {
+                    serialize(item.getSlice(), context, options, serializer);
+                }
+                break;
+            case android.app.slice.SliceItem.FORMAT_REMOTE_INPUT:
+                // Nothing for now.
+                break;
+            case android.app.slice.SliceItem.FORMAT_IMAGE:
+                if (options.getImageMode() == SliceUtils.SerializeOptions.MODE_DISABLE) {
+                    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
+                        Drawable d = item.getIcon().loadDrawable(context);
+                        serializer.text(String.format("%d,%d",
+                                d.getIntrinsicWidth(), d.getIntrinsicHeight()));
+                    }
+                }
+                break;
+            case android.app.slice.SliceItem.FORMAT_INT:
+                serializer.text(String.valueOf(item.getInt()));
+                break;
+            case android.app.slice.SliceItem.FORMAT_SLICE:
+                serialize(item.getSlice(), context, options, serializer);
+                break;
+            case android.app.slice.SliceItem.FORMAT_TEXT:
+                if (item.getText() instanceof Spanned) {
+                    serializer.text(Html.toHtml((Spanned) item.getText()));
+                } else {
+                    serializer.text(String.valueOf(item.getText()));
+                }
+                break;
+            case android.app.slice.SliceItem.FORMAT_TIMESTAMP:
+                serializer.text(String.valueOf(item.getTimestamp()));
+                break;
+            default:
+                throw new IllegalArgumentException("Unrecognized format " + format);
+        }
+        serializer.endTag(NAMESPACE, TAG_ITEM);
+    }
+
+    private static String hintStr(List<String> hints) {
+        return TextUtils.join(",", hints);
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/ActionRow.java b/slices/view/src/main/java/androidx/app/slice/widget/ActionRow.java
new file mode 100644
index 0000000..2eaa059
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/ActionRow.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_REMOTE_INPUT;
+
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
+import android.app.PendingIntent.CanceledException;
+import android.app.RemoteInput;
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.Color;
+import android.graphics.drawable.Icon;
+import android.os.AsyncTask;
+import android.support.annotation.RestrictTo;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewParent;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.util.function.Consumer;
+
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(24)
+public class ActionRow extends FrameLayout {
+
+    private static final int MAX_ACTIONS = 5;
+    private final int mSize;
+    private final int mIconPadding;
+    private final LinearLayout mActionsGroup;
+    private final boolean mFullActions;
+    private int mColor = Color.BLACK;
+
+    public ActionRow(Context context, boolean fullActions) {
+        super(context);
+        mFullActions = fullActions;
+        mSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48,
+                context.getResources().getDisplayMetrics());
+        mIconPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12,
+                context.getResources().getDisplayMetrics());
+        mActionsGroup = new LinearLayout(context);
+        mActionsGroup.setOrientation(LinearLayout.HORIZONTAL);
+        mActionsGroup.setLayoutParams(
+                new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+        addView(mActionsGroup);
+    }
+
+    private void setColor(int color) {
+        mColor = color;
+        for (int i = 0; i < mActionsGroup.getChildCount(); i++) {
+            View view = mActionsGroup.getChildAt(i);
+            SliceItem item = (SliceItem) view.getTag();
+            boolean tint = !item.hasHint(HINT_NO_TINT);
+            if (tint) {
+                ((ImageView) view).setImageTintList(ColorStateList.valueOf(mColor));
+            }
+        }
+    }
+
+    private ImageView addAction(Icon icon, boolean allowTint, SliceItem image) {
+        ImageView imageView = new ImageView(getContext());
+        imageView.setPadding(mIconPadding, mIconPadding, mIconPadding, mIconPadding);
+        imageView.setScaleType(ScaleType.FIT_CENTER);
+        imageView.setImageIcon(icon);
+        if (allowTint) {
+            imageView.setImageTintList(ColorStateList.valueOf(mColor));
+        }
+        imageView.setBackground(SliceViewUtil.getDrawable(getContext(),
+                android.R.attr.selectableItemBackground));
+        imageView.setTag(image);
+        addAction(imageView);
+        return imageView;
+    }
+
+    /**
+     * Set the actions and color for this action row.
+     */
+    public void setActions(SliceItem actionRow, int color) {
+        removeAllViews();
+        mActionsGroup.removeAllViews();
+        addView(mActionsGroup);
+        if (color != -1) {
+            setColor(color);
+        }
+        SliceQuery.findAll(actionRow, FORMAT_ACTION).forEach(new Consumer<SliceItem>() {
+            @Override
+            public void accept(final SliceItem action) {
+                if (mActionsGroup.getChildCount() >= MAX_ACTIONS) {
+                    return;
+                }
+                SliceItem image = SliceQuery.find(action, FORMAT_IMAGE);
+                if (image == null) {
+                    return;
+                }
+                boolean tint = !image.hasHint(HINT_NO_TINT);
+                final SliceItem input = SliceQuery.find(action, FORMAT_REMOTE_INPUT);
+                if (input != null && input.getRemoteInput().getAllowFreeFormInput()) {
+                    addAction(image.getIcon(), tint, image).setOnClickListener(
+                            new OnClickListener() {
+                                @Override
+                                public void onClick(View v) {
+                                    handleRemoteInputClick(v, action.getAction(),
+                                            input.getRemoteInput());
+                                }
+                            });
+                    createRemoteInputView(mColor, getContext());
+                } else {
+                    addAction(image.getIcon(), tint, image).setOnClickListener(
+                            new OnClickListener() {
+                                @Override
+                                public void onClick(View v) {
+                                    AsyncTask.execute(new Runnable() {
+                                        @Override
+                                        public void run() {
+
+                                            try {
+                                                action.getAction().send();
+                                            } catch (CanceledException e) {
+                                                e.printStackTrace();
+                                            }
+                                        }
+                                    });
+                                }
+                            });
+                }
+            }
+        });
+        setVisibility(getChildCount() != 0 ? View.VISIBLE : View.GONE);
+    }
+
+    private void addAction(View child) {
+        mActionsGroup.addView(child, new LinearLayout.LayoutParams(mSize, mSize, 1));
+    }
+
+    private void createRemoteInputView(int color, Context context) {
+        View riv = RemoteInputView.inflate(context, this);
+        riv.setVisibility(View.INVISIBLE);
+        addView(riv, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
+        riv.setBackgroundColor(color);
+    }
+
+    private boolean handleRemoteInputClick(View view, PendingIntent pendingIntent,
+            RemoteInput input) {
+        if (input == null) {
+            return false;
+        }
+
+        ViewParent p = view.getParent().getParent();
+        RemoteInputView riv = null;
+        while (p != null) {
+            if (p instanceof View) {
+                View pv = (View) p;
+                riv = findRemoteInputView(pv);
+                if (riv != null) {
+                    break;
+                }
+            }
+            p = p.getParent();
+        }
+        if (riv == null) {
+            return false;
+        }
+
+        int width = view.getWidth();
+        if (view instanceof TextView) {
+            // Center the reveal on the text which might be off-center from the TextView
+            TextView tv = (TextView) view;
+            if (tv.getLayout() != null) {
+                int innerWidth = (int) tv.getLayout().getLineWidth(0);
+                innerWidth += tv.getCompoundPaddingLeft() + tv.getCompoundPaddingRight();
+                width = Math.min(width, innerWidth);
+            }
+        }
+        int cx = view.getLeft() + width / 2;
+        int cy = view.getTop() + view.getHeight() / 2;
+        int w = riv.getWidth();
+        int h = riv.getHeight();
+        int r = Math.max(
+                Math.max(cx + cy, cx + (h - cy)),
+                Math.max((w - cx) + cy, (w - cx) + (h - cy)));
+
+        riv.setRevealParameters(cx, cy, r);
+        riv.setPendingIntent(pendingIntent);
+        riv.setRemoteInput(new RemoteInput[] {
+                input
+        }, input);
+        riv.focusAnimated();
+        return true;
+    }
+
+    private RemoteInputView findRemoteInputView(View v) {
+        if (v == null) {
+            return null;
+        }
+        return (RemoteInputView) v.findViewWithTag(RemoteInputView.VIEW_TAG);
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/EventInfo.java b/slices/view/src/main/java/androidx/app/slice/widget/EventInfo.java
new file mode 100644
index 0000000..d45a34d
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/EventInfo.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.widget;
+
+import android.support.annotation.IntDef;
+import android.support.annotation.RestrictTo;
+
+/**
+ * Represents information associated with a logged event on {@link SliceView}.
+ */
+public class EventInfo {
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @IntDef({
+            ROW_TYPE_SHORTCUT, ROW_TYPE_LIST, ROW_TYPE_GRID, ROW_TYPE_MESSAGING
+    })
+    public @interface SliceRowType {}
+
+    /**
+     * Indicates the slice is represented as a shortcut.
+     */
+    public static final int ROW_TYPE_SHORTCUT = -1;
+    /**
+     * Indicates the row is represented in a list template.
+     */
+    public static final int ROW_TYPE_LIST = 0;
+    /**
+     * Indicates the row is represented in a grid template.
+     */
+    public static final int ROW_TYPE_GRID = 1;
+    /**
+     * Indicates the row is represented as a messaging template.
+     */
+    public static final int ROW_TYPE_MESSAGING = 2;
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @IntDef({
+            ACTION_TYPE_TOGGLE, ACTION_TYPE_BUTTON, ACTION_TYPE_SLIDER, ACTION_TYPE_CONTENT
+    })
+    public @interface SliceActionType{}
+
+    /**
+     * Indicates the event was an interaction with a toggle. Check {@link EventInfo#state} to
+     * see the new state of the toggle.
+     */
+    public static final int ACTION_TYPE_TOGGLE = 0;
+    /**
+     * Indicates the event was an interaction with a button. Check {@link EventInfo#actionPosition}
+     * to see where on the card the button is placed.
+     */
+    public static final int ACTION_TYPE_BUTTON = 1;
+    /**
+     * Indicates the event was an interaction with a slider. Check {@link EventInfo#state} to
+     * see the new state of the slider.
+     */
+    public static final int ACTION_TYPE_SLIDER = 2;
+    /**
+     * Indicates the event was a tap on the entire row.
+     */
+    public static final int ACTION_TYPE_CONTENT = 3;
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @IntDef({
+            POSITION_START, POSITION_END, POSITION_CELL
+    })
+    public @interface SliceButtonPosition{}
+
+    /**
+     * Indicates the event was an interaction with a button positioned at the start of the row.
+     */
+    public static final int POSITION_START = 0;
+    /**
+     * Indicates the event was an interaction with a button positioned at the end of the row,
+     * potentially grouped with other buttons.
+     */
+    public static final int POSITION_END = 1;
+    /**
+     * Indicates the event was an interaction with a button positioned in a grid cell.
+     */
+    public static final int POSITION_CELL = 2;
+
+    /**
+     * Indicates the state of a toggle is off.
+     */
+    public static final int STATE_OFF = 0;
+    /**
+     * Indicates the state of a toggle is on.
+     */
+    public static final int STATE_ON = 1;
+
+    /**
+     * The display mode of the slice being interacted with.
+     */
+    public @SliceView.SliceMode int sliceMode;
+    /**
+     * The type of action that occurred.
+     */
+    public @SliceActionType int actionType;
+    /**
+     * The template type of the row that was interacted with in the slice.
+     */
+    public @SliceRowType int rowTemplateType;
+    /**
+     * Index of the row that was interacted with in the slice.
+     */
+    public int rowIndex;
+    /**
+     * If multiple buttons are presented in this {@link #actionPosition} on the row, then this is
+     * the index of that button that was interacted with. For total number of actions
+     * see {@link #actionCount}.
+     *
+     * <p>If the {@link #actionPosition} is {@link #POSITION_CELL} the button is a cell within
+     * a grid, and this index would represent the cell position.</p>
+     * <p>If the {@link #actionPosition} is {@link #POSITION_END} there might be other buttons
+     * in the end position, and this index would represent the position.</p>
+     */
+    public int actionIndex;
+    /**
+     * Total number of actions available in this row of the slice.
+     *
+     * <p>If the {@link #actionPosition} is {@link #POSITION_CELL} the button is a cell within
+     * a grid row, and this is the number of cells in the row.</p>
+     * <p>If the {@link #actionPosition} is {@link #POSITION_END} this is the number of buttons
+     * in the end position of this row.</p>
+     */
+    public int actionCount;
+    /**
+     * Position of the button on the template.
+     *
+     * {@link #POSITION_START}
+     * {@link #POSITION_END}
+     * {@link #POSITION_CELL}
+     */
+    public @SliceButtonPosition int actionPosition;
+    /**
+     * Represents the state after the event or -1 if not applicable for the event type.
+     *
+     * <p>For {@link #ACTION_TYPE_TOGGLE} events, the state will be either {@link #STATE_OFF}
+     * or {@link #STATE_ON}.</p>
+     * <p>For {@link #ACTION_TYPE_SLIDER} events, the state will be a number representing
+     * the new position of the slider.</p>
+     */
+    public int state;
+
+    /**
+     * Constructs an event info object with the required information for an event.
+     *
+     * @param sliceMode The display mode of the slice interacted with.
+     * @param actionType The type of action this event represents.
+     * @param rowTemplateType The template type of the row interacted with.
+     * @param rowIndex The index of the row that was interacted with in the slice.
+     */
+    public EventInfo(@SliceView.SliceMode int sliceMode, @SliceActionType int actionType,
+            @SliceRowType int rowTemplateType, int rowIndex) {
+        this.sliceMode = sliceMode;
+        this.actionType = actionType;
+        this.rowTemplateType = rowTemplateType;
+        this.rowIndex = rowIndex;
+
+        this.actionPosition = -1;
+        this.actionIndex = -1;
+        this.actionCount = -1;
+        this.state = -1;
+    }
+
+    /**
+     * Sets positional information for the event.
+     *
+     * @param actionPosition The position of the button on the template.
+     * @param actionIndex The index of that button that was interacted with.
+     * @param actionCount The number of actions available in this group of buttons on the slice.
+     */
+    public void setPosition(@SliceButtonPosition int actionPosition, int actionIndex,
+            int actionCount) {
+        this.actionPosition = actionPosition;
+        this.actionIndex = actionIndex;
+        this.actionCount = actionCount;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("mode=").append(SliceView.modeToString(sliceMode));
+        sb.append(", actionType=").append(actionToString(actionType));
+        sb.append(", rowTemplateType=").append(rowTypeToString(rowTemplateType));
+        sb.append(", rowIndex=").append(rowIndex);
+        sb.append(", actionPosition=").append(positionToString(actionPosition));
+        sb.append(", actionIndex=").append(actionIndex);
+        sb.append(", actionCount=").append(actionCount);
+        sb.append(", state=").append(state);
+        return sb.toString();
+    }
+
+    /**
+     * @return String representation of the provided position.
+     */
+    private static String positionToString(@SliceButtonPosition int position) {
+        switch (position) {
+            case POSITION_START:
+                return "START";
+            case POSITION_END:
+                return "END";
+            case POSITION_CELL:
+                return "CELL";
+            default:
+                return "unknown position: " + position;
+        }
+    }
+
+    /**
+     * @return String representation of the provided action.
+     */
+    private static String actionToString(@SliceActionType int action) {
+        switch (action) {
+            case ACTION_TYPE_TOGGLE:
+                return "TOGGLE";
+            case ACTION_TYPE_BUTTON:
+                return "BUTTON";
+            case ACTION_TYPE_SLIDER:
+                return "SLIDER";
+            case ACTION_TYPE_CONTENT:
+                return "CONTENT";
+            default:
+                return "unknown action: " + action;
+        }
+    }
+
+    /**
+     * @return String representation of the provided row template type.
+     */
+    private static String rowTypeToString(@SliceRowType int type) {
+        switch (type) {
+            case ROW_TYPE_LIST:
+                return "LIST";
+            case ROW_TYPE_GRID:
+                return "GRID";
+            case ROW_TYPE_MESSAGING:
+                return "MESSAGING";
+            case ROW_TYPE_SHORTCUT:
+                return "SHORTCUT";
+            default:
+                return "unknown row type: " + type;
+        }
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/GridContent.java b/slices/view/src/main/java/androidx/app/slice/widget/GridContent.java
new file mode 100644
index 0000000..9569dc0
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/GridContent.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.SUBTYPE_COLOR;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+
+import android.support.annotation.RestrictTo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+
+/**
+ * Extracts information required to present content in a grid format from a slice.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class GridContent {
+
+    private boolean mAllImages;
+    public SliceItem mColorItem;
+    public ArrayList<CellContent> mGridContent = new ArrayList<>();
+
+    public GridContent(SliceItem gridItem) {
+        populate(gridItem);
+    }
+
+    private void reset() {
+        mColorItem = null;
+        mGridContent.clear();
+    }
+
+    /**
+     * @return whether this grid has content that is valid to display.
+     */
+    public boolean populate(SliceItem gridItem) {
+        reset();
+        mColorItem = SliceQuery.findSubtype(gridItem, FORMAT_INT, SUBTYPE_COLOR);
+        mAllImages = true;
+        if (FORMAT_SLICE.equals(gridItem.getFormat())) {
+            List<SliceItem> items = gridItem.getSlice().getItems();
+            // Check if it it's only one item that is a slice
+            if (items.size() == 1 && items.get(0).getFormat().equals(FORMAT_SLICE)) {
+                items = items.get(0).getSlice().getItems();
+            }
+            for (int i = 0; i < items.size(); i++) {
+                SliceItem item = items.get(i);
+                CellContent cc = new CellContent(item);
+                if (cc.isValid()) {
+                    mGridContent.add(cc);
+                    if (!cc.isImageOnly()) {
+                        mAllImages = false;
+                    }
+                }
+            }
+        } else {
+            CellContent cc = new CellContent(gridItem);
+            if (cc.isValid()) {
+                mGridContent.add(cc);
+            }
+        }
+        return isValid();
+    }
+
+    /**
+     * @return the list of cell content for this grid.
+     */
+    public ArrayList<CellContent> getGridContent() {
+        return mGridContent;
+    }
+
+    /**
+     * @return the color to tint content in this grid.
+     */
+    public SliceItem getColorItem() {
+        return mColorItem;
+    }
+
+    /**
+     * @return whether this grid has content that is valid to display.
+     */
+    public boolean isValid() {
+        return mGridContent.size() > 0;
+    }
+
+    /**
+     * @return whether the contents of this grid is just images.
+     */
+    public boolean isAllImages() {
+        return mAllImages;
+    }
+
+    /**
+     * Extracts information required to present content in a cell.
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static class CellContent {
+        private SliceItem mContentIntent;
+        private ArrayList<SliceItem> mCellItems = new ArrayList<>();
+
+        public CellContent(SliceItem cellItem) {
+            populate(cellItem);
+        }
+
+        /**
+         * @return whether this row has content that is valid to display.
+         */
+        public boolean populate(SliceItem cellItem) {
+            final String format = cellItem.getFormat();
+            if (FORMAT_SLICE.equals(format) || FORMAT_ACTION.equals(format)) {
+                List<SliceItem> items = cellItem.getSlice().getItems();
+                // If we've only got one item that's a slice / action use those items instead
+                if (items.size() == 1 && (FORMAT_ACTION.equals(items.get(0).getFormat())
+                        || FORMAT_SLICE.equals(items.get(0).getFormat()))) {
+                    mContentIntent = items.get(0);
+                    items = items.get(0).getSlice().getItems();
+                }
+                if (FORMAT_ACTION.equals(format)) {
+                    mContentIntent = cellItem;
+                }
+                int textCount = 0;
+                int imageCount = 0;
+                for (int i = 0; i < items.size(); i++) {
+                    final SliceItem item = items.get(i);
+                    final String itemFormat = item.getFormat();
+                    if (textCount < 2 && (FORMAT_TEXT.equals(itemFormat)
+                            || FORMAT_TIMESTAMP.equals(itemFormat))) {
+                        textCount++;
+                        mCellItems.add(item);
+                    } else if (imageCount < 1 && FORMAT_IMAGE.equals(item.getFormat())) {
+                        imageCount++;
+                        mCellItems.add(item);
+                    }
+                }
+            } else if (isValidCellContent(cellItem)) {
+                mCellItems.add(cellItem);
+            }
+            return isValid();
+        }
+
+        /**
+         * @return the action to activate when this cell is tapped.
+         */
+        public SliceItem getContentIntent() {
+            return mContentIntent;
+        }
+
+        /**
+         * @return the slice items to display in this cell.
+         */
+        public ArrayList<SliceItem> getCellItems() {
+            return mCellItems;
+        }
+
+        /**
+         * @return whether this is content that is valid to show in a grid cell.
+         */
+        private boolean isValidCellContent(SliceItem cellItem) {
+            final String format = cellItem.getFormat();
+            return FORMAT_TEXT.equals(format)
+                    || FORMAT_TIMESTAMP.equals(format)
+                    || FORMAT_IMAGE.equals(format);
+        }
+
+        /**
+         * @return whether this grid has content that is valid to display.
+         */
+        public boolean isValid() {
+            return mCellItems.size() > 0 && mCellItems.size() <= 3;
+        }
+
+        /**
+         * @return whether this cell contains just an image.
+         */
+        public boolean isImageOnly() {
+            return mCellItems.size() == 1 && FORMAT_IMAGE.equals(mCellItems.get(0).getFormat());
+        }
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/GridRowView.java b/slices/view/src/main/java/androidx/app/slice/widget/GridRowView.java
new file mode 100644
index 0000000..a5959d3
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/GridRowView.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_LARGE;
+import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.Slice.HINT_TITLE;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.support.annotation.ColorInt;
+import android.support.annotation.RestrictTo;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Pair;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+import androidx.app.slice.view.R;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(24)
+public class GridRowView extends SliceChildView implements View.OnClickListener {
+
+    private static final String TAG = "GridView";
+
+    // TODO -- Should add notion to the builder so that apps could define the "see more" intent
+    private static final boolean ALLOW_SEE_MORE = false;
+
+    private static final int TITLE_TEXT_LAYOUT = R.layout.abc_slice_title;
+    private static final int TEXT_LAYOUT = R.layout.abc_slice_secondary_text;
+    // Max number of *just* images that can be shown in a row
+    private static final int MAX_IMAGES = 3;
+    // Max number of normal cell items that can be shown in a row
+    private static final int MAX_ALL = 5;
+
+    // Max number of text items that can show in a cell
+    private static final int MAX_CELL_TEXT = 2;
+    // Max number of text items that can show in a cell if the mode is small
+    private static final int MAX_CELL_TEXT_SMALL = 1;
+    // Max number of images that can show in a cell
+    private static final int MAX_CELL_IMAGES = 1;
+
+    private int mRowIndex;
+    private boolean mIsAllImages;
+    private @SliceView.SliceMode int mSliceMode = 0;
+
+    private int mIconSize;
+    private int mLargeIconSize;
+    private int mBigPictureHeight;
+    private int mAllImagesHeight;
+    private GridContent mGridContent;
+    private LinearLayout mViewContainer;
+
+    public GridRowView(Context context) {
+        this(context, null);
+    }
+
+    public GridRowView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        final Resources res = getContext().getResources();
+        mIconSize = res.getDimensionPixelSize(R.dimen.abc_slice_icon_size);
+        mLargeIconSize = res.getDimensionPixelSize(R.dimen.abc_slice_large_icon_size);
+        mBigPictureHeight = res.getDimensionPixelSize(R.dimen.abc_slice_grid_big_picture_height);
+        mAllImagesHeight = res.getDimensionPixelSize(R.dimen.abc_slice_grid_image_only_height);
+        mViewContainer = new LinearLayout(getContext());
+        mViewContainer.setOrientation(LinearLayout.HORIZONTAL);
+        addView(mViewContainer, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        if (mIsAllImages) {
+            int count = getChildCount();
+            int height = (count == 1) ? mBigPictureHeight : mAllImagesHeight;
+            heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
+            getLayoutParams().height = height;
+            for (int i = 0; i < count; i++) {
+                getChildAt(i).getLayoutParams().height = height;
+            }
+        }
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    }
+
+    @Override
+    public int getMode() {
+        return mSliceMode;
+    }
+
+    @Override
+    public void setTint(@ColorInt int tintColor) {
+        super.setTint(tintColor);
+        if (mGridContent != null) {
+            // TODO -- could be smarter about this
+            resetView();
+            populateViews(mGridContent);
+        }
+    }
+
+    /**
+     * This is called when GridView is being used as a small template.
+     */
+    @Override
+    public void setSlice(Slice slice) {
+        resetView();
+        mRowIndex = 0;
+        mSliceMode = SliceView.MODE_SMALL;
+        Slice.Builder sb = new Slice.Builder(slice.getUri());
+        sb.addSubSlice(slice);
+        Slice parentSlice = sb.build();
+        mGridContent = new GridContent(parentSlice.getItems().get(0));
+        populateViews(mGridContent);
+    }
+
+    /**
+     * This is called when GridView is being used as a component in a large template.
+     */
+    @Override
+    public void setSliceItem(SliceItem slice, boolean isHeader, int index,
+            SliceView.OnSliceActionListener observer) {
+        resetView();
+        setSliceActionListener(observer);
+        mRowIndex = index;
+        mSliceMode = SliceView.MODE_LARGE;
+        mGridContent = new GridContent(slice);
+        populateViews(mGridContent);
+    }
+
+    private void populateViews(GridContent gc) {
+        mIsAllImages = gc.isAllImages();
+        ArrayList<GridContent.CellContent> cells = gc.getGridContent();
+        final int max = mIsAllImages ? MAX_IMAGES : MAX_ALL;
+        for (int i = 0; i < cells.size(); i++) {
+            if (isFull()) {
+                break;
+            }
+            addCell(cells.get(i), i, Math.min(cells.size(), max));
+        }
+        if (ALLOW_SEE_MORE && mIsAllImages && cells.size() > getChildCount()) {
+            addSeeMoreCount(cells.size() - getChildCount());
+        }
+    }
+
+    private void addSeeMoreCount(int numExtra) {
+        View last = getChildAt(getChildCount() - 1);
+        FrameLayout frame = new FrameLayout(getContext());
+        frame.setLayoutParams(last.getLayoutParams());
+
+        removeView(last);
+        frame.addView(last, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+
+        TextView v = new TextView(getContext());
+        v.setTextColor(Color.WHITE);
+        v.setBackgroundColor(0x4d000000);
+        v.setText(getResources().getString(R.string.abc_slice_more_content, numExtra));
+        v.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
+        v.setGravity(Gravity.CENTER);
+        frame.addView(v, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+
+        mViewContainer.addView(frame);
+    }
+
+    private boolean isFull() {
+        return getChildCount() >= (mIsAllImages ? MAX_IMAGES : MAX_ALL);
+    }
+
+    /**
+     * Adds a cell to the grid view based on the provided {@link SliceItem}.
+     */
+    private void addCell(GridContent.CellContent cell, int index, int total) {
+        final int maxCellText = mSliceMode == SliceView.MODE_SMALL
+                ? MAX_CELL_TEXT_SMALL
+                : MAX_CELL_TEXT;
+        LinearLayout cellContainer = new LinearLayout(getContext());
+        cellContainer.setOrientation(LinearLayout.VERTICAL);
+        cellContainer.setGravity(Gravity.CENTER_HORIZONTAL);
+
+        ArrayList<SliceItem> cellItems = cell.getCellItems();
+        SliceItem contentIntentItem = cell.getContentIntent();
+
+        int textCount = 0;
+        int imageCount = 0;
+        boolean added = false;
+        boolean singleItem = cellItems.size() == 1;
+        List<SliceItem> textItems = null;
+        // In small format we display one text item and prefer titles
+        if (!singleItem && mSliceMode == SliceView.MODE_SMALL) {
+            // Get all our text items
+            textItems = cellItems.stream().filter(new Predicate<SliceItem>() {
+                @Override
+                public boolean test(SliceItem s) {
+                    return FORMAT_TEXT.equals(s.getFormat());
+                }
+            }).collect(Collectors.<SliceItem>toList());
+            // If we have more than 1 remove non-titles
+            Iterator<SliceItem> iterator = textItems.iterator();
+            while (textItems.size() > 1) {
+                SliceItem item = iterator.next();
+                if (!item.hasHint(HINT_TITLE)) {
+                    iterator.remove();
+                }
+            }
+        }
+        for (int i = 0; i < cellItems.size(); i++) {
+            SliceItem item = cellItems.get(i);
+            final String itemFormat = item.getFormat();
+            if (textCount < maxCellText && (FORMAT_TEXT.equals(itemFormat)
+                    || FORMAT_TIMESTAMP.equals(itemFormat))) {
+                if (textItems != null && !textItems.contains(item)) {
+                    continue;
+                }
+                if (addItem(item, mTintColor, cellContainer, singleItem)) {
+                    textCount++;
+                    added = true;
+                }
+            } else if (imageCount < MAX_CELL_IMAGES && FORMAT_IMAGE.equals(item.getFormat())) {
+                if (addItem(item, mTintColor, cellContainer, singleItem)) {
+                    imageCount++;
+                    added = true;
+                }
+            }
+        }
+        if (added) {
+            mViewContainer.addView(cellContainer,
+                    new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1));
+            if (contentIntentItem != null) {
+                EventInfo info = new EventInfo(getMode(), EventInfo.ACTION_TYPE_BUTTON,
+                        EventInfo.ROW_TYPE_GRID, mRowIndex);
+                info.setPosition(EventInfo.POSITION_CELL, index, total);
+                Pair<SliceItem, EventInfo> tagItem = new Pair(contentIntentItem, info);
+                cellContainer.setTag(tagItem);
+                makeClickable(cellContainer);
+            }
+        }
+    }
+
+    /**
+     * Adds simple items to a container. Simple items include icons, text, and timestamps.
+     * @return Whether an item was added.
+     */
+    private boolean addItem(SliceItem item, int color, ViewGroup container, boolean singleItem) {
+        final String format = item.getFormat();
+        View addedView = null;
+        if (FORMAT_TEXT.equals(format) || FORMAT_TIMESTAMP.equals(format)) {
+            boolean title = SliceQuery.hasAnyHints(item, HINT_LARGE, HINT_TITLE);
+            TextView tv = (TextView) LayoutInflater.from(getContext()).inflate(title
+                    ? TITLE_TEXT_LAYOUT : TEXT_LAYOUT, null);
+            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, title ? mTitleSize : mSubtitleSize);
+            tv.setTextColor(title ? mTitleColor : mSubtitleColor);
+            CharSequence text = FORMAT_TIMESTAMP.equals(format)
+                    ? SliceViewUtil.getRelativeTimeString(item.getTimestamp())
+                    : item.getText();
+            tv.setText(text);
+            container.addView(tv);
+            addedView = tv;
+        } else if (FORMAT_IMAGE.equals(format)) {
+            ImageView iv = new ImageView(getContext());
+            iv.setImageIcon(item.getIcon());
+            if (color != -1 && !item.hasHint(HINT_NO_TINT) && !item.hasHint(HINT_LARGE)) {
+                iv.setColorFilter(color);
+            }
+            int size = mIconSize;
+            if (item.hasHint(HINT_LARGE)) {
+                iv.setScaleType(ScaleType.CENTER_CROP);
+                size = singleItem ? MATCH_PARENT : mLargeIconSize;
+            }
+            container.addView(iv, new LayoutParams(size, size));
+            addedView = iv;
+        }
+        return addedView != null;
+    }
+
+    private void makeClickable(View layout) {
+        layout.setOnClickListener(this);
+        layout.setBackground(SliceViewUtil.getDrawable(getContext(),
+                android.R.attr.selectableItemBackground));
+    }
+
+    @Override
+    public void onClick(View view) {
+        Pair<SliceItem, EventInfo> tagItem = (Pair<SliceItem, EventInfo>) view.getTag();
+        final SliceItem actionItem = tagItem.first;
+        final EventInfo info = tagItem.second;
+        if (actionItem != null && FORMAT_ACTION.equals(actionItem.getFormat())) {
+            try {
+                actionItem.getAction().send();
+                if (mObserver != null) {
+                    mObserver.onSliceAction(info, actionItem);
+                }
+            } catch (PendingIntent.CanceledException e) {
+                Log.w(TAG, "PendingIntent for slice cannot be sent", e);
+            }
+        }
+    }
+
+    @Override
+    public void resetView() {
+        mIsAllImages = true;
+        mViewContainer.removeAllViews();
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/LargeSliceAdapter.java b/slices/view/src/main/java/androidx/app/slice/widget/LargeSliceAdapter.java
new file mode 100644
index 0000000..45f659d
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/LargeSliceAdapter.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_HORIZONTAL;
+import static android.app.slice.Slice.SUBTYPE_MESSAGE;
+import static android.app.slice.Slice.SUBTYPE_SOURCE;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+
+import android.annotation.TargetApi;
+import android.app.slice.Slice;
+import android.content.Context;
+import android.support.annotation.RestrictTo;
+import android.support.v7.widget.RecyclerView;
+import android.util.ArrayMap;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+import androidx.app.slice.view.R;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(24)
+public class LargeSliceAdapter extends RecyclerView.Adapter<LargeSliceAdapter.SliceViewHolder> {
+
+    static final int TYPE_DEFAULT       = 1;
+    static final int TYPE_HEADER        = 2; // TODO: headers shouldn't scroll off
+    static final int TYPE_GRID          = 3;
+    static final int TYPE_MESSAGE       = 4;
+    static final int TYPE_MESSAGE_LOCAL = 5;
+
+    private final IdGenerator mIdGen = new IdGenerator();
+    private final Context mContext;
+    private List<SliceWrapper> mSlices = new ArrayList<>();
+
+    private SliceView.OnSliceActionListener mSliceObserver;
+    private int mColor;
+    private AttributeSet mAttrs;
+
+    public LargeSliceAdapter(Context context) {
+        mContext = context;
+        setHasStableIds(true);
+    }
+
+    public void setSliceObserver(SliceView.OnSliceActionListener observer) {
+        mSliceObserver = observer;
+    }
+
+    /**
+     * Set the {@link SliceItem}'s to be displayed in the adapter and the accent color.
+     */
+    public void setSliceItems(List<SliceItem> slices, int color) {
+        if (slices == null) {
+            mSlices.clear();
+        } else {
+            mIdGen.resetUsage();
+            mSlices = slices.stream().map(new Function<SliceItem, SliceWrapper>() {
+                @Override
+                public SliceWrapper apply(SliceItem s) {
+                    return new SliceWrapper(s, mIdGen);
+                }
+            }).collect(Collectors.<SliceWrapper>toList());
+        }
+        mColor = color;
+        notifyDataSetChanged();
+    }
+
+    /**
+     * Sets the attribute set to use for views in the list.
+     */
+    public void setStyle(AttributeSet attrs) {
+        mAttrs = attrs;
+        notifyDataSetChanged();
+    }
+
+    @Override
+    public SliceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        View v = inflateForType(viewType);
+        v.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+        return new SliceViewHolder(v);
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return mSlices.get(position).mType;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return mSlices.get(position).mId;
+    }
+
+    @Override
+    public int getItemCount() {
+        return mSlices.size();
+    }
+
+    @Override
+    public void onBindViewHolder(SliceViewHolder holder, int position) {
+        SliceWrapper slice = mSlices.get(position);
+        if (holder.mSliceView != null) {
+            holder.mSliceView.setTint(mColor);
+            holder.mSliceView.setStyle(mAttrs);
+            holder.mSliceView.setSliceItem(slice.mItem, position == 0 /* isHeader */,
+                    position, mSliceObserver);
+        }
+    }
+
+    private View inflateForType(int viewType) {
+        switch (viewType) {
+            case TYPE_GRID:
+                return LayoutInflater.from(mContext).inflate(R.layout.abc_slice_grid, null);
+            case TYPE_MESSAGE:
+                return LayoutInflater.from(mContext).inflate(R.layout.abc_slice_message, null);
+            case TYPE_MESSAGE_LOCAL:
+                return LayoutInflater.from(mContext).inflate(R.layout.abc_slice_message_local,
+                        null);
+        }
+        return new RowView(mContext);
+    }
+
+    protected static class SliceWrapper {
+        private final SliceItem mItem;
+        private final int mType;
+        private final long mId;
+
+        public SliceWrapper(SliceItem item, IdGenerator idGen) {
+            mItem = item;
+            mType = getFormat(item);
+            mId = idGen.getId(item);
+        }
+
+        public static int getFormat(SliceItem item) {
+            if (SUBTYPE_MESSAGE.equals(item.getSubType())) {
+                // TODO: Better way to determine me or not? Something more like Messaging style.
+                if (SliceQuery.findSubtype(item, null, SUBTYPE_SOURCE) != null) {
+                    return TYPE_MESSAGE;
+                } else {
+                    return TYPE_MESSAGE_LOCAL;
+                }
+            }
+            if (item.hasHint(HINT_HORIZONTAL)) {
+                return TYPE_GRID;
+            }
+            if (!item.hasHint(Slice.HINT_LIST_ITEM)) {
+                return TYPE_HEADER;
+            }
+            return TYPE_DEFAULT;
+        }
+    }
+
+    /**
+     * A {@link RecyclerView.ViewHolder} for presenting slices in {@link LargeSliceAdapter}.
+     */
+    public static class SliceViewHolder extends RecyclerView.ViewHolder {
+        public final SliceChildView mSliceView;
+
+        public SliceViewHolder(View itemView) {
+            super(itemView);
+            mSliceView = itemView instanceof SliceChildView ? (SliceChildView) itemView : null;
+        }
+    }
+
+    private static class IdGenerator {
+        private long mNextLong = 0;
+        private final ArrayMap<String, Long> mCurrentIds = new ArrayMap<>();
+        private final ArrayMap<String, Integer> mUsedIds = new ArrayMap<>();
+
+        public long getId(SliceItem item) {
+            String str = genString(item);
+            if (!mCurrentIds.containsKey(str)) {
+                mCurrentIds.put(str, mNextLong++);
+            }
+            long id = mCurrentIds.get(str);
+            int index = mUsedIds.getOrDefault(str, 0);
+            mUsedIds.put(str, index + 1);
+            return id + index * 10000;
+        }
+
+        private String genString(SliceItem item) {
+            final StringBuilder builder = new StringBuilder();
+            SliceQuery.stream(item).forEach(new Consumer<SliceItem>() {
+                @Override
+                public void accept(SliceItem i) {
+                    builder.append(i.getFormat());
+                    //i.removeHint(Slice.HINT_SELECTED);
+                    builder.append(i.getHints());
+                    switch (i.getFormat()) {
+                        case FORMAT_IMAGE:
+                            builder.append(i.getIcon());
+                            break;
+                        case FORMAT_TEXT:
+                            builder.append(i.getText());
+                            break;
+                        case FORMAT_INT:
+                            builder.append(i.getInt());
+                            break;
+                    }
+                }
+            });
+            return builder.toString();
+        }
+
+        public void resetUsage() {
+            mUsedIds.clear();
+        }
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/LargeTemplateView.java b/slices/view/src/main/java/androidx/app/slice/widget/LargeTemplateView.java
new file mode 100644
index 0000000..d015893
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/LargeTemplateView.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_PARTIAL;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.support.annotation.RestrictTo;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.core.SliceQuery;
+import androidx.app.slice.view.R;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(24)
+public class LargeTemplateView extends SliceChildView {
+
+    private final LargeSliceAdapter mAdapter;
+    private final RecyclerView mRecyclerView;
+    private final int mDefaultHeight;
+    private Slice mSlice;
+    private boolean mIsScrollable;
+
+    public LargeTemplateView(Context context) {
+        super(context);
+        mRecyclerView = new RecyclerView(getContext());
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+        mAdapter = new LargeSliceAdapter(context);
+        mRecyclerView.setAdapter(mAdapter);
+        addView(mRecyclerView);
+        mDefaultHeight = getResources().getDimensionPixelSize(R.dimen.abc_slice_large_height);
+    }
+
+    @Override
+    public void setTint(int tint) {
+        super.setTint(tint);
+        populate();
+    }
+
+    @Override
+    public @SliceView.SliceMode int getMode() {
+        return SliceView.MODE_LARGE;
+    }
+
+    @Override
+    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {
+        mObserver = observer;
+        if (mAdapter != null) {
+            mAdapter.setSliceObserver(mObserver);
+        }
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        mRecyclerView.getLayoutParams().height = WRAP_CONTENT;
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        if (mRecyclerView.getMeasuredHeight() > width
+                || (mSlice != null && SliceQuery.hasHints(mSlice, HINT_PARTIAL))) {
+            mRecyclerView.getLayoutParams().height = width;
+        } else {
+            mRecyclerView.getLayoutParams().height = mRecyclerView.getMeasuredHeight();
+        }
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    }
+
+    @Override
+    public void setSlice(Slice slice) {
+        mSlice = slice;
+        populate();
+    }
+
+    @Override
+    public void setStyle(AttributeSet attrs) {
+        super.setStyle(attrs);
+        mAdapter.setStyle(attrs);
+    }
+
+    private void populate() {
+        if (mSlice == null) {
+            return;
+        }
+        ListContent lc = new ListContent(mSlice);
+        mAdapter.setSliceItems(lc.getRowItems(), mTintColor);
+    }
+
+    /**
+     * Whether or not the content in this template should be scrollable.
+     */
+    public void setScrollable(boolean isScrollable) {
+        // TODO -- restrict / enable how much this view can show
+        mIsScrollable = isScrollable;
+    }
+
+    @Override
+    public void resetView() {
+        mSlice = null;
+        mAdapter.setSliceItems(null, -1);
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/ListContent.java b/slices/view/src/main/java/androidx/app/slice/widget/ListContent.java
new file mode 100644
index 0000000..d74230c
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/ListContent.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_ACTIONS;
+import static android.app.slice.Slice.HINT_LIST_ITEM;
+import static android.app.slice.Slice.SUBTYPE_COLOR;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+
+/**
+ * Extracts information required to present content in a list format from a slice.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class ListContent {
+
+    private SliceItem mHeaderItem;
+    private SliceItem mColorItem;
+    private ArrayList<SliceItem> mRowItems = new ArrayList<>();
+    private List<SliceItem> mSliceActions;
+
+    public ListContent(Slice slice) {
+        populate(slice);
+    }
+
+    /**
+     * Resets the content.
+     */
+    public void reset() {
+        mColorItem = null;
+        mHeaderItem = null;
+        mRowItems.clear();
+    }
+
+    /**
+     * @return whether this row has content that is valid to display.
+     */
+    public boolean populate(Slice slice) {
+        reset();
+        mColorItem = SliceQuery.findSubtype(slice, FORMAT_INT, SUBTYPE_COLOR);
+        // Find slice actions
+        SliceItem actionGroup = SliceQuery.find(slice, FORMAT_SLICE, HINT_ACTIONS, null);
+        if (actionGroup != null) {
+            // TODO: actually use the actions
+            mSliceActions = SliceQuery.findAll(actionGroup, FORMAT_ACTION, HINT_ACTIONS, null);
+        }
+        // Find header
+        mHeaderItem = findHeaderItem(slice);
+        if (mHeaderItem != null) {
+            mRowItems.add(mHeaderItem);
+        }
+        // Filter + create row items
+        List<SliceItem> children = slice.getItems();
+        for (int i = 0; i < children.size(); i++) {
+            final SliceItem child = children.get(i);
+            final String format = child.getFormat();
+            if (!child.hasAnyHints(HINT_ACTIONS)
+                    && (FORMAT_ACTION.equals(format) || FORMAT_SLICE.equals(format))) {
+                if (mHeaderItem == null && !child.hasHint(HINT_LIST_ITEM)) {
+                    mHeaderItem = child;
+                    mRowItems.add(0, child);
+                } else if (child.hasHint(HINT_LIST_ITEM)) {
+                    mRowItems.add(child);
+                }
+            }
+        }
+        // Ensure we have something for the header -- use first row
+        if (mHeaderItem == null && mRowItems.size() >= 1) {
+            mHeaderItem = mRowItems.get(0);
+        }
+        return isValid();
+    }
+
+    /**
+     * @return whether this list has content that is valid to display.
+     */
+    public boolean isValid() {
+        return mRowItems.size() > 0;
+    }
+
+    @Nullable
+    public SliceItem getColorItem() {
+        return mColorItem;
+    }
+
+    @Nullable
+    public SliceItem getHeaderItem() {
+        return mHeaderItem;
+    }
+
+    @Nullable
+    public List<SliceItem> getSliceActions() {
+        return mSliceActions;
+    }
+
+    public ArrayList<SliceItem> getRowItems() {
+        return mRowItems;
+    }
+
+    /**
+     * @return whether this list has an explicit header (i.e. row item without HINT_LIST_ITEM)
+     */
+    public boolean hasHeader() {
+        return mHeaderItem != null && isValidHeader(mHeaderItem);
+    }
+
+    @Nullable
+    private static SliceItem findHeaderItem(@NonNull Slice slice) {
+        // See if header is specified
+        SliceItem header = SliceQuery.find(slice, FORMAT_SLICE, null, HINT_LIST_ITEM);
+        if (header != null && isValidHeader(header)) {
+            return header;
+        }
+        return null;
+    }
+
+    private static boolean isValidHeader(SliceItem sliceItem) {
+        if (FORMAT_SLICE.equals(sliceItem.getFormat()) && !sliceItem.hasHint(HINT_LIST_ITEM)) {
+             // Minimum valid header is a slice with text
+            SliceItem item = SliceQuery.find(sliceItem, FORMAT_TEXT, (String) null, null);
+            return item != null;
+        }
+        return false;
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/MessageView.java b/slices/view/src/main/java/androidx/app/slice/widget/MessageView.java
new file mode 100644
index 0000000..9c4a705
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/MessageView.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.SUBTYPE_SOURCE;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.RestrictTo;
+import android.text.SpannableStringBuilder;
+import android.util.TypedValue;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.function.Consumer;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(24)
+public class MessageView extends SliceChildView {
+
+    private TextView mDetails;
+    private ImageView mIcon;
+
+    private int mRowIndex;
+
+    public MessageView(Context context) {
+        super(context);
+    }
+
+    @Override
+    public int getMode() {
+        return SliceView.MODE_LARGE;
+    }
+
+    @Override
+    public void setSlice(Slice slice) {
+        // Do nothing it's always a list item
+    }
+
+    @Override
+    public void resetView() {
+        // TODO
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mDetails = findViewById(android.R.id.summary);
+        mIcon = findViewById(android.R.id.icon);
+    }
+
+    @Override
+    public void setSliceItem(SliceItem slice, boolean isHeader, int index,
+            SliceView.OnSliceActionListener observer) {
+        setSliceActionListener(observer);
+        mRowIndex = index;
+        SliceItem source = SliceQuery.findSubtype(slice, FORMAT_IMAGE, SUBTYPE_SOURCE);
+        if (source != null) {
+            final int iconSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                    24, getContext().getResources().getDisplayMetrics());
+            // TODO: try and turn this into a drawable
+            Bitmap iconBm = Bitmap.createBitmap(iconSize, iconSize, Bitmap.Config.ARGB_8888);
+            Canvas iconCanvas = new Canvas(iconBm);
+            Drawable d = source.getIcon().loadDrawable(getContext());
+            d.setBounds(0, 0, iconSize, iconSize);
+            d.draw(iconCanvas);
+            mIcon.setImageBitmap(SliceViewUtil.getCircularBitmap(iconBm));
+        }
+        final SpannableStringBuilder builder = new SpannableStringBuilder();
+        SliceQuery.findAll(slice, FORMAT_TEXT).forEach(new Consumer<SliceItem>() {
+            @Override
+            public void accept(SliceItem text) {
+                if (builder.length() != 0) {
+                    builder.append('\n');
+                }
+                builder.append(text.getText());
+            }
+        });
+        mDetails.setText(builder.toString());
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/RemoteInputView.java b/slices/view/src/main/java/androidx/app/slice/widget/RemoteInputView.java
new file mode 100644
index 0000000..da35018
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/RemoteInputView.java
@@ -0,0 +1,425 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import android.animation.Animator;
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
+import android.app.RemoteInput;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.annotation.RestrictTo;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewAnimationUtils;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.inputmethod.CompletionInfo;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.app.slice.view.R;
+
+/**
+ * Host for the remote input.
+ *
+ * @hide
+ */
+// TODO this should be unified with SystemUI RemoteInputView (b/67527720)
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(23)
+public class RemoteInputView extends LinearLayout implements View.OnClickListener, TextWatcher {
+
+    private static final String TAG = "RemoteInput";
+
+    /**
+     * A marker object that let's us easily find views of this class.
+     */
+    public static final Object VIEW_TAG = new Object();
+
+    private RemoteEditText mEditText;
+    private ImageButton mSendButton;
+    private ProgressBar mProgressBar;
+    private PendingIntent mPendingIntent;
+    private RemoteInput[] mRemoteInputs;
+    private RemoteInput mRemoteInput;
+
+    private int mRevealCx;
+    private int mRevealCy;
+    private int mRevealR;
+    private boolean mResetting;
+
+    public RemoteInputView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        mProgressBar = findViewById(R.id.remote_input_progress);
+        mSendButton = findViewById(R.id.remote_input_send);
+        mSendButton.setOnClickListener(this);
+
+        mEditText = (RemoteEditText) getChildAt(0);
+        mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+            @Override
+            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+                final boolean isSoftImeEvent = event == null
+                        && (actionId == EditorInfo.IME_ACTION_DONE
+                                || actionId == EditorInfo.IME_ACTION_NEXT
+                                || actionId == EditorInfo.IME_ACTION_SEND);
+                final boolean isKeyboardEnterKey = event != null
+                        && isConfirmKey(event.getKeyCode())
+                        && event.getAction() == KeyEvent.ACTION_DOWN;
+
+                if (isSoftImeEvent || isKeyboardEnterKey) {
+                    if (mEditText.length() > 0) {
+                        sendRemoteInput();
+                    }
+                    // Consume action to prevent IME from closing.
+                    return true;
+                }
+                return false;
+            }
+        });
+        mEditText.addTextChangedListener(this);
+        mEditText.setInnerFocusable(false);
+        mEditText.mRemoteInputView = this;
+    }
+
+    private void sendRemoteInput() {
+        Bundle results = new Bundle();
+        results.putString(mRemoteInput.getResultKey(), mEditText.getText().toString());
+        Intent fillInIntent = new Intent().addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+        RemoteInput.addResultsToIntent(mRemoteInputs, fillInIntent,
+                results);
+
+        mEditText.setEnabled(false);
+        mSendButton.setVisibility(INVISIBLE);
+        mProgressBar.setVisibility(VISIBLE);
+        mEditText.mShowImeOnInputConnection = false;
+
+        // TODO: Figure out API for telling the system about slice interaction.
+        // Tell ShortcutManager that this package has been "activated".  ShortcutManager
+        // will reset the throttling for this package.
+        // Strictly speaking, the intent receiver may be different from the intent creator,
+        // but that's an edge case, and also because we can't always know which package will receive
+        // an intent, so we just reset for the creator.
+        //getContext().getSystemService(ShortcutManager.class).onApplicationActive(
+        //        mPendingIntent.getCreatorPackage(),
+        //        getContext().getUserId());
+
+        try {
+            mPendingIntent.send(getContext(), 0, fillInIntent);
+            reset();
+        } catch (PendingIntent.CanceledException e) {
+            Log.i(TAG, "Unable to send remote input result", e);
+            Toast.makeText(getContext(), "Failure sending pending intent for inline reply :(",
+                    Toast.LENGTH_SHORT).show();
+            reset();
+        }
+    }
+
+    /**
+     * Creates a remote input view.
+     */
+    public static RemoteInputView inflate(Context context, ViewGroup root) {
+        RemoteInputView v = (RemoteInputView) LayoutInflater.from(context).inflate(
+                R.layout.abc_slice_remote_input, root, false);
+        v.setTag(VIEW_TAG);
+        return v;
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mSendButton) {
+            sendRemoteInput();
+        }
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        super.onTouchEvent(event);
+
+        // We never want for a touch to escape to an outer view or one we covered.
+        return true;
+    }
+
+    private void onDefocus() {
+        setVisibility(INVISIBLE);
+    }
+
+    /**
+     * Set the pending intent for remote input.
+     */
+    public void setPendingIntent(PendingIntent pendingIntent) {
+        mPendingIntent = pendingIntent;
+    }
+
+    /**
+     * Set the remote inputs for this view.
+     */
+    public void setRemoteInput(RemoteInput[] remoteInputs, RemoteInput remoteInput) {
+        mRemoteInputs = remoteInputs;
+        mRemoteInput = remoteInput;
+        mEditText.setHint(mRemoteInput.getLabel());
+    }
+
+    /**
+     * Focuses the remote input view.
+     */
+    public void focusAnimated() {
+        if (getVisibility() != VISIBLE) {
+            Animator animator = ViewAnimationUtils.createCircularReveal(
+                    this, mRevealCx, mRevealCy, 0, mRevealR);
+            animator.setDuration(200);
+            animator.start();
+        }
+        focus();
+    }
+
+    private void focus() {
+        setVisibility(VISIBLE);
+        mEditText.setInnerFocusable(true);
+        mEditText.mShowImeOnInputConnection = true;
+        mEditText.setSelection(mEditText.getText().length());
+        mEditText.requestFocus();
+        updateSendButton();
+    }
+
+    private void reset() {
+        mResetting = true;
+
+        mEditText.getText().clear();
+        mEditText.setEnabled(true);
+        mSendButton.setVisibility(VISIBLE);
+        mProgressBar.setVisibility(INVISIBLE);
+        updateSendButton();
+        onDefocus();
+
+        mResetting = false;
+    }
+
+    @Override
+    public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
+        if (mResetting && child == mEditText) {
+            // Suppress text events if it happens during resetting. Ideally this would be
+            // suppressed by the text view not being shown, but that doesn't work here because it
+            // needs to stay visible for the animation.
+            return false;
+        }
+        return super.onRequestSendAccessibilityEvent(child, event);
+    }
+
+    private void updateSendButton() {
+        mSendButton.setEnabled(mEditText.getText().length() != 0);
+    }
+
+    @Override
+    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+    }
+
+    @Override
+    public void onTextChanged(CharSequence s, int start, int before, int count) {
+    }
+
+    @Override
+    public void afterTextChanged(Editable s) {
+        updateSendButton();
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public void setRevealParameters(int cx, int cy, int r) {
+        mRevealCx = cx;
+        mRevealCy = cy;
+        mRevealR = r;
+    }
+
+    @Override
+    public void dispatchStartTemporaryDetach() {
+        super.dispatchStartTemporaryDetach();
+        // Detach the EditText temporarily such that it doesn't get onDetachedFromWindow and
+        // won't lose IME focus.
+        detachViewFromParent(mEditText);
+    }
+
+    @Override
+    public void dispatchFinishTemporaryDetach() {
+        if (isAttachedToWindow()) {
+            attachViewToParent(mEditText, 0, mEditText.getLayoutParams());
+        } else {
+            removeDetachedView(mEditText, false /* animate */);
+        }
+        super.dispatchFinishTemporaryDetach();
+    }
+
+    /**
+     * An EditText that changes appearance based on whether it's focusable and becomes un-focusable
+     * whenever the user navigates away from it or it becomes invisible.
+     */
+    public static class RemoteEditText extends EditText {
+
+        private final Drawable mBackground;
+        private RemoteInputView mRemoteInputView;
+        boolean mShowImeOnInputConnection;
+
+        public RemoteEditText(Context context, AttributeSet attrs) {
+            super(context, attrs);
+            mBackground = getBackground();
+        }
+
+        private void defocusIfNeeded(boolean animate) {
+            if (mRemoteInputView != null || isTemporarilyDetached()) {
+                if (isTemporarilyDetached()) {
+                    // We might get reattached but then the other one of HUN / expanded might steal
+                    // our focus, so we'll need to save our text here.
+                }
+                return;
+            }
+            if (isFocusable() && isEnabled()) {
+                setInnerFocusable(false);
+                if (mRemoteInputView != null) {
+                    mRemoteInputView.onDefocus();
+                }
+                mShowImeOnInputConnection = false;
+            }
+        }
+
+        @Override
+        protected void onVisibilityChanged(View changedView, int visibility) {
+            super.onVisibilityChanged(changedView, visibility);
+
+            if (!isShown()) {
+                defocusIfNeeded(false /* animate */);
+            }
+        }
+
+        @Override
+        protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
+            super.onFocusChanged(focused, direction, previouslyFocusedRect);
+            if (!focused) {
+                defocusIfNeeded(true /* animate */);
+            }
+        }
+
+        @Override
+        public void getFocusedRect(Rect r) {
+            super.getFocusedRect(r);
+            r.top = getScrollY();
+            r.bottom = getScrollY() + (getBottom() - getTop());
+        }
+
+        @Override
+        public boolean onKeyDown(int keyCode, KeyEvent event) {
+            if (keyCode == KeyEvent.KEYCODE_BACK) {
+                // Eat the DOWN event here to prevent any default behavior.
+                return true;
+            }
+            return super.onKeyDown(keyCode, event);
+        }
+
+        @Override
+        public boolean onKeyUp(int keyCode, KeyEvent event) {
+            if (keyCode == KeyEvent.KEYCODE_BACK) {
+                defocusIfNeeded(true /* animate */);
+                return true;
+            }
+            return super.onKeyUp(keyCode, event);
+        }
+
+        @Override
+        public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
+            final InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
+
+            if (mShowImeOnInputConnection && inputConnection != null) {
+                final InputMethodManager imm = getContext().getSystemService(
+                        InputMethodManager.class);
+                if (imm != null) {
+                    // onCreateInputConnection is called by InputMethodManager in the middle of
+                    // setting up the connection to the IME; wait with requesting the IME until that
+                    // work has completed.
+                    post(new Runnable() {
+                        @Override
+                        public void run() {
+                            imm.viewClicked(RemoteEditText.this);
+                            imm.showSoftInput(RemoteEditText.this, 0);
+                        }
+                    });
+                }
+            }
+
+            return inputConnection;
+        }
+
+        @Override
+        public void onCommitCompletion(CompletionInfo text) {
+            clearComposingText();
+            setText(text.getText());
+            setSelection(getText().length());
+        }
+
+        void setInnerFocusable(boolean focusable) {
+            setFocusableInTouchMode(focusable);
+            setFocusable(focusable);
+            setCursorVisible(focusable);
+
+            if (focusable) {
+                requestFocus();
+                setBackground(mBackground);
+            } else {
+                setBackground(null);
+            }
+
+        }
+    }
+
+    /** Whether key will, by default, trigger a click on the focused view.
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public static final boolean isConfirmKey(int keyCode) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+            case KeyEvent.KEYCODE_ENTER:
+            case KeyEvent.KEYCODE_SPACE:
+            case KeyEvent.KEYCODE_NUMPAD_ENTER:
+                return true;
+            default:
+                return false;
+        }
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/RowContent.java b/slices/view/src/main/java/androidx/app/slice/widget/RowContent.java
new file mode 100644
index 0000000..52c1f02
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/RowContent.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_SUMMARY;
+import static android.app.slice.Slice.HINT_TITLE;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_REMOTE_INPUT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+
+import static androidx.app.slice.core.SliceHints.SUBTYPE_RANGE;
+
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+
+/**
+ * Extracts information required to present content in a row format from a slice.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class RowContent {
+    private static final String TAG = "RowContent";
+
+    private SliceItem mContentIntent;
+    private SliceItem mStartItem;
+    private SliceItem mTitleItem;
+    private SliceItem mSubtitleItem;
+    private SliceItem mSummaryItem;
+    private ArrayList<SliceItem> mEndItems = new ArrayList<>();
+    private boolean mEndItemsContainAction;
+    private SliceItem mRange;
+    private boolean mIsHeader;
+
+    public RowContent(SliceItem rowSlice, boolean isHeader) {
+        populate(rowSlice, isHeader);
+    }
+
+    /**
+     * Resets the content.
+     */
+    public void reset() {
+        mContentIntent = null;
+        mStartItem = null;
+        mTitleItem = null;
+        mSubtitleItem = null;
+        mEndItems.clear();
+        mIsHeader = false;
+    }
+
+    /**
+     * @return whether this row has content that is valid to display.
+     */
+    public boolean populate(SliceItem rowSlice, boolean isHeader) {
+        reset();
+        mIsHeader = isHeader;
+        if (!isValidRow(rowSlice)) {
+            Log.w(TAG, "Provided SliceItem is invalid for RowContent");
+            return false;
+        }
+        // Filter anything not viable for displaying in a row
+        ArrayList<SliceItem> rowItems = filterInvalidItems(rowSlice);
+        // If we've only got one item that's a slice / action use those items instead
+        if (rowItems.size() == 1 && (FORMAT_ACTION.equals(rowItems.get(0).getFormat())
+                || FORMAT_SLICE.equals(rowItems.get(0).getFormat()))) {
+            if (isValidRow(rowItems.get(0))) {
+                rowSlice = rowItems.get(0);
+                rowItems = filterInvalidItems(rowSlice);
+            }
+        }
+        // Content intent
+        if (FORMAT_ACTION.equals(rowSlice.getFormat())) {
+            mContentIntent = rowSlice;
+        }
+        if (SUBTYPE_RANGE.equals(rowSlice.getSubType())) {
+            mRange = rowSlice;
+        }
+        if (rowItems.size() > 0) {
+            // Start item
+            if (isStartType(rowItems.get(0))) {
+                mStartItem = rowItems.get(0);
+                rowItems.remove(0);
+            }
+            // Text + end items
+            ArrayList<SliceItem> endItems = new ArrayList<>();
+            for (int i = 0; i < rowItems.size(); i++) {
+                final SliceItem item = rowItems.get(i);
+                if (FORMAT_TEXT.equals(item.getFormat())) {
+                    if ((mTitleItem == null || !mTitleItem.hasHint(HINT_TITLE))
+                            && item.hasHint(HINT_TITLE) && !item.hasHint(HINT_SUMMARY)) {
+                        mTitleItem = item;
+                    } else if (mSubtitleItem == null && !item.hasHint(HINT_SUMMARY)) {
+                        mSubtitleItem = item;
+                    } else if (mSummaryItem == null && item.hasHint(HINT_SUMMARY)) {
+                        mSummaryItem = item;
+                    }
+                } else {
+                    endItems.add(item);
+                }
+            }
+            // Special rules for end items: only one timestamp, can't be mixture of icons / actions
+            boolean hasTimestamp = mStartItem != null
+                    && FORMAT_TIMESTAMP.equals(mStartItem.getFormat());
+            String desiredFormat = null;
+            for (int i = 0; i < endItems.size(); i++) {
+                final SliceItem item = endItems.get(i);
+                if (FORMAT_TIMESTAMP.equals(item.getFormat())) {
+                    if (!hasTimestamp) {
+                        hasTimestamp = true;
+                        mEndItems.add(item);
+                    }
+                } else if (desiredFormat == null) {
+                    desiredFormat = item.getFormat();
+                    mEndItems.add(item);
+                    mEndItemsContainAction |= FORMAT_ACTION.equals(item.getFormat());
+                } else if (desiredFormat.equals(item.getFormat())) {
+                    mEndItems.add(item);
+                    mEndItemsContainAction |= FORMAT_ACTION.equals(item.getFormat());
+                }
+            }
+        }
+        return isValid();
+    }
+
+    /**
+     * @return the {@link SliceItem} representing the range in the row; can be null.
+     */
+    @Nullable
+    public SliceItem getRange() {
+        return mRange;
+    }
+
+    /**
+     * @return whether this row has content that is valid to display.
+     */
+    public boolean isValid() {
+        return mStartItem != null
+                || mTitleItem != null
+                || mSubtitleItem != null
+                || mEndItems.size() > 0;
+    }
+
+    @Nullable
+    public SliceItem getContentIntent() {
+        return mContentIntent;
+    }
+
+    @Nullable
+    public SliceItem getStartItem() {
+        return mIsHeader ? null : mStartItem;
+    }
+
+    @Nullable
+    public SliceItem getTitleItem() {
+        return mTitleItem;
+    }
+
+    @Nullable
+    public SliceItem getSubtitleItem() {
+        return mSubtitleItem;
+    }
+
+    @Nullable
+    public SliceItem getSummaryItem() {
+        return mSummaryItem == null ? mSubtitleItem : mSummaryItem;
+    }
+
+    public ArrayList<SliceItem> getEndItems() {
+        return mEndItems;
+    }
+
+    /**
+     * @return whether {@link #getEndItems()} contains a SliceItem with FORMAT_ACTION
+     */
+    public boolean endItemsContainAction() {
+        return mEndItemsContainAction;
+    }
+
+    /**
+     * @return whether this is a valid item to use to populate a row of content.
+     */
+    private static boolean isValidRow(SliceItem rowSlice) {
+        if (rowSlice == null) {
+            return false;
+        }
+        // Must be slice or action
+        if (FORMAT_SLICE.equals(rowSlice.getFormat())
+                || FORMAT_ACTION.equals(rowSlice.getFormat())) {
+            // Must have at least one legitimate child
+            List<SliceItem> rowItems = rowSlice.getSlice().getItems();
+            for (int i = 0; i < rowItems.size(); i++) {
+                if (isValidRowContent(rowSlice, rowItems.get(i))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private static ArrayList<SliceItem> filterInvalidItems(SliceItem rowSlice) {
+        ArrayList<SliceItem> filteredList = new ArrayList<>();
+        for (SliceItem i : rowSlice.getSlice().getItems()) {
+            if (isValidRowContent(rowSlice, i)) {
+                filteredList.add(i);
+            }
+        }
+        return filteredList;
+    }
+
+    /**
+     * @return whether this item has valid content to display in a row.
+     */
+    private static boolean isValidRowContent(SliceItem slice, SliceItem item) {
+        // TODO -- filter for shortcut once that's in
+        final String itemFormat = item.getFormat();
+        // Must be a format that is presentable
+        return FORMAT_TEXT.equals(itemFormat)
+                || FORMAT_IMAGE.equals(itemFormat)
+                || FORMAT_TIMESTAMP.equals(itemFormat)
+                || FORMAT_REMOTE_INPUT.equals(itemFormat)
+                || FORMAT_ACTION.equals(itemFormat)
+                || (FORMAT_INT.equals(itemFormat) && SUBTYPE_RANGE.equals(slice.getSubType()));
+    }
+
+    /**
+     * @return Whether this item is appropriate to be considered a "start" item, i.e. go in the
+     *         front slot of a row.
+     */
+    private static boolean isStartType(SliceItem item) {
+        final String type = item.getFormat();
+        return item.hasHint(HINT_TITLE)
+                && ((FORMAT_ACTION.equals(type) && (SliceQuery.find(item, FORMAT_IMAGE) != null))
+                    || FORMAT_IMAGE.equals(type)
+                    || FORMAT_TIMESTAMP.equals(type));
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/RowView.java b/slices/view/src/main/java/androidx/app/slice/widget/RowView.java
new file mode 100644
index 0000000..3a472ad
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/RowView.java
@@ -0,0 +1,455 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
+import static android.app.slice.Slice.HINT_NO_TINT;
+import static android.app.slice.Slice.HINT_SELECTED;
+import static android.app.slice.Slice.SUBTYPE_TOGGLE;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_TIMESTAMP;
+
+import static androidx.app.slice.core.SliceHints.EXTRA_RANGE_VALUE;
+import static androidx.app.slice.core.SliceHints.SUBTYPE_MAX;
+import static androidx.app.slice.core.SliceHints.SUBTYPE_VALUE;
+import static androidx.app.slice.widget.SliceView.MODE_LARGE;
+import static androidx.app.slice.widget.SliceView.MODE_SMALL;
+
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
+import android.app.PendingIntent.CanceledException;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.support.annotation.ColorInt;
+import android.support.annotation.RestrictTo;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.SeekBar;
+import android.widget.Switch;
+import android.widget.TextView;
+import android.widget.ToggleButton;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+import androidx.app.slice.view.R;
+
+/**
+ * Row item is in small template format and can be used to construct list items for use
+ * with {@link LargeTemplateView}.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(23)
+public class RowView extends SliceChildView implements View.OnClickListener {
+
+    private static final String TAG = "RowView";
+
+    // The number of items that fit on the right hand side of a small slice
+    private static final int MAX_END_ITEMS = 3;
+
+    private LinearLayout mStartContainer;
+    private LinearLayout mContent;
+    private TextView mPrimaryText;
+    private TextView mSecondaryText;
+    private View mDivider;
+    private ArrayList<CompoundButton> mToggles = new ArrayList<>();
+    private LinearLayout mEndContainer;
+    private SeekBar mSeekBar;
+    private ProgressBar mProgressBar;
+
+    private boolean mInSmallMode;
+    private int mRowIndex;
+    private RowContent mRowContent;
+    private SliceItem mRowAction;
+    private boolean mIsHeader;
+
+    private int mIconSize;
+    private int mPadding;
+
+    public RowView(Context context) {
+        super(context);
+        mIconSize = getContext().getResources().getDimensionPixelSize(R.dimen.abc_slice_icon_size);
+        mPadding = getContext().getResources().getDimensionPixelSize(R.dimen.abc_slice_padding);
+        inflate(context, R.layout.abc_slice_small_template, this);
+
+        mStartContainer = (LinearLayout) findViewById(R.id.icon_frame);
+        mContent = (LinearLayout) findViewById(android.R.id.content);
+        mPrimaryText = (TextView) findViewById(android.R.id.title);
+        mSecondaryText = (TextView) findViewById(android.R.id.summary);
+        mDivider = findViewById(R.id.divider);
+        mEndContainer = (LinearLayout) findViewById(android.R.id.widget_frame);
+        mSeekBar = (SeekBar) findViewById(R.id.seek_bar);
+        mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
+    }
+
+    @Override
+    public @SliceView.SliceMode int getMode() {
+        return mInSmallMode ? MODE_SMALL : MODE_LARGE;
+    }
+
+    @Override
+    public void setTint(@ColorInt int tintColor) {
+        super.setTint(tintColor);
+        if (mRowContent != null) {
+            // TODO -- can be smarter about this
+            resetView();
+            populateViews();
+        }
+    }
+
+    /**
+     * This is called when RowView is being used as a component in a large template.
+     */
+    @Override
+    public void setSliceItem(SliceItem slice, boolean isHeader, int index,
+            SliceView.OnSliceActionListener observer) {
+        setSliceActionListener(observer);
+        mInSmallMode = false;
+        mRowIndex = index;
+        mIsHeader = isHeader;
+        mRowContent = new RowContent(slice, mIsHeader);
+        populateViews();
+    }
+
+    /**
+     * This is called when RowView is being used as a small template.
+     */
+    @Override
+    public void setSlice(Slice slice) {
+        mInSmallMode = true;
+        mRowIndex = 0;
+        mIsHeader = true;
+        ListContent lc = new ListContent(slice);
+        mRowContent = new RowContent(lc.getHeaderItem(), true /* isHeader */);
+        populateViews();
+    }
+
+    private void populateViews() {
+        resetView();
+        boolean showStart = false;
+        final SliceItem startItem = mRowContent.getStartItem();
+        if (startItem != null) {
+            final EventInfo info = new EventInfo(getMode(),
+                    EventInfo.ACTION_TYPE_BUTTON,
+                    EventInfo.ROW_TYPE_LIST, mRowIndex);
+            info.setPosition(EventInfo.POSITION_START, 0, 1);
+            showStart = addItem(startItem, mTintColor, true /* isStart */, 0 /* padding */, info);
+        }
+        mStartContainer.setVisibility(showStart ? View.VISIBLE : View.GONE);
+
+        final SliceItem titleItem = mRowContent.getTitleItem();
+        if (titleItem != null) {
+            mPrimaryText.setText(titleItem.getText());
+        }
+        mPrimaryText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mIsHeader
+                ? mHeaderTitleSize
+                : mTitleSize);
+        mPrimaryText.setTextColor(mTitleColor);
+        mPrimaryText.setVisibility(titleItem != null ? View.VISIBLE : View.GONE);
+
+        final SliceItem subTitle = mInSmallMode
+                ? mRowContent.getSummaryItem()
+                : mRowContent.getSubtitleItem();
+        if (subTitle != null) {
+            mSecondaryText.setText(subTitle.getText());
+        }
+        mSecondaryText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mIsHeader
+                ? mHeaderSubtitleSize
+                : mSubtitleSize);
+        mSecondaryText.setTextColor(mSubtitleColor);
+        mSecondaryText.setVisibility(subTitle != null ? View.VISIBLE : View.GONE);
+
+        final SliceItem range = mRowContent.getRange();
+        if (range != null) {
+            addRange(range);
+            return;
+        }
+
+        mRowAction = mRowContent.getContentIntent();
+        ArrayList<SliceItem> endItems = mRowContent.getEndItems();
+        boolean hasRowAction = mRowAction != null;
+        if (endItems.isEmpty()) {
+            if (hasRowAction) setViewClickable(this, true);
+            return;
+        }
+
+        // If we're here we might be able to show end items
+        int itemCount = 0;
+        // Prefer to show actions as end items if possible; fall back to the first format type.
+        String desiredFormat = mRowContent.endItemsContainAction()
+                ? FORMAT_ACTION : endItems.get(0).getFormat();
+        boolean firstItemIsADefaultToggle = false;
+        for (int i = 0; i < endItems.size(); i++) {
+            final SliceItem endItem = endItems.get(i);
+            final String endFormat = endItem.getFormat();
+            // Only show one type of format at the end of the slice, use whatever is first
+            if (itemCount <= MAX_END_ITEMS
+                    && (desiredFormat.equals(endFormat)
+                    || FORMAT_TIMESTAMP.equals(endFormat))) {
+                final EventInfo info = new EventInfo(getMode(),
+                        EventInfo.ACTION_TYPE_BUTTON,
+                        EventInfo.ROW_TYPE_LIST, mRowIndex);
+                info.setPosition(EventInfo.POSITION_END, i,
+                        Math.min(endItems.size(), MAX_END_ITEMS));
+                if (addItem(endItem, mTintColor, false /* isStart */, mPadding, info)) {
+                    itemCount++;
+                    if (itemCount == 1) {
+                        firstItemIsADefaultToggle = !mToggles.isEmpty()
+                                && SliceQuery.find(endItem.getSlice(), FORMAT_IMAGE) == null;
+                    }
+                }
+            }
+        }
+
+        boolean hasEndItemAction = FORMAT_ACTION.contentEquals(desiredFormat);
+        // If there is a row action and the first end item is a default toggle, show the divider.
+        mDivider.setVisibility(hasRowAction && firstItemIsADefaultToggle
+                ? View.VISIBLE : View.GONE);
+        if (hasRowAction) {
+            if (itemCount > 0 && hasEndItemAction) {
+                setViewClickable(mContent, true);
+            } else {
+                setViewClickable(this, true);
+            }
+        } else {
+            // If the only end item is an action, make the whole row clickable.
+            if (mRowContent.endItemsContainAction() && itemCount == 1) {
+                if (!SUBTYPE_TOGGLE.equals(endItems.get(0).getSubType())) {
+                    mRowAction = endItems.get(0);
+                }
+                setViewClickable(this, true);
+            }
+        }
+    }
+
+    private void addRange(final SliceItem range) {
+        final ProgressBar progressBar;
+        if (FORMAT_ACTION.equals(range.getFormat())) {
+            // An input range is displayed as a seek bar
+            progressBar = mSeekBar;
+            mSeekBar.setVisibility(View.VISIBLE);
+            SliceItem thumb = SliceQuery.find(range, FORMAT_IMAGE);
+            if (thumb != null) {
+                mSeekBar.setThumb(thumb.getIcon().loadDrawable(getContext()));
+            }
+            mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+                @Override
+                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+                    try {
+                        PendingIntent pi = range.getAction();
+                        Intent i = new Intent().putExtra(EXTRA_RANGE_VALUE, progress);
+                        // TODO: sending this PendingIntent should be rate limited.
+                        pi.send(getContext(), 0, i, null, null);
+                    } catch (CanceledException e) { }
+                }
+
+                @Override
+                public void onStartTrackingTouch(SeekBar seekBar) { }
+
+                @Override
+                public void onStopTrackingTouch(SeekBar seekBar) { }
+            });
+        } else {
+            // A range is displayed as a progress bar.
+            progressBar = mProgressBar;
+            mProgressBar.setVisibility(View.VISIBLE);
+        }
+        SliceItem max = SliceQuery.findSubtype(range, FORMAT_INT, SUBTYPE_MAX);
+        if (max != null) {
+            progressBar.setMax(max.getInt());
+        }
+        SliceItem progress = SliceQuery.findSubtype(range, FORMAT_INT, SUBTYPE_VALUE);
+        if (progress != null) {
+            progressBar.setProgress(progress.getInt());
+        }
+    }
+
+    /**
+     * Add a toggle view to container.
+     */
+    private void addToggle(final SliceItem toggleItem, int color, ViewGroup container) {
+        // Check if this is a custom toggle
+        Icon checkedIcon = null;
+        List<SliceItem> sliceItems = toggleItem.getSlice().getItems();
+        if (sliceItems.size() > 0) {
+            checkedIcon = FORMAT_IMAGE.equals(sliceItems.get(0).getFormat())
+                    ? sliceItems.get(0).getIcon()
+                    : null;
+        }
+        final CompoundButton toggle;
+        if (checkedIcon != null) {
+            if (color != -1) {
+                // TODO - Should custom toggle buttons be tinted? What if the app wants diff
+                // colors per state?
+                checkedIcon.setTint(color);
+            }
+            toggle = new ToggleButton(getContext());
+            ((ToggleButton) toggle).setTextOff("");
+            ((ToggleButton) toggle).setTextOn("");
+            toggle.setBackground(checkedIcon.loadDrawable(getContext()));
+            container.addView(toggle);
+            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) toggle.getLayoutParams();
+            lp.width = mIconSize;
+            lp.height = mIconSize;
+        } else {
+            toggle = new Switch(getContext());
+            container.addView(toggle);
+        }
+        toggle.setChecked(SliceQuery.hasHints(toggleItem.getSlice(), HINT_SELECTED));
+        toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                try {
+                    PendingIntent pi = toggleItem.getAction();
+                    Intent i = new Intent().putExtra(EXTRA_TOGGLE_STATE, isChecked);
+                    pi.send(getContext(), 0, i, null, null);
+                    if (mObserver != null) {
+                        final EventInfo info = new EventInfo(getMode(),
+                                EventInfo.ACTION_TYPE_TOGGLE,
+                                EventInfo.ROW_TYPE_LIST, mRowIndex);
+                        info.state = isChecked ? EventInfo.STATE_ON : EventInfo.STATE_OFF;
+                        mObserver.onSliceAction(info, toggleItem);
+                    }
+                } catch (CanceledException e) {
+                    toggle.setSelected(!isChecked);
+                }
+            }
+        });
+        mToggles.add(toggle);
+    }
+
+    /**
+     * Adds simple items to a container. Simple items include actions with icons, images, or
+     * timestamps.
+     */
+    private boolean addItem(SliceItem sliceItem, int color, boolean isStart, int padding,
+            final EventInfo info) {
+        SliceItem image = null;
+        SliceItem action = null;
+        SliceItem timeStamp = null;
+        ViewGroup container = isStart ? mStartContainer : mEndContainer;
+        if (FORMAT_ACTION.equals(sliceItem.getFormat())) {
+            if (SUBTYPE_TOGGLE.equals(sliceItem.getSubType())) {
+                addToggle(sliceItem, color, container);
+                return true;
+            }
+            image = SliceQuery.find(sliceItem.getSlice(), FORMAT_IMAGE);
+            timeStamp = SliceQuery.find(sliceItem.getSlice(), FORMAT_TIMESTAMP);
+            action = sliceItem;
+        } else if (FORMAT_IMAGE.equals(sliceItem.getFormat())) {
+            image = sliceItem;
+        } else if (FORMAT_TIMESTAMP.equals(sliceItem.getFormat())) {
+            timeStamp = sliceItem;
+        }
+        View addedView = null;
+        if (image != null) {
+            ImageView iv = new ImageView(getContext());
+            iv.setImageIcon(image.getIcon());
+            if (color != -1 && !sliceItem.hasHint(HINT_NO_TINT)) {
+                iv.setColorFilter(color);
+            }
+            container.addView(iv);
+            LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) iv.getLayoutParams();
+            lp.width = mIconSize;
+            lp.height = mIconSize;
+            lp.setMarginStart(padding);
+            addedView = iv;
+        } else if (timeStamp != null) {
+            TextView tv = new TextView(getContext());
+            tv.setText(SliceViewUtil.getRelativeTimeString(sliceItem.getTimestamp()));
+            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, mSubtitleSize);
+            tv.setTextColor(mSubtitleColor);
+            container.addView(tv);
+            addedView = tv;
+        }
+        if (action != null && addedView != null) {
+            final SliceItem sliceAction = action;
+            addedView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    try {
+                        sliceAction.getAction().send();
+                        if (mObserver != null) {
+                            mObserver.onSliceAction(info, sliceAction);
+                        }
+                    } catch (CanceledException e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
+            addedView.setBackground(SliceViewUtil.getDrawable(getContext(),
+                    android.R.attr.selectableItemBackground));
+        }
+        return addedView != null;
+    }
+
+    @Override
+    public void onClick(View view) {
+        if (mRowAction != null && FORMAT_ACTION.equals(mRowAction.getFormat())) {
+            // Check for a row action
+            try {
+                mRowAction.getAction().send();
+                if (mObserver != null) {
+                    EventInfo info = new EventInfo(getMode(), EventInfo.ACTION_TYPE_CONTENT,
+                            EventInfo.ROW_TYPE_LIST, mRowIndex);
+                    mObserver.onSliceAction(info, mRowAction);
+                }
+            } catch (CanceledException e) {
+                Log.w(TAG, "PendingIntent for slice cannot be sent", e);
+            }
+        } else if (mToggles.size() == 1) {
+            // If there is only one toggle and no row action, just toggle it.
+            mToggles.get(0).toggle();
+        }
+    }
+
+    private void setViewClickable(View layout, boolean isClickable) {
+        layout.setOnClickListener(isClickable ? this : null);
+        layout.setBackground(isClickable ? SliceViewUtil.getDrawable(getContext(),
+                android.R.attr.selectableItemBackground) : null);
+        layout.setClickable(isClickable);
+    }
+
+    @Override
+    public void resetView() {
+        setViewClickable(this, false);
+        setViewClickable(mContent, false);
+        mStartContainer.removeAllViews();
+        mEndContainer.removeAllViews();
+        mPrimaryText.setText(null);
+        mSecondaryText.setText(null);
+        mToggles.clear();
+        mRowAction = null;
+        mDivider.setVisibility(View.GONE);
+        mSeekBar.setVisibility(View.GONE);
+        mProgressBar.setVisibility(View.GONE);
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/ShortcutView.java b/slices/view/src/main/java/androidx/app/slice/widget/ShortcutView.java
new file mode 100644
index 0000000..75e97b1
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/ShortcutView.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_LARGE;
+import static android.app.slice.Slice.HINT_TITLE;
+import static android.app.slice.Slice.SUBTYPE_COLOR;
+import static android.app.slice.Slice.SUBTYPE_SOURCE;
+import static android.app.slice.SliceItem.FORMAT_ACTION;
+import static android.app.slice.SliceItem.FORMAT_IMAGE;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+import static android.app.slice.SliceItem.FORMAT_TEXT;
+
+import android.annotation.TargetApi;
+import android.app.PendingIntent;
+import android.app.PendingIntent.CanceledException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.shapes.OvalShape;
+import android.net.Uri;
+import android.support.annotation.RestrictTo;
+import android.widget.ImageView;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+import androidx.app.slice.view.R;
+
+/**
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(23)
+public class ShortcutView extends SliceChildView {
+
+    private static final String TAG = "ShortcutView";
+
+    private Slice mSlice;
+    private Uri mUri;
+    private SliceItem mActionItem;
+    private SliceItem mLabel;
+    private SliceItem mIcon;
+
+    private int mLargeIconSize;
+    private int mSmallIconSize;
+
+    public ShortcutView(Context context) {
+        super(context);
+        final Resources res = getResources();
+        mSmallIconSize = res.getDimensionPixelSize(R.dimen.abc_slice_icon_size);
+        mLargeIconSize = res.getDimensionPixelSize(R.dimen.abc_slice_shortcut_size);
+    }
+
+    @Override
+    public void setSlice(Slice slice) {
+        resetView();
+        mSlice = slice;
+        determineShortcutItems(getContext(), slice);
+        SliceItem colorItem = SliceQuery.findSubtype(slice, FORMAT_INT, SUBTYPE_COLOR);
+        if (colorItem == null) {
+            colorItem = SliceQuery.findSubtype(slice, FORMAT_INT, SUBTYPE_COLOR);
+        }
+        final int color = colorItem != null
+                ? colorItem.getInt()
+                : SliceViewUtil.getColorAccent(getContext());
+        ShapeDrawable circle = new ShapeDrawable(new OvalShape());
+        circle.setTint(color);
+        ImageView iv = new ImageView(getContext());
+        iv.setBackground(circle);
+        addView(iv);
+        if (mIcon != null) {
+            final boolean isLarge = mIcon.hasHint(HINT_LARGE)
+                    || SUBTYPE_SOURCE.equals(mIcon.getSubType());
+            final int iconSize = isLarge ? mLargeIconSize : mSmallIconSize;
+            SliceViewUtil.createCircledIcon(getContext(), iconSize, mIcon.getIcon(),
+                    isLarge, this /* parent */);
+            mUri = slice.getUri();
+            setClickable(true);
+        } else {
+            setClickable(false);
+        }
+    }
+
+    @Override
+    public @SliceView.SliceMode int getMode() {
+        return SliceView.MODE_SHORTCUT;
+    }
+
+    @Override
+    public boolean performClick() {
+        if (!callOnClick()) {
+            try {
+                if (mActionItem != null) {
+                    mActionItem.getAction().send();
+                } else {
+                    Intent intent = new Intent(Intent.ACTION_VIEW).setData(mUri);
+                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    getContext().startActivity(intent);
+                }
+                if (mObserver != null) {
+                    EventInfo ei = new EventInfo(SliceView.MODE_SHORTCUT,
+                            EventInfo.ACTION_TYPE_BUTTON,
+                            EventInfo.ROW_TYPE_SHORTCUT, 0 /* rowIndex */);
+                    SliceItem interactedItem = mActionItem != null
+                            ? mActionItem
+                            : new SliceItem(mSlice, FORMAT_SLICE, null /* subtype */,
+                                    mSlice.getHints());
+                    mObserver.onSliceAction(ei, interactedItem);
+                }
+            } catch (CanceledException e) {
+                e.printStackTrace();
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Looks at the slice and determines which items are best to use to compose the shortcut.
+     */
+    private void determineShortcutItems(Context context, Slice slice) {
+        SliceItem titleItem = SliceQuery.find(slice, FORMAT_ACTION,
+                HINT_TITLE, null);
+
+        if (titleItem != null) {
+            // Preferred case: hinted action containing hinted image and text
+            mActionItem = titleItem;
+            mIcon = SliceQuery.find(titleItem.getSlice(), FORMAT_IMAGE, HINT_TITLE,
+                    null);
+            mLabel = SliceQuery.find(titleItem.getSlice(), FORMAT_TEXT, HINT_TITLE,
+                    null);
+        } else {
+            // No hinted action; just use the first one
+            mActionItem = SliceQuery.find(slice, FORMAT_ACTION, (String) null, null);
+        }
+        // First fallback: any hinted image and text
+        if (mIcon == null) {
+            mIcon = SliceQuery.find(slice, FORMAT_IMAGE, HINT_TITLE,
+                    null);
+        }
+        if (mLabel == null) {
+            mLabel = SliceQuery.find(slice, FORMAT_TEXT, HINT_TITLE,
+                    null);
+        }
+        // Second fallback: first image and text
+        if (mIcon == null) {
+            mIcon = SliceQuery.find(slice, FORMAT_IMAGE, (String) null,
+                    null);
+        }
+        if (mLabel == null) {
+            mLabel = SliceQuery.find(slice, FORMAT_TEXT, (String) null,
+                    null);
+        }
+        // Final fallback: use app info
+        if (mIcon == null || mLabel == null || mActionItem == null) {
+            PackageManager pm = context.getPackageManager();
+            ProviderInfo providerInfo = pm.resolveContentProvider(
+                    slice.getUri().getAuthority(), 0);
+            ApplicationInfo appInfo = providerInfo.applicationInfo;
+            if (appInfo != null) {
+                if (mIcon == null) {
+                    Slice.Builder sb = new Slice.Builder(slice.getUri());
+                    Drawable icon = pm.getApplicationIcon(appInfo);
+                    sb.addIcon(SliceViewUtil.createIconFromDrawable(icon), HINT_LARGE);
+                    mIcon = sb.build().getItems().get(0);
+                }
+                if (mLabel == null) {
+                    Slice.Builder sb = new Slice.Builder(slice.getUri());
+                    sb.addText(pm.getApplicationLabel(appInfo), null);
+                    mLabel = sb.build().getItems().get(0);
+                }
+                if (mActionItem == null) {
+                    mActionItem = new SliceItem(PendingIntent.getActivity(context, 0,
+                            pm.getLaunchIntentForPackage(appInfo.packageName), 0),
+                            new Slice.Builder(slice.getUri()).build(), FORMAT_SLICE,
+                            null /* subtype */, null);
+                }
+            }
+        }
+    }
+
+    @Override
+    public void resetView() {
+        mSlice = null;
+        mUri = null;
+        mActionItem = null;
+        mLabel = null;
+        mIcon = null;
+        setBackground(null);
+        removeAllViews();
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/SliceChildView.java b/slices/view/src/main/java/androidx/app/slice/widget/SliceChildView.java
new file mode 100644
index 0000000..a9faf86
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/SliceChildView.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2018 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 androidx.app.slice.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.view.R;
+
+/**
+ * Base class for children views of {@link SliceView}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public abstract class SliceChildView extends FrameLayout {
+
+    protected SliceView.OnSliceActionListener mObserver;
+    protected int mTintColor = -1;
+    protected int mTitleColor;
+    protected int mSubtitleColor;
+    protected int mHeaderTitleSize;
+    protected int mHeaderSubtitleSize;
+    protected int mTitleSize;
+    protected int mSubtitleSize;
+    protected int mGridTitleSize;
+    protected int mGridSubtitleSize;
+
+    public SliceChildView(@NonNull Context context) {
+        super(context);
+    }
+
+    public SliceChildView(Context context, AttributeSet attributeSet) {
+        this(context);
+    }
+
+    /**
+     * @return the mode of the slice being presented.
+     */
+    public abstract int getMode();
+
+    /**
+     * @param slice the slice to show in this view.
+     */
+    public abstract void setSlice(Slice slice);
+
+    /**
+     * Called when the view should be reset.
+     */
+    public abstract void resetView();
+
+    /**
+     * @return the view.
+     */
+    public View getView() {
+        return this;
+    }
+
+    /**
+     * Sets a custom color to use for tinting elements like icons for this view.
+     */
+    public void setTint(@ColorInt int tintColor) {
+        mTintColor = tintColor;
+    }
+
+    /**
+     * Sets the observer to notify when an interaction events occur on the view.
+     */
+    public void setSliceActionListener(SliceView.OnSliceActionListener observer) {
+        mObserver = observer;
+    }
+
+    /**
+     * Populates style information for this view.
+     */
+    public void setStyle(AttributeSet attrs) {
+        TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.SliceView,
+                R.attr.sliceViewStyle, R.style.Widget_SliceView);
+        try {
+            int themeColor = a.getColor(R.styleable.SliceView_tintColor, -1);
+            mTintColor = themeColor != -1 ? themeColor : mTintColor;
+            mTitleColor = a.getColor(R.styleable.SliceView_titleColor, 0);
+            mSubtitleColor = a.getColor(R.styleable.SliceView_subtitleColor, 0);
+            mHeaderTitleSize = (int) a.getDimension(
+                    R.styleable.SliceView_headerTitleSize, 0);
+            mHeaderSubtitleSize = (int) a.getDimension(
+                    R.styleable.SliceView_headerSubtitleSize, 0);
+            mTitleSize = (int) a.getDimension(R.styleable.SliceView_titleSize, 0);
+            mSubtitleSize = (int) a.getDimension(
+                    R.styleable.SliceView_subtitleSize, 0);
+            mGridTitleSize = (int) a.getDimension(R.styleable.SliceView_gridTitleSize, 0);
+            mGridSubtitleSize = (int) a.getDimension(
+                    R.styleable.SliceView_gridSubtitleSize, 0);
+        } finally {
+            a.recycle();
+        }
+    }
+
+    /**
+     * Called when the slice being displayed in this view is an element of a larger list.
+     */
+    public void setSliceItem(SliceItem slice, boolean isHeader, int rowIndex,
+            SliceView.OnSliceActionListener observer) {
+        // Do nothing
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/SliceLiveData.java b/slices/view/src/main/java/androidx/app/slice/widget/SliceLiveData.java
new file mode 100644
index 0000000..5da98d2
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/SliceLiveData.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.support.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.arch.lifecycle.LiveData;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+
+import java.util.Arrays;
+import java.util.List;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceManager;
+import androidx.app.slice.SliceSpec;
+import androidx.app.slice.SliceSpecs;
+
+/**
+ * Class with factory methods for creating LiveData that observes slices.
+ *
+ * @see #fromUri(Context, Uri)
+ * @see LiveData
+ */
+public final class SliceLiveData {
+
+    /**
+     * @hide
+     */
+    @RestrictTo(LIBRARY)
+    public static final List<SliceSpec> SUPPORTED_SPECS = Arrays.asList(SliceSpecs.BASIC,
+            SliceSpecs.LIST);
+
+    /**
+     * Produces an {@link LiveData} that tracks a Slice for a given Uri. To use
+     * this method your app must have the permission to the slice Uri or hold
+     * {@link android.Manifest.permission#BIND_SLICE}).
+     */
+    public static LiveData<Slice> fromUri(Context context, Uri uri) {
+        return new SliceLiveDataImpl(context.getApplicationContext(), uri);
+    }
+
+    /**
+     * Produces an {@link LiveData} that tracks a Slice for a given Intent. To use
+     * this method your app must have the permission to the slice Uri or hold
+     * {@link android.Manifest.permission#BIND_SLICE}).
+     */
+    public static LiveData<Slice> fromIntent(@NonNull Context context, @NonNull Intent intent) {
+        return new SliceLiveDataImpl(context.getApplicationContext(), intent);
+    }
+
+    private static class SliceLiveDataImpl extends LiveData<Slice> {
+        private final Intent mIntent;
+        private final SliceManager mSliceManager;
+        private Uri mUri;
+
+        private SliceLiveDataImpl(Context context, Uri uri) {
+            super();
+            mSliceManager = SliceManager.getInstance(context);
+            mUri = uri;
+            mIntent = null;
+            // TODO: Check if uri points at a Slice?
+        }
+
+        private SliceLiveDataImpl(Context context, Intent intent) {
+            super();
+            mSliceManager = SliceManager.getInstance(context);
+            mUri = null;
+            mIntent = intent;
+        }
+
+        @Override
+        protected void onActive() {
+            AsyncTask.execute(mUpdateSlice);
+            if (mUri != null) {
+                mSliceManager.registerSliceCallback(mUri, mSliceCallback);
+            }
+        }
+
+        @Override
+        protected void onInactive() {
+            if (mUri != null) {
+                mSliceManager.unregisterSliceCallback(mUri, mSliceCallback);
+            }
+        }
+
+        private final Runnable mUpdateSlice = new Runnable() {
+            @Override
+            public void run() {
+                Slice s = mUri != null ? mSliceManager.bindSlice(mUri)
+                        : mSliceManager.bindSlice(mIntent);
+                if (mUri == null && s != null) {
+                    mUri = s.getUri();
+                    mSliceManager.registerSliceCallback(mUri, mSliceCallback);
+                }
+                postValue(s);
+            }
+        };
+
+        private final SliceManager.SliceCallback mSliceCallback = new SliceManager.SliceCallback() {
+            @Override
+            public void onSliceUpdated(@NonNull Slice s) {
+                postValue(s);
+            }
+        };
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/SliceView.java b/slices/view/src/main/java/androidx/app/slice/widget/SliceView.java
new file mode 100644
index 0000000..3d8ceef
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/SliceView.java
@@ -0,0 +1,412 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import static android.app.slice.Slice.HINT_ACTIONS;
+import static android.app.slice.Slice.HINT_HORIZONTAL;
+import static android.app.slice.Slice.SUBTYPE_COLOR;
+import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
+
+import android.arch.lifecycle.Observer;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.ColorDrawable;
+import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.List;
+
+import androidx.app.slice.Slice;
+import androidx.app.slice.SliceItem;
+import androidx.app.slice.core.SliceQuery;
+import androidx.app.slice.view.R;
+
+/**
+ * A view for displaying a {@link Slice} which is a piece of app content and actions. SliceView is
+ * able to present slice content in a templated format outside of the associated app. The way this
+ * content is displayed depends on the structure of the slice, the hints associated with the
+ * content, and the mode that SliceView is configured for. The modes that SliceView supports are:
+ * <ul>
+ * <li><b>Shortcut</b>: A shortcut is presented as an icon and a text label representing the main
+ * content or action associated with the slice.</li>
+ * <li><b>Small</b>: The small format has a restricted height and can present a single
+ * {@link SliceItem} or a limited collection of items.</li>
+ * <li><b>Large</b>: The large format displays multiple small templates in a list, if scrolling is
+ * not enabled (see {@link #setScrollable(boolean)}) the view will show as many items as it can
+ * comfortably fit.</li>
+ * </ul>
+ * <p>
+ * When constructing a slice, the contents of it can be annotated with hints, these provide the OS
+ * with some information on how the content should be displayed. For example, text annotated with
+ * {@link android.app.slice.Slice#HINT_TITLE} would be placed in the title position of a template.
+ * A slice annotated with {@link android.app.slice.Slice#HINT_LIST} would present the child items
+ * of that slice in a list.
+ * <p>
+ * Example usage:
+ *
+ * <pre class="prettyprint">
+ * SliceView v = new SliceView(getContext());
+ * v.setMode(desiredMode);
+ * LiveData<Slice> liveData = SliceLiveData.fromUri(sliceUri);
+ * liveData.observe(lifecycleOwner, v);
+ * </pre>
+ * @see SliceLiveData
+ */
+public class SliceView extends ViewGroup implements Observer<Slice> {
+
+    private static final String TAG = "SliceView";
+
+    /**
+     * Implement this interface to be notified of interactions with the slice displayed
+     * in this view.
+     * @see EventInfo
+     */
+    public interface OnSliceActionListener {
+        /**
+         * Called when an interaction has occurred with an element in this view.
+         * @param info the type of event that occurred.
+         * @param item the specific item within the {@link Slice} that was interacted with.
+         */
+        void onSliceAction(@NonNull EventInfo info, @NonNull SliceItem item);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    @IntDef({
+            MODE_SMALL, MODE_LARGE, MODE_SHORTCUT
+    })
+    public @interface SliceMode {}
+
+    /**
+     * Mode indicating this slice should be presented in small template format.
+     */
+    public static final int MODE_SMALL       = 1;
+    /**
+     * Mode indicating this slice should be presented in large template format.
+     */
+    public static final int MODE_LARGE       = 2;
+    /**
+     * Mode indicating this slice should be presented as an icon. A shortcut requires an intent,
+     * icon, and label. This can be indicated by using {@link android.app.slice.Slice#HINT_TITLE}
+     * on an action in a slice.
+     */
+    public static final int MODE_SHORTCUT    = 3;
+
+    /**
+     * Will select the type of slice binding based on size of the View. TODO: Put in some info about
+     * that selection.
+     */
+    private static final int MODE_AUTO = 0;
+
+    private int mMode = MODE_AUTO;
+    private SliceChildView mCurrentView;
+    private Slice mCurrentSlice;
+    private final ActionRow mActions;
+    private final int mShortcutSize;
+    private OnSliceActionListener mSliceObserver;
+
+    private boolean mShowActions = true;
+    private boolean mIsScrollable = true;
+
+    private AttributeSet mAttrs;
+    private int mThemeTintColor;
+
+    public SliceView(Context context) {
+        this(context, null);
+    }
+
+    public SliceView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, R.attr.sliceViewStyle);
+    }
+
+    public SliceView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, R.style.Widget_SliceView);
+    }
+
+    public SliceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        mAttrs = attrs;
+        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SliceView,
+                defStyleAttr, defStyleRes);
+        try {
+            mThemeTintColor = a.getColor(R.styleable.SliceView_tintColor, -1);
+        } finally {
+            a.recycle();
+        }
+        mActions = new ActionRow(getContext(), true);
+        mActions.setBackground(new ColorDrawable(0xffeeeeee));
+        mCurrentView = new LargeTemplateView(getContext());
+        addView(mCurrentView.getView(), getChildLp(mCurrentView.getView()));
+        addView(mActions, getChildLp(mActions));
+        mShortcutSize = getContext().getResources()
+                .getDimensionPixelSize(R.dimen.abc_slice_shortcut_size);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        int childWidth = MeasureSpec.getSize(widthMeasureSpec);
+        int childHeight = MeasureSpec.getSize(heightMeasureSpec);
+        if (MODE_SHORTCUT == mMode) {
+            // TODO: consider scaling the shortcut to fit
+            childWidth = mShortcutSize;
+            width = mShortcutSize;
+        }
+        final int left = getPaddingLeft();
+        final int top = getPaddingTop();
+        final int right = getPaddingRight();
+        final int bot = getPaddingBottom();
+
+        // Measure the children without the padding
+        childWidth -= left + right;
+        childHeight -= top + bot;
+        int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY);
+        int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY);
+        measureChildren(childWidthMeasureSpec, childHeightMeasureSpec);
+
+        // Figure out parent height
+        int actionHeight = mActions.getVisibility() != View.GONE
+                ? mActions.getMeasuredHeight()
+                : 0;
+        int currViewHeight = mCurrentView.getView().getMeasuredHeight() + top + bot;
+        int newHeightSpec = MeasureSpec.makeMeasureSpec(currViewHeight + actionHeight,
+                MeasureSpec.EXACTLY);
+        // Figure out parent width
+        width += left + right;
+        setMeasuredDimension(width, newHeightSpec);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        View v = mCurrentView.getView();
+        final int left = getPaddingLeft();
+        final int top = getPaddingTop();
+        final int right = getPaddingRight();
+        final int bottom = getPaddingBottom();
+        v.layout(left, top, left + v.getMeasuredWidth(), top + v.getMeasuredHeight());
+        if (mActions.getVisibility() != View.GONE) {
+            mActions.layout(left,
+                    top + v.getMeasuredHeight() + bottom,
+                    left + mActions.getMeasuredWidth() + right,
+                    top + v.getMeasuredHeight() + bottom + mActions.getMeasuredHeight());
+        }
+    }
+
+    @Override
+    public void onChanged(@Nullable Slice slice) {
+        setSlice(slice);
+    }
+
+    /**
+     * Populates this view to the provided {@link Slice}.
+     *
+     * This will not update automatically if the slice content changes, for live
+     * content see {@link SliceLiveData}.
+     */
+    public void setSlice(@Nullable Slice slice) {
+        if (mCurrentSlice != null && slice != null
+                && !mCurrentSlice.getUri().equals(slice.getUri())) {
+            // New slice, reset view
+            mCurrentView.resetView();
+        }
+        mCurrentSlice = slice;
+        reinflate();
+    }
+
+    /**
+     * Set the mode this view should present in.
+     */
+    public void setMode(@SliceMode int mode) {
+        setMode(mode, false /* animate */);
+    }
+
+    /**
+     * Set whether this view should allow scrollable content when presenting in {@link #MODE_LARGE}.
+     */
+    public void setScrollable(boolean isScrollable) {
+        mIsScrollable = isScrollable;
+        reinflate();
+    }
+
+    /**
+     * Sets the listener to notify when an interaction events occur on the view.
+     * @see EventInfo
+     */
+    public void setOnSliceActionListener(@Nullable OnSliceActionListener observer) {
+        mSliceObserver = observer;
+        mCurrentView.setSliceActionListener(mSliceObserver);
+    }
+
+    /**
+     * Contents of a slice such as icons, text, and controls (e.g. toggle) can be tinted. Normally
+     * a color for tinting will be provided by the slice. Using this method will override
+     * this color information and instead tint elements with the provided color.
+     *
+     * @param tintColor the color to use for tinting contents of this view.
+     */
+    public void setTint(int tintColor) {
+        mThemeTintColor = tintColor;
+        mCurrentView.setTint(tintColor);
+    }
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public void setMode(@SliceMode int mode, boolean animate) {
+        if (animate) {
+            Log.e(TAG, "Animation not supported yet");
+        }
+        mMode = mode;
+        reinflate();
+    }
+
+    /**
+     * @return the mode this view is presenting in.
+     */
+    public @SliceMode int getMode() {
+        if (mMode == MODE_AUTO) {
+            return MODE_LARGE;
+        }
+        return mMode;
+    }
+
+    /**
+     * @hide
+     *
+     * Whether this view should show a row of actions with it.
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public void setShowActionRow(boolean show) {
+        mShowActions = show;
+        reinflate();
+    }
+
+    private SliceChildView createView(int mode) {
+        switch (mode) {
+            case MODE_SHORTCUT:
+                return new ShortcutView(getContext());
+            case MODE_SMALL:
+                // Check if it's horizontal and use a grid instead
+                if (SliceQuery.hasHints(mCurrentSlice, HINT_HORIZONTAL)) {
+                    return new GridRowView(getContext());
+                } else {
+                    return new RowView(getContext());
+                }
+        }
+        return new LargeTemplateView(getContext());
+    }
+
+    private void reinflate() {
+        if (mCurrentSlice == null) {
+            mCurrentView.resetView();
+            return;
+        }
+        // TODO: Smarter mapping here from one state to the next.
+        int mode = getMode();
+        boolean isSmallGridShowing = mCurrentView instanceof GridRowView;
+        boolean isGridSlice = SliceQuery.hasHints(mCurrentSlice, HINT_HORIZONTAL);
+        if (mMode == mCurrentView.getMode() && isGridSlice == isSmallGridShowing) {
+            mCurrentView.setSlice(mCurrentSlice);
+        } else {
+            removeAllViews();
+            mCurrentView = createView(mode);
+            if (mSliceObserver != null) {
+                mCurrentView.setSliceActionListener(mSliceObserver);
+            }
+            addView(mCurrentView.getView(), getChildLp(mCurrentView.getView()));
+            addView(mActions, getChildLp(mActions));
+        }
+        // Scrolling
+        if (mode == MODE_LARGE) {
+            ((LargeTemplateView) mCurrentView).setScrollable(mIsScrollable);
+        }
+        // Styles
+        mCurrentView.setStyle(mAttrs);
+        mCurrentView.setTint(getTintColor());
+        // Set the slice
+        SliceItem actionRow = SliceQuery.find(mCurrentSlice, FORMAT_SLICE,
+                HINT_ACTIONS,
+                null);
+        List<SliceItem> items = mCurrentSlice.getItems();
+        if (items.size() > 1 || (items.size() != 0 && items.get(0) != actionRow)) {
+            mCurrentView.getView().setVisibility(View.VISIBLE);
+            mCurrentView.setSlice(mCurrentSlice);
+        } else {
+            mCurrentView.getView().setVisibility(View.GONE);
+        }
+        // Deal with actions
+        boolean showActions = mShowActions && actionRow != null
+                && mode != MODE_SHORTCUT;
+        if (showActions) {
+            mActions.setActions(actionRow, getTintColor());
+            mActions.setVisibility(View.VISIBLE);
+        } else {
+            mActions.setVisibility(View.GONE);
+        }
+    }
+
+    private int getTintColor() {
+        if (mThemeTintColor != -1) {
+            // Theme has specified a color, use that
+            return mThemeTintColor;
+        } else {
+            final SliceItem colorItem = SliceQuery.findSubtype(
+                    mCurrentSlice, FORMAT_INT, SUBTYPE_COLOR);
+            return colorItem != null
+                    ? colorItem.getInt()
+                    : SliceViewUtil.getColorAccent(getContext());
+        }
+    }
+
+    private LayoutParams getChildLp(View child) {
+        if (child instanceof ShortcutView) {
+            return new LayoutParams(mShortcutSize, mShortcutSize);
+        } else {
+            return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
+        }
+    }
+
+    /**
+     * @return String representation of the provided mode.
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public static String modeToString(@SliceMode int mode) {
+        switch(mode) {
+            case MODE_AUTO:
+                return "MODE AUTO";
+            case MODE_SHORTCUT:
+                return "MODE SHORTCUT";
+            case MODE_SMALL:
+                return "MODE SMALL";
+            case MODE_LARGE:
+                return "MODE LARGE";
+            default:
+                return "unknown mode: " + mode;
+        }
+    }
+}
diff --git a/slices/view/src/main/java/androidx/app/slice/widget/SliceViewUtil.java b/slices/view/src/main/java/androidx/app/slice/widget/SliceViewUtil.java
new file mode 100644
index 0000000..12fe7c4
--- /dev/null
+++ b/slices/view/src/main/java/androidx/app/slice/widget/SliceViewUtil.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright 2017 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 androidx.app.slice.widget;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.support.annotation.AttrRes;
+import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+import android.text.format.DateUtils;
+import android.view.Gravity;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import java.util.Calendar;
+
+/**
+ * A bunch of utilities for slice UI.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+@TargetApi(23)
+public class SliceViewUtil {
+
+    /**
+     */
+    @ColorInt
+    public static int getColorAccent(@NonNull Context context) {
+        return getColorAttr(context, android.R.attr.colorAccent);
+    }
+
+    /**
+     */
+    @ColorInt
+    public static int getColorError(@NonNull Context context) {
+        return getColorAttr(context, android.R.attr.colorError);
+    }
+
+    /**
+     */
+    @ColorInt
+    public static int getDefaultColor(@NonNull Context context, int resId) {
+        final ColorStateList list = context.getResources().getColorStateList(resId,
+                context.getTheme());
+
+        return list.getDefaultColor();
+    }
+
+    /**
+     */
+    @ColorInt
+    public static int getDisabled(@NonNull Context context, int inputColor) {
+        return applyAlphaAttr(context, android.R.attr.disabledAlpha, inputColor);
+    }
+
+    /**
+     */
+    @ColorInt
+    public static int applyAlphaAttr(@NonNull Context context, @AttrRes int attr, int inputColor) {
+        TypedArray ta = context.obtainStyledAttributes(new int[] {
+                attr
+        });
+        float alpha = ta.getFloat(0, 0);
+        ta.recycle();
+        return applyAlpha(alpha, inputColor);
+    }
+
+    /**
+     */
+    @ColorInt
+    public static int applyAlpha(float alpha, int inputColor) {
+        alpha *= Color.alpha(inputColor);
+        return Color.argb((int) (alpha), Color.red(inputColor), Color.green(inputColor),
+                Color.blue(inputColor));
+    }
+
+    /**
+     */
+    @ColorInt
+    public static int getColorAttr(@NonNull Context context, @AttrRes int attr) {
+        TypedArray ta = context.obtainStyledAttributes(new int[] {
+                attr
+        });
+        @ColorInt int colorAccent = ta.getColor(0, 0);
+        ta.recycle();
+        return colorAccent;
+    }
+
+    /**
+     */
+    public static int getThemeAttr(@NonNull Context context, @AttrRes int attr) {
+        TypedArray ta = context.obtainStyledAttributes(new int[] {
+                attr
+        });
+        int theme = ta.getResourceId(0, 0);
+        ta.recycle();
+        return theme;
+    }
+
+    /**
+     */
+    public static Drawable getDrawable(@NonNull Context context, @AttrRes int attr) {
+        TypedArray ta = context.obtainStyledAttributes(new int[] {
+                attr
+        });
+        Drawable drawable = ta.getDrawable(0);
+        ta.recycle();
+        return drawable;
+    }
+
+    /**
+     */
+    public static Icon createIconFromDrawable(Drawable d) {
+        if (d instanceof BitmapDrawable) {
+            return Icon.createWithBitmap(((BitmapDrawable) d).getBitmap());
+        }
+        Bitmap b = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(),
+                Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(b);
+        d.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+        d.draw(canvas);
+        return Icon.createWithBitmap(b);
+    }
+
+    /**
+     */
+    @TargetApi(28)
+    public static void createCircledIcon(@NonNull Context context, int iconSizePx,
+            Icon icon, boolean isLarge, ViewGroup parent) {
+        ImageView v = new ImageView(context);
+        v.setImageIcon(icon);
+        parent.addView(v);
+        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) v.getLayoutParams();
+        if (isLarge) {
+            // XXX better way to convert from icon -> bitmap or crop an icon (?)
+            Bitmap iconBm = Bitmap.createBitmap(iconSizePx, iconSizePx, Config.ARGB_8888);
+            Canvas iconCanvas = new Canvas(iconBm);
+            v.layout(0, 0, iconSizePx, iconSizePx);
+            v.draw(iconCanvas);
+            v.setImageBitmap(getCircularBitmap(iconBm));
+        } else {
+            v.setColorFilter(Color.WHITE);
+        }
+        lp.width = iconSizePx;
+        lp.height = iconSizePx;
+        lp.gravity = Gravity.CENTER;
+    }
+
+    /**
+     */
+    public static @NonNull Bitmap getCircularBitmap(Bitmap bitmap) {
+        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
+                bitmap.getHeight(), Config.ARGB_8888);
+        Canvas canvas = new Canvas(output);
+        final Paint paint = new Paint();
+        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
+        paint.setAntiAlias(true);
+        canvas.drawARGB(0, 0, 0, 0);
+        canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2,
+                bitmap.getWidth() / 2, paint);
+        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
+        canvas.drawBitmap(bitmap, rect, rect, paint);
+        return output;
+    }
+
+    /**
+     */
+    public static CharSequence getRelativeTimeString(long time) {
+        return DateUtils.getRelativeTimeSpanString(time, Calendar.getInstance().getTimeInMillis(),
+                DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
+    }
+}
diff --git a/slices/view/src/main/res-public/values/public_attrs.xml b/slices/view/src/main/res-public/values/public_attrs.xml
new file mode 100644
index 0000000..ad909ea
--- /dev/null
+++ b/slices/view/src/main/res-public/values/public_attrs.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2017 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.
+  -->
+
+<!-- Definitions of attributes to be exposed to the public -->
+<resources>
+    <public type="attr" name="titleColor" />
+    <public type="attr" name="subtitleColor" />
+    <public type="attr" name="tintColor" />
+    <public type="attr" name="headerTitleSize" />
+    <public type="attr" name="headerSubtitleSize" />
+    <public type="attr" name="titleSize" />
+    <public type="attr" name="subtitleSize" />
+    <public type="attr" name="gridTitleSize" />
+    <public type="attr" name="gridSubtitleSize" />
+    <public type="attr" name="sliceViewStyle" />
+</resources>
\ No newline at end of file
diff --git a/design/res/values-sw600dp/config.xml b/slices/view/src/main/res-public/values/public_styles.xml
similarity index 78%
rename from design/res/values-sw600dp/config.xml
rename to slices/view/src/main/res-public/values/public_styles.xml
index 58b6207..36f3e26 100644
--- a/design/res/values-sw600dp/config.xml
+++ b/slices/view/src/main/res-public/values/public_styles.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright 2018 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.
@@ -13,10 +13,9 @@
   ~ 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.
--->
+  -->
 
+<!-- Definitions of styles to be exposed to the public -->
 <resources>
-
-    <integer name="design_snackbar_text_max_lines">1</integer>
-
+    <public type="style" name="Widget.SliceView"/>
 </resources>
\ No newline at end of file
diff --git a/design/res/drawable-anydpi-v21/design_ic_visibility.xml b/slices/view/src/main/res/drawable/abc_ic_slice_send.xml
similarity index 64%
copy from design/res/drawable-anydpi-v21/design_ic_visibility.xml
copy to slices/view/src/main/res/drawable/abc_ic_slice_send.xml
index 123acd2..9c18ac8 100644
--- a/design/res/drawable-anydpi-v21/design_ic_visibility.xml
+++ b/slices/view/src/main/res/drawable/abc_ic_slice_send.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,16 +12,14 @@
   ~ 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.
--->
-
+  -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-
+        android:autoMirrored="true"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
     <path
-        android:fillColor="@android:color/white"
-        android:pathData="@string/path_password_eye"/>
-
+        android:fillColor="#FF000000"
+        android:pathData="M4.02,42.0L46.0,24.0 4.02,6.0 4.0,20.0l30.0,4.0 -30.0,4.0z"/>
 </vector>
\ No newline at end of file
diff --git a/design/res/drawable/design_fab_background.xml b/slices/view/src/main/res/drawable/abc_slice_remote_input_bg.xml
similarity index 77%
rename from design/res/drawable/design_fab_background.xml
rename to slices/view/src/main/res/drawable/abc_slice_remote_input_bg.xml
index 43afd5c..64ac7bf 100644
--- a/design/res/drawable/design_fab_background.xml
+++ b/slices/view/src/main/res/drawable/abc_slice_remote_input_bg.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,9 +13,10 @@
   ~ 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="oval">
-    <solid android:color="@android:color/white" />
-</shape>
\ No newline at end of file
+  -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#ff6c6c6c" />
+    <corners
+        android:bottomRightRadius="16dp"
+        android:bottomLeftRadius="16dp"/>
+</shape>
diff --git a/design/res/drawable-v21/design_bottom_navigation_item_background.xml b/slices/view/src/main/res/drawable/abc_slice_ripple_drawable.xml
similarity index 78%
rename from design/res/drawable-v21/design_bottom_navigation_item_background.xml
rename to slices/view/src/main/res/drawable/abc_slice_ripple_drawable.xml
index f30f08b..22239f3 100644
--- a/design/res/drawable-v21/design_bottom_navigation_item_background.xml
+++ b/slices/view/src/main/res/drawable/abc_slice_ripple_drawable.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2016 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -16,4 +16,6 @@
   -->
 
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="?attr/colorPrimary" />
\ No newline at end of file
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:targetApi="24"
+    android:color="?android:attr/colorControlHighlight" />
diff --git a/slices/view/src/main/res/layout-v21/abc_slice_small_template.xml b/slices/view/src/main/res/layout-v21/abc_slice_small_template.xml
new file mode 100644
index 0000000..7707dae
--- /dev/null
+++ b/slices/view/src/main/res/layout-v21/abc_slice_small_template.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2017 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="wrap_content"
+    android:minHeight="@dimen/abc_slice_row_min_height"
+    android:maxHeight="@dimen/abc_slice_row_max_height"
+    android:gravity="center_vertical"
+    android:background="?android:attr/activatedBackgroundIndicator"
+    android:clipToPadding="false">
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="start|center_vertical"
+        android:orientation="horizontal"
+        android:paddingEnd="12dp"
+        android:paddingTop="4dp"
+        android:paddingBottom="4dp"/>
+
+    <LinearLayout
+        android:id="@android:id/content"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:gravity="center_vertical"
+        android:orientation="vertical">
+
+        <TextView android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxLines="2"
+            android:textAppearance="?android:attr/textAppearanceListItem" />
+
+        <TextView android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignStart="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10" />
+
+        <SeekBar
+            android:id="@+id/seek_bar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone" />
+
+        <ProgressBar
+            android:id="@+id/progress_bar"
+            style="?android:attr/progressBarStyleHorizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone" />
+
+    </LinearLayout>
+
+    <View
+        android:id="@+id/divider"
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:layout_marginTop="8dp"
+        android:layout_marginBottom="8dp"
+        android:background="?android:attr/listDivider"
+        android:visibility="gone"/>
+
+    <LinearLayout android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="end|center_vertical"
+        android:orientation="horizontal" />
+
+</LinearLayout>
diff --git a/design/tests/res/layout/design_appbar_with_scrollbars.xml b/slices/view/src/main/res/layout/abc_slice_grid.xml
similarity index 65%
copy from design/tests/res/layout/design_appbar_with_scrollbars.xml
copy to slices/view/src/main/res/layout/abc_slice_grid.xml
index 6c89a2a..890f77d 100644
--- a/design/tests/res/layout/design_appbar_with_scrollbars.xml
+++ b/slices/view/src/main/res/layout/abc_slice_grid.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2017 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -14,9 +14,12 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-
-<android.support.design.widget.AppBarLayout
+<androidx.app.slice.widget.GridRowView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="200dp"
-    android:theme="@style/AppBarWithScrollbars"/>
\ No newline at end of file
+    android:layout_height="wrap_content"
+    android:minHeight="@dimen/abc_slice_grid_image_only_height"
+    android:gravity="center_vertical"
+    android:background="?android:attr/activatedBackgroundIndicator"
+    android:clipToPadding="false">
+</androidx.app.slice.widget.GridRowView>
diff --git a/slices/view/src/main/res/layout/abc_slice_message.xml b/slices/view/src/main/res/layout/abc_slice_message.xml
new file mode 100644
index 0000000..9e1fa62
--- /dev/null
+++ b/slices/view/src/main/res/layout/abc_slice_message.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2017 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.
+  -->
+<androidx.app.slice.widget.MessageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingTop="12dp"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/activatedBackgroundIndicator"
+    android:clipToPadding="false">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <LinearLayout
+            android:id="@+id/abc_icon_frame"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="-4dp"
+            android:gravity="start|center_vertical"
+            android:orientation="horizontal"
+            android:paddingEnd="12dp"
+            android:paddingTop="4dp"
+            android:paddingBottom="4dp">
+            <!-- TODO: Support text source -->
+            <ImageView
+                android:id="@android:id/icon"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:maxWidth="48dp"
+                android:maxHeight="48dp" />
+        </LinearLayout>
+
+        <TextView android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignStart="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:maxLines="10" />
+
+    </LinearLayout>
+</androidx.app.slice.widget.MessageView>
diff --git a/slices/view/src/main/res/layout/abc_slice_message_local.xml b/slices/view/src/main/res/layout/abc_slice_message_local.xml
new file mode 100644
index 0000000..d35bd60
--- /dev/null
+++ b/slices/view/src/main/res/layout/abc_slice_message_local.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2017 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.
+  -->
+<androidx.app.slice.widget.MessageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center_vertical|end"
+    android:paddingTop="12dp"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/activatedBackgroundIndicator"
+    android:clipToPadding="false">
+
+    <TextView android:id="@android:id/summary"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignStart="@android:id/title"
+        android:layout_gravity="end"
+        android:gravity="end"
+        android:padding="8dp"
+        android:textAppearance="?android:attr/textAppearanceListItem"
+        android:background="#ffeeeeee"
+        android:maxLines="10" />
+
+</androidx.app.slice.widget.MessageView>
diff --git a/slices/view/src/main/res/layout/abc_slice_remote_input.xml b/slices/view/src/main/res/layout/abc_slice_remote_input.xml
new file mode 100644
index 0000000..293c95a
--- /dev/null
+++ b/slices/view/src/main/res/layout/abc_slice_remote_input.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  ~ Copyright 2017 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 -->
+<androidx.app.slice.widget.RemoteInputView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/remote_input"
+        android:background="@drawable/abc_slice_remote_input_bg"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent">
+
+    <view class="androidx.app.slice.widget.RemoteInputView$RemoteEditText"
+            android:id="@+id/remote_input_text"
+            android:layout_height="match_parent"
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:paddingTop="2dp"
+            android:paddingBottom="4dp"
+            android:paddingStart="16dp"
+            android:paddingEnd="12dp"
+            android:gravity="start|center_vertical"
+            android:textAppearance="?android:attr/textAppearance"
+            android:textColor="#FFFFFFFF"
+            android:textColorHint="#99ffffff"
+            android:textSize="16sp"
+            android:background="@null"
+            android:singleLine="true"
+            android:ellipsize="start"
+            android:inputType="textShortMessage|textAutoCorrect|textCapSentences"
+            android:imeOptions="actionSend|flagNoExtractUi|flagNoFullscreen" />
+
+    <FrameLayout
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_gravity="center_vertical">
+
+        <ImageButton
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:paddingStart="12dp"
+                android:paddingEnd="24dp"
+                android:paddingTop="16dp"
+                android:paddingBottom="16dp"
+                android:id="@+id/remote_input_send"
+                android:src="@drawable/abc_ic_slice_send"
+                android:tint="#FFFFFF"
+                android:tintMode="src_in"
+                android:background="@drawable/abc_slice_ripple_drawable" />
+
+        <ProgressBar
+                android:id="@+id/remote_input_progress"
+                android:layout_width="24dp"
+                android:layout_height="24dp"
+                android:layout_marginEnd="6dp"
+                android:layout_gravity="center"
+                android:visibility="invisible"
+                android:indeterminate="true"
+                style="?android:attr/progressBarStyleSmall" />
+
+    </FrameLayout>
+
+</androidx.app.slice.widget.RemoteInputView>
\ No newline at end of file
diff --git a/design/res/layout/design_navigation_menu.xml b/slices/view/src/main/res/layout/abc_slice_secondary_text.xml
similarity index 62%
copy from design/res/layout/design_navigation_menu.xml
copy to slices/view/src/main/res/layout/abc_slice_secondary_text.xml
index b6a0ad5..b446ddd 100644
--- a/design/res/layout/design_navigation_menu.xml
+++ b/slices/view/src/main/res/layout/abc_slice_secondary_text.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
+
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,12 +14,13 @@
   ~ 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.design.internal.NavigationMenuView
+  -->
+<!-- LinearLayout -->
+<TextView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/design_navigation_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:paddingBottom="@dimen/design_navigation_padding_bottom"
-        android:clipToPadding="false"
-        android:scrollbars="vertical"/>
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textColor="?android:attr/textColorSecondary"
+        android:gravity="center"
+        android:layout_height="wrap_content"
+        android:padding="4dp"
+        android:layout_width="match_parent" />
diff --git a/slices/view/src/main/res/layout/abc_slice_small_template.xml b/slices/view/src/main/res/layout/abc_slice_small_template.xml
new file mode 100644
index 0000000..2d5e913
--- /dev/null
+++ b/slices/view/src/main/res/layout/abc_slice_small_template.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2017 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="wrap_content"
+    android:minHeight="@dimen/abc_slice_row_min_height"
+    android:maxHeight="@dimen/abc_slice_row_max_height"
+    android:gravity="center_vertical"
+    android:background="?android:attr/activatedBackgroundIndicator"
+    android:clipToPadding="false">
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="start|center_vertical"
+        android:orientation="horizontal"
+        android:paddingEnd="8dp"/>
+
+    <LinearLayout
+        android:id="@android:id/content"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:gravity="center_vertical"
+        android:orientation="vertical">
+
+        <TextView android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxLines="2"/>
+
+        <TextView android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignStart="@android:id/title"
+            android:maxLines="10" />
+
+        <SeekBar
+            android:id="@+id/seek_bar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone" />
+
+        <ProgressBar
+            android:id="@+id/progress_bar"
+            style="?android:attr/progressBarStyleHorizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone" />
+
+    </LinearLayout>
+
+    <View
+        android:id="@+id/divider"
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:layout_marginTop="8dp"
+        android:layout_marginBottom="8dp"
+        android:background="?android:attr/listDivider"
+        android:visibility="gone"/>
+
+    <LinearLayout android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingStart="8dp"
+        android:gravity="end|center_vertical"
+        android:orientation="horizontal" />
+
+</LinearLayout>
diff --git a/design/res/layout/design_navigation_menu.xml b/slices/view/src/main/res/layout/abc_slice_title.xml
similarity index 62%
rename from design/res/layout/design_navigation_menu.xml
rename to slices/view/src/main/res/layout/abc_slice_title.xml
index b6a0ad5..e1bdf03 100644
--- a/design/res/layout/design_navigation_menu.xml
+++ b/slices/view/src/main/res/layout/abc_slice_title.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
+
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,12 +14,13 @@
   ~ 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.design.internal.NavigationMenuView
+  -->
+
+<TextView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/design_navigation_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:paddingBottom="@dimen/design_navigation_padding_bottom"
-        android:clipToPadding="false"
-        android:scrollbars="vertical"/>
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textColor="?android:attr/textColorPrimary"
+        android:gravity="center"
+        android:layout_height="wrap_content"
+        android:padding="4dp"
+        android:layout_width="match_parent" />
diff --git a/slices/view/src/main/res/values/attrs.xml b/slices/view/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..5779d31
--- /dev/null
+++ b/slices/view/src/main/res/values/attrs.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2018 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>
+    <declare-styleable name="SliceView">
+        <!-- Colors -->
+        <attr name="titleColor" format="color" />
+        <attr name="subtitleColor" format="color" />
+        <attr name="tintColor" format="color" />
+
+        <!-- Text sizes -->
+        <attr name="headerTitleSize" format="dimension" />
+        <attr name="headerSubtitleSize" format="dimension"/>
+        <attr name="titleSize" format="dimension" />
+        <attr name="subtitleSize" format="dimension" />
+        <attr name="gridTitleSize" format="dimension" />
+        <attr name="gridSubtitleSize" format="dimension" />
+    </declare-styleable>
+
+    <attr name="sliceViewStyle" format="reference"/>
+</resources>
\ No newline at end of file
diff --git a/slices/view/src/main/res/values/dimens.xml b/slices/view/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..ff2fb97
--- /dev/null
+++ b/slices/view/src/main/res/values/dimens.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2017 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>
+    <!-- General -->
+    <!-- Size of normal icons / images in a slice -->
+    <dimen name="abc_slice_icon_size">24dp</dimen>
+    <!-- Size of large icons / images in a slice -->
+    <dimen name="abc_slice_large_icon_size">48dp</dimen>
+    <!-- Standard padding used in a slice -->
+    <dimen name="abc_slice_padding">16dp</dimen>
+
+    <!-- Size of a slice shortcut view -->
+    <dimen name="abc_slice_shortcut_size">56dp</dimen>
+
+    <!-- Height of a large template -->
+    <dimen name="abc_slice_large_height">240dp</dimen>
+
+    <!-- Row view sizes-->
+    <!-- Min height of row view; default size if one line of text -->
+    <dimen name="abc_slice_row_min_height">48dp</dimen>
+    <!-- Max height of row view; default size if two lines of text -->
+    <dimen name="abc_slice_row_max_height">60dp</dimen>
+    <!-- Min height of a row showing an input field that is active -->
+    <dimen name="abc_slice_row_active_input_height">120dp</dimen>
+
+    <!-- Grid view sizes-->
+    <!-- Height of a grid row displaying only images -->
+    <dimen name="abc_slice_grid_image_only_height">86dp</dimen>
+    <!-- Height of a grid row showing text and images -->
+    <dimen name="abc_slice_grid_height">120dp</dimen>
+    <!-- Height of expanded grid row if showing a single large image -->
+    <dimen name="abc_slice_grid_big_picture_height">180dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/design/res/values-land/styles.xml b/slices/view/src/main/res/values/strings.xml
similarity index 67%
rename from design/res/values-land/styles.xml
rename to slices/view/src/main/res/values/strings.xml
index 622a5e3..b72c986 100644
--- a/design/res/values-land/styles.xml
+++ b/slices/view/src/main/res/values/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright 2017 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.
@@ -13,13 +13,9 @@
   ~ 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>
+  -->
 
-    <style name="Widget.Design.TabLayout" parent="Base.Widget.Design.TabLayout">
-        <item name="tabGravity">center</item>
-        <item name="tabMode">fixed</item>
-    </style>
-
-</resources>
-
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Format string for indicating there is more content in a slice view -->
+    <string name="abc_slice_more_content">+ <xliff:g id="number" example="5">%1$d</xliff:g></string>
+</resources>
\ No newline at end of file
diff --git a/slices/view/src/main/res/values/styles.xml b/slices/view/src/main/res/values/styles.xml
new file mode 100644
index 0000000..4b27820
--- /dev/null
+++ b/slices/view/src/main/res/values/styles.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2018 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>
+    <style name="Widget.SliceView" parent="">
+        <item name="tintColor">@null</item>
+        <!-- Colors -->
+        <item name="titleColor">?android:attr/textColorPrimary</item>
+        <item name="subtitleColor">?android:attr/textColorSecondary</item>
+
+        <!-- Text sizes -->
+        <item name="headerTitleSize">16sp</item>
+        <item name="headerSubtitleSize">14sp</item>
+        <item name="titleSize">14sp</item>
+        <item name="subtitleSize">14sp</item>
+        <item name="gridTitleSize">12sp</item>
+        <item name="gridSubtitleSize">12sp</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/textclassifier/OWNERS b/textclassifier/OWNERS
new file mode 100644
index 0000000..6975b76
--- /dev/null
+++ b/textclassifier/OWNERS
@@ -0,0 +1,3 @@
+clarabayarri@google.com
+toki@google.com
+jalt@google.com
diff --git a/textclassifier/api/current.txt b/textclassifier/api/current.txt
new file mode 100644
index 0000000..6dad352
--- /dev/null
+++ b/textclassifier/api/current.txt
@@ -0,0 +1,138 @@
+package androidx.view.textclassifier {
+
+  public final class TextClassification implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getConfidenceScore(java.lang.String);
+    method public java.lang.String getEntity(int);
+    method public int getEntityCount();
+    method public android.graphics.drawable.Drawable getIcon();
+    method public android.content.Intent getIntent();
+    method public java.lang.CharSequence getLabel();
+    method public int getSecondaryActionsCount();
+    method public android.graphics.drawable.Drawable getSecondaryIcon(int);
+    method public android.content.Intent getSecondaryIntent(int);
+    method public java.lang.CharSequence getSecondaryLabel(int);
+    method public java.lang.String getSignature();
+    method public java.lang.String getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.view.textclassifier.TextClassification> CREATOR;
+  }
+
+  public static final class TextClassification.Builder {
+    ctor public TextClassification.Builder();
+    method public androidx.view.textclassifier.TextClassification.Builder addSecondaryAction(android.content.Intent, java.lang.String, android.graphics.drawable.Drawable);
+    method public androidx.view.textclassifier.TextClassification build();
+    method public androidx.view.textclassifier.TextClassification.Builder clearSecondaryActions();
+    method public androidx.view.textclassifier.TextClassification.Builder setEntityType(java.lang.String, float);
+    method public androidx.view.textclassifier.TextClassification.Builder setIcon(android.graphics.drawable.Drawable);
+    method public androidx.view.textclassifier.TextClassification.Builder setIntent(android.content.Intent);
+    method public androidx.view.textclassifier.TextClassification.Builder setLabel(java.lang.String);
+    method public androidx.view.textclassifier.TextClassification.Builder setPrimaryAction(android.content.Intent, java.lang.String, android.graphics.drawable.Drawable);
+    method public androidx.view.textclassifier.TextClassification.Builder setSignature(java.lang.String);
+    method public androidx.view.textclassifier.TextClassification.Builder setText(java.lang.String);
+  }
+
+  public static final class TextClassification.Options implements android.os.Parcelable {
+    ctor public TextClassification.Options();
+    method public int describeContents();
+    method public android.support.v4.os.LocaleListCompat getDefaultLocales();
+    method public java.util.Calendar getReferenceTime();
+    method public androidx.view.textclassifier.TextClassification.Options setDefaultLocales(android.support.v4.os.LocaleListCompat);
+    method public androidx.view.textclassifier.TextClassification.Options setReferenceTime(java.util.Calendar);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.view.textclassifier.TextClassification.Options> CREATOR;
+  }
+
+  public class TextClassifier {
+    ctor public TextClassifier();
+    field public static final java.lang.String TYPE_ADDRESS = "address";
+    field public static final java.lang.String TYPE_EMAIL = "email";
+    field public static final java.lang.String TYPE_OTHER = "other";
+    field public static final java.lang.String TYPE_PHONE = "phone";
+    field public static final java.lang.String TYPE_UNKNOWN = "";
+    field public static final java.lang.String TYPE_URL = "url";
+  }
+
+  public final class TextLinks implements android.os.Parcelable {
+    method public int apply(android.text.Spannable, int, androidx.view.textclassifier.TextLinks.SpanFactory);
+    method public int describeContents();
+    method public java.util.Collection<androidx.view.textclassifier.TextLinks.TextLink> getLinks();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0
+    field public static final int APPLY_STRATEGY_REPLACE = 1; // 0x1
+    field public static final android.os.Parcelable.Creator<androidx.view.textclassifier.TextLinks> CREATOR;
+    field public static final int STATUS_DIFFERENT_TEXT = 3; // 0x3
+    field public static final int STATUS_LINKS_APPLIED = 0; // 0x0
+    field public static final int STATUS_NO_LINKS_APPLIED = 2; // 0x2
+    field public static final int STATUS_NO_LINKS_FOUND = 1; // 0x1
+  }
+
+  public static final class TextLinks.Builder {
+    ctor public TextLinks.Builder(java.lang.String);
+    method public androidx.view.textclassifier.TextLinks.Builder addLink(int, int, java.util.Map<java.lang.String, java.lang.Float>);
+    method public androidx.view.textclassifier.TextLinks build();
+    method public androidx.view.textclassifier.TextLinks.Builder clearTextLinks();
+  }
+
+  public static final class TextLinks.Options implements android.os.Parcelable {
+    ctor public TextLinks.Options();
+    method public int describeContents();
+    method public int getApplyStrategy();
+    method public android.support.v4.os.LocaleListCompat getDefaultLocales();
+    method public androidx.view.textclassifier.TextClassifier.EntityConfig getEntityConfig();
+    method public androidx.view.textclassifier.TextLinks.SpanFactory getSpanFactory();
+    method public androidx.view.textclassifier.TextLinks.Options setApplyStrategy(int);
+    method public androidx.view.textclassifier.TextLinks.Options setDefaultLocales(android.support.v4.os.LocaleListCompat);
+    method public androidx.view.textclassifier.TextLinks.Options setEntityConfig(androidx.view.textclassifier.TextClassifier.EntityConfig);
+    method public androidx.view.textclassifier.TextLinks.Options setSpanFactory(androidx.view.textclassifier.TextLinks.SpanFactory);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.view.textclassifier.TextLinks.Options> CREATOR;
+  }
+
+  public static final class TextLinks.TextLink implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getConfidenceScore(java.lang.String);
+    method public int getEnd();
+    method public java.lang.String getEntity(int);
+    method public int getEntityCount();
+    method public int getStart();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.view.textclassifier.TextLinks.TextLink> CREATOR;
+  }
+
+  public static class TextLinks.TextLinkSpan extends android.text.style.ClickableSpan {
+    ctor public TextLinks.TextLinkSpan(androidx.view.textclassifier.TextLinks.TextLink);
+    method public final androidx.view.textclassifier.TextLinks.TextLink getTextLink();
+    method public void onClick(android.view.View);
+  }
+
+  public final class TextSelection implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getConfidenceScore(java.lang.String);
+    method public java.lang.String getEntity(int);
+    method public int getEntityCount();
+    method public int getSelectionEndIndex();
+    method public int getSelectionStartIndex();
+    method public java.lang.String getSignature();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.view.textclassifier.TextSelection> CREATOR;
+  }
+
+  public static final class TextSelection.Builder {
+    ctor public TextSelection.Builder(int, int);
+    method public androidx.view.textclassifier.TextSelection build();
+    method public androidx.view.textclassifier.TextSelection.Builder setEntityType(java.lang.String, float);
+    method public androidx.view.textclassifier.TextSelection.Builder setSignature(java.lang.String);
+  }
+
+  public static final class TextSelection.Options implements android.os.Parcelable {
+    ctor public TextSelection.Options();
+    method public int describeContents();
+    method public android.support.v4.os.LocaleListCompat getDefaultLocales();
+    method public androidx.view.textclassifier.TextSelection.Options setDefaultLocales(android.support.v4.os.LocaleListCompat);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<androidx.view.textclassifier.TextSelection.Options> CREATOR;
+  }
+
+}
+
diff --git a/textclassifier/build.gradle b/textclassifier/build.gradle
new file mode 100644
index 0000000..b01cbbf
--- /dev/null
+++ b/textclassifier/build.gradle
@@ -0,0 +1,26 @@
+import static android.support.dependencies.DependenciesKt.*
+import android.support.LibraryGroups
+import android.support.LibraryVersions
+
+plugins {
+    id("SupportAndroidLibraryPlugin")
+}
+
+dependencies {
+    api(project(":appcompat-v7"))
+    api(project(":support-annotations"))
+    api(project(":support-v4"))
+
+    androidTestImplementation(TEST_RUNNER)
+    androidTestImplementation(ESPRESSO_CORE)
+}
+
+supportLibrary {
+    name = "Android TextClassifier Support Library"
+    publish = true
+    mavenVersion = LibraryVersions.SUPPORT_LIBRARY
+    mavenGroup = LibraryGroups.SUPPORT
+    inceptionYear = "2018"
+    description = "The TextClassifier Support Library can be added to an Android application in order to use the TextClassifier API introduced in Android O on all devices with API level 14 or later."
+    minSdkVersion = 14
+}
diff --git a/textclassifier/res/values/strings.xml b/textclassifier/res/values/strings.xml
new file mode 100644
index 0000000..321190e
--- /dev/null
+++ b/textclassifier/res/values/strings.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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>
+</resources>
diff --git a/design/res/drawable/design_fab_background.xml b/textclassifier/src/androidTest/AndroidManifest.xml
similarity index 70%
copy from design/res/drawable/design_fab_background.xml
copy to textclassifier/src/androidTest/AndroidManifest.xml
index 43afd5c..0a7045c 100644
--- a/design/res/drawable/design_fab_background.xml
+++ b/textclassifier/src/androidTest/AndroidManifest.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright (C) 2015 The Android Open Source Project
+  ~ Copyright (C) 2018 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.
@@ -13,9 +13,8 @@
   ~ 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="oval">
-    <solid android:color="@android:color/white" />
-</shape>
\ No newline at end of file
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="androidx.textclassifier.test">
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
+</manifest>
diff --git a/design/tests/NO_DOCS b/textclassifier/src/androidTest/NO_DOCS
similarity index 92%
rename from design/tests/NO_DOCS
rename to textclassifier/src/androidTest/NO_DOCS
index 0c81e4a..ece084d 100644
--- a/design/tests/NO_DOCS
+++ b/textclassifier/src/androidTest/NO_DOCS
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Android Open Source Project
+# Copyright (C) 2018 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.
diff --git a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextClassificationTest.java b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextClassificationTest.java
new file mode 100644
index 0000000..8ae65ac
--- /dev/null
+++ b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextClassificationTest.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2018 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 androidx.view.textclassifier;
+
+import static org.junit.Assert.assertEquals;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Parcel;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.os.LocaleListCompat;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Calendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/** Instrumentation unit tests for {@link TextClassification}. */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public final class TextClassificationTest {
+    public BitmapDrawable generateTestDrawable(int width, int height, int colorValue) {
+        final int numPixels = width * height;
+        final int[] colors = new int[numPixels];
+        for (int i = 0; i < numPixels; ++i) {
+            colors[i] = colorValue;
+        }
+        final Bitmap bitmap = Bitmap.createBitmap(colors, width, height, Bitmap.Config.ARGB_8888);
+        final BitmapDrawable drawable = new BitmapDrawable(null, bitmap);
+        drawable.setTargetDensity(bitmap.getDensity());
+        return drawable;
+    }
+
+    @Test
+    public void testParcel() {
+        final String text = "text";
+        final BitmapDrawable primaryIcon = generateTestDrawable(16, 16, Color.RED);
+        final String primaryLabel = "primarylabel";
+        final Intent primaryIntent = new Intent("primaryintentaction");
+        final BitmapDrawable secondaryIcon0 = generateTestDrawable(32, 288, Color.GREEN);
+        final String secondaryLabel0 = "secondarylabel0";
+        final Intent secondaryIntent0 = new Intent("secondaryintentaction0");
+        final BitmapDrawable secondaryIcon1 = generateTestDrawable(576, 288, Color.BLUE);
+        final String secondaryLabel1 = "secondaryLabel1";
+        final Intent secondaryIntent1 = null;
+        final BitmapDrawable secondaryIcon2 = null;
+        final String secondaryLabel2 = null;
+        final Intent secondaryIntent2 = new Intent("secondaryintentaction2");
+        final ColorDrawable secondaryIcon3 = new ColorDrawable(Color.CYAN);
+        final String secondaryLabel3 = null;
+        final Intent secondaryIntent3 = null;
+        final String signature = "signature";
+        final TextClassification reference = new TextClassification.Builder()
+                .setText(text)
+                .setPrimaryAction(primaryIntent, primaryLabel, primaryIcon)
+                .addSecondaryAction(null, null, null)  // ignored
+                .addSecondaryAction(secondaryIntent0, secondaryLabel0, secondaryIcon0)
+                .addSecondaryAction(secondaryIntent1, secondaryLabel1, secondaryIcon1)
+                .addSecondaryAction(secondaryIntent2, secondaryLabel2, secondaryIcon2)
+                .addSecondaryAction(secondaryIntent3, secondaryLabel3, secondaryIcon3)
+                .setEntityType(TextClassifier.TYPE_ADDRESS, 0.3f)
+                .setEntityType(TextClassifier.TYPE_PHONE, 0.7f)
+                .setSignature(signature)
+                .build();
+
+        final Parcel parcel = Parcel.obtain();
+        reference.writeToParcel(parcel, reference.describeContents());
+        parcel.setDataPosition(0);
+        final TextClassification result = TextClassification.CREATOR.createFromParcel(
+                parcel);
+
+        assertEquals(text, result.getText());
+        assertEquals(signature, result.getSignature());
+        assertEquals(4, result.getSecondaryActionsCount());
+
+        // Primary action (re-use existing icon).
+        final Bitmap resPrimaryIcon = ((BitmapDrawable) result.getIcon()).getBitmap();
+        assertEquals(primaryIcon.getBitmap().getPixel(0, 0), resPrimaryIcon.getPixel(0, 0));
+        assertEquals(16, resPrimaryIcon.getWidth());
+        assertEquals(16, resPrimaryIcon.getHeight());
+        assertEquals(primaryLabel, result.getLabel());
+        assertEquals(primaryIntent.getAction(), result.getIntent().getAction());
+
+        // Secondary action 0 (scale with  height limit).
+        final Bitmap resSecondaryIcon0 = ((BitmapDrawable) result.getSecondaryIcon(0)).getBitmap();
+        assertEquals(secondaryIcon0.getBitmap().getPixel(0, 0), resSecondaryIcon0.getPixel(0, 0));
+        assertEquals(16, resSecondaryIcon0.getWidth());
+        assertEquals(144, resSecondaryIcon0.getHeight());
+        assertEquals(secondaryLabel0, result.getSecondaryLabel(0));
+        assertEquals(secondaryIntent0.getAction(), result.getSecondaryIntent(0).getAction());
+
+        // Secondary action 1 (scale with width limit).
+        final Bitmap resSecondaryIcon1 = ((BitmapDrawable) result.getSecondaryIcon(1)).getBitmap();
+        assertEquals(secondaryIcon1.getBitmap().getPixel(0, 0), resSecondaryIcon1.getPixel(0, 0));
+        assertEquals(144, resSecondaryIcon1.getWidth());
+        assertEquals(72, resSecondaryIcon1.getHeight());
+        assertEquals(secondaryLabel1, result.getSecondaryLabel(1));
+        assertEquals(null, result.getSecondaryIntent(1));
+
+        // Secondary action 2 (no icon).
+        assertEquals(null, result.getSecondaryIcon(2));
+        assertEquals(null, result.getSecondaryLabel(2));
+        assertEquals(secondaryIntent2.getAction(), result.getSecondaryIntent(2).getAction());
+
+        // Secondary action 3 (convert non-bitmap drawable with negative size).
+        final Bitmap resSecondaryIcon3 = ((BitmapDrawable) result.getSecondaryIcon(3)).getBitmap();
+        assertEquals(secondaryIcon3.getColor(), resSecondaryIcon3.getPixel(0, 0));
+        assertEquals(1, resSecondaryIcon3.getWidth());
+        assertEquals(1, resSecondaryIcon3.getHeight());
+        assertEquals(null, result.getSecondaryLabel(3));
+        assertEquals(null, result.getSecondaryIntent(3));
+
+        // Entities.
+        assertEquals(2, result.getEntityCount());
+        assertEquals(TextClassifier.TYPE_PHONE, result.getEntity(0));
+        assertEquals(TextClassifier.TYPE_ADDRESS, result.getEntity(1));
+        assertEquals(0.7f, result.getConfidenceScore(TextClassifier.TYPE_PHONE), 1e-7f);
+        assertEquals(0.3f, result.getConfidenceScore(TextClassifier.TYPE_ADDRESS), 1e-7f);
+    }
+
+    @Test
+    public void testParcelOptions() {
+        Calendar referenceTime = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.US);
+        referenceTime.setTimeInMillis(946684800000L);  // 2000-01-01 00:00:00
+        TextClassification.Options reference = new TextClassification.Options();
+        reference.setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"));
+        reference.setReferenceTime(referenceTime);
+
+        // Parcel and unparcel.
+        final Parcel parcel = Parcel.obtain();
+        reference.writeToParcel(parcel, reference.describeContents());
+        parcel.setDataPosition(0);
+        TextClassification.Options result =
+                TextClassification.Options.CREATOR.createFromParcel(parcel);
+
+        assertEquals("en-US,de-DE", result.getDefaultLocales().toLanguageTags());
+        assertEquals(referenceTime, result.getReferenceTime());
+    }
+}
diff --git a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextLinksTest.java b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextLinksTest.java
new file mode 100644
index 0000000..dadc214
--- /dev/null
+++ b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextLinksTest.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2018 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 androidx.view.textclassifier;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.os.Parcel;
+import android.support.annotation.Nullable;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.os.LocaleListCompat;
+import android.support.v4.util.ArrayMap;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.style.ClickableSpan;
+import android.view.View;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/** Instrumentation unit tests for {@link TextLinks}. */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public final class TextLinksTest {
+
+    private static class NoOpSpan extends ClickableSpan {
+        @Override
+        public void onClick(View v) {
+            // Do nothing.
+        }
+    }
+
+    private static class CustomTextLinkSpan extends TextLinks.TextLinkSpan {
+        CustomTextLinkSpan(@Nullable TextLinks.TextLink textLink) {
+            super(textLink);
+        }
+    }
+
+    private static class CustomSpanFactory implements TextLinks.SpanFactory {
+        @Override
+        public TextLinks.TextLinkSpan createSpan(TextLinks.TextLink textLink) {
+            return new CustomTextLinkSpan(textLink);
+        }
+    }
+
+    private TextClassifier mClassifier;
+    private Map<String, Float> mDummyEntityScores;
+
+    @Before
+    public void setup() {
+        mClassifier = new TextClassifier();
+        mDummyEntityScores = new ArrayMap<>();
+        mDummyEntityScores.put(TextClassifier.TYPE_ADDRESS, 0.2f);
+        mDummyEntityScores.put(TextClassifier.TYPE_PHONE, 0.7f);
+        mDummyEntityScores.put(TextClassifier.TYPE_OTHER, 0.3f);
+    }
+
+    private Map<String, Float> getEntityScores(float address, float phone, float other) {
+        final Map<String, Float> result = new ArrayMap<>();
+        if (address > 0.f) {
+            result.put(TextClassifier.TYPE_ADDRESS, address);
+        }
+        if (phone > 0.f) {
+            result.put(TextClassifier.TYPE_PHONE, phone);
+        }
+        if (other > 0.f) {
+            result.put(TextClassifier.TYPE_OTHER, other);
+        }
+        return result;
+    }
+
+    @Test
+    public void testParcel() {
+        final String fullText = "this is just a test";
+        final TextLinks reference = new TextLinks.Builder(fullText)
+                .addLink(0, 4, getEntityScores(0.f, 0.f, 1.f))
+                .addLink(5, 12, getEntityScores(.8f, .1f, .5f))
+                .build();
+
+        // Parcel and unparcel.
+        final Parcel parcel = Parcel.obtain();
+        reference.writeToParcel(parcel, reference.describeContents());
+        parcel.setDataPosition(0);
+        final TextLinks result = TextLinks.CREATOR.createFromParcel(parcel);
+        final List<TextLinks.TextLink> resultList = new ArrayList<>(result.getLinks());
+
+        assertEquals(2, resultList.size());
+        assertEquals(0, resultList.get(0).getStart());
+        assertEquals(4, resultList.get(0).getEnd());
+        assertEquals(1, resultList.get(0).getEntityCount());
+        assertEquals(TextClassifier.TYPE_OTHER, resultList.get(0).getEntity(0));
+        assertEquals(1.f, resultList.get(0).getConfidenceScore(TextClassifier.TYPE_OTHER),
+                1e-7f);
+        assertEquals(5, resultList.get(1).getStart());
+        assertEquals(12, resultList.get(1).getEnd());
+        assertEquals(3, resultList.get(1).getEntityCount());
+        assertEquals(TextClassifier.TYPE_ADDRESS, resultList.get(1).getEntity(0));
+        assertEquals(TextClassifier.TYPE_OTHER, resultList.get(1).getEntity(1));
+        assertEquals(TextClassifier.TYPE_PHONE, resultList.get(1).getEntity(2));
+        assertEquals(.8f, resultList.get(1).getConfidenceScore(TextClassifier.TYPE_ADDRESS), 1e-7f);
+        assertEquals(.5f, resultList.get(1).getConfidenceScore(TextClassifier.TYPE_OTHER), 1e-7f);
+        assertEquals(.1f, resultList.get(1).getConfidenceScore(TextClassifier.TYPE_PHONE), 1e-7f);
+    }
+
+    @Test
+    public void testParcelOptions() {
+        TextClassifier.EntityConfig entityConfig = new TextClassifier.EntityConfig(
+                TextClassifier.ENTITY_PRESET_NONE);
+        entityConfig.includeEntities("a", "b", "c");
+        entityConfig.excludeEntities("b");
+        TextLinks.Options reference = new TextLinks.Options();
+        reference.setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"));
+        reference.setEntityConfig(entityConfig);
+        reference.setApplyStrategy(TextLinks.APPLY_STRATEGY_REPLACE);
+        reference.setSpanFactory(new CustomSpanFactory());
+
+        final Parcel parcel = Parcel.obtain();
+        reference.writeToParcel(parcel, reference.describeContents());
+        parcel.setDataPosition(0);
+        TextLinks.Options result = TextLinks.Options.CREATOR.createFromParcel(parcel);
+
+        assertEquals("en-US,de-DE", result.getDefaultLocales().toLanguageTags());
+        assertEquals(Arrays.asList("a", "c"), result.getEntityConfig().getEntities(mClassifier));
+        assertEquals(TextLinks.APPLY_STRATEGY_REPLACE, result.getApplyStrategy());
+        assertEquals(null, result.getSpanFactory());
+    }
+
+    @Test
+    public void testApplyDifferentText() {
+        SpannableString text = new SpannableString("foo");
+        TextLinks links = new TextLinks.Builder("bar").build();
+        assertEquals(links.apply(text, TextLinks.APPLY_STRATEGY_REPLACE, null),
+                TextLinks.STATUS_DIFFERENT_TEXT);
+    }
+
+    @Test
+    public void testApplyNoLinks() {
+        SpannableString text = new SpannableString("foo");
+        TextLinks links = new TextLinks.Builder(text.toString()).build();
+        assertEquals(links.apply(text, TextLinks.APPLY_STRATEGY_REPLACE, null),
+                TextLinks.STATUS_NO_LINKS_FOUND);
+    }
+
+    @Test
+    public void testApplyNoApplied() {
+        SpannableString text = new SpannableString("foo");
+        text.setSpan(new NoOpSpan(), 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        TextLinks links = new TextLinks.Builder(text.toString()).addLink(
+                0, 3, mDummyEntityScores).build();
+        assertEquals(links.apply(text, TextLinks.APPLY_STRATEGY_IGNORE, null),
+                TextLinks.STATUS_NO_LINKS_APPLIED);
+    }
+
+    @Test
+    public void testApplyAppliedDefaultSpanFactory() {
+        SpannableString text = new SpannableString("foo");
+        TextLinks links = new TextLinks.Builder(text.toString()).addLink(
+                0, 3, mDummyEntityScores).build();
+        assertEquals(links.apply(text, TextLinks.APPLY_STRATEGY_IGNORE, null),
+                TextLinks.STATUS_LINKS_APPLIED);
+        TextLinks.TextLinkSpan[] spans = text.getSpans(0, 3, TextLinks.TextLinkSpan.class);
+        assertEquals(spans.length, 1);
+        assertTrue(links.getLinks().contains(spans[0].getTextLink()));
+    }
+
+    @Test
+    public void testApplyAppliedDefaultSpanFactoryReplace() {
+        SpannableString text = new SpannableString("foo");
+        text.setSpan(new NoOpSpan(), 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        TextLinks links = new TextLinks.Builder(text.toString()).addLink(
+                0, 3, mDummyEntityScores).build();
+        assertEquals(links.apply(text, TextLinks.APPLY_STRATEGY_REPLACE, null),
+                TextLinks.STATUS_LINKS_APPLIED);
+        TextLinks.TextLinkSpan[] spans = text.getSpans(0, 3, TextLinks.TextLinkSpan.class);
+        assertEquals(spans.length, 1);
+        assertTrue(links.getLinks().contains(spans[0].getTextLink()));
+    }
+
+    @Test
+    public void testApplyAppliedCustomSpanFactory() {
+        SpannableString text = new SpannableString("foo");
+        TextLinks links = new TextLinks.Builder(text.toString()).addLink(
+                0, 3, mDummyEntityScores).build();
+        assertEquals(links.apply(text, TextLinks.APPLY_STRATEGY_IGNORE, new CustomSpanFactory()),
+                TextLinks.STATUS_LINKS_APPLIED);
+        CustomTextLinkSpan[] spans = text.getSpans(0, 3, CustomTextLinkSpan.class);
+        assertEquals(spans.length, 1);
+        assertTrue(links.getLinks().contains(spans[0].getTextLink()));
+    }
+}
diff --git a/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextSelectionTest.java b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextSelectionTest.java
new file mode 100644
index 0000000..33a227b
--- /dev/null
+++ b/textclassifier/src/androidTest/java/androidx/view/textclassifier/TextSelectionTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2018 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 androidx.view.textclassifier;
+
+import static org.junit.Assert.assertEquals;
+
+import android.os.Parcel;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v4.os.LocaleListCompat;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/** Instrumentation unit tests for {@link TextSelection}. */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public final class TextSelectionTest {
+    @Test
+    public void testParcel() {
+        final int startIndex = 13;
+        final int endIndex = 37;
+        final String signature = "signature";
+        final TextSelection reference = new TextSelection.Builder(startIndex, endIndex)
+                .setEntityType(TextClassifier.TYPE_ADDRESS, 0.3f)
+                .setEntityType(TextClassifier.TYPE_PHONE, 0.7f)
+                .setEntityType(TextClassifier.TYPE_URL, 0.1f)
+                .setSignature(signature)
+                .build();
+
+        final Parcel parcel = Parcel.obtain();
+        reference.writeToParcel(parcel, reference.describeContents());
+        parcel.setDataPosition(0);
+        final TextSelection result = TextSelection.CREATOR.createFromParcel(parcel);
+
+        assertEquals(startIndex, result.getSelectionStartIndex());
+        assertEquals(endIndex, result.getSelectionEndIndex());
+        assertEquals(signature, result.getSignature());
+
+        assertEquals(3, result.getEntityCount());
+        assertEquals(TextClassifier.TYPE_PHONE, result.getEntity(0));
+        assertEquals(TextClassifier.TYPE_ADDRESS, result.getEntity(1));
+        assertEquals(TextClassifier.TYPE_URL, result.getEntity(2));
+        assertEquals(0.7f, result.getConfidenceScore(TextClassifier.TYPE_PHONE), 1e-7f);
+        assertEquals(0.3f, result.getConfidenceScore(TextClassifier.TYPE_ADDRESS), 1e-7f);
+        assertEquals(0.1f, result.getConfidenceScore(TextClassifier.TYPE_URL), 1e-7f);
+    }
+
+    @Test
+    public void testParcelOptions() {
+        TextSelection.Options reference = new TextSelection.Options();
+        reference.setDefaultLocales(LocaleListCompat.forLanguageTags("en-US,de-DE"));
+
+        // Parcel and unparcel.
+        final Parcel parcel = Parcel.obtain();
+        reference.writeToParcel(parcel, reference.describeContents());
+        parcel.setDataPosition(0);
+        TextSelection.Options result = TextSelection.Options.CREATOR.createFromParcel(
+                parcel);
+
+        assertEquals("en-US,de-DE", result.getDefaultLocales().toLanguageTags());
+    }
+}
diff --git a/design/AndroidManifest.xml b/textclassifier/src/main/AndroidManifest.xml
similarity index 87%
rename from design/AndroidManifest.xml
rename to textclassifier/src/main/AndroidManifest.xml
index 0eb8b85..8526cbb 100644
--- a/design/AndroidManifest.xml
+++ b/textclassifier/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2018 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.
@@ -14,6 +14,6 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.support.design">
+          package="androidx.view.textclassifier">
     <uses-sdk android:minSdkVersion="14" />
 </manifest>
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/EntityConfidence.java b/textclassifier/src/main/java/androidx/view/textclassifier/EntityConfidence.java
new file mode 100644
index 0000000..7434a20
--- /dev/null
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/EntityConfidence.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2018 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 androidx.view.textclassifier;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.annotation.FloatRange;
+import android.support.annotation.NonNull;
+import android.support.annotation.RestrictTo;
+import android.support.v4.util.ArrayMap;
+import android.support.v4.util.Preconditions;
+import android.support.v4.util.SimpleArrayMap;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Helper object for setting and getting entity scores for classified text.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+final class EntityConfidence implements Parcelable {
+
+    private final ArrayMap<String, Float> mEntityConfidence = new ArrayMap<>();
+    private final ArrayList<String> mSortedEntities = new ArrayList<>();
+
+    EntityConfidence() {}
+
+    EntityConfidence(@NonNull EntityConfidence source) {
+        Preconditions.checkNotNull(source);
+        mEntityConfidence.putAll((SimpleArrayMap<String, Float>) source.mEntityConfidence);
+        mSortedEntities.addAll(source.mSortedEntities);
+    }
+
+    /**
+     * Constructs an EntityConfidence from a map of entity to confidence.
+     *
+     * Map entries that have 0 confidence are removed, and values greater than 1 are clamped to 1.
+     *
+     * @param source a map from entity to a confidence value in the range 0 (low confidence) to
+     *               1 (high confidence).
+     */
+    EntityConfidence(@NonNull Map<String, Float> source) {
+        Preconditions.checkNotNull(source);
+
+        // Prune non-existent entities and clamp to 1.
+        mEntityConfidence.ensureCapacity(source.size());
+        for (Map.Entry<String, Float> it : source.entrySet()) {
+            if (it.getValue() <= 0) continue;
+            mEntityConfidence.put(it.getKey(), Math.min(1, it.getValue()));
+        }
+        resetSortedEntitiesFromMap();
+    }
+
+    /**
+     * Returns an immutable list of entities found in the classified text ordered from
+     * high confidence to low confidence.
+     */
+    @NonNull
+    public List<String> getEntities() {
+        return Collections.unmodifiableList(mSortedEntities);
+    }
+
+    /**
+     * Returns the confidence score for the specified entity. The value ranges from
+     * 0 (low confidence) to 1 (high confidence). 0 indicates that the entity was not found for the
+     * classified text.
+     */
+    @FloatRange(from = 0.0, to = 1.0)
+    public float getConfidenceScore(String entity) {
+        if (mEntityConfidence.containsKey(entity)) {
+            return mEntityConfidence.get(entity);
+        }
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        return mEntityConfidence.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mEntityConfidence.size());
+        for (Map.Entry<String, Float> entry : mEntityConfidence.entrySet()) {
+            dest.writeString(entry.getKey());
+            dest.writeFloat(entry.getValue());
+        }
+    }
+
+    public static final Parcelable.Creator<EntityConfidence> CREATOR =
+            new Parcelable.Creator<EntityConfidence>() {
+                @Override
+                public EntityConfidence createFromParcel(Parcel in) {
+                    return new EntityConfidence(in);
+                }
+
+                @Override
+                public EntityConfidence[] newArray(int size) {
+                    return new EntityConfidence[size];
+                }
+            };
+
+    private EntityConfidence(Parcel in) {
+        final int numEntities = in.readInt();
+        mEntityConfidence.ensureCapacity(numEntities);
+        for (int i = 0; i < numEntities; ++i) {
+            mEntityConfidence.put(in.readString(), in.readFloat());
+        }
+        resetSortedEntitiesFromMap();
+    }
+
+    private void resetSortedEntitiesFromMap() {
+        mSortedEntities.clear();
+        mSortedEntities.ensureCapacity(mEntityConfidence.size());
+        mSortedEntities.addAll(mEntityConfidence.keySet());
+        Collections.sort(mSortedEntities, new EntityConfidenceComparator());
+    }
+
+    /** Helper to sort entities according to their confidence. */
+    private class EntityConfidenceComparator implements Comparator<String> {
+        @Override
+        public int compare(String e1, String e2) {
+            float score1 = mEntityConfidence.get(e1);
+            float score2 = mEntityConfidence.get(e2);
+            return Float.compare(score2, score1);
+        }
+    }
+}
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/TextClassification.java b/textclassifier/src/main/java/androidx/view/textclassifier/TextClassification.java
new file mode 100644
index 0000000..799618a
--- /dev/null
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/TextClassification.java
@@ -0,0 +1,619 @@
+/*
+ * Copyright (C) 2018 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 androidx.view.textclassifier;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.annotation.FloatRange;
+import android.support.annotation.IntRange;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.support.v4.os.LocaleListCompat;
+import android.support.v4.util.ArrayMap;
+import android.support.v4.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import androidx.view.textclassifier.TextClassifier.EntityType;
+
+/**
+ * Information for generating a widget to handle classified text.
+ *
+ * <p>A TextClassification object contains icons, labels, and intents that may be used to build a
+ * widget that can be used to act on classified text. There is the concept of a <i>primary
+ * action</i> and other <i>secondary actions</i>.
+ *
+ * <p>e.g. building a view that, when clicked, shares the classified text with the preferred app:
+ *
+ * <pre>{@code
+ *   // Called preferably outside the UiThread.
+ *   TextClassification classification = textClassifier.classifyText(allText, 10, 25);
+ *
+ *   // Called on the UiThread.
+ *   Button button = new Button(context);
+ *   button.setCompoundDrawablesWithIntrinsicBounds(classification.getIcon(), null, null, null);
+ *   button.setText(classification.getLabel());
+ *   button.setOnClickListener(v -> context.startActivity(classification.getIntent()));
+ * }</pre>
+ *
+ * TODO: describe how to start action mode for classified text.
+ */
+public final class TextClassification implements Parcelable {
+
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    static final TextClassification EMPTY = new TextClassification.Builder().build();
+
+    // TODO: investigate a way to derive this based on device properties.
+    private static final int MAX_PRIMARY_ICON_SIZE = 192;
+    private static final int MAX_SECONDARY_ICON_SIZE = 144;
+
+    @Nullable private final String mText;
+    @Nullable private final Drawable mPrimaryIcon;
+    @Nullable private final String mPrimaryLabel;
+    @Nullable private final Intent mPrimaryIntent;
+    @NonNull private final List<Drawable> mSecondaryIcons;
+    @NonNull private final List<String> mSecondaryLabels;
+    @NonNull private final List<Intent> mSecondaryIntents;
+    @NonNull private final EntityConfidence mEntityConfidence;
+    @NonNull private final String mSignature;
+
+    private TextClassification(
+            @Nullable String text,
+            @Nullable Drawable primaryIcon,
+            @Nullable String primaryLabel,
+            @Nullable Intent primaryIntent,
+            @NonNull List<Drawable> secondaryIcons,
+            @NonNull List<String> secondaryLabels,
+            @NonNull List<Intent> secondaryIntents,
+            @NonNull Map<String, Float> entityConfidence,
+            @NonNull String signature) {
+        Preconditions.checkArgument(secondaryLabels.size() == secondaryIntents.size());
+        Preconditions.checkArgument(secondaryIcons.size() == secondaryIntents.size());
+        mText = text;
+        mPrimaryIcon = primaryIcon;
+        mPrimaryLabel = primaryLabel;
+        mPrimaryIntent = primaryIntent;
+        mSecondaryIcons = secondaryIcons;
+        mSecondaryLabels = secondaryLabels;
+        mSecondaryIntents = secondaryIntents;
+        mEntityConfidence = new EntityConfidence(entityConfidence);
+        mSignature = signature;
+    }
+
+    /**
+     * Gets the classified text.
+     */
+    @Nullable
+    public String getText() {
+        return mText;
+    }
+
+    /**
+     * Returns the number of entities found in the classified text.
+     */
+    @IntRange(from = 0)
+    public int getEntityCount() {
+        return mEntityConfidence.getEntities().size();
+    }
+
+    /**
+     * Returns the entity at the specified index. Entities are ordered from high confidence
+     * to low confidence.
+     *
+     * @throws IndexOutOfBoundsException if the specified index is out of range.
+     * @see #getEntityCount() for the number of entities available.
+     */
+    @NonNull
+    public @EntityType String getEntity(int index) {
+        return mEntityConfidence.getEntities().get(index);
+    }
+
+    /**
+     * Returns the confidence score for the specified entity. The value ranges from
+     * 0 (low confidence) to 1 (high confidence). 0 indicates that the entity was not found for the
+     * classified text.
+     */
+    @FloatRange(from = 0.0, to = 1.0)
+    public float getConfidenceScore(@EntityType String entity) {
+        return mEntityConfidence.getConfidenceScore(entity);
+    }
+
+    /**
+     * Returns the number of <i>secondary</i> actions that are available to act on the classified
+     * text.
+     *
+     * <p><strong>Note: </strong> that there may or may not be a <i>primary</i> action.
+     *
+     * @see #getSecondaryIntent(int)
+     * @see #getSecondaryLabel(int)
+     * @see #getSecondaryIcon(int)
+     */
+    @IntRange(from = 0)
+    public int getSecondaryActionsCount() {
+        return mSecondaryIntents.size();
+    }
+
+    /**
+     * Returns one of the <i>secondary</i> icons that maybe rendered on a widget used to act on the
+     * classified text.
+     *
+     * @param index Index of the action to get the icon for.
+     * @throws IndexOutOfBoundsException if the specified index is out of range.
+     * @see #getSecondaryActionsCount() for the number of actions available.
+     * @see #getSecondaryIntent(int)
+     * @see #getSecondaryLabel(int)
+     * @see #getIcon()
+     */
+    @Nullable
+    public Drawable getSecondaryIcon(int index) {
+        return mSecondaryIcons.get(index);
+    }
+
+    /**
+     * Returns an icon for the <i>primary</i> intent that may be rendered on a widget used to act
+     * on the classified text.
+     *
+     * @see #getSecondaryIcon(int)
+     */
+    @Nullable
+    public Drawable getIcon() {
+        return mPrimaryIcon;
+    }
+
+    /**
+     * Returns one of the <i>secondary</i> labels that may be rendered on a widget used to act on
+     * the classified text.
+     *
+     * @param index Index of the action to get the label for.
+     * @throws IndexOutOfBoundsException if the specified index is out of range.
+     * @see #getSecondaryActionsCount()
+     * @see #getSecondaryIntent(int)
+     * @see #getSecondaryIcon(int)
+     * @see #getLabel()
+     */
+    @Nullable
+    public CharSequence getSecondaryLabel(int index) {
+        return mSecondaryLabels.get(index);
+    }
+
+    /**
+     * Returns a label for the <i>primary</i> intent that may be rendered on a widget used to act
+     * on the classified text.
+     *
+     * @see #getSecondaryLabel(int)
+     */
+    @Nullable
+    public CharSequence getLabel() {
+        return mPrimaryLabel;
+    }
+
+    /**
+     * Returns one of the <i>secondary</i> intents that may be fired to act on the classified text.
+     *
+     * @param index Index of the action to get the intent for.
+     * @throws IndexOutOfBoundsException if the specified index is out of range.
+     * @see #getSecondaryActionsCount()
+     * @see #getSecondaryLabel(int)
+     * @see #getSecondaryIcon(int)
+     * @see #getIntent()
+     */
+    @Nullable
+    public Intent getSecondaryIntent(int index) {
+        return mSecondaryIntents.get(index);
+    }
+
+    /**
+     * Returns the <i>primary</i> intent that may be fired to act on the classified text.
+     *
+     * @see #getSecondaryIntent(int)
+     */
+    @Nullable
+    public Intent getIntent() {
+        return mPrimaryIntent;
+    }
+
+    /**
+     * Returns the signature for this object.
+     * The TextClassifier that generates this object may use it as a way to internally identify
+     * this object.
+     */
+    @NonNull
+    public String getSignature() {
+        return mSignature;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(Locale.US, "TextClassification {"
+                        + "text=%s, entities=%s, "
+                        + "primaryLabel=%s, secondaryLabels=%s, "
+                        + "primaryIntent=%s, secondaryIntents=%s, "
+                        + "signature=%s}",
+                mText, mEntityConfidence,
+                mPrimaryLabel, mSecondaryLabels,
+                mPrimaryIntent, mSecondaryIntents,
+                mSignature);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mText);
+        final Bitmap primaryIconBitmap = drawableToBitmap(mPrimaryIcon, MAX_PRIMARY_ICON_SIZE);
+        dest.writeInt(primaryIconBitmap != null ? 1 : 0);
+        if (primaryIconBitmap != null) {
+            primaryIconBitmap.writeToParcel(dest, flags);
+        }
+        dest.writeString(mPrimaryLabel);
+        dest.writeInt(mPrimaryIntent != null ? 1 : 0);
+        if (mPrimaryIntent != null) {
+            mPrimaryIntent.writeToParcel(dest, flags);
+        }
+        dest.writeTypedList(drawablesToBitmaps(mSecondaryIcons, MAX_SECONDARY_ICON_SIZE));
+        dest.writeStringList(mSecondaryLabels);
+        dest.writeTypedList(mSecondaryIntents);
+        mEntityConfidence.writeToParcel(dest, flags);
+        dest.writeString(mSignature);
+    }
+
+    public static final Parcelable.Creator<TextClassification> CREATOR =
+            new Parcelable.Creator<TextClassification>() {
+                @Override
+                public TextClassification createFromParcel(Parcel in) {
+                    return new TextClassification(in);
+                }
+
+                @Override
+                public TextClassification[] newArray(int size) {
+                    return new TextClassification[size];
+                }
+            };
+
+    private TextClassification(Parcel in) {
+        mText = in.readString();
+        mPrimaryIcon = in.readInt() == 0
+                ? null : new BitmapDrawable(null, Bitmap.CREATOR.createFromParcel(in));
+        mPrimaryLabel = in.readString();
+        mPrimaryIntent = in.readInt() == 0 ? null : Intent.CREATOR.createFromParcel(in);
+        mSecondaryIcons = bitmapsToDrawables(in.createTypedArrayList(Bitmap.CREATOR));
+        mSecondaryLabels = in.createStringArrayList();
+        mSecondaryIntents = in.createTypedArrayList(Intent.CREATOR);
+        mEntityConfidence = EntityConfidence.CREATOR.createFromParcel(in);
+        mSignature = in.readString();
+    }
+
+    /**
+     * Returns a Bitmap representation of the Drawable
+     *
+     * @param drawable The drawable to convert.
+     * @param maxDims The maximum edge length of the resulting bitmap (in pixels).
+     */
+    @Nullable
+    private static Bitmap drawableToBitmap(@Nullable Drawable drawable, int maxDims) {
+        if (drawable == null) {
+            return null;
+        }
+        final int actualWidth = Math.max(1, drawable.getIntrinsicWidth());
+        final int actualHeight = Math.max(1, drawable.getIntrinsicHeight());
+        final double scaleWidth = ((double) maxDims) / actualWidth;
+        final double scaleHeight = ((double) maxDims) / actualHeight;
+        final double scale = Math.min(1.0, Math.min(scaleWidth, scaleHeight));
+        final int width = (int) (actualWidth * scale);
+        final int height = (int) (actualHeight * scale);
+        if (drawable instanceof BitmapDrawable) {
+            final BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
+            if (actualWidth != width || actualHeight != height) {
+                return Bitmap.createScaledBitmap(
+                        bitmapDrawable.getBitmap(), width, height, /*filter=*/false);
+            } else {
+                return bitmapDrawable.getBitmap();
+            }
+        } else {
+            final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+            final Canvas canvas = new Canvas(bitmap);
+            drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+            drawable.draw(canvas);
+            return bitmap;
+        }
+    }
+
+    /**
+     * Returns a list of drawables converted to Bitmaps
+     *
+     * @param drawables The drawables to convert.
+     * @param maxDims The maximum edge length of the resulting bitmaps (in pixels).
+     */
+    private static List<Bitmap> drawablesToBitmaps(List<Drawable> drawables, int maxDims) {
+        final List<Bitmap> bitmaps = new ArrayList<>(drawables.size());
+        for (Drawable drawable : drawables) {
+            bitmaps.add(drawableToBitmap(drawable, maxDims));
+        }
+        return bitmaps;
+    }
+
+    /** Returns a list of drawable wrappers for a list of bitmaps. */
+    private static List<Drawable> bitmapsToDrawables(List<Bitmap> bitmaps) {
+        final List<Drawable> drawables = new ArrayList<>(bitmaps.size());
+        for (Bitmap bitmap : bitmaps) {
+            if (bitmap != null) {
+                drawables.add(new BitmapDrawable(null, bitmap));
+            } else {
+                drawables.add(null);
+            }
+        }
+        return drawables;
+    }
+
+    /**
+     * Builder for building {@link TextClassification} objects.
+     *
+     * <p>e.g.
+     *
+     * <pre>{@code
+     *   TextClassification classification = new TextClassification.Builder()
+     *          .setText(classifiedText)
+     *          .setEntityType(TextClassifier.TYPE_EMAIL, 0.9)
+     *          .setEntityType(TextClassifier.TYPE_OTHER, 0.1)
+     *          .setPrimaryAction(intent, label, icon)
+     *          .addSecondaryAction(intent1, label1, icon1)
+     *          .addSecondaryAction(intent2, label2, icon2)
+     *          .build();
+     * }</pre>
+     */
+    public static final class Builder {
+
+        @NonNull private String mText;
+        @NonNull private final List<Drawable> mSecondaryIcons = new ArrayList<>();
+        @NonNull private final List<String> mSecondaryLabels = new ArrayList<>();
+        @NonNull private final List<Intent> mSecondaryIntents = new ArrayList<>();
+        @NonNull private final Map<String, Float> mEntityConfidence = new ArrayMap<>();
+        @Nullable Drawable mPrimaryIcon;
+        @Nullable String mPrimaryLabel;
+        @Nullable Intent mPrimaryIntent;
+        @NonNull private String mSignature = "";
+
+        /**
+         * Sets the classified text.
+         */
+        public Builder setText(@Nullable String text) {
+            mText = text;
+            return this;
+        }
+
+        /**
+         * Sets an entity type for the classification result and assigns a confidence score.
+         * If a confidence score had already been set for the specified entity type, this will
+         * override that score.
+         *
+         * @param confidenceScore a value from 0 (low confidence) to 1 (high confidence).
+         *      0 implies the entity does not exist for the classified text.
+         *      Values greater than 1 are clamped to 1.
+         */
+        public Builder setEntityType(
+                @NonNull @EntityType String type,
+                @FloatRange(from = 0.0, to = 1.0) float confidenceScore) {
+            mEntityConfidence.put(type, confidenceScore);
+            return this;
+        }
+
+        /**
+         * Adds an <i>secondary</i> action that may be performed on the classified text.
+         * Secondary actions are in addition to the <i>primary</i> action which may or may not
+         * exist.
+         *
+         * <p>The label and icon are used for rendering of widgets that offer the intent.
+         * Actions should be added in order of priority.
+         *
+         * <p><stong>Note: </stong> If all input parameters are set to null, this method will be a
+         * no-op.
+         *
+         * @see #setPrimaryAction(Intent, String, Drawable)
+         */
+        public Builder addSecondaryAction(
+                @Nullable Intent intent, @Nullable String label, @Nullable Drawable icon) {
+            if (intent != null || label != null || icon != null) {
+                mSecondaryIntents.add(intent);
+                mSecondaryLabels.add(label);
+                mSecondaryIcons.add(icon);
+            }
+            return this;
+        }
+
+        /**
+         * Removes all the <i>secondary</i> actions.
+         */
+        public Builder clearSecondaryActions() {
+            mSecondaryIntents.clear();
+            mSecondaryLabels.clear();
+            mSecondaryIcons.clear();
+            return this;
+        }
+
+        /**
+         * Sets the <i>primary</i> action that may be performed on the classified text. This is
+         * equivalent to calling {@code setIntent(intent).setLabel(label).setIcon(icon)}.
+         *
+         * <p><strong>Note: </strong>If all input parameters are null, there will be no
+         * <i>primary</i> action but there may still be <i>secondary</i> actions.
+         *
+         * @see #addSecondaryAction(Intent, String, Drawable)
+         */
+        public Builder setPrimaryAction(
+                @Nullable Intent intent, @Nullable String label, @Nullable Drawable icon) {
+            return setIntent(intent).setLabel(label).setIcon(icon);
+        }
+
+        /**
+         * Sets the icon for the <i>primary</i> action that may be rendered on a widget used to act
+         * on the classified text.
+         *
+         * @see #setPrimaryAction(Intent, String, Drawable)
+         */
+        public Builder setIcon(@Nullable Drawable icon) {
+            mPrimaryIcon = icon;
+            return this;
+        }
+
+        /**
+         * Sets the label for the <i>primary</i> action that may be rendered on a widget used to
+         * act on the classified text.
+         *
+         * @see #setPrimaryAction(Intent, String, Drawable)
+         */
+        public Builder setLabel(@Nullable String label) {
+            mPrimaryLabel = label;
+            return this;
+        }
+
+        /**
+         * Sets the intent for the <i>primary</i> action that may be fired to act on the classified
+         * text.
+         *
+         * @see #setPrimaryAction(Intent, String, Drawable)
+         */
+        public Builder setIntent(@Nullable Intent intent) {
+            mPrimaryIntent = intent;
+            return this;
+        }
+
+        /**
+         * Sets a signature for the TextClassification object.
+         * The TextClassifier that generates the TextClassification object may use it as a way to
+         * internally identify the TextClassification object.
+         */
+        public Builder setSignature(@NonNull String signature) {
+            mSignature = Preconditions.checkNotNull(signature);
+            return this;
+        }
+
+        /**
+         * Builds and returns a {@link TextClassification} object.
+         */
+        public TextClassification build() {
+            return new TextClassification(
+                    mText,
+                    mPrimaryIcon, mPrimaryLabel, mPrimaryIntent,
+                    mSecondaryIcons, mSecondaryLabels, mSecondaryIntents,
+                    mEntityConfidence, mSignature);
+        }
+    }
+
+    /**
+     * Optional input parameters for generating TextClassification.
+     */
+    public static final class Options implements Parcelable {
+
+        private @Nullable LocaleListCompat mDefaultLocales;
+        private @Nullable Calendar mReferenceTime;
+
+        public Options() {}
+
+        /**
+         * @param defaultLocales ordered list of locale preferences that may be used to disambiguate
+         *      the provided text. If no locale preferences exist, set this to null or an empty
+         *      locale list.
+         */
+        public Options setDefaultLocales(@Nullable LocaleListCompat defaultLocales) {
+            mDefaultLocales = defaultLocales;
+            return this;
+        }
+
+        /**
+         * @param referenceTime reference time based on which relative dates (e.g. "tomorrow" should
+         *      be interpreted. This should usually be the time when the text was originally
+         *      composed. If no reference time is set, now is used.
+         */
+        public Options setReferenceTime(Calendar referenceTime) {
+            mReferenceTime = referenceTime;
+            return this;
+        }
+
+        /**
+         * @return ordered list of locale preferences that can be used to disambiguate
+         *      the provided text.
+         */
+        @Nullable
+        public LocaleListCompat getDefaultLocales() {
+            return mDefaultLocales;
+        }
+
+        /**
+         * @return reference time based on which relative dates (e.g. "tomorrow") should be
+         *      interpreted.
+         */
+        @Nullable
+        public Calendar getReferenceTime() {
+            return mReferenceTime;
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(mDefaultLocales != null ? 1 : 0);
+            if (mDefaultLocales != null) {
+                dest.writeString(mDefaultLocales.toLanguageTags());
+            }
+            dest.writeInt(mReferenceTime != null ? 1 : 0);
+            if (mReferenceTime != null) {
+                dest.writeSerializable(mReferenceTime);
+            }
+        }
+
+        public static final Parcelable.Creator<Options> CREATOR =
+                new Parcelable.Creator<Options>() {
+                    @Override
+                    public Options createFromParcel(Parcel in) {
+                        return new Options(in);
+                    }
+
+                    @Override
+                    public Options[] newArray(int size) {
+                        return new Options[size];
+                    }
+                };
+
+        private Options(Parcel in) {
+            if (in.readInt() > 0) {
+                mDefaultLocales = LocaleListCompat.forLanguageTags(in.readString());
+            }
+            if (in.readInt() > 0) {
+                mReferenceTime = (Calendar) in.readSerializable();
+            }
+        }
+    }
+}
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/TextClassifier.java b/textclassifier/src/main/java/androidx/view/textclassifier/TextClassifier.java
new file mode 100644
index 0000000..4dc7236
--- /dev/null
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/TextClassifier.java
@@ -0,0 +1,184 @@
+/*
+ * Copyright (C) 2018 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 androidx.view.textclassifier;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.annotation.IntDef;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.StringDef;
+import android.support.v4.util.ArraySet;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Interface for providing text classification related features.
+ *
+ * TextClassifier acts as a proxy to either the system provided TextClassifier, or an equivalent
+ * implementation provided by an app. Each instance of the class therefore represents one connection
+ * to the classifier implementation.
+ *
+ * <p>Unless otherwise stated, methods of this interface are blocking operations.
+ * Avoid calling them on the UI thread.
+ */
+public class TextClassifier {
+
+    // TODO: describe in the class documentation how a TC implementation in chosen/located.
+
+    /** Signifies that the TextClassifier did not identify an entity. */
+    public static final String TYPE_UNKNOWN = "";
+    /** Signifies that the classifier ran, but didn't recognize a know entity. */
+    public static final String TYPE_OTHER = "other";
+    /** Identifies an e-mail address. */
+    public static final String TYPE_EMAIL = "email";
+    /** Identifies a phone number. */
+    public static final String TYPE_PHONE = "phone";
+    /** Identifies a physical address. */
+    public static final String TYPE_ADDRESS = "address";
+    /** Identifies a URL. */
+    public static final String TYPE_URL = "url";
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @Retention(RetentionPolicy.SOURCE)
+    @StringDef(value = {
+            TYPE_UNKNOWN,
+            TYPE_OTHER,
+            TYPE_EMAIL,
+            TYPE_PHONE,
+            TYPE_ADDRESS,
+            TYPE_URL,
+    })
+    @interface EntityType {}
+
+    /** Designates that the TextClassifier should identify all entity types it can. **/
+    static final int ENTITY_PRESET_ALL = 0;
+    /** Designates that the TextClassifier should identify no entities. **/
+    static final int ENTITY_PRESET_NONE = 1;
+    /** Designates that the TextClassifier should identify a base set of entities determined by the
+     * TextClassifier. **/
+    static final int ENTITY_PRESET_BASE = 2;
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(value = {ENTITY_PRESET_ALL, ENTITY_PRESET_NONE, ENTITY_PRESET_BASE})
+    @interface EntityPreset {}
+
+    // TODO: add constructor, suggestSelection, classifyText, generateLinks, logEvent
+
+    /**
+     * Returns a {@link Collection} of the entity types in the specified preset.
+     *
+     * @see #ENTITY_PRESET_ALL
+     * @see #ENTITY_PRESET_NONE
+     */
+    /* package */ Collection<String> getEntitiesForPreset(@EntityPreset int entityPreset) {
+        // TODO: forward call to the classifier implementation.
+        return Collections.EMPTY_LIST;
+    }
+
+    /**
+     * Configuration object for specifying what entities to identify.
+     *
+     * Configs are initially based on a predefined preset, and can be modified from there.
+     */
+    static final class EntityConfig implements Parcelable {
+        private final @EntityPreset int mEntityPreset;
+        private final Collection<String> mExcludedEntityTypes;
+        private final Collection<String> mIncludedEntityTypes;
+
+        EntityConfig(@EntityPreset int mEntityPreset) {
+            this.mEntityPreset = mEntityPreset;
+            mExcludedEntityTypes = new ArraySet<>();
+            mIncludedEntityTypes = new ArraySet<>();
+        }
+
+        /**
+         * Specifies an entity to include in addition to any specified by the enity preset.
+         *
+         * Note that if an entity has been excluded, the exclusion will take precedence.
+         */
+        public EntityConfig includeEntities(String... entities) {
+            mIncludedEntityTypes.addAll(Arrays.asList(entities));
+            return this;
+        }
+
+        /**
+         * Specifies an entity to be excluded.
+         */
+        public EntityConfig excludeEntities(String... entities) {
+            mExcludedEntityTypes.addAll(Arrays.asList(entities));
+            return this;
+        }
+
+        /**
+         * Returns an unmodifiable list of the final set of entities to find.
+         */
+        public List<String> getEntities(TextClassifier textClassifier) {
+            ArrayList<String> entities = new ArrayList<>();
+            for (String entity : textClassifier.getEntitiesForPreset(mEntityPreset)) {
+                if (!mExcludedEntityTypes.contains(entity)) {
+                    entities.add(entity);
+                }
+            }
+            for (String entity : mIncludedEntityTypes) {
+                if (!mExcludedEntityTypes.contains(entity) && !entities.contains(entity)) {
+                    entities.add(entity);
+                }
+            }
+            return Collections.unmodifiableList(entities);
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(mEntityPreset);
+            dest.writeStringList(new ArrayList<>(mExcludedEntityTypes));
+            dest.writeStringList(new ArrayList<>(mIncludedEntityTypes));
+        }
+
+        public static final Parcelable.Creator<EntityConfig> CREATOR =
+                new Parcelable.Creator<EntityConfig>() {
+                    @Override
+                    public EntityConfig createFromParcel(Parcel in) {
+                        return new EntityConfig(in);
+                    }
+
+                    @Override
+                    public EntityConfig[] newArray(int size) {
+                        return new EntityConfig[size];
+                    }
+                };
+
+        private EntityConfig(Parcel in) {
+            mEntityPreset = in.readInt();
+            mExcludedEntityTypes = new ArraySet<>(in.createStringArrayList());
+            mIncludedEntityTypes = new ArraySet<>(in.createStringArrayList());
+        }
+    }
+}
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/TextLinks.java b/textclassifier/src/main/java/androidx/view/textclassifier/TextLinks.java
new file mode 100644
index 0000000..79810f5
--- /dev/null
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/TextLinks.java
@@ -0,0 +1,520 @@
+/*
+ * Copyright 2018 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 androidx.view.textclassifier;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.annotation.FloatRange;
+import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.support.v4.os.LocaleListCompat;
+import android.support.v4.util.Preconditions;
+import android.text.Spannable;
+import android.text.style.ClickableSpan;
+import android.view.View;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import androidx.view.textclassifier.TextClassifier.EntityType;
+
+/**
+ * A collection of links, representing subsequences of text and the entity types (phone number,
+ * address, url, etc) they may be.
+ */
+public final class TextLinks implements Parcelable {
+    private final String mFullText;
+    private final List<TextLink> mLinks;
+
+    /** Links were successfully applied to the text. */
+    public static final int STATUS_LINKS_APPLIED = 0;
+    /** No links exist to apply to text. Links count is zero. */
+    public static final int STATUS_NO_LINKS_FOUND = 1;
+    /** No links applied to text. The links were filtered out. */
+    public static final int STATUS_NO_LINKS_APPLIED = 2;
+    /** The specified text does not match the text used to generate the links. */
+    public static final int STATUS_DIFFERENT_TEXT = 3;
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(value = {
+            STATUS_LINKS_APPLIED,
+            STATUS_NO_LINKS_FOUND,
+            STATUS_NO_LINKS_APPLIED,
+            STATUS_DIFFERENT_TEXT
+    })
+    public @interface Status {}
+
+    /** Do not replace {@link ClickableSpan}s that exist where the {@link TextLinkSpan} needs to
+     * be applied to. Do not apply the TextLinkSpan. **/
+    public static final int APPLY_STRATEGY_IGNORE = 0;
+    /** Replace any {@link ClickableSpan}s that exist where the {@link TextLinkSpan} needs to be
+     * applied to. **/
+    public static final int APPLY_STRATEGY_REPLACE = 1;
+
+    /** @hide */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({APPLY_STRATEGY_IGNORE, APPLY_STRATEGY_REPLACE})
+    public @interface ApplyStrategy {}
+
+    private TextLinks(String fullText, ArrayList<TextLink> links) {
+        mFullText = fullText;
+        mLinks = Collections.unmodifiableList(links);
+    }
+
+    /**
+     * Returns an unmodifiable Collection of the links.
+     */
+    public Collection<TextLink> getLinks() {
+        return mLinks;
+    }
+
+    /**
+     * Annotates the given text with the generated links. It will fail if the provided text doesn't
+     * match the original text used to crete the TextLinks.
+     *
+     * @param text the text to apply the links to. Must match the original text.
+     * @param spanFactory a factory to generate spans from TextLinks. Will use a default if null.
+     *
+     * @return one of {@link #STATUS_LINKS_APPLIED}, {@link #STATUS_NO_LINKS_FOUND},
+     *      {@link #STATUS_NO_LINKS_APPLIED}, {@link #STATUS_DIFFERENT_TEXT}
+     */
+    @Status
+    public int apply(
+            @NonNull Spannable text,
+            @ApplyStrategy int applyStrategy,
+            @Nullable SpanFactory spanFactory) {
+        Preconditions.checkNotNull(text);
+        checkValidApplyStrategy(applyStrategy);
+        if (!mFullText.equals(text.toString())) {
+            return STATUS_DIFFERENT_TEXT;
+        }
+        if (mLinks.isEmpty()) {
+            return STATUS_NO_LINKS_FOUND;
+        }
+
+        if (spanFactory == null) {
+            spanFactory = DEFAULT_SPAN_FACTORY;
+        }
+        int applyCount = 0;
+        for (TextLink link : mLinks) {
+            final TextLinkSpan span = spanFactory.createSpan(link);
+            if (span != null) {
+                final ClickableSpan[] existingSpans = text.getSpans(
+                        link.getStart(), link.getEnd(), ClickableSpan.class);
+                if (existingSpans.length > 0) {
+                    if (applyStrategy == APPLY_STRATEGY_REPLACE) {
+                        for (ClickableSpan existingSpan : existingSpans) {
+                            text.removeSpan(existingSpan);
+                        }
+                        text.setSpan(span, link.getStart(), link.getEnd(),
+                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+                        applyCount++;
+                    }
+                } else {
+                    text.setSpan(span, link.getStart(), link.getEnd(),
+                            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+                    applyCount++;
+                }
+            }
+        }
+        if (applyCount == 0) {
+            return STATUS_NO_LINKS_APPLIED;
+        }
+        return STATUS_LINKS_APPLIED;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mFullText);
+        dest.writeTypedList(mLinks);
+    }
+
+    public static final Parcelable.Creator<TextLinks> CREATOR =
+            new Parcelable.Creator<TextLinks>() {
+                @Override
+                public TextLinks createFromParcel(Parcel in) {
+                    return new TextLinks(in);
+                }
+
+                @Override
+                public TextLinks[] newArray(int size) {
+                    return new TextLinks[size];
+                }
+            };
+
+    private TextLinks(Parcel in) {
+        mFullText = in.readString();
+        mLinks = in.createTypedArrayList(TextLink.CREATOR);
+    }
+
+    /**
+     * A link, identifying a substring of text and possible entity types for it.
+     */
+    public static final class TextLink implements Parcelable {
+        private final EntityConfidence mEntityScores;
+        private final int mStart;
+        private final int mEnd;
+
+        /**
+         * Create a new TextLink.
+         *
+         * @throws IllegalArgumentException if entityScores is null or empty.
+         */
+        TextLink(int start, int end, @NonNull Map<String, Float> entityScores) {
+            Preconditions.checkNotNull(entityScores);
+            Preconditions.checkArgument(!entityScores.isEmpty());
+            Preconditions.checkArgument(start <= end);
+            mStart = start;
+            mEnd = end;
+            mEntityScores = new EntityConfidence(entityScores);
+        }
+
+        /**
+         * Returns the start index of this link in the original text.
+         *
+         * @return the start index.
+         */
+        public int getStart() {
+            return mStart;
+        }
+
+        /**
+         * Returns the end index of this link in the original text.
+         *
+         * @return the end index.
+         */
+        public int getEnd() {
+            return mEnd;
+        }
+
+        /**
+         * Returns the number of entity types that have confidence scores.
+         *
+         * @return the entity count.
+         */
+        public int getEntityCount() {
+            return mEntityScores.getEntities().size();
+        }
+
+        /**
+         * Returns the entity type at a given index. Entity types are sorted by confidence.
+         *
+         * @return the entity type at the provided index.
+         */
+        @NonNull public @EntityType String getEntity(int index) {
+            return mEntityScores.getEntities().get(index);
+        }
+
+        /**
+         * Returns the confidence score for a particular entity type.
+         *
+         * @param entityType the entity type.
+         */
+        public @FloatRange(from = 0.0, to = 1.0) float getConfidenceScore(
+                @EntityType String entityType) {
+            return mEntityScores.getConfidenceScore(entityType);
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            mEntityScores.writeToParcel(dest, flags);
+            dest.writeInt(mStart);
+            dest.writeInt(mEnd);
+        }
+
+        public static final Parcelable.Creator<TextLink> CREATOR =
+                new Parcelable.Creator<TextLink>() {
+                    @Override
+                    public TextLink createFromParcel(Parcel in) {
+                        return new TextLink(in);
+                    }
+
+                    @Override
+                    public TextLink[] newArray(int size) {
+                        return new TextLink[size];
+                    }
+                };
+
+        private TextLink(Parcel in) {
+            mEntityScores = EntityConfidence.CREATOR.createFromParcel(in);
+            mStart = in.readInt();
+            mEnd = in.readInt();
+        }
+    }
+
+    /**
+     * Optional input parameters for generating TextLinks.
+     */
+    public static final class Options implements Parcelable {
+
+        private @Nullable LocaleListCompat mDefaultLocales;
+        private TextClassifier.EntityConfig mEntityConfig;
+        private @ApplyStrategy int mApplyStrategy;
+        private @Nullable SpanFactory mSpanFactory;
+
+        public Options() {}
+
+        /**
+         * @param defaultLocales ordered list of locale preferences that may be used to
+         *                       disambiguate the provided text. If no locale preferences exist,
+         *                       set this to null or an empty locale list.
+         */
+        public Options setDefaultLocales(@Nullable LocaleListCompat defaultLocales) {
+            mDefaultLocales = defaultLocales;
+            return this;
+        }
+
+        /**
+         * Sets the entity configuration to use. This determines what types of entities the
+         * TextClassifier will look for.
+         *
+         * @param entityConfig EntityConfig to use
+         */
+        public Options setEntityConfig(@Nullable TextClassifier.EntityConfig entityConfig) {
+            mEntityConfig = entityConfig;
+            return this;
+        }
+
+        /**
+         * Sets a strategy for resolving conflicts when applying generated links to text that
+         * already have links.
+         *
+         * @throws IllegalArgumentException if applyStrategy is not valid.
+         * @see #APPLY_STRATEGY_IGNORE
+         * @see #APPLY_STRATEGY_REPLACE
+         */
+        public Options setApplyStrategy(@ApplyStrategy int applyStrategy) {
+            checkValidApplyStrategy(applyStrategy);
+            mApplyStrategy = applyStrategy;
+            return this;
+        }
+
+        /**
+         * Sets a factory for converting a TextLink to a TextLinkSpan.
+         *
+         * <p><strong>Note: </strong>This is not parceled over IPC.
+         */
+        public Options setSpanFactory(@Nullable SpanFactory spanFactory) {
+            mSpanFactory = spanFactory;
+            return this;
+        }
+
+        /**
+         * @return ordered list of locale preferences that can be used to disambiguate
+         *      the provided text.
+         */
+        @Nullable
+        public LocaleListCompat getDefaultLocales() {
+            return mDefaultLocales;
+        }
+
+        /**
+         * @return The config representing the set of entities to look for.
+         * @see #setEntityConfig(TextClassifier.EntityConfig)
+         */
+        @Nullable
+        public TextClassifier.EntityConfig getEntityConfig() {
+            return mEntityConfig;
+        }
+
+        /**
+         * Returns the strategy for resolving conflicts when applying generated links to text that
+         * already have links.
+         *
+         * @see #APPLY_STRATEGY_IGNORE
+         * @see #APPLY_STRATEGY_REPLACE
+         */
+        @ApplyStrategy
+        public int getApplyStrategy() {
+            return mApplyStrategy;
+        }
+
+        /**
+         * Returns a factory for converting a TextLink to a TextLinkSpan.
+         *
+         * <p><strong>Note: </strong>This is not parcelable and will always return null if read
+         *      from a parcel
+         */
+        @Nullable
+        public SpanFactory getSpanFactory() {
+            return mSpanFactory;
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(mDefaultLocales != null ? 1 : 0);
+            if (mDefaultLocales != null) {
+                dest.writeString(mDefaultLocales.toLanguageTags());
+            }
+            dest.writeInt(mEntityConfig != null ? 1 : 0);
+            if (mEntityConfig != null) {
+                mEntityConfig.writeToParcel(dest, flags);
+            }
+            dest.writeInt(mApplyStrategy);
+            // mSpanFactory is not parcelable
+        }
+
+        public static final Parcelable.Creator<Options> CREATOR =
+                new Parcelable.Creator<Options>() {
+                    @Override
+                    public Options createFromParcel(Parcel in) {
+                        return new Options(in);
+                    }
+
+                    @Override
+                    public Options[] newArray(int size) {
+                        return new Options[size];
+                    }
+                };
+
+        private Options(Parcel in) {
+            if (in.readInt() > 0) {
+                mDefaultLocales = LocaleListCompat.forLanguageTags(in.readString());
+            }
+            if (in.readInt() > 0) {
+                mEntityConfig = TextClassifier.EntityConfig.CREATOR.createFromParcel(in);
+            }
+            mApplyStrategy = in.readInt();
+            // mSpanFactory is not parcelable
+        }
+    }
+
+    /**
+     * A function to create spans from TextLinks.
+     *
+     * Hidden until we convinced we want it to be part of the public API.
+     *
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public interface SpanFactory {
+
+        /** Creates a span from a text link. */
+        TextLinkSpan createSpan(TextLink textLink);
+    }
+
+    /**
+     * A ClickableSpan for a TextLink.
+     */
+    public static class TextLinkSpan extends ClickableSpan {
+
+        private final TextLink mTextLink;
+
+        public TextLinkSpan(@Nullable TextLink textLink) {
+            mTextLink = textLink;
+        }
+
+        @Override
+        public void onClick(View widget) {
+            // TODO(jalt): integrate with AppCompatTextView to show action mode.
+        }
+
+        public final TextLink getTextLink() {
+            return mTextLink;
+        }
+    }
+
+    /**
+     * A builder to construct a TextLinks instance.
+     */
+    public static final class Builder {
+        private final String mFullText;
+        private final ArrayList<TextLink> mLinks;
+
+        /**
+         * Create a new TextLinks.Builder.
+         *
+         * @param fullText The full text to annotate with links.
+         */
+        public Builder(@NonNull String fullText) {
+            mFullText = Preconditions.checkNotNull(fullText);
+            mLinks = new ArrayList<>();
+        }
+
+        /**
+         * Adds a TextLink.
+         *
+         * @return this instance.
+         *
+         * @throws IllegalArgumentException if entityScores is null or empty.
+         */
+        public Builder addLink(int start, int end, @NonNull Map<String, Float> entityScores) {
+            mLinks.add(new TextLink(start, end, Preconditions.checkNotNull(entityScores)));
+            return this;
+        }
+
+        /**
+         * Removes all {@link TextLink}s.
+         */
+        public Builder clearTextLinks() {
+            mLinks.clear();
+            return this;
+        }
+
+        /**
+         * Constructs a TextLinks instance.
+         *
+         * @return the constructed TextLinks.
+         */
+        public TextLinks build() {
+            return new TextLinks(mFullText, mLinks);
+        }
+    }
+
+    /** The default span factory for TextView and AppCompatTextView. */
+    private static final SpanFactory DEFAULT_SPAN_FACTORY = new SpanFactory() {
+        @Override
+        public TextLinkSpan createSpan(TextLink textLink) {
+            return new TextLinkSpan(textLink);
+        }
+    };
+
+    /**
+     * @throws IllegalArgumentException if the value is invalid
+     */
+    private static void checkValidApplyStrategy(int applyStrategy) {
+        if (applyStrategy != APPLY_STRATEGY_IGNORE && applyStrategy != APPLY_STRATEGY_REPLACE) {
+            throw new IllegalArgumentException(
+                    "Invalid apply strategy. See TextLinks.ApplyStrategy for options.");
+        }
+    }
+}
diff --git a/textclassifier/src/main/java/androidx/view/textclassifier/TextSelection.java b/textclassifier/src/main/java/androidx/view/textclassifier/TextSelection.java
new file mode 100644
index 0000000..dbc7ecf
--- /dev/null
+++ b/textclassifier/src/main/java/androidx/view/textclassifier/TextSelection.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 2018 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 androidx.view.textclassifier;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.annotation.FloatRange;
+import android.support.annotation.IntRange;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.os.LocaleListCompat;
+import android.support.v4.util.ArrayMap;
+import android.support.v4.util.Preconditions;
+
+import java.util.Locale;
+import java.util.Map;
+
+import androidx.view.textclassifier.TextClassifier.EntityType;
+
+/**
+ * Information about where text selection should be.
+ */
+public final class TextSelection implements Parcelable {
+
+    private final int mStartIndex;
+    private final int mEndIndex;
+    @NonNull private final EntityConfidence mEntityConfidence;
+    @NonNull private final String mSignature;
+
+    private TextSelection(
+            int startIndex, int endIndex, @NonNull Map<String, Float> entityConfidence,
+            @NonNull String signature) {
+        mStartIndex = startIndex;
+        mEndIndex = endIndex;
+        mEntityConfidence = new EntityConfidence(entityConfidence);
+        mSignature = signature;
+    }
+
+    /**
+     * Returns the start index of the text selection.
+     */
+    public int getSelectionStartIndex() {
+        return mStartIndex;
+    }
+
+    /**
+     * Returns the end index of the text selection.
+     */
+    public int getSelectionEndIndex() {
+        return mEndIndex;
+    }
+
+    /**
+     * Returns the number of entities found in the classified text.
+     */
+    @IntRange(from = 0)
+    public int getEntityCount() {
+        return mEntityConfidence.getEntities().size();
+    }
+
+    /**
+     * Returns the entity at the specified index. Entities are ordered from high confidence
+     * to low confidence.
+     *
+     * @throws IndexOutOfBoundsException if the specified index is out of range.
+     * @see #getEntityCount() for the number of entities available.
+     */
+    @NonNull
+    public @EntityType String getEntity(int index) {
+        return mEntityConfidence.getEntities().get(index);
+    }
+
+    /**
+     * Returns the confidence score for the specified entity. The value ranges from
+     * 0 (low confidence) to 1 (high confidence). 0 indicates that the entity was not found for the
+     * classified text.
+     */
+    @FloatRange(from = 0.0, to = 1.0)
+    public float getConfidenceScore(@EntityType String entity) {
+        return mEntityConfidence.getConfidenceScore(entity);
+    }
+
+    /**
+     * Returns the signature for this object.
+     * The TextClassifier that generates this object may use it as a way to internally identify
+     * this object.
+     */
+    @NonNull
+    public String getSignature() {
+        return mSignature;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                Locale.US,
+                "TextSelection {startIndex=%d, endIndex=%d, entities=%s, signature=%s}",
+                mStartIndex, mEndIndex, mEntityConfidence, mSignature);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mStartIndex);
+        dest.writeInt(mEndIndex);
+        mEntityConfidence.writeToParcel(dest, flags);
+        dest.writeString(mSignature);
+    }
+
+    public static final Parcelable.Creator<TextSelection> CREATOR =
+            new Parcelable.Creator<TextSelection>() {
+                @Override
+                public TextSelection createFromParcel(Parcel in) {
+                    return new TextSelection(in);
+                }
+
+                @Override
+                public TextSelection[] newArray(int size) {
+                    return new TextSelection[size];
+                }
+            };
+
+    private TextSelection(Parcel in) {
+        mStartIndex = in.readInt();
+        mEndIndex = in.readInt();
+        mEntityConfidence = EntityConfidence.CREATOR.createFromParcel(in);
+        mSignature = in.readString();
+    }
+
+    /**
+     * Builder used to build {@link TextSelection} objects.
+     */
+    public static final class Builder {
+
+        private final int mStartIndex;
+        private final int mEndIndex;
+        @NonNull private final Map<String, Float> mEntityConfidence = new ArrayMap<>();
+        @NonNull private String mSignature = "";
+
+        /**
+         * Creates a builder used to build {@link TextSelection} objects.
+         *
+         * @param startIndex the start index of the text selection.
+         * @param endIndex the end index of the text selection. Must be greater than startIndex
+         */
+        public Builder(@IntRange(from = 0) int startIndex, @IntRange(from = 0) int endIndex) {
+            Preconditions.checkArgument(startIndex >= 0);
+            Preconditions.checkArgument(endIndex > startIndex);
+            mStartIndex = startIndex;
+            mEndIndex = endIndex;
+        }
+
+        /**
+         * Sets an entity type for the classified text and assigns a confidence score.
+         *
+         * @param confidenceScore a value from 0 (low confidence) to 1 (high confidence).
+         *      0 implies the entity does not exist for the classified text.
+         *      Values greater than 1 are clamped to 1.
+         */
+        public Builder setEntityType(
+                @NonNull @EntityType String type,
+                @FloatRange(from = 0.0, to = 1.0) float confidenceScore) {
+            mEntityConfidence.put(type, confidenceScore);
+            return this;
+        }
+
+        /**
+         * Sets a signature for the TextSelection object.
+         *
+         * The TextClassifier that generates the TextSelection object may use it as a way to
+         * internally identify the TextSelection object.
+         */
+        public Builder setSignature(@NonNull String signature) {
+            mSignature = Preconditions.checkNotNull(signature);
+            return this;
+        }
+
+        /**
+         * Builds and returns {@link TextSelection} object.
+         */
+        public TextSelection build() {
+            return new TextSelection(
+                    mStartIndex, mEndIndex, mEntityConfidence, mSignature);
+        }
+    }
+
+    /**
+     * Optional input parameters for generating TextSelection.
+     */
+    public static final class Options implements Parcelable {
+
+        private @Nullable LocaleListCompat mDefaultLocales;
+
+        public Options() {}
+
+        /**
+         * @param defaultLocales ordered list of locale preferences that may be used to disambiguate
+         *      the provided text. If no locale preferences exist, set this to null or an empty
+         *      locale list.
+         */
+        public Options setDefaultLocales(@Nullable LocaleListCompat defaultLocales) {
+            mDefaultLocales = defaultLocales;
+            return this;
+        }
+
+        /**
+         * @return ordered list of locale preferences that can be used to disambiguate
+         *      the provided text.
+         */
+        @Nullable
+        public LocaleListCompat getDefaultLocales() {
+            return mDefaultLocales;
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(mDefaultLocales != null ? 1 : 0);
+            if (mDefaultLocales != null) {
+                dest.writeString(mDefaultLocales.toLanguageTags());
+            }
+        }
+
+        public static final Parcelable.Creator<Options> CREATOR =
+                new Parcelable.Creator<Options>() {
+                    @Override
+                    public Options createFromParcel(Parcel in) {
+                        return new Options(in);
+                    }
+
+                    @Override
+                    public Options[] newArray(int size) {
+                        return new Options[size];
+                    }
+                };
+
+        private Options(Parcel in) {
+            if (in.readInt() > 0) {
+                mDefaultLocales = LocaleListCompat.forLanguageTags(in.readString());
+            }
+        }
+    }
+}
diff --git a/transition/Android.mk b/transition/Android.mk
deleted file mode 100644
index 466cfa8..0000000
--- a/transition/Android.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-transition \
-#       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-transition
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/src/main/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v4
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --no-version-transitions --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/transition/api/27.1.0.txt b/transition/api/27.1.0.txt
new file mode 100644
index 0000000..b939299
--- /dev/null
+++ b/transition/api/27.1.0.txt
@@ -0,0 +1,280 @@
+package android.support.transition {
+
+  public class ArcMotion extends android.support.transition.PathMotion {
+    ctor public ArcMotion();
+    ctor public ArcMotion(android.content.Context, android.util.AttributeSet);
+    method public float getMaximumAngle();
+    method public float getMinimumHorizontalAngle();
+    method public float getMinimumVerticalAngle();
+    method public android.graphics.Path getPath(float, float, float, float);
+    method public void setMaximumAngle(float);
+    method public void setMinimumHorizontalAngle(float);
+    method public void setMinimumVerticalAngle(float);
+  }
+
+  public class AutoTransition extends android.support.transition.TransitionSet {
+    ctor public AutoTransition();
+    ctor public AutoTransition(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class ChangeBounds extends android.support.transition.Transition {
+    ctor public ChangeBounds();
+    ctor public ChangeBounds(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.support.transition.TransitionValues);
+    method public void captureStartValues(android.support.transition.TransitionValues);
+    method public boolean getResizeClip();
+    method public void setResizeClip(boolean);
+  }
+
+  public class ChangeClipBounds extends android.support.transition.Transition {
+    ctor public ChangeClipBounds();
+    ctor public ChangeClipBounds(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.support.transition.TransitionValues);
+    method public void captureStartValues(android.support.transition.TransitionValues);
+  }
+
+  public class ChangeImageTransform extends android.support.transition.Transition {
+    ctor public ChangeImageTransform();
+    ctor public ChangeImageTransform(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.support.transition.TransitionValues);
+    method public void captureStartValues(android.support.transition.TransitionValues);
+  }
+
+  public class ChangeScroll extends android.support.transition.Transition {
+    ctor public ChangeScroll();
+    ctor public ChangeScroll(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.support.transition.TransitionValues);
+    method public void captureStartValues(android.support.transition.TransitionValues);
+  }
+
+  public class ChangeTransform extends android.support.transition.Transition {
+    ctor public ChangeTransform();
+    ctor public ChangeTransform(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.support.transition.TransitionValues);
+    method public void captureStartValues(android.support.transition.TransitionValues);
+    method public boolean getReparent();
+    method public boolean getReparentWithOverlay();
+    method public void setReparent(boolean);
+    method public void setReparentWithOverlay(boolean);
+  }
+
+  public class CircularPropagation extends android.support.transition.VisibilityPropagation {
+    ctor public CircularPropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+  }
+
+  public class Explode extends android.support.transition.Visibility {
+    ctor public Explode();
+    ctor public Explode(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class Fade extends android.support.transition.Visibility {
+    ctor public Fade(int);
+    ctor public Fade();
+    ctor public Fade(android.content.Context, android.util.AttributeSet);
+    field public static final int IN = 1; // 0x1
+    field public static final int OUT = 2; // 0x2
+  }
+
+  public abstract class PathMotion {
+    ctor public PathMotion();
+    ctor public PathMotion(android.content.Context, android.util.AttributeSet);
+    method public abstract android.graphics.Path getPath(float, float, float, float);
+  }
+
+  public class PatternPathMotion extends android.support.transition.PathMotion {
+    ctor public PatternPathMotion();
+    ctor public PatternPathMotion(android.content.Context, android.util.AttributeSet);
+    ctor public PatternPathMotion(android.graphics.Path);
+    method public android.graphics.Path getPath(float, float, float, float);
+    method public android.graphics.Path getPatternPath();
+    method public void setPatternPath(android.graphics.Path);
+  }
+
+  public class Scene {
+    ctor public Scene(android.view.ViewGroup);
+    ctor public Scene(android.view.ViewGroup, android.view.View);
+    method public void enter();
+    method public void exit();
+    method public static android.support.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
+    method public android.view.ViewGroup getSceneRoot();
+    method public void setEnterAction(java.lang.Runnable);
+    method public void setExitAction(java.lang.Runnable);
+  }
+
+  public class SidePropagation extends android.support.transition.VisibilityPropagation {
+    ctor public SidePropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+    method public void setSide(int);
+  }
+
+  public class Slide extends android.support.transition.Visibility {
+    ctor public Slide();
+    ctor public Slide(int);
+    ctor public Slide(android.content.Context, android.util.AttributeSet);
+    method public int getSlideEdge();
+    method public void setSlideEdge(int);
+  }
+
+  public abstract class Transition implements java.lang.Cloneable {
+    ctor public Transition();
+    ctor public Transition(android.content.Context, android.util.AttributeSet);
+    method public android.support.transition.Transition addListener(android.support.transition.Transition.TransitionListener);
+    method public android.support.transition.Transition addTarget(android.view.View);
+    method public android.support.transition.Transition addTarget(int);
+    method public android.support.transition.Transition addTarget(java.lang.String);
+    method public android.support.transition.Transition addTarget(java.lang.Class);
+    method public abstract void captureEndValues(android.support.transition.TransitionValues);
+    method public abstract void captureStartValues(android.support.transition.TransitionValues);
+    method public android.support.transition.Transition clone();
+    method public android.animation.Animator createAnimator(android.view.ViewGroup, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+    method public android.support.transition.Transition excludeChildren(android.view.View, boolean);
+    method public android.support.transition.Transition excludeChildren(int, boolean);
+    method public android.support.transition.Transition excludeChildren(java.lang.Class, boolean);
+    method public android.support.transition.Transition excludeTarget(android.view.View, boolean);
+    method public android.support.transition.Transition excludeTarget(int, boolean);
+    method public android.support.transition.Transition excludeTarget(java.lang.String, boolean);
+    method public android.support.transition.Transition excludeTarget(java.lang.Class, boolean);
+    method public long getDuration();
+    method public android.graphics.Rect getEpicenter();
+    method public android.support.transition.Transition.EpicenterCallback getEpicenterCallback();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public java.lang.String getName();
+    method public android.support.transition.PathMotion getPathMotion();
+    method public android.support.transition.TransitionPropagation getPropagation();
+    method public long getStartDelay();
+    method public java.util.List<java.lang.Integer> getTargetIds();
+    method public java.util.List<java.lang.String> getTargetNames();
+    method public java.util.List<java.lang.Class> getTargetTypes();
+    method public java.util.List<android.view.View> getTargets();
+    method public java.lang.String[] getTransitionProperties();
+    method public android.support.transition.TransitionValues getTransitionValues(android.view.View, boolean);
+    method public boolean isTransitionRequired(android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+    method public android.support.transition.Transition removeListener(android.support.transition.Transition.TransitionListener);
+    method public android.support.transition.Transition removeTarget(android.view.View);
+    method public android.support.transition.Transition removeTarget(int);
+    method public android.support.transition.Transition removeTarget(java.lang.String);
+    method public android.support.transition.Transition removeTarget(java.lang.Class);
+    method public android.support.transition.Transition setDuration(long);
+    method public void setEpicenterCallback(android.support.transition.Transition.EpicenterCallback);
+    method public android.support.transition.Transition setInterpolator(android.animation.TimeInterpolator);
+    method public void setMatchOrder(int...);
+    method public void setPathMotion(android.support.transition.PathMotion);
+    method public void setPropagation(android.support.transition.TransitionPropagation);
+    method public android.support.transition.Transition setStartDelay(long);
+    field public static final int MATCH_ID = 3; // 0x3
+    field public static final int MATCH_INSTANCE = 1; // 0x1
+    field public static final int MATCH_ITEM_ID = 4; // 0x4
+    field public static final int MATCH_NAME = 2; // 0x2
+  }
+
+  public static abstract class Transition.EpicenterCallback {
+    ctor public Transition.EpicenterCallback();
+    method public abstract android.graphics.Rect onGetEpicenter(android.support.transition.Transition);
+  }
+
+  public static abstract interface Transition.TransitionListener {
+    method public abstract void onTransitionCancel(android.support.transition.Transition);
+    method public abstract void onTransitionEnd(android.support.transition.Transition);
+    method public abstract void onTransitionPause(android.support.transition.Transition);
+    method public abstract void onTransitionResume(android.support.transition.Transition);
+    method public abstract void onTransitionStart(android.support.transition.Transition);
+  }
+
+  public class TransitionInflater {
+    method public static android.support.transition.TransitionInflater from(android.content.Context);
+    method public android.support.transition.Transition inflateTransition(int);
+    method public android.support.transition.TransitionManager inflateTransitionManager(int, android.view.ViewGroup);
+  }
+
+  public class TransitionListenerAdapter implements android.support.transition.Transition.TransitionListener {
+    ctor public TransitionListenerAdapter();
+    method public void onTransitionCancel(android.support.transition.Transition);
+    method public void onTransitionEnd(android.support.transition.Transition);
+    method public void onTransitionPause(android.support.transition.Transition);
+    method public void onTransitionResume(android.support.transition.Transition);
+    method public void onTransitionStart(android.support.transition.Transition);
+  }
+
+  public class TransitionManager {
+    ctor public TransitionManager();
+    method public static void beginDelayedTransition(android.view.ViewGroup);
+    method public static void beginDelayedTransition(android.view.ViewGroup, android.support.transition.Transition);
+    method public static void endTransitions(android.view.ViewGroup);
+    method public static void go(android.support.transition.Scene);
+    method public static void go(android.support.transition.Scene, android.support.transition.Transition);
+    method public void setTransition(android.support.transition.Scene, android.support.transition.Transition);
+    method public void setTransition(android.support.transition.Scene, android.support.transition.Scene, android.support.transition.Transition);
+    method public void transitionTo(android.support.transition.Scene);
+  }
+
+  public abstract class TransitionPropagation {
+    ctor public TransitionPropagation();
+    method public abstract void captureValues(android.support.transition.TransitionValues);
+    method public abstract java.lang.String[] getPropagationProperties();
+    method public abstract long getStartDelay(android.view.ViewGroup, android.support.transition.Transition, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+  }
+
+  public class TransitionSet extends android.support.transition.Transition {
+    ctor public TransitionSet();
+    ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+    method public android.support.transition.TransitionSet addListener(android.support.transition.Transition.TransitionListener);
+    method public android.support.transition.TransitionSet addTarget(android.view.View);
+    method public android.support.transition.TransitionSet addTarget(int);
+    method public android.support.transition.TransitionSet addTarget(java.lang.String);
+    method public android.support.transition.TransitionSet addTarget(java.lang.Class);
+    method public android.support.transition.TransitionSet addTransition(android.support.transition.Transition);
+    method public void captureEndValues(android.support.transition.TransitionValues);
+    method public void captureStartValues(android.support.transition.TransitionValues);
+    method public int getOrdering();
+    method public android.support.transition.Transition getTransitionAt(int);
+    method public int getTransitionCount();
+    method public android.support.transition.TransitionSet removeListener(android.support.transition.Transition.TransitionListener);
+    method public android.support.transition.TransitionSet removeTarget(int);
+    method public android.support.transition.TransitionSet removeTarget(android.view.View);
+    method public android.support.transition.TransitionSet removeTarget(java.lang.Class);
+    method public android.support.transition.TransitionSet removeTarget(java.lang.String);
+    method public android.support.transition.TransitionSet removeTransition(android.support.transition.Transition);
+    method public android.support.transition.TransitionSet setDuration(long);
+    method public android.support.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
+    method public android.support.transition.TransitionSet setOrdering(int);
+    method public android.support.transition.TransitionSet setStartDelay(long);
+    field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
+    field public static final int ORDERING_TOGETHER = 0; // 0x0
+  }
+
+  public class TransitionValues {
+    ctor public TransitionValues();
+    field public final java.util.Map<java.lang.String, java.lang.Object> values;
+    field public android.view.View view;
+  }
+
+  public abstract class Visibility extends android.support.transition.Transition {
+    ctor public Visibility();
+    ctor public Visibility(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.support.transition.TransitionValues);
+    method public void captureStartValues(android.support.transition.TransitionValues);
+    method public int getMode();
+    method public boolean isVisible(android.support.transition.TransitionValues);
+    method public android.animation.Animator onAppear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+    method public android.animation.Animator onAppear(android.view.ViewGroup, android.view.View, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+    method public android.animation.Animator onDisappear(android.view.ViewGroup, android.support.transition.TransitionValues, int, android.support.transition.TransitionValues, int);
+    method public android.animation.Animator onDisappear(android.view.ViewGroup, android.view.View, android.support.transition.TransitionValues, android.support.transition.TransitionValues);
+    method public void setMode(int);
+    field public static final int MODE_IN = 1; // 0x1
+    field public static final int MODE_OUT = 2; // 0x2
+  }
+
+  public abstract class VisibilityPropagation extends android.support.transition.TransitionPropagation {
+    ctor public VisibilityPropagation();
+    method public void captureValues(android.support.transition.TransitionValues);
+    method public java.lang.String[] getPropagationProperties();
+    method public int getViewVisibility(android.support.transition.TransitionValues);
+    method public int getViewX(android.support.transition.TransitionValues);
+    method public int getViewY(android.support.transition.TransitionValues);
+  }
+
+}
+
diff --git a/tv-provider/Android.mk b/tv-provider/Android.mk
deleted file mode 100644
index 2368ad3..0000000
--- a/tv-provider/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2017 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 include it with
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := android-support-tv-provider
-#
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-tv-provider
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/tv-provider/api/27.1.0.txt b/tv-provider/api/27.1.0.txt
new file mode 100644
index 0000000..c486190
--- /dev/null
+++ b/tv-provider/api/27.1.0.txt
@@ -0,0 +1,545 @@
+package android.support.media.tv {
+
+  public final class Channel {
+    method public static android.support.media.tv.Channel fromCursor(android.database.Cursor);
+    method public int getAppLinkColor();
+    method public android.net.Uri getAppLinkIconUri();
+    method public android.content.Intent getAppLinkIntent() throws java.net.URISyntaxException;
+    method public android.net.Uri getAppLinkIntentUri();
+    method public android.net.Uri getAppLinkPosterArtUri();
+    method public java.lang.String getAppLinkText();
+    method public int getConfigurationDisplayOrder();
+    method public java.lang.String getDescription();
+    method public java.lang.String getDisplayName();
+    method public java.lang.String getDisplayNumber();
+    method public long getId();
+    method public java.lang.String getInputId();
+    method public byte[] getInternalProviderDataByteArray();
+    method public java.lang.Long getInternalProviderFlag1();
+    method public java.lang.Long getInternalProviderFlag2();
+    method public java.lang.Long getInternalProviderFlag3();
+    method public java.lang.Long getInternalProviderFlag4();
+    method public java.lang.String getInternalProviderId();
+    method public java.lang.String getNetworkAffiliation();
+    method public int getOriginalNetworkId();
+    method public java.lang.String getPackageName();
+    method public int getServiceId();
+    method public java.lang.String getServiceType();
+    method public java.lang.String getSystemChannelKey();
+    method public int getTransportStreamId();
+    method public java.lang.String getType();
+    method public java.lang.String getVideoFormat();
+    method public boolean isBrowsable();
+    method public boolean isLocked();
+    method public boolean isSearchable();
+    method public boolean isTransient();
+    method public android.content.ContentValues toContentValues();
+  }
+
+  public static final class Channel.Builder {
+    ctor public Channel.Builder();
+    ctor public Channel.Builder(android.support.media.tv.Channel);
+    method public android.support.media.tv.Channel build();
+    method public android.support.media.tv.Channel.Builder setAppLinkColor(int);
+    method public android.support.media.tv.Channel.Builder setAppLinkIconUri(android.net.Uri);
+    method public android.support.media.tv.Channel.Builder setAppLinkIntent(android.content.Intent);
+    method public android.support.media.tv.Channel.Builder setAppLinkIntentUri(android.net.Uri);
+    method public android.support.media.tv.Channel.Builder setAppLinkPosterArtUri(android.net.Uri);
+    method public android.support.media.tv.Channel.Builder setAppLinkText(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setConfigurationDisplayOrder(int);
+    method public android.support.media.tv.Channel.Builder setDescription(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setDisplayName(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setDisplayNumber(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setInputId(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setInternalProviderData(byte[]);
+    method public android.support.media.tv.Channel.Builder setInternalProviderData(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setInternalProviderFlag1(long);
+    method public android.support.media.tv.Channel.Builder setInternalProviderFlag2(long);
+    method public android.support.media.tv.Channel.Builder setInternalProviderFlag3(long);
+    method public android.support.media.tv.Channel.Builder setInternalProviderFlag4(long);
+    method public android.support.media.tv.Channel.Builder setInternalProviderId(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setNetworkAffiliation(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setOriginalNetworkId(int);
+    method public android.support.media.tv.Channel.Builder setSearchable(boolean);
+    method public android.support.media.tv.Channel.Builder setServiceId(int);
+    method public android.support.media.tv.Channel.Builder setServiceType(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setSystemChannelKey(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setTransient(boolean);
+    method public android.support.media.tv.Channel.Builder setTransportStreamId(int);
+    method public android.support.media.tv.Channel.Builder setType(java.lang.String);
+    method public android.support.media.tv.Channel.Builder setVideoFormat(java.lang.String);
+  }
+
+  public class ChannelLogoUtils {
+    ctor public ChannelLogoUtils();
+    method public static android.graphics.Bitmap loadChannelLogo(android.content.Context, long);
+    method public static boolean storeChannelLogo(android.content.Context, long, android.net.Uri);
+    method public static boolean storeChannelLogo(android.content.Context, long, android.graphics.Bitmap);
+  }
+
+  public final class PreviewProgram {
+    method public static android.support.media.tv.PreviewProgram fromCursor(android.database.Cursor);
+    method public long getChannelId();
+    method public int getWeight();
+    method public android.content.ContentValues toContentValues();
+  }
+
+  public static final class PreviewProgram.Builder {
+    ctor public PreviewProgram.Builder();
+    ctor public PreviewProgram.Builder(android.support.media.tv.PreviewProgram);
+    method public android.support.media.tv.PreviewProgram build();
+    method public android.support.media.tv.PreviewProgram.Builder setChannelId(long);
+    method public android.support.media.tv.PreviewProgram.Builder setWeight(int);
+  }
+
+  public final class Program implements java.lang.Comparable {
+    method public int compareTo(android.support.media.tv.Program);
+    method public static android.support.media.tv.Program fromCursor(android.database.Cursor);
+    method public java.lang.String[] getBroadcastGenres();
+    method public long getChannelId();
+    method public long getEndTimeUtcMillis();
+    method public long getStartTimeUtcMillis();
+    method public boolean isRecordingProhibited();
+    method public android.content.ContentValues toContentValues();
+  }
+
+  public static class Program.Builder {
+    ctor public Program.Builder();
+    ctor public Program.Builder(android.support.media.tv.Program);
+    method public android.support.media.tv.Program build();
+    method public android.support.media.tv.Program.Builder setBroadcastGenres(java.lang.String[]);
+    method public android.support.media.tv.Program.Builder setChannelId(long);
+    method public android.support.media.tv.Program.Builder setEndTimeUtcMillis(long);
+    method public android.support.media.tv.Program.Builder setRecordingProhibited(boolean);
+    method public android.support.media.tv.Program.Builder setStartTimeUtcMillis(long);
+  }
+
+  public final class TvContractCompat {
+    method public static android.net.Uri buildChannelLogoUri(long);
+    method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+    method public static android.net.Uri buildChannelUri(long);
+    method public static android.net.Uri buildChannelUriForPassthroughInput(java.lang.String);
+    method public static android.net.Uri buildChannelsUriForInput(java.lang.String);
+    method public static java.lang.String buildInputId(android.content.ComponentName);
+    method public static android.net.Uri buildPreviewProgramUri(long);
+    method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+    method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+    method public static android.net.Uri buildProgramUri(long);
+    method public static android.net.Uri buildProgramsUriForChannel(long);
+    method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+    method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+    method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+    method public static android.net.Uri buildRecordedProgramUri(long);
+    method public static android.net.Uri buildWatchNextProgramUri(long);
+    method public static boolean isChannelUri(android.net.Uri);
+    method public static boolean isChannelUriForPassthroughInput(android.net.Uri);
+    method public static boolean isChannelUriForTunerInput(android.net.Uri);
+    method public static boolean isProgramUri(android.net.Uri);
+    method public static boolean isRecordedProgramUri(android.net.Uri);
+    method public static void requestChannelBrowsable(android.content.Context, long);
+    field public static final java.lang.String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
+    field public static final java.lang.String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
+    field public static final java.lang.String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
+    field public static final java.lang.String ACTION_REQUEST_CHANNEL_BROWSABLE = "android.media.tv.action.REQUEST_CHANNEL_BROWSABLE";
+    field public static final java.lang.String ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED";
+    field public static final java.lang.String AUTHORITY = "android.media.tv";
+    field public static final java.lang.String EXTRA_CHANNEL_ID = "android.media.tv.extra.CHANNEL_ID";
+    field public static final java.lang.String EXTRA_PREVIEW_PROGRAM_ID = "android.media.tv.extra.PREVIEW_PROGRAM_ID";
+    field public static final java.lang.String EXTRA_WATCH_NEXT_PROGRAM_ID = "android.media.tv.extra.WATCH_NEXT_PROGRAM_ID";
+  }
+
+  public static abstract interface TvContractCompat.BaseTvColumns implements android.provider.BaseColumns {
+    field public static final java.lang.String COLUMN_PACKAGE_NAME = "package_name";
+  }
+
+  public static final class TvContractCompat.Channels implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+    method public static java.lang.String getVideoResolution(java.lang.String);
+    field public static final java.lang.String COLUMN_APP_LINK_COLOR = "app_link_color";
+    field public static final java.lang.String COLUMN_APP_LINK_ICON_URI = "app_link_icon_uri";
+    field public static final java.lang.String COLUMN_APP_LINK_INTENT_URI = "app_link_intent_uri";
+    field public static final java.lang.String COLUMN_APP_LINK_POSTER_ART_URI = "app_link_poster_art_uri";
+    field public static final java.lang.String COLUMN_APP_LINK_TEXT = "app_link_text";
+    field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+    field public static final java.lang.String COLUMN_CONFIGURATION_DISPLAY_ORDER = "configuration_display_order";
+    field public static final java.lang.String COLUMN_DESCRIPTION = "description";
+    field public static final java.lang.String COLUMN_DISPLAY_NAME = "display_name";
+    field public static final java.lang.String COLUMN_DISPLAY_NUMBER = "display_number";
+    field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final java.lang.String COLUMN_LOCKED = "locked";
+    field public static final java.lang.String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
+    field public static final java.lang.String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
+    field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+    field public static final java.lang.String COLUMN_SERVICE_ID = "service_id";
+    field public static final java.lang.String COLUMN_SERVICE_TYPE = "service_type";
+    field public static final java.lang.String COLUMN_SYSTEM_CHANNEL_KEY = "system_channel_key";
+    field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+    field public static final java.lang.String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
+    field public static final java.lang.String COLUMN_TYPE = "type";
+    field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final java.lang.String COLUMN_VIDEO_FORMAT = "video_format";
+    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
+    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final java.lang.String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
+    field public static final java.lang.String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
+    field public static final java.lang.String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
+    field public static final java.lang.String TYPE_1SEG = "TYPE_1SEG";
+    field public static final java.lang.String TYPE_ATSC_C = "TYPE_ATSC_C";
+    field public static final java.lang.String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
+    field public static final java.lang.String TYPE_ATSC_T = "TYPE_ATSC_T";
+    field public static final java.lang.String TYPE_CMMB = "TYPE_CMMB";
+    field public static final java.lang.String TYPE_DTMB = "TYPE_DTMB";
+    field public static final java.lang.String TYPE_DVB_C = "TYPE_DVB_C";
+    field public static final java.lang.String TYPE_DVB_C2 = "TYPE_DVB_C2";
+    field public static final java.lang.String TYPE_DVB_H = "TYPE_DVB_H";
+    field public static final java.lang.String TYPE_DVB_S = "TYPE_DVB_S";
+    field public static final java.lang.String TYPE_DVB_S2 = "TYPE_DVB_S2";
+    field public static final java.lang.String TYPE_DVB_SH = "TYPE_DVB_SH";
+    field public static final java.lang.String TYPE_DVB_T = "TYPE_DVB_T";
+    field public static final java.lang.String TYPE_DVB_T2 = "TYPE_DVB_T2";
+    field public static final java.lang.String TYPE_ISDB_C = "TYPE_ISDB_C";
+    field public static final java.lang.String TYPE_ISDB_S = "TYPE_ISDB_S";
+    field public static final java.lang.String TYPE_ISDB_T = "TYPE_ISDB_T";
+    field public static final java.lang.String TYPE_ISDB_TB = "TYPE_ISDB_TB";
+    field public static final java.lang.String TYPE_NTSC = "TYPE_NTSC";
+    field public static final java.lang.String TYPE_OTHER = "TYPE_OTHER";
+    field public static final java.lang.String TYPE_PAL = "TYPE_PAL";
+    field public static final java.lang.String TYPE_PREVIEW = "TYPE_PREVIEW";
+    field public static final java.lang.String TYPE_SECAM = "TYPE_SECAM";
+    field public static final java.lang.String TYPE_S_DMB = "TYPE_S_DMB";
+    field public static final java.lang.String TYPE_T_DMB = "TYPE_T_DMB";
+    field public static final java.lang.String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
+    field public static final java.lang.String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
+    field public static final java.lang.String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
+    field public static final java.lang.String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
+    field public static final java.lang.String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P";
+    field public static final java.lang.String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P";
+    field public static final java.lang.String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I";
+    field public static final java.lang.String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P";
+    field public static final java.lang.String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I";
+    field public static final java.lang.String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P";
+    field public static final java.lang.String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P";
+    field public static final java.lang.String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED";
+    field public static final java.lang.String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD";
+    field public static final java.lang.String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD";
+    field public static final java.lang.String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD";
+    field public static final java.lang.String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD";
+  }
+
+  public static final class TvContractCompat.Channels.Logo {
+    field public static final java.lang.String CONTENT_DIRECTORY = "logo";
+  }
+
+  public static final class TvContractCompat.PreviewPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+    field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+    field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+    field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+    field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+    field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+    field public static final int ASPECT_RATIO_MOVIE_POSTER = 5; // 0x5
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_FREE = 4; // 0x4
+    field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+    field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+    field public static final int AVAILABILITY_PURCHASED = 3; // 0x3
+    field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final java.lang.String COLUMN_AUTHOR = "author";
+    field public static final java.lang.String COLUMN_AVAILABILITY = "availability";
+    field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+    field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final java.lang.String COLUMN_CONTENT_ID = "content_id";
+    field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final java.lang.String COLUMN_DURATION_MILLIS = "duration_millis";
+    field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final java.lang.String COLUMN_GENRE = "genre";
+    field public static final java.lang.String COLUMN_INTENT_URI = "intent_uri";
+    field public static final java.lang.String COLUMN_INTERACTION_COUNT = "interaction_count";
+    field public static final java.lang.String COLUMN_INTERACTION_TYPE = "interaction_type";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final java.lang.String COLUMN_ITEM_COUNT = "item_count";
+    field public static final java.lang.String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+    field public static final java.lang.String COLUMN_LIVE = "live";
+    field public static final java.lang.String COLUMN_LOGO_CONTENT_DESCRIPTION = "logo_content_description";
+    field public static final java.lang.String COLUMN_LOGO_URI = "logo_uri";
+    field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final java.lang.String COLUMN_OFFER_PRICE = "offer_price";
+    field public static final java.lang.String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+    field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final java.lang.String COLUMN_PREVIEW_AUDIO_URI = "preview_audio_uri";
+    field public static final java.lang.String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+    field public static final java.lang.String COLUMN_RELEASE_DATE = "release_date";
+    field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+    field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+    field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final java.lang.String COLUMN_STARTING_PRICE = "starting_price";
+    field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final java.lang.String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+    field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final java.lang.String COLUMN_TITLE = "title";
+    field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+    field public static final java.lang.String COLUMN_TYPE = "type";
+    field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final java.lang.String COLUMN_WEIGHT = "weight";
+    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/preview_program";
+    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/preview_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+    field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+    field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+    field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+    field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+    field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+    field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+    field public static final int TYPE_ALBUM = 8; // 0x8
+    field public static final int TYPE_ARTIST = 9; // 0x9
+    field public static final int TYPE_CHANNEL = 6; // 0x6
+    field public static final int TYPE_CLIP = 4; // 0x4
+    field public static final int TYPE_EVENT = 5; // 0x5
+    field public static final int TYPE_GAME = 12; // 0xc
+    field public static final int TYPE_MOVIE = 0; // 0x0
+    field public static final int TYPE_PLAYLIST = 10; // 0xa
+    field public static final int TYPE_STATION = 11; // 0xb
+    field public static final int TYPE_TRACK = 7; // 0x7
+    field public static final int TYPE_TV_EPISODE = 3; // 0x3
+    field public static final int TYPE_TV_SEASON = 2; // 0x2
+    field public static final int TYPE_TV_SERIES = 1; // 0x1
+  }
+
+  public static final class TvContractCompat.Programs implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+    field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final deprecated java.lang.String COLUMN_EPISODE_NUMBER = "episode_number";
+    field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final java.lang.String COLUMN_RECORDING_PROHIBITED = "recording_prohibited";
+    field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+    field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final deprecated java.lang.String COLUMN_SEASON_NUMBER = "season_number";
+    field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+    field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final java.lang.String COLUMN_TITLE = "title";
+    field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
+    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+  }
+
+  public static final class TvContractCompat.Programs.Genres {
+    method public static java.lang.String[] decode(java.lang.String);
+    method public static java.lang.String encode(java.lang.String...);
+    method public static boolean isCanonical(java.lang.String);
+    field public static final java.lang.String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE";
+    field public static final java.lang.String ARTS = "ARTS";
+    field public static final java.lang.String COMEDY = "COMEDY";
+    field public static final java.lang.String DRAMA = "DRAMA";
+    field public static final java.lang.String EDUCATION = "EDUCATION";
+    field public static final java.lang.String ENTERTAINMENT = "ENTERTAINMENT";
+    field public static final java.lang.String FAMILY_KIDS = "FAMILY_KIDS";
+    field public static final java.lang.String GAMING = "GAMING";
+    field public static final java.lang.String LIFE_STYLE = "LIFE_STYLE";
+    field public static final java.lang.String MOVIES = "MOVIES";
+    field public static final java.lang.String MUSIC = "MUSIC";
+    field public static final java.lang.String NEWS = "NEWS";
+    field public static final java.lang.String PREMIER = "PREMIER";
+    field public static final java.lang.String SHOPPING = "SHOPPING";
+    field public static final java.lang.String SPORTS = "SPORTS";
+    field public static final java.lang.String TECH_SCIENCE = "TECH_SCIENCE";
+    field public static final java.lang.String TRAVEL = "TRAVEL";
+  }
+
+  public static final class TvContractCompat.RecordedPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+    field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final java.lang.String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final java.lang.String COLUMN_INPUT_ID = "input_id";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final java.lang.String COLUMN_RECORDING_DATA_BYTES = "recording_data_bytes";
+    field public static final java.lang.String COLUMN_RECORDING_DATA_URI = "recording_data_uri";
+    field public static final java.lang.String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis";
+    field public static final java.lang.String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis";
+    field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+    field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+    field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final java.lang.String COLUMN_TITLE = "title";
+    field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/recorded_program";
+    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/recorded_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+  }
+
+  public static final class TvContractCompat.WatchNextPrograms implements android.support.media.tv.TvContractCompat.BaseTvColumns {
+    field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+    field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+    field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+    field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+    field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+    field public static final int ASPECT_RATIO_MOVIE_POSTER = 5; // 0x5
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_FREE = 4; // 0x4
+    field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+    field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+    field public static final int AVAILABILITY_PURCHASED = 3; // 0x3
+    field public static final java.lang.String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final java.lang.String COLUMN_AUTHOR = "author";
+    field public static final java.lang.String COLUMN_AVAILABILITY = "availability";
+    field public static final java.lang.String COLUMN_BROWSABLE = "browsable";
+    field public static final java.lang.String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final java.lang.String COLUMN_CONTENT_ID = "content_id";
+    field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final java.lang.String COLUMN_DURATION_MILLIS = "duration_millis";
+    field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final java.lang.String COLUMN_GENRE = "genre";
+    field public static final java.lang.String COLUMN_INTENT_URI = "intent_uri";
+    field public static final java.lang.String COLUMN_INTERACTION_COUNT = "interaction_count";
+    field public static final java.lang.String COLUMN_INTERACTION_TYPE = "interaction_type";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final java.lang.String COLUMN_ITEM_COUNT = "item_count";
+    field public static final java.lang.String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS = "last_engagement_time_utc_millis";
+    field public static final java.lang.String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+    field public static final java.lang.String COLUMN_LIVE = "live";
+    field public static final java.lang.String COLUMN_LOGO_CONTENT_DESCRIPTION = "logo_content_description";
+    field public static final java.lang.String COLUMN_LOGO_URI = "logo_uri";
+    field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final java.lang.String COLUMN_OFFER_PRICE = "offer_price";
+    field public static final java.lang.String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+    field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final java.lang.String COLUMN_PREVIEW_AUDIO_URI = "preview_audio_uri";
+    field public static final java.lang.String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+    field public static final java.lang.String COLUMN_RELEASE_DATE = "release_date";
+    field public static final java.lang.String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final java.lang.String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final java.lang.String COLUMN_SEARCHABLE = "searchable";
+    field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title";
+    field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final java.lang.String COLUMN_STARTING_PRICE = "starting_price";
+    field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final java.lang.String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+    field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final java.lang.String COLUMN_TITLE = "title";
+    field public static final java.lang.String COLUMN_TRANSIENT = "transient";
+    field public static final java.lang.String COLUMN_TYPE = "type";
+    field public static final java.lang.String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final java.lang.String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final java.lang.String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final java.lang.String COLUMN_WATCH_NEXT_TYPE = "watch_next_type";
+    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watch_next_program";
+    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/watch_next_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+    field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+    field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+    field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+    field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+    field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+    field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+    field public static final int TYPE_ALBUM = 8; // 0x8
+    field public static final int TYPE_ARTIST = 9; // 0x9
+    field public static final int TYPE_CHANNEL = 6; // 0x6
+    field public static final int TYPE_CLIP = 4; // 0x4
+    field public static final int TYPE_EVENT = 5; // 0x5
+    field public static final int TYPE_GAME = 12; // 0xc
+    field public static final int TYPE_MOVIE = 0; // 0x0
+    field public static final int TYPE_PLAYLIST = 10; // 0xa
+    field public static final int TYPE_STATION = 11; // 0xb
+    field public static final int TYPE_TRACK = 7; // 0x7
+    field public static final int TYPE_TV_EPISODE = 3; // 0x3
+    field public static final int TYPE_TV_SEASON = 2; // 0x2
+    field public static final int TYPE_TV_SERIES = 1; // 0x1
+    field public static final int WATCH_NEXT_TYPE_CONTINUE = 0; // 0x0
+    field public static final int WATCH_NEXT_TYPE_NEW = 2; // 0x2
+    field public static final int WATCH_NEXT_TYPE_NEXT = 1; // 0x1
+    field public static final int WATCH_NEXT_TYPE_WATCHLIST = 3; // 0x3
+  }
+
+  public final class WatchNextProgram {
+    method public static android.support.media.tv.WatchNextProgram fromCursor(android.database.Cursor);
+    method public long getLastEngagementTimeUtcMillis();
+    method public int getWatchNextType();
+    method public android.content.ContentValues toContentValues();
+    field public static final int WATCH_NEXT_TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class WatchNextProgram.Builder {
+    ctor public WatchNextProgram.Builder();
+    ctor public WatchNextProgram.Builder(android.support.media.tv.WatchNextProgram);
+    method public android.support.media.tv.WatchNextProgram build();
+    method public android.support.media.tv.WatchNextProgram.Builder setLastEngagementTimeUtcMillis(long);
+    method public android.support.media.tv.WatchNextProgram.Builder setWatchNextType(int);
+  }
+
+}
+
diff --git a/v13/Android.mk b/v13/Android.mk
deleted file mode 100644
index d37a4d7..0000000
--- a/v13/Android.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-# 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)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-v13 \
-#       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-v13
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-        $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-# Some projects expect to inherit android-support-v4 from
-# android-support-v13, so we need to keep it static until they can be fixed.
-LOCAL_STATIC_ANDROID_LIBRARIES := \
-        android-support-v4
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-        android-support-v4
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-LOCAL_JAR_EXCLUDE_FILES := none
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
diff --git a/v13/api/27.1.0.txt b/v13/api/27.1.0.txt
new file mode 100644
index 0000000..fd72d5c
--- /dev/null
+++ b/v13/api/27.1.0.txt
@@ -0,0 +1,74 @@
+package android.support.v13.app {
+
+  public deprecated class ActivityCompat extends android.support.v4.app.ActivityCompat {
+    ctor protected deprecated ActivityCompat();
+  }
+
+  public deprecated class FragmentCompat {
+    ctor public deprecated FragmentCompat();
+    method public static deprecated void requestPermissions(android.app.Fragment, java.lang.String[], int);
+    method public static deprecated void setMenuVisibility(android.app.Fragment, boolean);
+    method public static deprecated void setPermissionCompatDelegate(android.support.v13.app.FragmentCompat.PermissionCompatDelegate);
+    method public static deprecated void setUserVisibleHint(android.app.Fragment, boolean);
+    method public static deprecated boolean shouldShowRequestPermissionRationale(android.app.Fragment, java.lang.String);
+  }
+
+  public static abstract deprecated interface FragmentCompat.OnRequestPermissionsResultCallback {
+    method public abstract deprecated void onRequestPermissionsResult(int, java.lang.String[], int[]);
+  }
+
+  public static abstract deprecated interface FragmentCompat.PermissionCompatDelegate {
+    method public abstract deprecated boolean requestPermissions(android.app.Fragment, java.lang.String[], int);
+  }
+
+  public abstract deprecated class FragmentPagerAdapter extends android.support.v4.view.PagerAdapter {
+    ctor public deprecated FragmentPagerAdapter(android.app.FragmentManager);
+    method public deprecated void destroyItem(android.view.ViewGroup, int, java.lang.Object);
+    method public deprecated void finishUpdate(android.view.ViewGroup);
+    method public abstract deprecated android.app.Fragment getItem(int);
+    method public deprecated long getItemId(int);
+    method public deprecated java.lang.Object instantiateItem(android.view.ViewGroup, int);
+    method public deprecated boolean isViewFromObject(android.view.View, java.lang.Object);
+    method public deprecated void restoreState(android.os.Parcelable, java.lang.ClassLoader);
+    method public deprecated android.os.Parcelable saveState();
+    method public deprecated void setPrimaryItem(android.view.ViewGroup, int, java.lang.Object);
+    method public deprecated void startUpdate(android.view.ViewGroup);
+  }
+
+  public abstract deprecated class FragmentStatePagerAdapter extends android.support.v4.view.PagerAdapter {
+    ctor public deprecated FragmentStatePagerAdapter(android.app.FragmentManager);
+    method public deprecated void destroyItem(android.view.ViewGroup, int, java.lang.Object);
+    method public deprecated void finishUpdate(android.view.ViewGroup);
+    method public abstract deprecated android.app.Fragment getItem(int);
+    method public deprecated java.lang.Object instantiateItem(android.view.ViewGroup, int);
+    method public deprecated boolean isViewFromObject(android.view.View, java.lang.Object);
+    method public deprecated void restoreState(android.os.Parcelable, java.lang.ClassLoader);
+    method public deprecated android.os.Parcelable saveState();
+    method public deprecated void setPrimaryItem(android.view.ViewGroup, int, java.lang.Object);
+    method public deprecated void startUpdate(android.view.ViewGroup);
+  }
+
+  public deprecated class FragmentTabHost extends android.widget.TabHost implements android.widget.TabHost.OnTabChangeListener {
+    ctor public deprecated FragmentTabHost(android.content.Context);
+    ctor public deprecated FragmentTabHost(android.content.Context, android.util.AttributeSet);
+    method public deprecated void addTab(android.widget.TabHost.TabSpec, java.lang.Class<?>, android.os.Bundle);
+    method protected deprecated void onAttachedToWindow();
+    method protected deprecated void onDetachedFromWindow();
+    method protected deprecated void onRestoreInstanceState(android.os.Parcelable);
+    method protected deprecated android.os.Parcelable onSaveInstanceState();
+    method public deprecated void onTabChanged(java.lang.String);
+    method public deprecated void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener);
+    method public deprecated void setup();
+    method public deprecated void setup(android.content.Context, android.app.FragmentManager);
+    method public deprecated void setup(android.content.Context, android.app.FragmentManager, int);
+  }
+
+}
+
+package android.support.v13.view {
+
+  public deprecated class ViewCompat extends android.support.v4.view.ViewCompat {
+  }
+
+}
+
diff --git a/v14/Android.mk b/v14/Android.mk
deleted file mode 100644
index 365b3b1..0000000
--- a/v14/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH:= $(call my-dir)
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/v14/preference/Android.mk b/v14/preference/Android.mk
deleted file mode 100644
index 47f1071..0000000
--- a/v14/preference/Android.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-v14-preference \
-#       android-support-v7-preference \
-#       android-support-v7-appcompat \
-#       android-support-v7-recyclerview \
-#       android-support-v4
-#
-# in their makefiles to include the resources in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-v14-preference
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v7-appcompat \
-    android-support-v7-recyclerview \
-    android-support-v4
-LOCAL_STATIC_ANDROID_LIBRARIES := \
-    android-support-v7-preference
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v4/Android.mk b/v4/Android.mk
deleted file mode 100644
index d2e4565..0000000
--- a/v4/Android.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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)
-# Some projects expect to inherit android-support-annotations from
-# android-support-v4, so we need to keep it static until they can be fixed.
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_STATIC_ANDROID_LIBRARIES := \
-    android-support-compat \
-    android-support-media-compat \
-    android-support-core-utils \
-    android-support-core-ui \
-    android-support-fragment
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v7/Android.mk b/v7/Android.mk
deleted file mode 100644
index 14ff0aa..0000000
--- a/v7/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-
-LOCAL_PATH:= $(call my-dir)
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/v7/appcompat/Android.mk b/v7/appcompat/Android.mk
deleted file mode 100644
index 500a2a2..0000000
--- a/v7/appcompat/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (C) 2012 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-v7-appcompat \
-#       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-v7-appcompat
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-vectordrawable \
-    android-support-animatedvectordrawable
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v4
-LOCAL_AAPT_FLAGS := --no-version-vectors
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v7/appcompat/api/27.1.0.txt b/v7/appcompat/api/27.1.0.txt
new file mode 100644
index 0000000..5d4fa6e
--- /dev/null
+++ b/v7/appcompat/api/27.1.0.txt
@@ -0,0 +1,945 @@
+package android.support.v7.app {
+
+  public abstract class ActionBar {
+    ctor public ActionBar();
+    method public abstract void addOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+    method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab);
+    method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, boolean);
+    method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int);
+    method public abstract deprecated void addTab(android.support.v7.app.ActionBar.Tab, int, boolean);
+    method public abstract android.view.View getCustomView();
+    method public abstract int getDisplayOptions();
+    method public float getElevation();
+    method public abstract int getHeight();
+    method public int getHideOffset();
+    method public abstract deprecated int getNavigationItemCount();
+    method public abstract deprecated int getNavigationMode();
+    method public abstract deprecated int getSelectedNavigationIndex();
+    method public abstract deprecated android.support.v7.app.ActionBar.Tab getSelectedTab();
+    method public abstract java.lang.CharSequence getSubtitle();
+    method public abstract deprecated android.support.v7.app.ActionBar.Tab getTabAt(int);
+    method public abstract deprecated int getTabCount();
+    method public android.content.Context getThemedContext();
+    method public abstract java.lang.CharSequence getTitle();
+    method public abstract void hide();
+    method public boolean isHideOnContentScrollEnabled();
+    method public abstract boolean isShowing();
+    method public abstract deprecated android.support.v7.app.ActionBar.Tab newTab();
+    method public abstract deprecated void removeAllTabs();
+    method public abstract void removeOnMenuVisibilityListener(android.support.v7.app.ActionBar.OnMenuVisibilityListener);
+    method public abstract deprecated void removeTab(android.support.v7.app.ActionBar.Tab);
+    method public abstract deprecated void removeTabAt(int);
+    method public abstract deprecated void selectTab(android.support.v7.app.ActionBar.Tab);
+    method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public abstract void setCustomView(android.view.View);
+    method public abstract void setCustomView(android.view.View, android.support.v7.app.ActionBar.LayoutParams);
+    method public abstract void setCustomView(int);
+    method public abstract void setDisplayHomeAsUpEnabled(boolean);
+    method public abstract void setDisplayOptions(int);
+    method public abstract void setDisplayOptions(int, int);
+    method public abstract void setDisplayShowCustomEnabled(boolean);
+    method public abstract void setDisplayShowHomeEnabled(boolean);
+    method public abstract void setDisplayShowTitleEnabled(boolean);
+    method public abstract void setDisplayUseLogoEnabled(boolean);
+    method public void setElevation(float);
+    method public void setHideOffset(int);
+    method public void setHideOnContentScrollEnabled(boolean);
+    method public void setHomeActionContentDescription(java.lang.CharSequence);
+    method public void setHomeActionContentDescription(int);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+    method public void setHomeAsUpIndicator(int);
+    method public void setHomeButtonEnabled(boolean);
+    method public abstract void setIcon(int);
+    method public abstract void setIcon(android.graphics.drawable.Drawable);
+    method public abstract deprecated void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.support.v7.app.ActionBar.OnNavigationListener);
+    method public abstract void setLogo(int);
+    method public abstract void setLogo(android.graphics.drawable.Drawable);
+    method public abstract deprecated void setNavigationMode(int);
+    method public abstract deprecated void setSelectedNavigationItem(int);
+    method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public abstract void setSubtitle(java.lang.CharSequence);
+    method public abstract void setSubtitle(int);
+    method public abstract void setTitle(java.lang.CharSequence);
+    method public abstract void setTitle(int);
+    method public abstract void show();
+    field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+    field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+    field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+    field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+    field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+    field public static final deprecated int NAVIGATION_MODE_LIST = 1; // 0x1
+    field public static final deprecated int NAVIGATION_MODE_STANDARD = 0; // 0x0
+    field public static final deprecated int NAVIGATION_MODE_TABS = 2; // 0x2
+  }
+
+  public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ActionBar.LayoutParams(int, int);
+    ctor public ActionBar.LayoutParams(int, int, int);
+    ctor public ActionBar.LayoutParams(int);
+    ctor public ActionBar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+    ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+    field public int gravity;
+  }
+
+  public static abstract interface ActionBar.OnMenuVisibilityListener {
+    method public abstract void onMenuVisibilityChanged(boolean);
+  }
+
+  public static abstract deprecated interface ActionBar.OnNavigationListener {
+    method public abstract boolean onNavigationItemSelected(int, long);
+  }
+
+  public static abstract deprecated class ActionBar.Tab {
+    ctor public ActionBar.Tab();
+    method public abstract java.lang.CharSequence getContentDescription();
+    method public abstract android.view.View getCustomView();
+    method public abstract android.graphics.drawable.Drawable getIcon();
+    method public abstract int getPosition();
+    method public abstract java.lang.Object getTag();
+    method public abstract java.lang.CharSequence getText();
+    method public abstract void select();
+    method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(int);
+    method public abstract android.support.v7.app.ActionBar.Tab setContentDescription(java.lang.CharSequence);
+    method public abstract android.support.v7.app.ActionBar.Tab setCustomView(android.view.View);
+    method public abstract android.support.v7.app.ActionBar.Tab setCustomView(int);
+    method public abstract android.support.v7.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
+    method public abstract android.support.v7.app.ActionBar.Tab setIcon(int);
+    method public abstract android.support.v7.app.ActionBar.Tab setTabListener(android.support.v7.app.ActionBar.TabListener);
+    method public abstract android.support.v7.app.ActionBar.Tab setTag(java.lang.Object);
+    method public abstract android.support.v7.app.ActionBar.Tab setText(java.lang.CharSequence);
+    method public abstract android.support.v7.app.ActionBar.Tab setText(int);
+    field public static final int INVALID_POSITION = -1; // 0xffffffff
+  }
+
+  public static abstract deprecated interface ActionBar.TabListener {
+    method public abstract void onTabReselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+    method public abstract void onTabSelected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+    method public abstract void onTabUnselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction);
+  }
+
+  public class ActionBarDrawerToggle implements android.support.v4.widget.DrawerLayout.DrawerListener {
+    ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, int, int);
+    ctor public ActionBarDrawerToggle(android.app.Activity, android.support.v4.widget.DrawerLayout, android.support.v7.widget.Toolbar, int, int);
+    method public android.support.v7.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
+    method public android.view.View.OnClickListener getToolbarNavigationClickListener();
+    method public boolean isDrawerIndicatorEnabled();
+    method public boolean isDrawerSlideAnimationEnabled();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onDrawerClosed(android.view.View);
+    method public void onDrawerOpened(android.view.View);
+    method public void onDrawerSlide(android.view.View, float);
+    method public void onDrawerStateChanged(int);
+    method public boolean onOptionsItemSelected(android.view.MenuItem);
+    method public void setDrawerArrowDrawable(android.support.v7.graphics.drawable.DrawerArrowDrawable);
+    method public void setDrawerIndicatorEnabled(boolean);
+    method public void setDrawerSlideAnimationEnabled(boolean);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+    method public void setHomeAsUpIndicator(int);
+    method public void setToolbarNavigationClickListener(android.view.View.OnClickListener);
+    method public void syncState();
+  }
+
+  public static abstract interface ActionBarDrawerToggle.Delegate {
+    method public abstract android.content.Context getActionBarThemedContext();
+    method public abstract android.graphics.drawable.Drawable getThemeUpIndicator();
+    method public abstract boolean isNavigationVisible();
+    method public abstract void setActionBarDescription(int);
+    method public abstract void setActionBarUpIndicator(android.graphics.drawable.Drawable, int);
+  }
+
+  public static abstract interface ActionBarDrawerToggle.DelegateProvider {
+    method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+  }
+
+  public class AlertDialog extends android.support.v7.app.AppCompatDialog implements android.content.DialogInterface {
+    ctor protected AlertDialog(android.content.Context);
+    ctor protected AlertDialog(android.content.Context, int);
+    ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+    method public android.widget.Button getButton(int);
+    method public android.widget.ListView getListView();
+    method public void setButton(int, java.lang.CharSequence, android.os.Message);
+    method public void setButton(int, java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+    method public void setButton(int, java.lang.CharSequence, android.graphics.drawable.Drawable, android.content.DialogInterface.OnClickListener);
+    method public void setCustomTitle(android.view.View);
+    method public void setIcon(int);
+    method public void setIcon(android.graphics.drawable.Drawable);
+    method public void setIconAttribute(int);
+    method public void setMessage(java.lang.CharSequence);
+    method public void setView(android.view.View);
+    method public void setView(android.view.View, int, int, int, int);
+  }
+
+  public static class AlertDialog.Builder {
+    ctor public AlertDialog.Builder(android.content.Context);
+    ctor public AlertDialog.Builder(android.content.Context, int);
+    method public android.support.v7.app.AlertDialog create();
+    method public android.content.Context getContext();
+    method public android.support.v7.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setCancelable(boolean);
+    method public android.support.v7.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, java.lang.String);
+    method public android.support.v7.app.AlertDialog.Builder setCustomTitle(android.view.View);
+    method public android.support.v7.app.AlertDialog.Builder setIcon(int);
+    method public android.support.v7.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable);
+    method public android.support.v7.app.AlertDialog.Builder setIconAttribute(int);
+    method public deprecated android.support.v7.app.AlertDialog.Builder setInverseBackgroundForced(boolean);
+    method public android.support.v7.app.AlertDialog.Builder setItems(int, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setItems(java.lang.CharSequence[], android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setMessage(int);
+    method public android.support.v7.app.AlertDialog.Builder setMessage(java.lang.CharSequence);
+    method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(java.lang.CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, java.lang.String, java.lang.String, android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setNegativeButton(int, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setNegativeButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setNegativeButtonIcon(android.graphics.drawable.Drawable);
+    method public android.support.v7.app.AlertDialog.Builder setNeutralButton(int, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setNeutralButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setNeutralButtonIcon(android.graphics.drawable.Drawable);
+    method public android.support.v7.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener);
+    method public android.support.v7.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener);
+    method public android.support.v7.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+    method public android.support.v7.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener);
+    method public android.support.v7.app.AlertDialog.Builder setPositiveButton(int, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setPositiveButton(java.lang.CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setPositiveButtonIcon(android.graphics.drawable.Drawable);
+    method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(int, int, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, java.lang.String, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(java.lang.CharSequence[], int, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
+    method public android.support.v7.app.AlertDialog.Builder setTitle(int);
+    method public android.support.v7.app.AlertDialog.Builder setTitle(java.lang.CharSequence);
+    method public android.support.v7.app.AlertDialog.Builder setView(int);
+    method public android.support.v7.app.AlertDialog.Builder setView(android.view.View);
+    method public android.support.v7.app.AlertDialog show();
+  }
+
+  public class AppCompatActivity extends android.support.v4.app.FragmentActivity implements android.support.v7.app.ActionBarDrawerToggle.DelegateProvider android.support.v7.app.AppCompatCallback android.support.v4.app.TaskStackBuilder.SupportParentable {
+    ctor public AppCompatActivity();
+    method public android.support.v7.app.AppCompatDelegate getDelegate();
+    method public android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+    method public android.support.v7.app.ActionBar getSupportActionBar();
+    method public android.content.Intent getSupportParentActivityIntent();
+    method public void onCreateSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+    method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+    method public void onPrepareSupportNavigateUpTaskStack(android.support.v4.app.TaskStackBuilder);
+    method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+    method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+    method public deprecated void onSupportContentChanged();
+    method public boolean onSupportNavigateUp();
+    method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+    method public void setSupportActionBar(android.support.v7.widget.Toolbar);
+    method public deprecated void setSupportProgress(int);
+    method public deprecated void setSupportProgressBarIndeterminate(boolean);
+    method public deprecated void setSupportProgressBarIndeterminateVisibility(boolean);
+    method public deprecated void setSupportProgressBarVisibility(boolean);
+    method public android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+    method public void supportInvalidateOptionsMenu();
+    method public void supportNavigateUpTo(android.content.Intent);
+    method public boolean supportRequestWindowFeature(int);
+    method public boolean supportShouldUpRecreateTask(android.content.Intent);
+  }
+
+  public abstract interface AppCompatCallback {
+    method public abstract void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+    method public abstract void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+    method public abstract android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+  }
+
+  public abstract class AppCompatDelegate {
+    method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public abstract boolean applyDayNight();
+    method public static android.support.v7.app.AppCompatDelegate create(android.app.Activity, android.support.v7.app.AppCompatCallback);
+    method public static android.support.v7.app.AppCompatDelegate create(android.app.Dialog, android.support.v7.app.AppCompatCallback);
+    method public abstract android.view.View createView(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet);
+    method public abstract <T extends android.view.View> T findViewById(int);
+    method public static int getDefaultNightMode();
+    method public abstract android.support.v7.app.ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
+    method public abstract android.view.MenuInflater getMenuInflater();
+    method public abstract android.support.v7.app.ActionBar getSupportActionBar();
+    method public abstract boolean hasWindowFeature(int);
+    method public abstract void installViewFactory();
+    method public abstract void invalidateOptionsMenu();
+    method public static boolean isCompatVectorFromResourcesEnabled();
+    method public abstract boolean isHandleNativeActionModesEnabled();
+    method public abstract void onConfigurationChanged(android.content.res.Configuration);
+    method public abstract void onCreate(android.os.Bundle);
+    method public abstract void onDestroy();
+    method public abstract void onPostCreate(android.os.Bundle);
+    method public abstract void onPostResume();
+    method public abstract void onSaveInstanceState(android.os.Bundle);
+    method public abstract void onStart();
+    method public abstract void onStop();
+    method public abstract boolean requestWindowFeature(int);
+    method public static void setCompatVectorFromResourcesEnabled(boolean);
+    method public abstract void setContentView(android.view.View);
+    method public abstract void setContentView(int);
+    method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public static void setDefaultNightMode(int);
+    method public abstract void setHandleNativeActionModesEnabled(boolean);
+    method public abstract void setLocalNightMode(int);
+    method public abstract void setSupportActionBar(android.support.v7.widget.Toolbar);
+    method public abstract void setTitle(java.lang.CharSequence);
+    method public abstract android.support.v7.view.ActionMode startSupportActionMode(android.support.v7.view.ActionMode.Callback);
+    field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+    field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
+    field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
+    field public static final int MODE_NIGHT_AUTO = 0; // 0x0
+    field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
+    field public static final int MODE_NIGHT_NO = 1; // 0x1
+    field public static final int MODE_NIGHT_YES = 2; // 0x2
+  }
+
+  public class AppCompatDialog extends android.app.Dialog implements android.support.v7.app.AppCompatCallback {
+    ctor public AppCompatDialog(android.content.Context);
+    ctor public AppCompatDialog(android.content.Context, int);
+    ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+    method public android.support.v7.app.AppCompatDelegate getDelegate();
+    method public android.support.v7.app.ActionBar getSupportActionBar();
+    method public void onSupportActionModeFinished(android.support.v7.view.ActionMode);
+    method public void onSupportActionModeStarted(android.support.v7.view.ActionMode);
+    method public android.support.v7.view.ActionMode onWindowStartingSupportActionMode(android.support.v7.view.ActionMode.Callback);
+    method public boolean supportRequestWindowFeature(int);
+  }
+
+  public class AppCompatDialogFragment extends android.support.v4.app.DialogFragment {
+    ctor public AppCompatDialogFragment();
+  }
+
+  public class AppCompatViewInflater {
+    ctor public AppCompatViewInflater();
+    method protected android.support.v7.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatButton createButton(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatCheckBox createCheckBox(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatEditText createEditText(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatImageButton createImageButton(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatImageView createImageView(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatRadioButton createRadioButton(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatRatingBar createRatingBar(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatSeekBar createSeekBar(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatSpinner createSpinner(android.content.Context, android.util.AttributeSet);
+    method protected android.support.v7.widget.AppCompatTextView createTextView(android.content.Context, android.util.AttributeSet);
+    method protected android.view.View createView(android.content.Context, java.lang.String, android.util.AttributeSet);
+  }
+
+}
+
+package android.support.v7.content.res {
+
+  public final class AppCompatResources {
+    method public static android.content.res.ColorStateList getColorStateList(android.content.Context, int);
+    method public static android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
+  }
+
+}
+
+package android.support.v7.graphics.drawable {
+
+  public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
+    ctor public DrawerArrowDrawable(android.content.Context);
+    method public void draw(android.graphics.Canvas);
+    method public float getArrowHeadLength();
+    method public float getArrowShaftLength();
+    method public float getBarLength();
+    method public float getBarThickness();
+    method public int getColor();
+    method public int getDirection();
+    method public float getGapSize();
+    method public int getOpacity();
+    method public final android.graphics.Paint getPaint();
+    method public float getProgress();
+    method public boolean isSpinEnabled();
+    method public void setAlpha(int);
+    method public void setArrowHeadLength(float);
+    method public void setArrowShaftLength(float);
+    method public void setBarLength(float);
+    method public void setBarThickness(float);
+    method public void setColor(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDirection(int);
+    method public void setGapSize(float);
+    method public void setProgress(float);
+    method public void setSpinEnabled(boolean);
+    method public void setVerticalMirror(boolean);
+    field public static final int ARROW_DIRECTION_END = 3; // 0x3
+    field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
+    field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
+    field public static final int ARROW_DIRECTION_START = 2; // 0x2
+  }
+
+}
+
+package android.support.v7.view {
+
+  public abstract class ActionMode {
+    ctor public ActionMode();
+    method public abstract void finish();
+    method public abstract android.view.View getCustomView();
+    method public abstract android.view.Menu getMenu();
+    method public abstract android.view.MenuInflater getMenuInflater();
+    method public abstract java.lang.CharSequence getSubtitle();
+    method public java.lang.Object getTag();
+    method public abstract java.lang.CharSequence getTitle();
+    method public boolean getTitleOptionalHint();
+    method public abstract void invalidate();
+    method public boolean isTitleOptional();
+    method public abstract void setCustomView(android.view.View);
+    method public abstract void setSubtitle(java.lang.CharSequence);
+    method public abstract void setSubtitle(int);
+    method public void setTag(java.lang.Object);
+    method public abstract void setTitle(java.lang.CharSequence);
+    method public abstract void setTitle(int);
+    method public void setTitleOptionalHint(boolean);
+  }
+
+  public static abstract interface ActionMode.Callback {
+    method public abstract boolean onActionItemClicked(android.support.v7.view.ActionMode, android.view.MenuItem);
+    method public abstract boolean onCreateActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+    method public abstract void onDestroyActionMode(android.support.v7.view.ActionMode);
+    method public abstract boolean onPrepareActionMode(android.support.v7.view.ActionMode, android.view.Menu);
+  }
+
+  public abstract interface CollapsibleActionView {
+    method public abstract void onActionViewCollapsed();
+    method public abstract void onActionViewExpanded();
+  }
+
+  public class ContextThemeWrapper extends android.content.ContextWrapper {
+    ctor public ContextThemeWrapper();
+    ctor public ContextThemeWrapper(android.content.Context, int);
+    ctor public ContextThemeWrapper(android.content.Context, android.content.res.Resources.Theme);
+    method public void applyOverrideConfiguration(android.content.res.Configuration);
+    method public int getThemeResId();
+    method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean);
+  }
+
+}
+
+package android.support.v7.widget {
+
+  public class ActionMenuView extends android.support.v7.widget.LinearLayoutCompat {
+    ctor public ActionMenuView(android.content.Context);
+    ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+    method public void dismissPopupMenus();
+    method protected android.support.v7.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+    method public android.support.v7.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.support.v7.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public android.view.Menu getMenu();
+    method public android.graphics.drawable.Drawable getOverflowIcon();
+    method public int getPopupTheme();
+    method public boolean hideOverflowMenu();
+    method public boolean isOverflowMenuShowing();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onDetachedFromWindow();
+    method public void setOnMenuItemClickListener(android.support.v7.widget.ActionMenuView.OnMenuItemClickListener);
+    method public void setOverflowIcon(android.graphics.drawable.Drawable);
+    method public void setPopupTheme(int);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class ActionMenuView.LayoutParams extends android.support.v7.widget.LinearLayoutCompat.LayoutParams {
+    ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(android.support.v7.widget.ActionMenuView.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(int, int);
+    field public int cellsUsed;
+    field public boolean expandable;
+    field public int extraPixels;
+    field public boolean isOverflowButton;
+    field public boolean preventEdgeOffset;
+  }
+
+  public static abstract interface ActionMenuView.OnMenuItemClickListener {
+    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements android.support.v4.view.TintableBackgroundView {
+    ctor public AppCompatAutoCompleteTextView(android.content.Context);
+    ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    method public void setTextAppearance(android.content.Context, int);
+  }
+
+  public class AppCompatButton extends android.widget.Button implements android.support.v4.widget.AutoSizeableTextView android.support.v4.view.TintableBackgroundView {
+    ctor public AppCompatButton(android.content.Context);
+    ctor public AppCompatButton(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatButton(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+    method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportAllCaps(boolean);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    method public void setTextAppearance(android.content.Context, int);
+  }
+
+  public class AppCompatCheckBox extends android.widget.CheckBox implements android.support.v4.widget.TintableCompoundButton {
+    ctor public AppCompatCheckBox(android.content.Context);
+    ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportButtonTintList();
+    method public android.graphics.PorterDuff.Mode getSupportButtonTintMode();
+    method public void setSupportButtonTintList(android.content.res.ColorStateList);
+    method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+  public class AppCompatCheckedTextView extends android.widget.CheckedTextView {
+    ctor public AppCompatCheckedTextView(android.content.Context);
+    ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet, int);
+    method public void setTextAppearance(android.content.Context, int);
+  }
+
+  public class AppCompatEditText extends android.widget.EditText implements android.support.v4.view.TintableBackgroundView {
+    ctor public AppCompatEditText(android.content.Context);
+    ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    method public void setTextAppearance(android.content.Context, int);
+  }
+
+  public class AppCompatImageButton extends android.widget.ImageButton implements android.support.v4.view.TintableBackgroundView android.support.v4.widget.TintableImageSourceView {
+    ctor public AppCompatImageButton(android.content.Context);
+    ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public android.content.res.ColorStateList getSupportImageTintList();
+    method public android.graphics.PorterDuff.Mode getSupportImageTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    method public void setSupportImageTintList(android.content.res.ColorStateList);
+    method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+  public class AppCompatImageView extends android.widget.ImageView implements android.support.v4.view.TintableBackgroundView android.support.v4.widget.TintableImageSourceView {
+    ctor public AppCompatImageView(android.content.Context);
+    ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public android.content.res.ColorStateList getSupportImageTintList();
+    method public android.graphics.PorterDuff.Mode getSupportImageTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    method public void setSupportImageTintList(android.content.res.ColorStateList);
+    method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+  public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements android.support.v4.view.TintableBackgroundView {
+    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
+    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    method public void setTextAppearance(android.content.Context, int);
+  }
+
+  public class AppCompatRadioButton extends android.widget.RadioButton implements android.support.v4.widget.TintableCompoundButton {
+    ctor public AppCompatRadioButton(android.content.Context);
+    ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatRadioButton(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportButtonTintList();
+    method public android.graphics.PorterDuff.Mode getSupportButtonTintMode();
+    method public void setSupportButtonTintList(android.content.res.ColorStateList);
+    method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+  public class AppCompatRatingBar extends android.widget.RatingBar {
+    ctor public AppCompatRatingBar(android.content.Context);
+    ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet, int);
+  }
+
+  public class AppCompatSeekBar extends android.widget.SeekBar {
+    ctor public AppCompatSeekBar(android.content.Context);
+    ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet, int);
+  }
+
+  public class AppCompatSpinner extends android.widget.Spinner implements android.support.v4.view.TintableBackgroundView {
+    ctor public AppCompatSpinner(android.content.Context);
+    ctor public AppCompatSpinner(android.content.Context, int);
+    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int);
+    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources.Theme);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+  public class AppCompatTextView extends android.widget.TextView implements android.support.v4.widget.AutoSizeableTextView android.support.v4.view.TintableBackgroundView {
+    ctor public AppCompatTextView(android.content.Context);
+    ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet);
+    ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode getSupportBackgroundTintMode();
+    method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+    method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode);
+    method public void setTextAppearance(android.content.Context, int);
+  }
+
+  public class LinearLayoutCompat extends android.view.ViewGroup {
+    ctor public LinearLayoutCompat(android.content.Context);
+    ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet);
+    ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet, int);
+    method protected android.support.v7.widget.LinearLayoutCompat.LayoutParams generateDefaultLayoutParams();
+    method public android.support.v7.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.support.v7.widget.LinearLayoutCompat.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getBaselineAlignedChildIndex();
+    method public android.graphics.drawable.Drawable getDividerDrawable();
+    method public int getDividerPadding();
+    method public int getGravity();
+    method public int getOrientation();
+    method public int getShowDividers();
+    method public float getWeightSum();
+    method public boolean isBaselineAligned();
+    method public boolean isMeasureWithLargestChildEnabled();
+    method public void setBaselineAligned(boolean);
+    method public void setBaselineAlignedChildIndex(int);
+    method public void setDividerDrawable(android.graphics.drawable.Drawable);
+    method public void setDividerPadding(int);
+    method public void setGravity(int);
+    method public void setHorizontalGravity(int);
+    method public void setMeasureWithLargestChildEnabled(boolean);
+    method public void setOrientation(int);
+    method public void setShowDividers(int);
+    method public void setVerticalGravity(int);
+    method public void setWeightSum(float);
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+    field public static final int SHOW_DIVIDER_END = 4; // 0x4
+    field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+    field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public static class LinearLayoutCompat.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public LinearLayoutCompat.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public LinearLayoutCompat.LayoutParams(int, int);
+    ctor public LinearLayoutCompat.LayoutParams(int, int, float);
+    ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public LinearLayoutCompat.LayoutParams(android.support.v7.widget.LinearLayoutCompat.LayoutParams);
+    field public int gravity;
+    field public float weight;
+  }
+
+  public class ListPopupWindow {
+    ctor public ListPopupWindow(android.content.Context);
+    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet);
+    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int);
+    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet, int, int);
+    method public void clearListSelection();
+    method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View);
+    method public void dismiss();
+    method public android.view.View getAnchorView();
+    method public int getAnimationStyle();
+    method public android.graphics.drawable.Drawable getBackground();
+    method public int getHeight();
+    method public int getHorizontalOffset();
+    method public int getInputMethodMode();
+    method public android.widget.ListView getListView();
+    method public int getPromptPosition();
+    method public java.lang.Object getSelectedItem();
+    method public long getSelectedItemId();
+    method public int getSelectedItemPosition();
+    method public android.view.View getSelectedView();
+    method public int getSoftInputMode();
+    method public int getVerticalOffset();
+    method public int getWidth();
+    method public boolean isInputMethodNotNeeded();
+    method public boolean isModal();
+    method public boolean isShowing();
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyPreIme(int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public boolean performItemClick(int);
+    method public void postShow();
+    method public void setAdapter(android.widget.ListAdapter);
+    method public void setAnchorView(android.view.View);
+    method public void setAnimationStyle(int);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setContentWidth(int);
+    method public void setDropDownGravity(int);
+    method public void setHeight(int);
+    method public void setHorizontalOffset(int);
+    method public void setInputMethodMode(int);
+    method public void setListSelector(android.graphics.drawable.Drawable);
+    method public void setModal(boolean);
+    method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
+    method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener);
+    method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+    method public void setPromptPosition(int);
+    method public void setPromptView(android.view.View);
+    method public void setSelection(int);
+    method public void setSoftInputMode(int);
+    method public void setVerticalOffset(int);
+    method public void setWidth(int);
+    method public void setWindowLayoutType(int);
+    method public void show();
+    field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+    field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+    field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+    field public static final int MATCH_PARENT = -1; // 0xffffffff
+    field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+    field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+    field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+  }
+
+  public class PopupMenu {
+    ctor public PopupMenu(android.content.Context, android.view.View);
+    ctor public PopupMenu(android.content.Context, android.view.View, int);
+    ctor public PopupMenu(android.content.Context, android.view.View, int, int, int);
+    method public void dismiss();
+    method public android.view.View.OnTouchListener getDragToOpenListener();
+    method public int getGravity();
+    method public android.view.Menu getMenu();
+    method public android.view.MenuInflater getMenuInflater();
+    method public void inflate(int);
+    method public void setGravity(int);
+    method public void setOnDismissListener(android.support.v7.widget.PopupMenu.OnDismissListener);
+    method public void setOnMenuItemClickListener(android.support.v7.widget.PopupMenu.OnMenuItemClickListener);
+    method public void show();
+  }
+
+  public static abstract interface PopupMenu.OnDismissListener {
+    method public abstract void onDismiss(android.support.v7.widget.PopupMenu);
+  }
+
+  public static abstract interface PopupMenu.OnMenuItemClickListener {
+    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public class SearchView extends android.support.v7.widget.LinearLayoutCompat implements android.support.v7.view.CollapsibleActionView {
+    ctor public SearchView(android.content.Context);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+    method public int getImeOptions();
+    method public int getInputType();
+    method public int getMaxWidth();
+    method public java.lang.CharSequence getQuery();
+    method public java.lang.CharSequence getQueryHint();
+    method public android.support.v4.widget.CursorAdapter getSuggestionsAdapter();
+    method public boolean isIconfiedByDefault();
+    method public boolean isIconified();
+    method public boolean isQueryRefinementEnabled();
+    method public boolean isSubmitButtonEnabled();
+    method public void onActionViewCollapsed();
+    method public void onActionViewExpanded();
+    method public void setIconified(boolean);
+    method public void setIconifiedByDefault(boolean);
+    method public void setImeOptions(int);
+    method public void setInputType(int);
+    method public void setMaxWidth(int);
+    method public void setOnCloseListener(android.support.v7.widget.SearchView.OnCloseListener);
+    method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
+    method public void setOnQueryTextListener(android.support.v7.widget.SearchView.OnQueryTextListener);
+    method public void setOnSearchClickListener(android.view.View.OnClickListener);
+    method public void setOnSuggestionListener(android.support.v7.widget.SearchView.OnSuggestionListener);
+    method public void setQuery(java.lang.CharSequence, boolean);
+    method public void setQueryHint(java.lang.CharSequence);
+    method public void setQueryRefinementEnabled(boolean);
+    method public void setSearchableInfo(android.app.SearchableInfo);
+    method public void setSubmitButtonEnabled(boolean);
+    method public void setSuggestionsAdapter(android.support.v4.widget.CursorAdapter);
+  }
+
+  public static abstract interface SearchView.OnCloseListener {
+    method public abstract boolean onClose();
+  }
+
+  public static abstract interface SearchView.OnQueryTextListener {
+    method public abstract boolean onQueryTextChange(java.lang.String);
+    method public abstract boolean onQueryTextSubmit(java.lang.String);
+  }
+
+  public static abstract interface SearchView.OnSuggestionListener {
+    method public abstract boolean onSuggestionClick(int);
+    method public abstract boolean onSuggestionSelect(int);
+  }
+
+  public class ShareActionProvider extends android.support.v4.view.ActionProvider {
+    ctor public ShareActionProvider(android.content.Context);
+    method public android.view.View onCreateActionView();
+    method public void setOnShareTargetSelectedListener(android.support.v7.widget.ShareActionProvider.OnShareTargetSelectedListener);
+    method public void setShareHistoryFileName(java.lang.String);
+    method public void setShareIntent(android.content.Intent);
+    field public static final java.lang.String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+  }
+
+  public static abstract interface ShareActionProvider.OnShareTargetSelectedListener {
+    method public abstract boolean onShareTargetSelected(android.support.v7.widget.ShareActionProvider, android.content.Intent);
+  }
+
+  public class SwitchCompat extends android.widget.CompoundButton {
+    ctor public SwitchCompat(android.content.Context);
+    ctor public SwitchCompat(android.content.Context, android.util.AttributeSet);
+    ctor public SwitchCompat(android.content.Context, android.util.AttributeSet, int);
+    method public boolean getShowText();
+    method public boolean getSplitTrack();
+    method public int getSwitchMinWidth();
+    method public int getSwitchPadding();
+    method public java.lang.CharSequence getTextOff();
+    method public java.lang.CharSequence getTextOn();
+    method public android.graphics.drawable.Drawable getThumbDrawable();
+    method public int getThumbTextPadding();
+    method public android.content.res.ColorStateList getThumbTintList();
+    method public android.graphics.PorterDuff.Mode getThumbTintMode();
+    method public android.graphics.drawable.Drawable getTrackDrawable();
+    method public android.content.res.ColorStateList getTrackTintList();
+    method public android.graphics.PorterDuff.Mode getTrackTintMode();
+    method public void onMeasure(int, int);
+    method public void setShowText(boolean);
+    method public void setSplitTrack(boolean);
+    method public void setSwitchMinWidth(int);
+    method public void setSwitchPadding(int);
+    method public void setSwitchTextAppearance(android.content.Context, int);
+    method public void setSwitchTypeface(android.graphics.Typeface, int);
+    method public void setSwitchTypeface(android.graphics.Typeface);
+    method public void setTextOff(java.lang.CharSequence);
+    method public void setTextOn(java.lang.CharSequence);
+    method public void setThumbDrawable(android.graphics.drawable.Drawable);
+    method public void setThumbResource(int);
+    method public void setThumbTextPadding(int);
+    method public void setThumbTintList(android.content.res.ColorStateList);
+    method public void setThumbTintMode(android.graphics.PorterDuff.Mode);
+    method public void setTrackDrawable(android.graphics.drawable.Drawable);
+    method public void setTrackResource(int);
+    method public void setTrackTintList(android.content.res.ColorStateList);
+    method public void setTrackTintMode(android.graphics.PorterDuff.Mode);
+  }
+
+  public abstract interface ThemedSpinnerAdapter implements android.widget.SpinnerAdapter {
+    method public abstract android.content.res.Resources.Theme getDropDownViewTheme();
+    method public abstract void setDropDownViewTheme(android.content.res.Resources.Theme);
+  }
+
+  public static final class ThemedSpinnerAdapter.Helper {
+    ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
+    method public android.view.LayoutInflater getDropDownViewInflater();
+    method public android.content.res.Resources.Theme getDropDownViewTheme();
+    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+  }
+
+  public class Toolbar extends android.view.ViewGroup {
+    ctor public Toolbar(android.content.Context);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+    method public void collapseActionView();
+    method public void dismissPopupMenus();
+    method protected android.support.v7.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+    method public android.support.v7.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.support.v7.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getContentInsetEnd();
+    method public int getContentInsetEndWithActions();
+    method public int getContentInsetLeft();
+    method public int getContentInsetRight();
+    method public int getContentInsetStart();
+    method public int getContentInsetStartWithNavigation();
+    method public int getCurrentContentInsetEnd();
+    method public int getCurrentContentInsetLeft();
+    method public int getCurrentContentInsetRight();
+    method public int getCurrentContentInsetStart();
+    method public android.graphics.drawable.Drawable getLogo();
+    method public java.lang.CharSequence getLogoDescription();
+    method public android.view.Menu getMenu();
+    method public java.lang.CharSequence getNavigationContentDescription();
+    method public android.graphics.drawable.Drawable getNavigationIcon();
+    method public android.graphics.drawable.Drawable getOverflowIcon();
+    method public int getPopupTheme();
+    method public java.lang.CharSequence getSubtitle();
+    method public java.lang.CharSequence getTitle();
+    method public int getTitleMarginBottom();
+    method public int getTitleMarginEnd();
+    method public int getTitleMarginStart();
+    method public int getTitleMarginTop();
+    method public boolean hasExpandedActionView();
+    method public boolean hideOverflowMenu();
+    method public void inflateMenu(int);
+    method public boolean isOverflowMenuShowing();
+    method public void setContentInsetEndWithActions(int);
+    method public void setContentInsetStartWithNavigation(int);
+    method public void setContentInsetsAbsolute(int, int);
+    method public void setContentInsetsRelative(int, int);
+    method public void setLogo(int);
+    method public void setLogo(android.graphics.drawable.Drawable);
+    method public void setLogoDescription(int);
+    method public void setLogoDescription(java.lang.CharSequence);
+    method public void setNavigationContentDescription(int);
+    method public void setNavigationContentDescription(java.lang.CharSequence);
+    method public void setNavigationIcon(int);
+    method public void setNavigationIcon(android.graphics.drawable.Drawable);
+    method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+    method public void setOnMenuItemClickListener(android.support.v7.widget.Toolbar.OnMenuItemClickListener);
+    method public void setOverflowIcon(android.graphics.drawable.Drawable);
+    method public void setPopupTheme(int);
+    method public void setSubtitle(int);
+    method public void setSubtitle(java.lang.CharSequence);
+    method public void setSubtitleTextAppearance(android.content.Context, int);
+    method public void setSubtitleTextColor(int);
+    method public void setTitle(int);
+    method public void setTitle(java.lang.CharSequence);
+    method public void setTitleMargin(int, int, int, int);
+    method public void setTitleMarginBottom(int);
+    method public void setTitleMarginEnd(int);
+    method public void setTitleMarginStart(int);
+    method public void setTitleMarginTop(int);
+    method public void setTitleTextAppearance(android.content.Context, int);
+    method public void setTitleTextColor(int);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class Toolbar.LayoutParams extends android.support.v7.app.ActionBar.LayoutParams {
+    ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar.LayoutParams(int, int);
+    ctor public Toolbar.LayoutParams(int, int, int);
+    ctor public Toolbar.LayoutParams(int);
+    ctor public Toolbar.LayoutParams(android.support.v7.widget.Toolbar.LayoutParams);
+    ctor public Toolbar.LayoutParams(android.support.v7.app.ActionBar.LayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+  }
+
+  public static abstract interface Toolbar.OnMenuItemClickListener {
+    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public static class Toolbar.SavedState extends android.support.v4.view.AbsSavedState {
+    ctor public Toolbar.SavedState(android.os.Parcel);
+    ctor public Toolbar.SavedState(android.os.Parcel, java.lang.ClassLoader);
+    ctor public Toolbar.SavedState(android.os.Parcelable);
+    field public static final android.os.Parcelable.Creator<android.support.v7.widget.Toolbar.SavedState> CREATOR;
+  }
+
+  public class TooltipCompat {
+    method public static void setTooltipText(android.view.View, java.lang.CharSequence);
+  }
+
+}
+
diff --git a/v7/appcompat/res-public/values/public_attrs.xml b/v7/appcompat/res-public/values/public_attrs.xml
index 8c9f9e9..3b811ec 100644
--- a/v7/appcompat/res-public/values/public_attrs.xml
+++ b/v7/appcompat/res-public/values/public_attrs.xml
@@ -102,6 +102,7 @@
      <public type="attr" name="customNavigationLayout"/>
      <public type="attr" name="dialogPreferredPadding"/>
      <public type="attr" name="dialogTheme"/>
+     <public type="attr" name="dialogCornerRadius"/>
      <public type="attr" name="displayOptions"/>
      <public type="attr" name="divider"/>
      <public type="attr" name="dividerHorizontal"/>
diff --git a/design/tests/res/drawable/test_drawable_state_list.xml b/v7/appcompat/res/drawable-v21/abc_dialog_material_background.xml
similarity index 63%
copy from design/tests/res/drawable/test_drawable_state_list.xml
copy to v7/appcompat/res/drawable-v21/abc_dialog_material_background.xml
index f125913..7ef438b 100644
--- a/design/tests/res/drawable/test_drawable_state_list.xml
+++ b/v7/appcompat/res/drawable-v21/abc_dialog_material_background.xml
@@ -14,8 +14,13 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_checked="true" android:drawable="@drawable/test_background_blue" />
-    <item android:drawable="@drawable/test_background_green" />
-</selector>
-
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+       android:insetLeft="16dp"
+       android:insetTop="16dp"
+       android:insetRight="16dp"
+       android:insetBottom="16dp">
+    <shape android:shape="rectangle">
+        <corners android:radius="?attr/dialogCornerRadius" />
+        <solid android:color="@android:color/white" />
+    </shape>
+</inset>
\ No newline at end of file
diff --git a/v7/appcompat/res/drawable/abc_dialog_material_background.xml b/v7/appcompat/res/drawable/abc_dialog_material_background.xml
index 18560fc..978565b 100644
--- a/v7/appcompat/res/drawable/abc_dialog_material_background.xml
+++ b/v7/appcompat/res/drawable/abc_dialog_material_background.xml
@@ -20,7 +20,7 @@
        android:insetRight="16dp"
        android:insetBottom="16dp">
     <shape android:shape="rectangle">
-        <corners android:radius="2dp" />
+        <corners android:radius="@dimen/abc_dialog_corner_radius_material" />
         <solid android:color="@android:color/white" />
     </shape>
 </inset>
\ No newline at end of file
diff --git a/v7/appcompat/res/values-bs/strings.xml b/v7/appcompat/res/values-bs/strings.xml
index 3687875..07d1411 100644
--- a/v7/appcompat/res/values-bs/strings.xml
+++ b/v7/appcompat/res/values-bs/strings.xml
@@ -29,8 +29,8 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Glasovno pretraživanje"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Odaberite aplikaciju"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Prikaži sve"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Podijeli koristeći aplikaciju <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Podijeli sa"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"Dijeli koristeći aplikaciju <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+    <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Dijeli sa"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"UKLJUČI"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"ISKLJUČI"</string>
     <string name="search_menu_title" msgid="146198913615257606">"Pretraži"</string>
diff --git a/v7/appcompat/res/values-hi/strings.xml b/v7/appcompat/res/values-hi/strings.xml
index 3a393c7..a31ab90 100644
--- a/v7/appcompat/res/values-hi/strings.xml
+++ b/v7/appcompat/res/values-hi/strings.xml
@@ -29,8 +29,8 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"आवाज़ सर्च"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"कोई एप्‍लिकेशन चुनें"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"सभी देखें"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> के साथ साझा करें"</string>
-    <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"इसके द्वारा साझा करें"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> के साथ शेयर करें"</string>
+    <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"इसके साथ शेयर करें"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"चालू"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"बंद"</string>
     <string name="search_menu_title" msgid="146198913615257606">"सर्च"</string>
diff --git a/v7/appcompat/res/values-ne/strings.xml b/v7/appcompat/res/values-ne/strings.xml
index 0d23bd7..96b1042 100644
--- a/v7/appcompat/res/values-ne/strings.xml
+++ b/v7/appcompat/res/values-ne/strings.xml
@@ -29,7 +29,7 @@
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"भ्वाइस खोजी"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"एउटा अनुप्रयोग छान्नुहोस्"</string>
     <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"सबै हेर्नुहोस्"</string>
-    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सँग आदान-प्रदान गर्नुहोस्"</string>
+    <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सँग आदान प्रदान गर्नुहोस्"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"साझेदारी गर्नुहोस्..."</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"सक्रिय गर्नुहोस्"</string>
     <string name="abc_capital_off" msgid="121134116657445385">"निष्क्रिय पार्नुहोस्"</string>
diff --git a/v7/appcompat/res/values-ta/strings.xml b/v7/appcompat/res/values-ta/strings.xml
index 4a2ad2f..971a3db 100644
--- a/v7/appcompat/res/values-ta/strings.xml
+++ b/v7/appcompat/res/values-ta/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="abc_action_mode_done" msgid="4076576682505996667">"முடிந்தது"</string>
     <string name="abc_action_bar_home_description" msgid="4600421777120114993">"முகப்பிற்கு வழிசெலுத்து"</string>
-    <string name="abc_action_bar_up_description" msgid="1594238315039666878">"மேலே வழிசெலுத்து"</string>
+    <string name="abc_action_bar_up_description" msgid="1594238315039666878">"மேலே செல்"</string>
     <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"மேலும் விருப்பங்கள்"</string>
     <string name="abc_toolbar_collapse_description" msgid="1603543279005712093">"சுருக்கு"</string>
     <string name="abc_searchview_description_search" msgid="8264924765203268293">"தேடு"</string>
diff --git a/v7/appcompat/res/values-uz/strings.xml b/v7/appcompat/res/values-uz/strings.xml
index 632e0b9..0417cba 100644
--- a/v7/appcompat/res/values-uz/strings.xml
+++ b/v7/appcompat/res/values-uz/strings.xml
@@ -28,7 +28,7 @@
     <string name="abc_searchview_description_submit" msgid="8928215447528550784">"So‘rov yaratish"</string>
     <string name="abc_searchview_description_voice" msgid="893419373245838918">"Ovozli qidiruv"</string>
     <string name="abc_activitychooserview_choose_application" msgid="2031811694353399454">"Dastur tanlang"</string>
-    <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Barchasini ko‘rish"</string>
+    <string name="abc_activity_chooser_view_see_all" msgid="7468859129482906941">"Hammasi"</string>
     <string name="abc_shareactionprovider_share_with_application" msgid="3300176832234831527">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> orqali ulashish"</string>
     <string name="abc_shareactionprovider_share_with" msgid="3421042268587513524">"Ruxsat berish"</string>
     <string name="abc_capital_on" msgid="3405795526292276155">"YONIQ"</string>
diff --git a/v7/appcompat/res/values-v28/themes_base.xml b/v7/appcompat/res/values-v28/themes_base.xml
new file mode 100644
index 0000000..7dea6d5
--- /dev/null
+++ b/v7/appcompat/res/values-v28/themes_base.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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>
+
+    <style name="Base.Theme.AppCompat" parent="Base.V28.Theme.AppCompat" />
+    <style name="Base.Theme.AppCompat.Light" parent="Base.V28.Theme.AppCompat.Light" />
+
+    <style name="Base.V28.Theme.AppCompat" parent="Base.V26.Theme.AppCompat">
+        <!-- We can use the platform styles on API 28+ -->
+        <item name="dialogCornerRadius">?android:attr/dialogCornerRadius</item>
+    </style>
+
+    <style name="Base.V28.Theme.AppCompat.Light" parent="Base.V26.Theme.AppCompat.Light">
+        <!-- We can use the platform styles on API 28+ -->
+        <item name="dialogCornerRadius">?android:attr/dialogCornerRadius</item>
+    </style>
+
+</resources>
diff --git a/v7/appcompat/res/values-vi/strings.xml b/v7/appcompat/res/values-vi/strings.xml
index 9587bed..4560b4b 100644
--- a/v7/appcompat/res/values-vi/strings.xml
+++ b/v7/appcompat/res/values-vi/strings.xml
@@ -19,7 +19,7 @@
     <string name="abc_action_mode_done" msgid="4076576682505996667">"Xong"</string>
     <string name="abc_action_bar_home_description" msgid="4600421777120114993">"Điều hướng về trang chủ"</string>
     <string name="abc_action_bar_up_description" msgid="1594238315039666878">"Điều hướng lên trên"</string>
-    <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Thêm tùy chọn"</string>
+    <string name="abc_action_menu_overflow_description" msgid="3588849162933574182">"Tùy chọn khác"</string>
     <string name="abc_toolbar_collapse_description" msgid="1603543279005712093">"Thu gọn"</string>
     <string name="abc_searchview_description_search" msgid="8264924765203268293">"Tìm kiếm"</string>
     <string name="abc_search_hint" msgid="7723749260725869598">"Tìm kiếm…"</string>
diff --git a/v7/appcompat/res/values-watch-v21/themes_base.xml b/v7/appcompat/res/values-watch-v21/themes_base.xml
new file mode 100644
index 0000000..0a6cfe8
--- /dev/null
+++ b/v7/appcompat/res/values-watch-v21/themes_base.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <style name="Base.Theme.AppCompat.Dialog" parent="Base.V21.Theme.AppCompat.Dialog" >
+        <item name="android:windowIsFloating">false</item>
+        <item name="android:windowElevation">0dp</item>
+    </style>
+    <style name="Base.Theme.AppCompat.Light.Dialog" parent="Base.V21.Theme.AppCompat.Light.Dialog" >
+        <item name="android:windowIsFloating">false</item>
+        <item name="android:windowElevation">0dp</item>
+    </style>
+    <style name="Base.ThemeOverlay.AppCompat.Dialog" parent="Base.V21.ThemeOverlay.AppCompat.Dialog" >
+        <item name="android:windowIsFloating">false</item>
+        <item name="android:windowElevation">0dp</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/v7/appcompat/res/values/attrs.xml b/v7/appcompat/res/values/attrs.xml
index c48b7ba..7d26a32 100644
--- a/v7/appcompat/res/values/attrs.xml
+++ b/v7/appcompat/res/values/attrs.xml
@@ -189,6 +189,8 @@
         <attr name="dialogPreferredPadding" format="dimension" />
         <!-- The list divider used in alert dialogs. -->
         <attr name="listDividerAlertDialog" format="reference" />
+        <!-- Preferred corner radius of dialogs. -->
+        <attr name="dialogCornerRadius" format="dimension" />
 
         <!-- =================== -->
         <!-- Other widget styles -->
diff --git a/v7/appcompat/res/values/dimens.xml b/v7/appcompat/res/values/dimens.xml
index 2623615..46b8343 100644
--- a/v7/appcompat/res/values/dimens.xml
+++ b/v7/appcompat/res/values/dimens.xml
@@ -73,6 +73,7 @@
     <dimen name="abc_dialog_title_divider_material">8dp</dimen>
     <dimen name="abc_dialog_list_padding_top_no_title">8dp</dimen>
     <dimen name="abc_dialog_list_padding_bottom_no_buttons">8dp</dimen>
+    <dimen name="abc_dialog_corner_radius_material">2dp</dimen>
 
     <!-- Dialog button bar height -->
     <dimen name="abc_alert_dialog_button_bar_height">48dp</dimen>
diff --git a/v7/appcompat/res/values/themes_base.xml b/v7/appcompat/res/values/themes_base.xml
index 313833b..d512e86 100644
--- a/v7/appcompat/res/values/themes_base.xml
+++ b/v7/appcompat/res/values/themes_base.xml
@@ -297,6 +297,7 @@
         <!-- Dialog attributes -->
         <item name="dialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
         <item name="dialogPreferredPadding">@dimen/abc_dialog_padding_material</item>
+        <item name="dialogCornerRadius">@dimen/abc_dialog_corner_radius_material</item>
 
         <item name="alertDialogTheme">@style/ThemeOverlay.AppCompat.Dialog.Alert</item>
         <item name="alertDialogStyle">@style/AlertDialog.AppCompat</item>
@@ -467,6 +468,7 @@
         <!-- Dialog attributes -->
         <item name="dialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
         <item name="dialogPreferredPadding">@dimen/abc_dialog_padding_material</item>
+        <item name="dialogCornerRadius">@dimen/abc_dialog_corner_radius_material</item>
 
         <item name="alertDialogTheme">@style/ThemeOverlay.AppCompat.Dialog.Alert</item>
         <item name="alertDialogStyle">@style/AlertDialog.AppCompat.Light</item>
diff --git a/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopupHelper.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopupHelper.java
index 35721b8..a6ee759 100644
--- a/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopupHelper.java
+++ b/v7/appcompat/src/main/java/android/support/v7/view/menu/MenuPopupHelper.java
@@ -269,7 +269,7 @@
             final int hgrav = GravityCompat.getAbsoluteGravity(mDropDownGravity,
                     ViewCompat.getLayoutDirection(mAnchorView)) & Gravity.HORIZONTAL_GRAVITY_MASK;
             if (hgrav == Gravity.RIGHT) {
-                xOffset += mAnchorView.getWidth();
+                xOffset -= mAnchorView.getWidth();
             }
 
             popup.setHorizontalOffset(xOffset);
diff --git a/v7/appcompat/src/main/java/android/support/v7/view/menu/StandardMenuPopup.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/StandardMenuPopup.java
index d94ff72..7026959 100644
--- a/v7/appcompat/src/main/java/android/support/v7/view/menu/StandardMenuPopup.java
+++ b/v7/appcompat/src/main/java/android/support/v7/view/menu/StandardMenuPopup.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Parcelable;
+import android.support.v4.view.ViewCompat;
 import android.support.v7.appcompat.R;
 import android.support.v7.widget.MenuPopupWindow;
 import android.view.Gravity;
@@ -260,7 +261,6 @@
                     mShownAnchorView, mOverflowOnly, mPopupStyleAttr, mPopupStyleRes);
             subPopup.setPresenterCallback(mPresenterCallback);
             subPopup.setForceShowIcon(MenuPopup.shouldPreserveIconSpacing(subMenu));
-            subPopup.setGravity(mDropDownGravity);
 
             // Pass responsibility for handling onDismiss to the submenu.
             subPopup.setOnDismissListener(mOnDismissListener);
@@ -270,8 +270,17 @@
             mMenu.close(false /* closeAllMenus */);
 
             // Show the new sub-menu popup at the same location as this popup.
-            final int horizontalOffset = mPopup.getHorizontalOffset();
+            int horizontalOffset = mPopup.getHorizontalOffset();
             final int verticalOffset = mPopup.getVerticalOffset();
+
+            // As xOffset of parent menu popup is subtracted with Anchor width for Gravity.RIGHT,
+            // So, again to display sub-menu popup in same xOffset, add the Anchor width.
+            final int hgrav = Gravity.getAbsoluteGravity(mDropDownGravity,
+                    ViewCompat.getLayoutDirection(mAnchorView)) & Gravity.HORIZONTAL_GRAVITY_MASK;
+            if (hgrav == Gravity.RIGHT) {
+                horizontalOffset += mAnchorView.getWidth();
+            }
+
             if (subPopup.tryShow(horizontalOffset, verticalOffset)) {
                 if (mPresenterCallback != null) {
                     mPresenterCallback.onOpenSubMenu(subMenu);
diff --git a/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatEditText.java b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatEditText.java
index 6831fcb..fdda68e 100644
--- a/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatEditText.java
+++ b/v7/appcompat/src/main/java/android/support/v7/widget/AppCompatEditText.java
@@ -25,8 +25,10 @@
 import android.support.annotation.DrawableRes;
 import android.support.annotation.Nullable;
 import android.support.annotation.RestrictTo;
+import android.support.v4.os.BuildCompat;
 import android.support.v4.view.TintableBackgroundView;
 import android.support.v7.appcompat.R;
+import android.text.Editable;
 import android.util.AttributeSet;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
@@ -71,6 +73,20 @@
         mTextHelper.applyCompoundDrawablesTints();
     }
 
+    /**
+     * Return the text that the view is displaying. If an editable text has not been set yet, this
+     * will return null.
+     */
+    @Override
+    @Nullable public Editable getText() {
+        if (BuildCompat.isAtLeastP()) {
+            return super.getText();
+        }
+        // A bug pre-P makes getText() crash if called before the first setText due to a cast, so
+        // retrieve the editable text.
+        return super.getEditableText();
+    }
+
     @Override
     public void setBackgroundResource(@DrawableRes int resId) {
         super.setBackgroundResource(resId);
diff --git a/v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompatHandler.java b/v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompatHandler.java
index 3d3c300..8de44e6 100644
--- a/v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompatHandler.java
+++ b/v7/appcompat/src/main/java/android/support/v7/widget/TooltipCompatHandler.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.support.annotation.RestrictTo;
 import android.support.v4.view.ViewCompat;
+import android.support.v4.view.ViewConfigurationCompat;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.MotionEvent;
@@ -46,6 +47,7 @@
 
     private final View mAnchor;
     private final CharSequence mTooltipText;
+    private final int mHoverSlop;
 
     private final Runnable mShowRunnable = new Runnable() {
         @Override
@@ -82,10 +84,10 @@
     public static void setTooltipText(View view, CharSequence tooltipText) {
         // The code below is not attempting to update the tooltip text
         // for a pending or currently active tooltip, because it may lead
-        // to updating the wrong tooltipin in some rare cases (e.g. when
+        // to updating the wrong tooltip in in some rare cases (e.g. when
         // action menu item views are recycled). Instead, the tooltip is
         // canceled/hidden. This might still be the wrong tooltip,
-        // but hiding wrong tooltip is less disruptive UX.
+        // but hiding a wrong tooltip is less disruptive UX.
         if (sPendingHandler != null && sPendingHandler.mAnchor == view) {
             setPendingHandler(null);
         }
@@ -104,6 +106,9 @@
     private TooltipCompatHandler(View anchor, CharSequence tooltipText) {
         mAnchor = anchor;
         mTooltipText = tooltipText;
+        mHoverSlop = ViewConfigurationCompat.getScaledHoverSlop(
+                ViewConfiguration.get(mAnchor.getContext()));
+        clearAnchorPos();
 
         mAnchor.setOnLongClickListener(this);
         mAnchor.setOnHoverListener(this);
@@ -129,13 +134,12 @@
         }
         switch (event.getAction()) {
             case MotionEvent.ACTION_HOVER_MOVE:
-                if (mAnchor.isEnabled() && mPopup == null) {
-                    mAnchorX = (int) event.getX();
-                    mAnchorY = (int) event.getY();
+                if (mAnchor.isEnabled() && mPopup == null && updateAnchorPos(event)) {
                     setPendingHandler(this);
                 }
                 break;
             case MotionEvent.ACTION_HOVER_EXIT:
+                clearAnchorPos();
                 hide();
                 break;
         }
@@ -188,6 +192,7 @@
             if (mPopup != null) {
                 mPopup.hide();
                 mPopup = null;
+                clearAnchorPos();
                 mAnchor.removeOnAttachStateChangeListener(this);
             } else {
                 Log.e(TAG, "sActiveHandler.mPopup == null");
@@ -216,4 +221,31 @@
     private void cancelPendingShow() {
         mAnchor.removeCallbacks(mShowRunnable);
     }
+
+    /**
+     * Update the anchor position if it significantly (that is by at least mHoverSlope)
+     * different from the previously stored position. Ignoring insignificant changes
+     * filters out the jitter which is typical for such input sources as stylus.
+     *
+     * @return True if the position has been updated.
+     */
+    private boolean updateAnchorPos(MotionEvent event) {
+        final int newAnchorX = (int) event.getX();
+        final int newAnchorY = (int) event.getY();
+        if (Math.abs(newAnchorX - mAnchorX) <= mHoverSlop
+                && Math.abs(newAnchorY - mAnchorY) <= mHoverSlop) {
+            return false;
+        }
+        mAnchorX = newAnchorX;
+        mAnchorY = newAnchorY;
+        return true;
+    }
+
+    /**
+     *  Clear the anchor position to ensure that the next change is considered significant.
+     */
+    private void clearAnchorPos() {
+        mAnchorX = Integer.MAX_VALUE;
+        mAnchorY = Integer.MAX_VALUE;
+    }
 }
diff --git a/v7/appcompat/tests/src/android/support/v7/widget/AppCompatEditTextTest.java b/v7/appcompat/tests/src/android/support/v7/widget/AppCompatEditTextTest.java
new file mode 100644
index 0000000..397daf6
--- /dev/null
+++ b/v7/appcompat/tests/src/android/support/v7/widget/AppCompatEditTextTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2018 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.v7.widget;
+
+import android.content.Context;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.SmallTest;
+import android.support.test.rule.ActivityTestRule;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.v7.app.AppCompatActivity;
+import android.text.Editable;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for the {@link AppCompatEditText} class.
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AppCompatEditTextTest {
+    @Rule
+    public final ActivityTestRule<AppCompatActivity> mActivityTestRule =
+            new ActivityTestRule<>(AppCompatActivity.class);
+
+    @Test
+    @UiThreadTest
+    public void testGetTextNonEditable() {
+        // This subclass calls getText before the object is fully constructed. This should not cause
+        // a null pointer exception.
+        GetTextEditText editText = new GetTextEditText(mActivityTestRule.getActivity());
+    }
+
+    private class GetTextEditText extends AppCompatEditText {
+
+        GetTextEditText(Context context) {
+            super(context);
+        }
+
+        @Override
+        public void setText(CharSequence text, BufferType type) {
+            Editable currentText = getText();
+            super.setText(text, type);
+        }
+    }
+
+    @Test
+    @UiThreadTest
+    public void testGetTextBeforeConstructor() {
+        // This subclass calls getText before the TextView constructor. This should not cause
+        // a null pointer exception.
+        GetTextEditText2 editText = new GetTextEditText2(mActivityTestRule.getActivity());
+    }
+
+    private class GetTextEditText2 extends AppCompatEditText {
+
+        GetTextEditText2(Context context) {
+            super(context);
+        }
+
+        @Override
+        public void setOverScrollMode(int overScrollMode) {
+            // This method is called by the View constructor before the TextView/EditText
+            // constructors.
+            Editable text = getText();
+        }
+    }
+}
diff --git a/v7/cardview/Android.mk b/v7/cardview/Android.mk
deleted file mode 100644
index ae4f121..0000000
--- a/v7/cardview/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# 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.
-
-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-v7-cardview
-#
-# in their makefiles to include the resources in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-v7-cardview
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v7/cardview/api/27.1.0.txt b/v7/cardview/api/27.1.0.txt
new file mode 100644
index 0000000..6732501
--- /dev/null
+++ b/v7/cardview/api/27.1.0.txt
@@ -0,0 +1,28 @@
+package android.support.v7.widget {
+
+  public class CardView extends android.widget.FrameLayout {
+    ctor public CardView(android.content.Context);
+    ctor public CardView(android.content.Context, android.util.AttributeSet);
+    ctor public CardView(android.content.Context, android.util.AttributeSet, int);
+    method public android.content.res.ColorStateList getCardBackgroundColor();
+    method public float getCardElevation();
+    method public int getContentPaddingBottom();
+    method public int getContentPaddingLeft();
+    method public int getContentPaddingRight();
+    method public int getContentPaddingTop();
+    method public float getMaxCardElevation();
+    method public boolean getPreventCornerOverlap();
+    method public float getRadius();
+    method public boolean getUseCompatPadding();
+    method public void setCardBackgroundColor(int);
+    method public void setCardBackgroundColor(android.content.res.ColorStateList);
+    method public void setCardElevation(float);
+    method public void setContentPadding(int, int, int, int);
+    method public void setMaxCardElevation(float);
+    method public void setPreventCornerOverlap(boolean);
+    method public void setRadius(float);
+    method public void setUseCompatPadding(boolean);
+  }
+
+}
+
diff --git a/v7/gridlayout/Android.mk b/v7/gridlayout/Android.mk
deleted file mode 100644
index 81791da..0000000
--- a/v7/gridlayout/Android.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-v7-gridlayout \
-#       android-support-compat \
-#       android-support-core-ui
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-v7-gridlayout
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat \
-    android-support-core-ui
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
diff --git a/v7/gridlayout/api/27.1.0.txt b/v7/gridlayout/api/27.1.0.txt
new file mode 100644
index 0000000..9f12b89
--- /dev/null
+++ b/v7/gridlayout/api/27.1.0.txt
@@ -0,0 +1,70 @@
+package android.support.v7.widget {
+
+  public class GridLayout extends android.view.ViewGroup {
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayout(android.content.Context);
+    method protected android.support.v7.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.support.v7.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.support.v7.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getAlignmentMode();
+    method public int getColumnCount();
+    method public int getOrientation();
+    method public android.util.Printer getPrinter();
+    method public int getRowCount();
+    method public boolean getUseDefaultMargins();
+    method public boolean isColumnOrderPreserved();
+    method public boolean isRowOrderPreserved();
+    method public void setAlignmentMode(int);
+    method public void setColumnCount(int);
+    method public void setColumnOrderPreserved(boolean);
+    method public void setOrientation(int);
+    method public void setPrinter(android.util.Printer);
+    method public void setRowCount(int);
+    method public void setRowOrderPreserved(boolean);
+    method public void setUseDefaultMargins(boolean);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment, float);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment, float);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int, int, float);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int, float);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int, int, android.support.v7.widget.GridLayout.Alignment);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int, android.support.v7.widget.GridLayout.Alignment);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int, int);
+    method public static android.support.v7.widget.GridLayout.Spec spec(int);
+    field public static final int ALIGN_BOUNDS = 0; // 0x0
+    field public static final int ALIGN_MARGINS = 1; // 0x1
+    field public static final android.support.v7.widget.GridLayout.Alignment BASELINE;
+    field public static final android.support.v7.widget.GridLayout.Alignment BOTTOM;
+    field public static final android.support.v7.widget.GridLayout.Alignment CENTER;
+    field public static final android.support.v7.widget.GridLayout.Alignment END;
+    field public static final android.support.v7.widget.GridLayout.Alignment FILL;
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final android.support.v7.widget.GridLayout.Alignment LEFT;
+    field public static final android.support.v7.widget.GridLayout.Alignment RIGHT;
+    field public static final android.support.v7.widget.GridLayout.Alignment START;
+    field public static final android.support.v7.widget.GridLayout.Alignment TOP;
+    field public static final int UNDEFINED = -2147483648; // 0x80000000
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public static abstract class GridLayout.Alignment {
+  }
+
+  public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.Spec, android.support.v7.widget.GridLayout.Spec);
+    ctor public GridLayout.LayoutParams();
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public GridLayout.LayoutParams(android.support.v7.widget.GridLayout.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    method public void setGravity(int);
+    field public android.support.v7.widget.GridLayout.Spec columnSpec;
+    field public android.support.v7.widget.GridLayout.Spec rowSpec;
+  }
+
+  public static class GridLayout.Spec {
+    method public android.support.v7.widget.GridLayout.Alignment getAbsoluteAlignment(boolean);
+  }
+
+}
+
diff --git a/v7/mediarouter/Android.mk b/v7/mediarouter/Android.mk
deleted file mode 100644
index 21b4a62..0000000
--- a/v7/mediarouter/Android.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (C) 2013 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-v7-mediarouter \
-#       android-support-v7-appcompat \
-#       android-support-v7-palette \
-#       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-v7-mediarouter
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,jellybean) \
-    $(call all-java-files-under,jellybean-mr1) \
-    $(call all-java-files-under,jellybean-mr2) \
-    $(call all-java-files-under,api24) \
-    $(call all-java-files-under,src)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v7-appcompat \
-    android-support-v7-palette \
-    android-support-v4
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v7/mediarouter/api/27.1.0.txt b/v7/mediarouter/api/27.1.0.txt
new file mode 100644
index 0000000..7670978
--- /dev/null
+++ b/v7/mediarouter/api/27.1.0.txt
@@ -0,0 +1,476 @@
+package android.support.v7.app {
+
+  public class MediaRouteActionProvider extends android.support.v4.view.ActionProvider {
+    ctor public MediaRouteActionProvider(android.content.Context);
+    method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+    method public android.support.v7.app.MediaRouteButton getMediaRouteButton();
+    method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+    method public android.view.View onCreateActionView();
+    method public android.support.v7.app.MediaRouteButton onCreateMediaRouteButton();
+    method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+    method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+  }
+
+  public class MediaRouteButton extends android.view.View {
+    ctor public MediaRouteButton(android.content.Context);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
+    method public android.support.v7.app.MediaRouteDialogFactory getDialogFactory();
+    method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+    method public void onAttachedToWindow();
+    method public void onDetachedFromWindow();
+    method public void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory);
+    method public void setRemoteIndicatorDrawable(android.graphics.drawable.Drawable);
+    method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+    method public boolean showDialog();
+  }
+
+  public class MediaRouteChooserDialog extends android.support.v7.app.AppCompatDialog {
+    ctor public MediaRouteChooserDialog(android.content.Context);
+    ctor public MediaRouteChooserDialog(android.content.Context, int);
+    method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+    method public boolean onFilterRoute(android.support.v7.media.MediaRouter.RouteInfo);
+    method public void onFilterRoutes(java.util.List<android.support.v7.media.MediaRouter.RouteInfo>);
+    method public void refreshRoutes();
+    method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+  }
+
+  public class MediaRouteChooserDialogFragment extends android.support.v4.app.DialogFragment {
+    ctor public MediaRouteChooserDialogFragment();
+    method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+    method public android.support.v7.app.MediaRouteChooserDialog onCreateChooserDialog(android.content.Context, android.os.Bundle);
+    method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+  }
+
+  public class MediaRouteControllerDialog extends android.support.v7.app.AlertDialog {
+    ctor public MediaRouteControllerDialog(android.content.Context);
+    ctor public MediaRouteControllerDialog(android.content.Context, int);
+    method public android.view.View getMediaControlView();
+    method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSession();
+    method public android.support.v7.media.MediaRouter.RouteInfo getRoute();
+    method public boolean isVolumeControlEnabled();
+    method public android.view.View onCreateMediaControlView(android.os.Bundle);
+    method public void setVolumeControlEnabled(boolean);
+  }
+
+  public class MediaRouteControllerDialogFragment extends android.support.v4.app.DialogFragment {
+    ctor public MediaRouteControllerDialogFragment();
+    method public android.support.v7.app.MediaRouteControllerDialog onCreateControllerDialog(android.content.Context, android.os.Bundle);
+  }
+
+  public class MediaRouteDialogFactory {
+    ctor public MediaRouteDialogFactory();
+    method public static android.support.v7.app.MediaRouteDialogFactory getDefault();
+    method public android.support.v7.app.MediaRouteChooserDialogFragment onCreateChooserDialogFragment();
+    method public android.support.v7.app.MediaRouteControllerDialogFragment onCreateControllerDialogFragment();
+  }
+
+  public class MediaRouteDiscoveryFragment extends android.support.v4.app.Fragment {
+    ctor public MediaRouteDiscoveryFragment();
+    method public android.support.v7.media.MediaRouter getMediaRouter();
+    method public android.support.v7.media.MediaRouteSelector getRouteSelector();
+    method public android.support.v7.media.MediaRouter.Callback onCreateCallback();
+    method public int onPrepareCallbackFlags();
+    method public void setRouteSelector(android.support.v7.media.MediaRouteSelector);
+  }
+
+}
+
+package android.support.v7.media {
+
+  public final class MediaControlIntent {
+    field public static final java.lang.String ACTION_END_SESSION = "android.media.intent.action.END_SESSION";
+    field public static final java.lang.String ACTION_ENQUEUE = "android.media.intent.action.ENQUEUE";
+    field public static final java.lang.String ACTION_GET_SESSION_STATUS = "android.media.intent.action.GET_SESSION_STATUS";
+    field public static final java.lang.String ACTION_GET_STATUS = "android.media.intent.action.GET_STATUS";
+    field public static final java.lang.String ACTION_PAUSE = "android.media.intent.action.PAUSE";
+    field public static final java.lang.String ACTION_PLAY = "android.media.intent.action.PLAY";
+    field public static final java.lang.String ACTION_REMOVE = "android.media.intent.action.REMOVE";
+    field public static final java.lang.String ACTION_RESUME = "android.media.intent.action.RESUME";
+    field public static final java.lang.String ACTION_SEEK = "android.media.intent.action.SEEK";
+    field public static final java.lang.String ACTION_SEND_MESSAGE = "android.media.intent.action.SEND_MESSAGE";
+    field public static final java.lang.String ACTION_START_SESSION = "android.media.intent.action.START_SESSION";
+    field public static final java.lang.String ACTION_STOP = "android.media.intent.action.STOP";
+    field public static final java.lang.String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+    field public static final java.lang.String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+    field public static final java.lang.String CATEGORY_REMOTE_PLAYBACK = "android.media.intent.category.REMOTE_PLAYBACK";
+    field public static final int ERROR_INVALID_ITEM_ID = 3; // 0x3
+    field public static final int ERROR_INVALID_SESSION_ID = 2; // 0x2
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int ERROR_UNSUPPORTED_OPERATION = 1; // 0x1
+    field public static final java.lang.String EXTRA_ERROR_CODE = "android.media.intent.extra.ERROR_CODE";
+    field public static final java.lang.String EXTRA_ITEM_CONTENT_POSITION = "android.media.intent.extra.ITEM_POSITION";
+    field public static final java.lang.String EXTRA_ITEM_HTTP_HEADERS = "android.media.intent.extra.HTTP_HEADERS";
+    field public static final java.lang.String EXTRA_ITEM_ID = "android.media.intent.extra.ITEM_ID";
+    field public static final java.lang.String EXTRA_ITEM_METADATA = "android.media.intent.extra.ITEM_METADATA";
+    field public static final java.lang.String EXTRA_ITEM_STATUS = "android.media.intent.extra.ITEM_STATUS";
+    field public static final java.lang.String EXTRA_ITEM_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.ITEM_STATUS_UPDATE_RECEIVER";
+    field public static final java.lang.String EXTRA_MESSAGE = "android.media.intent.extra.MESSAGE";
+    field public static final java.lang.String EXTRA_MESSAGE_RECEIVER = "android.media.intent.extra.MESSAGE_RECEIVER";
+    field public static final java.lang.String EXTRA_SESSION_ID = "android.media.intent.extra.SESSION_ID";
+    field public static final java.lang.String EXTRA_SESSION_STATUS = "android.media.intent.extra.SESSION_STATUS";
+    field public static final java.lang.String EXTRA_SESSION_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.SESSION_STATUS_UPDATE_RECEIVER";
+  }
+
+  public final class MediaItemMetadata {
+    field public static final java.lang.String KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+    field public static final java.lang.String KEY_ALBUM_TITLE = "android.media.metadata.ALBUM_TITLE";
+    field public static final java.lang.String KEY_ARTIST = "android.media.metadata.ARTIST";
+    field public static final java.lang.String KEY_ARTWORK_URI = "android.media.metadata.ARTWORK_URI";
+    field public static final java.lang.String KEY_AUTHOR = "android.media.metadata.AUTHOR";
+    field public static final java.lang.String KEY_COMPOSER = "android.media.metadata.COMPOSER";
+    field public static final java.lang.String KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+    field public static final java.lang.String KEY_DURATION = "android.media.metadata.DURATION";
+    field public static final java.lang.String KEY_TITLE = "android.media.metadata.TITLE";
+    field public static final java.lang.String KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+    field public static final java.lang.String KEY_YEAR = "android.media.metadata.YEAR";
+  }
+
+  public final class MediaItemStatus {
+    method public android.os.Bundle asBundle();
+    method public static android.support.v7.media.MediaItemStatus fromBundle(android.os.Bundle);
+    method public long getContentDuration();
+    method public long getContentPosition();
+    method public android.os.Bundle getExtras();
+    method public int getPlaybackState();
+    method public long getTimestamp();
+    field public static final java.lang.String EXTRA_HTTP_RESPONSE_HEADERS = "android.media.status.extra.HTTP_RESPONSE_HEADERS";
+    field public static final java.lang.String EXTRA_HTTP_STATUS_CODE = "android.media.status.extra.HTTP_STATUS_CODE";
+    field public static final int PLAYBACK_STATE_BUFFERING = 3; // 0x3
+    field public static final int PLAYBACK_STATE_CANCELED = 5; // 0x5
+    field public static final int PLAYBACK_STATE_ERROR = 7; // 0x7
+    field public static final int PLAYBACK_STATE_FINISHED = 4; // 0x4
+    field public static final int PLAYBACK_STATE_INVALIDATED = 6; // 0x6
+    field public static final int PLAYBACK_STATE_PAUSED = 2; // 0x2
+    field public static final int PLAYBACK_STATE_PENDING = 0; // 0x0
+    field public static final int PLAYBACK_STATE_PLAYING = 1; // 0x1
+  }
+
+  public static final class MediaItemStatus.Builder {
+    ctor public MediaItemStatus.Builder(int);
+    ctor public MediaItemStatus.Builder(android.support.v7.media.MediaItemStatus);
+    method public android.support.v7.media.MediaItemStatus build();
+    method public android.support.v7.media.MediaItemStatus.Builder setContentDuration(long);
+    method public android.support.v7.media.MediaItemStatus.Builder setContentPosition(long);
+    method public android.support.v7.media.MediaItemStatus.Builder setExtras(android.os.Bundle);
+    method public android.support.v7.media.MediaItemStatus.Builder setPlaybackState(int);
+    method public android.support.v7.media.MediaItemStatus.Builder setTimestamp(long);
+  }
+
+  public final class MediaRouteDescriptor {
+    method public android.os.Bundle asBundle();
+    method public boolean canDisconnectAndKeepPlaying();
+    method public static android.support.v7.media.MediaRouteDescriptor fromBundle(android.os.Bundle);
+    method public int getConnectionState();
+    method public java.util.List<android.content.IntentFilter> getControlFilters();
+    method public java.lang.String getDescription();
+    method public int getDeviceType();
+    method public android.os.Bundle getExtras();
+    method public android.net.Uri getIconUri();
+    method public java.lang.String getId();
+    method public java.lang.String getName();
+    method public int getPlaybackStream();
+    method public int getPlaybackType();
+    method public int getPresentationDisplayId();
+    method public android.content.IntentSender getSettingsActivity();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public deprecated boolean isConnecting();
+    method public boolean isEnabled();
+    method public boolean isValid();
+  }
+
+  public static final class MediaRouteDescriptor.Builder {
+    ctor public MediaRouteDescriptor.Builder(java.lang.String, java.lang.String);
+    ctor public MediaRouteDescriptor.Builder(android.support.v7.media.MediaRouteDescriptor);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilter(android.content.IntentFilter);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder addControlFilters(java.util.Collection<android.content.IntentFilter>);
+    method public android.support.v7.media.MediaRouteDescriptor build();
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setCanDisconnect(boolean);
+    method public deprecated android.support.v7.media.MediaRouteDescriptor.Builder setConnecting(boolean);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setConnectionState(int);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setDescription(java.lang.String);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setDeviceType(int);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setEnabled(boolean);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setExtras(android.os.Bundle);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setIconUri(android.net.Uri);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setId(java.lang.String);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setName(java.lang.String);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackStream(int);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setPlaybackType(int);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setPresentationDisplayId(int);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setSettingsActivity(android.content.IntentSender);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setVolume(int);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeHandling(int);
+    method public android.support.v7.media.MediaRouteDescriptor.Builder setVolumeMax(int);
+  }
+
+  public final class MediaRouteDiscoveryRequest {
+    ctor public MediaRouteDiscoveryRequest(android.support.v7.media.MediaRouteSelector, boolean);
+    method public android.os.Bundle asBundle();
+    method public static android.support.v7.media.MediaRouteDiscoveryRequest fromBundle(android.os.Bundle);
+    method public android.support.v7.media.MediaRouteSelector getSelector();
+    method public boolean isActiveScan();
+    method public boolean isValid();
+  }
+
+  public abstract class MediaRouteProvider {
+    ctor public MediaRouteProvider(android.content.Context);
+    method public final android.content.Context getContext();
+    method public final android.support.v7.media.MediaRouteProviderDescriptor getDescriptor();
+    method public final android.support.v7.media.MediaRouteDiscoveryRequest getDiscoveryRequest();
+    method public final android.os.Handler getHandler();
+    method public final android.support.v7.media.MediaRouteProvider.ProviderMetadata getMetadata();
+    method public android.support.v7.media.MediaRouteProvider.RouteController onCreateRouteController(java.lang.String);
+    method public void onDiscoveryRequestChanged(android.support.v7.media.MediaRouteDiscoveryRequest);
+    method public final void setCallback(android.support.v7.media.MediaRouteProvider.Callback);
+    method public final void setDescriptor(android.support.v7.media.MediaRouteProviderDescriptor);
+    method public final void setDiscoveryRequest(android.support.v7.media.MediaRouteDiscoveryRequest);
+  }
+
+  public static abstract class MediaRouteProvider.Callback {
+    ctor public MediaRouteProvider.Callback();
+    method public void onDescriptorChanged(android.support.v7.media.MediaRouteProvider, android.support.v7.media.MediaRouteProviderDescriptor);
+  }
+
+  public static final class MediaRouteProvider.ProviderMetadata {
+    method public android.content.ComponentName getComponentName();
+    method public java.lang.String getPackageName();
+  }
+
+  public static abstract class MediaRouteProvider.RouteController {
+    ctor public MediaRouteProvider.RouteController();
+    method public boolean onControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+    method public void onRelease();
+    method public void onSelect();
+    method public void onSetVolume(int);
+    method public void onUnselect();
+    method public void onUnselect(int);
+    method public void onUpdateVolume(int);
+  }
+
+  public final class MediaRouteProviderDescriptor {
+    method public android.os.Bundle asBundle();
+    method public static android.support.v7.media.MediaRouteProviderDescriptor fromBundle(android.os.Bundle);
+    method public java.util.List<android.support.v7.media.MediaRouteDescriptor> getRoutes();
+    method public boolean isValid();
+  }
+
+  public static final class MediaRouteProviderDescriptor.Builder {
+    ctor public MediaRouteProviderDescriptor.Builder();
+    ctor public MediaRouteProviderDescriptor.Builder(android.support.v7.media.MediaRouteProviderDescriptor);
+    method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoute(android.support.v7.media.MediaRouteDescriptor);
+    method public android.support.v7.media.MediaRouteProviderDescriptor.Builder addRoutes(java.util.Collection<android.support.v7.media.MediaRouteDescriptor>);
+    method public android.support.v7.media.MediaRouteProviderDescriptor build();
+  }
+
+  public abstract class MediaRouteProviderService extends android.app.Service {
+    ctor public MediaRouteProviderService();
+    method public android.support.v7.media.MediaRouteProvider getMediaRouteProvider();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.support.v7.media.MediaRouteProvider onCreateMediaRouteProvider();
+    field public static final java.lang.String SERVICE_INTERFACE = "android.media.MediaRouteProviderService";
+  }
+
+  public final class MediaRouteSelector {
+    method public android.os.Bundle asBundle();
+    method public boolean contains(android.support.v7.media.MediaRouteSelector);
+    method public static android.support.v7.media.MediaRouteSelector fromBundle(android.os.Bundle);
+    method public java.util.List<java.lang.String> getControlCategories();
+    method public boolean hasControlCategory(java.lang.String);
+    method public boolean isEmpty();
+    method public boolean isValid();
+    method public boolean matchesControlFilters(java.util.List<android.content.IntentFilter>);
+    field public static final android.support.v7.media.MediaRouteSelector EMPTY;
+  }
+
+  public static final class MediaRouteSelector.Builder {
+    ctor public MediaRouteSelector.Builder();
+    ctor public MediaRouteSelector.Builder(android.support.v7.media.MediaRouteSelector);
+    method public android.support.v7.media.MediaRouteSelector.Builder addControlCategories(java.util.Collection<java.lang.String>);
+    method public android.support.v7.media.MediaRouteSelector.Builder addControlCategory(java.lang.String);
+    method public android.support.v7.media.MediaRouteSelector.Builder addSelector(android.support.v7.media.MediaRouteSelector);
+    method public android.support.v7.media.MediaRouteSelector build();
+  }
+
+  public final class MediaRouter {
+    method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback);
+    method public void addCallback(android.support.v7.media.MediaRouteSelector, android.support.v7.media.MediaRouter.Callback, int);
+    method public void addProvider(android.support.v7.media.MediaRouteProvider);
+    method public void addRemoteControlClient(java.lang.Object);
+    method public android.support.v7.media.MediaRouter.RouteInfo getBluetoothRoute();
+    method public android.support.v7.media.MediaRouter.RouteInfo getDefaultRoute();
+    method public static android.support.v7.media.MediaRouter getInstance(android.content.Context);
+    method public android.support.v4.media.session.MediaSessionCompat.Token getMediaSessionToken();
+    method public java.util.List<android.support.v7.media.MediaRouter.ProviderInfo> getProviders();
+    method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+    method public android.support.v7.media.MediaRouter.RouteInfo getSelectedRoute();
+    method public boolean isRouteAvailable(android.support.v7.media.MediaRouteSelector, int);
+    method public void removeCallback(android.support.v7.media.MediaRouter.Callback);
+    method public void removeProvider(android.support.v7.media.MediaRouteProvider);
+    method public void removeRemoteControlClient(java.lang.Object);
+    method public void selectRoute(android.support.v7.media.MediaRouter.RouteInfo);
+    method public void setMediaSession(java.lang.Object);
+    method public void setMediaSessionCompat(android.support.v4.media.session.MediaSessionCompat);
+    method public void unselect(int);
+    method public android.support.v7.media.MediaRouter.RouteInfo updateSelectedRoute(android.support.v7.media.MediaRouteSelector);
+    field public static final int AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE = 1; // 0x1
+    field public static final int AVAILABILITY_FLAG_REQUIRE_MATCH = 2; // 0x2
+    field public static final int CALLBACK_FLAG_FORCE_DISCOVERY = 8; // 0x8
+    field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1
+    field public static final int CALLBACK_FLAG_REQUEST_DISCOVERY = 4; // 0x4
+    field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2
+    field public static final int UNSELECT_REASON_DISCONNECTED = 1; // 0x1
+    field public static final int UNSELECT_REASON_ROUTE_CHANGED = 3; // 0x3
+    field public static final int UNSELECT_REASON_STOPPED = 2; // 0x2
+    field public static final int UNSELECT_REASON_UNKNOWN = 0; // 0x0
+  }
+
+  public static abstract class MediaRouter.Callback {
+    ctor public MediaRouter.Callback();
+    method public void onProviderAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+    method public void onProviderChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+    method public void onProviderRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.ProviderInfo);
+    method public void onRouteAdded(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+    method public void onRouteChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+    method public void onRoutePresentationDisplayChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+    method public void onRouteRemoved(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+    method public void onRouteSelected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+    method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+    method public void onRouteUnselected(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo, int);
+    method public void onRouteVolumeChanged(android.support.v7.media.MediaRouter, android.support.v7.media.MediaRouter.RouteInfo);
+  }
+
+  public static abstract class MediaRouter.ControlRequestCallback {
+    ctor public MediaRouter.ControlRequestCallback();
+    method public void onError(java.lang.String, android.os.Bundle);
+    method public void onResult(android.os.Bundle);
+  }
+
+  public static final class MediaRouter.ProviderInfo {
+    method public android.content.ComponentName getComponentName();
+    method public java.lang.String getPackageName();
+    method public android.support.v7.media.MediaRouteProvider getProviderInstance();
+    method public java.util.List<android.support.v7.media.MediaRouter.RouteInfo> getRoutes();
+  }
+
+  public static class MediaRouter.RouteInfo {
+    method public boolean canDisconnect();
+    method public int getConnectionState();
+    method public java.util.List<android.content.IntentFilter> getControlFilters();
+    method public java.lang.String getDescription();
+    method public int getDeviceType();
+    method public android.os.Bundle getExtras();
+    method public android.net.Uri getIconUri();
+    method public java.lang.String getId();
+    method public java.lang.String getName();
+    method public int getPlaybackStream();
+    method public int getPlaybackType();
+    method public android.view.Display getPresentationDisplay();
+    method public android.support.v7.media.MediaRouter.ProviderInfo getProvider();
+    method public android.content.IntentSender getSettingsIntent();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public boolean isBluetooth();
+    method public boolean isConnecting();
+    method public boolean isDefault();
+    method public boolean isDeviceSpeaker();
+    method public boolean isEnabled();
+    method public boolean isSelected();
+    method public boolean matchesSelector(android.support.v7.media.MediaRouteSelector);
+    method public void requestSetVolume(int);
+    method public void requestUpdateVolume(int);
+    method public void select();
+    method public void sendControlRequest(android.content.Intent, android.support.v7.media.MediaRouter.ControlRequestCallback);
+    method public boolean supportsControlAction(java.lang.String, java.lang.String);
+    method public boolean supportsControlCategory(java.lang.String);
+    method public boolean supportsControlRequest(android.content.Intent);
+    field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
+    field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
+    field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
+    field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+    field public static final int DEVICE_TYPE_TV = 1; // 0x1
+    field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
+    field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
+    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+  }
+
+  public final class MediaSessionStatus {
+    method public android.os.Bundle asBundle();
+    method public static android.support.v7.media.MediaSessionStatus fromBundle(android.os.Bundle);
+    method public android.os.Bundle getExtras();
+    method public int getSessionState();
+    method public long getTimestamp();
+    method public boolean isQueuePaused();
+    field public static final int SESSION_STATE_ACTIVE = 0; // 0x0
+    field public static final int SESSION_STATE_ENDED = 1; // 0x1
+    field public static final int SESSION_STATE_INVALIDATED = 2; // 0x2
+  }
+
+  public static final class MediaSessionStatus.Builder {
+    ctor public MediaSessionStatus.Builder(int);
+    ctor public MediaSessionStatus.Builder(android.support.v7.media.MediaSessionStatus);
+    method public android.support.v7.media.MediaSessionStatus build();
+    method public android.support.v7.media.MediaSessionStatus.Builder setExtras(android.os.Bundle);
+    method public android.support.v7.media.MediaSessionStatus.Builder setQueuePaused(boolean);
+    method public android.support.v7.media.MediaSessionStatus.Builder setSessionState(int);
+    method public android.support.v7.media.MediaSessionStatus.Builder setTimestamp(long);
+  }
+
+  public class RemotePlaybackClient {
+    ctor public RemotePlaybackClient(android.content.Context, android.support.v7.media.MediaRouter.RouteInfo);
+    method public void endSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+    method public void enqueue(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+    method public java.lang.String getSessionId();
+    method public void getSessionStatus(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+    method public void getStatus(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+    method public boolean hasSession();
+    method public boolean isMessagingSupported();
+    method public boolean isQueuingSupported();
+    method public boolean isRemotePlaybackSupported();
+    method public boolean isSessionManagementSupported();
+    method public void pause(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+    method public void play(android.net.Uri, java.lang.String, android.os.Bundle, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+    method public void release();
+    method public void remove(java.lang.String, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+    method public void resume(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+    method public void seek(java.lang.String, long, android.os.Bundle, android.support.v7.media.RemotePlaybackClient.ItemActionCallback);
+    method public void sendMessage(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+    method public void setOnMessageReceivedListener(android.support.v7.media.RemotePlaybackClient.OnMessageReceivedListener);
+    method public void setSessionId(java.lang.String);
+    method public void setStatusCallback(android.support.v7.media.RemotePlaybackClient.StatusCallback);
+    method public void startSession(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+    method public void stop(android.os.Bundle, android.support.v7.media.RemotePlaybackClient.SessionActionCallback);
+  }
+
+  public static abstract class RemotePlaybackClient.ActionCallback {
+    ctor public RemotePlaybackClient.ActionCallback();
+    method public void onError(java.lang.String, int, android.os.Bundle);
+  }
+
+  public static abstract class RemotePlaybackClient.ItemActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+    ctor public RemotePlaybackClient.ItemActionCallback();
+    method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+  }
+
+  public static abstract interface RemotePlaybackClient.OnMessageReceivedListener {
+    method public abstract void onMessageReceived(java.lang.String, android.os.Bundle);
+  }
+
+  public static abstract class RemotePlaybackClient.SessionActionCallback extends android.support.v7.media.RemotePlaybackClient.ActionCallback {
+    ctor public RemotePlaybackClient.SessionActionCallback();
+    method public void onResult(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+  }
+
+  public static abstract class RemotePlaybackClient.StatusCallback {
+    ctor public RemotePlaybackClient.StatusCallback();
+    method public void onItemStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus, java.lang.String, android.support.v7.media.MediaItemStatus);
+    method public void onSessionChanged(java.lang.String);
+    method public void onSessionStatusChanged(android.os.Bundle, java.lang.String, android.support.v7.media.MediaSessionStatus);
+  }
+
+}
+
diff --git a/v7/mediarouter/res/values-ar/strings.xml b/v7/mediarouter/res/values-ar/strings.xml
index 2cfe9e4..864fb91 100644
--- a/v7/mediarouter/res/values-ar/strings.xml
+++ b/v7/mediarouter/res/values-ar/strings.xml
@@ -34,7 +34,7 @@
     <string name="mr_controller_collapse_group" msgid="7924809056904240926">"تصغير"</string>
     <string name="mr_controller_album_art" msgid="6422801843540543585">"صورة الألبوم"</string>
     <string name="mr_controller_volume_slider" msgid="2361785992211841709">"شريط تمرير مستوى الصوت"</string>
-    <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"لم يتم اختيار أية وسائط"</string>
-    <string name="mr_controller_no_info_available" msgid="5585418471741142924">"لا تتوفر أية معلومات"</string>
+    <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"لم يتم اختيار أي وسائط"</string>
+    <string name="mr_controller_no_info_available" msgid="5585418471741142924">"لا تتوفر أي معلومات"</string>
     <string name="mr_controller_casting_screen" msgid="4868457957151124867">"جارٍ إرسال الشاشة"</string>
 </resources>
diff --git a/v7/mediarouter/res/values-ca/strings.xml b/v7/mediarouter/res/values-ca/strings.xml
index a5e5883..7e01048 100644
--- a/v7/mediarouter/res/values-ca/strings.xml
+++ b/v7/mediarouter/res/values-ca/strings.xml
@@ -34,7 +34,7 @@
     <string name="mr_controller_collapse_group" msgid="7924809056904240926">"Replega"</string>
     <string name="mr_controller_album_art" msgid="6422801843540543585">"Imatge de l\'àlbum"</string>
     <string name="mr_controller_volume_slider" msgid="2361785992211841709">"Control lliscant de volum"</string>
-    <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"No s\'ha seleccionat cap fitxer multimèdia"</string>
+    <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"No s\'han seleccionat fitxers multimèdia"</string>
     <string name="mr_controller_no_info_available" msgid="5585418471741142924">"No hi ha informació disponible"</string>
     <string name="mr_controller_casting_screen" msgid="4868457957151124867">"Emissió de pantalla"</string>
 </resources>
diff --git a/v7/mediarouter/res/values-da/strings.xml b/v7/mediarouter/res/values-da/strings.xml
index 44da892..d280d2c 100644
--- a/v7/mediarouter/res/values-da/strings.xml
+++ b/v7/mediarouter/res/values-da/strings.xml
@@ -34,7 +34,7 @@
     <string name="mr_controller_collapse_group" msgid="7924809056904240926">"Skjul"</string>
     <string name="mr_controller_album_art" msgid="6422801843540543585">"Albumgrafik"</string>
     <string name="mr_controller_volume_slider" msgid="2361785992211841709">"Lydstyrkeskyder"</string>
-    <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"Der er ikke valgt nogen medier"</string>
+    <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"Ingen medier er markeret"</string>
     <string name="mr_controller_no_info_available" msgid="5585418471741142924">"Der er ingen tilgængelige oplysninger"</string>
     <string name="mr_controller_casting_screen" msgid="4868457957151124867">"Skærmen castes"</string>
 </resources>
diff --git a/v7/mediarouter/res/values-eu/strings.xml b/v7/mediarouter/res/values-eu/strings.xml
index f9b9f8d..11b1d00 100644
--- a/v7/mediarouter/res/values-eu/strings.xml
+++ b/v7/mediarouter/res/values-eu/strings.xml
@@ -22,7 +22,7 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Igortzeko botoia. Deskonektatuta"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Igortzeko botoia. Konektatzen"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Igortzeko botoia. Konektatuta"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"Igorri hona"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"Igorri hona:"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"Gailuak bilatzen"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Deskonektatu"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Utzi igortzeari"</string>
diff --git a/v7/mediarouter/res/values-in/strings.xml b/v7/mediarouter/res/values-in/strings.xml
index 5e537af..becb41e 100644
--- a/v7/mediarouter/res/values-in/strings.xml
+++ b/v7/mediarouter/res/values-in/strings.xml
@@ -18,14 +18,14 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mr_system_route_name" msgid="5441529851481176817">"Sistem"</string>
     <string name="mr_user_route_category_name" msgid="7498112907524977311">"Perangkat"</string>
-    <string name="mr_button_content_description" msgid="3698378085901466129">"Tombol transmisi"</string>
-    <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Tombol transmisi. Terputus"</string>
-    <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Tombol transmisi. Menghubungkan"</string>
-    <string name="mr_cast_button_connected" msgid="5088427771788648085">"Tombol transmisi. Terhubung"</string>
+    <string name="mr_button_content_description" msgid="3698378085901466129">"Tombol Cast"</string>
+    <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Tombol Cast. Terputus"</string>
+    <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Tombol Cast. Menghubungkan"</string>
+    <string name="mr_cast_button_connected" msgid="5088427771788648085">"Tombol Cast. Terhubung"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"Transmisikan ke"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"Mencari perangkat"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"Putuskan sambungan"</string>
-    <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Hentikan cast"</string>
+    <string name="mr_controller_stop_casting" msgid="8857886794086583226">"Hentikan Transmisi"</string>
     <string name="mr_controller_close_description" msgid="7333862312480583260">"Tutup"</string>
     <string name="mr_controller_play" msgid="683634565969987458">"Putar"</string>
     <string name="mr_controller_pause" msgid="5451884435510905406">"Jeda"</string>
diff --git a/v7/mediarouter/res/values-ml/strings.xml b/v7/mediarouter/res/values-ml/strings.xml
index c7b50be..62258fb 100644
--- a/v7/mediarouter/res/values-ml/strings.xml
+++ b/v7/mediarouter/res/values-ml/strings.xml
@@ -26,7 +26,7 @@
     <string name="mr_chooser_searching" msgid="6349900579507521956">"ഉപകരണങ്ങൾ കണ്ടെത്തുന്നു"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"വിച്ഛേദിക്കുക"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"കാസ്റ്റുചെയ്യൽ നിർത്തുക"</string>
-    <string name="mr_controller_close_description" msgid="7333862312480583260">"അടയ്‌ക്കുക"</string>
+    <string name="mr_controller_close_description" msgid="7333862312480583260">"അവസാനിപ്പിക്കുക"</string>
     <string name="mr_controller_play" msgid="683634565969987458">"പ്ലേ ചെയ്യുക"</string>
     <string name="mr_controller_pause" msgid="5451884435510905406">"തൽക്കാലം നിർത്തൂ"</string>
     <string name="mr_controller_stop" msgid="735874641921425123">"നിര്‍ത്തുക"</string>
diff --git a/v7/mediarouter/res/values-mr/strings.xml b/v7/mediarouter/res/values-mr/strings.xml
index 27923d1..596b56a 100644
--- a/v7/mediarouter/res/values-mr/strings.xml
+++ b/v7/mediarouter/res/values-mr/strings.xml
@@ -20,7 +20,7 @@
     <string name="mr_user_route_category_name" msgid="7498112907524977311">"डिव्हाइसेस"</string>
     <string name="mr_button_content_description" msgid="3698378085901466129">"कास्ट बटण"</string>
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"कास्ट बटण. डिस्कनेक्ट केले"</string>
-    <string name="mr_cast_button_connecting" msgid="2187642765091873834">"कास्ट बटण. कनेक्ट करीत आहे"</string>
+    <string name="mr_cast_button_connecting" msgid="2187642765091873834">"कास्ट बटण. कनेक्ट करत आहे"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"कास्ट बटण. कनेक्ट केले"</string>
     <string name="mr_chooser_title" msgid="414301941546135990">"यावर कास्ट करा"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"डिव्हाइसेस शोधत आहे"</string>
@@ -36,5 +36,5 @@
     <string name="mr_controller_volume_slider" msgid="2361785992211841709">"व्हॉल्यूम स्लायडर"</string>
     <string name="mr_controller_no_media_selected" msgid="6547130360349182381">"मीडिया निवडला नाही"</string>
     <string name="mr_controller_no_info_available" msgid="5585418471741142924">"कोणतीही माहिती उपलब्ध नाही"</string>
-    <string name="mr_controller_casting_screen" msgid="4868457957151124867">"स्क्रीन कास्‍ट करीत आहे"</string>
+    <string name="mr_controller_casting_screen" msgid="4868457957151124867">"स्क्रीन कास्‍ट करत आहे"</string>
 </resources>
diff --git a/v7/mediarouter/res/values-ta/strings.xml b/v7/mediarouter/res/values-ta/strings.xml
index 99c6172..9888472 100644
--- a/v7/mediarouter/res/values-ta/strings.xml
+++ b/v7/mediarouter/res/values-ta/strings.xml
@@ -22,7 +22,7 @@
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"அனுப்புதல் பொத்தான். துண்டிக்கப்பட்டது"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"அனுப்புதல் பொத்தான். இணைக்கிறது"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"அனுப்புதல் பொத்தான். இணைக்கப்பட்டது"</string>
-    <string name="mr_chooser_title" msgid="414301941546135990">"இதில் திரையிடு"</string>
+    <string name="mr_chooser_title" msgid="414301941546135990">"இதற்கு அனுப்பு"</string>
     <string name="mr_chooser_searching" msgid="6349900579507521956">"சாதனங்களைத் தேடுகிறது"</string>
     <string name="mr_controller_disconnect" msgid="1227264889412989580">"தொடர்பைத் துண்டி"</string>
     <string name="mr_controller_stop_casting" msgid="8857886794086583226">"அனுப்புவதை நிறுத்து"</string>
diff --git a/v7/mediarouter/res/values-tr/strings.xml b/v7/mediarouter/res/values-tr/strings.xml
index a0eb2e4..8189092 100644
--- a/v7/mediarouter/res/values-tr/strings.xml
+++ b/v7/mediarouter/res/values-tr/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mr_system_route_name" msgid="5441529851481176817">"Sistem"</string>
     <string name="mr_user_route_category_name" msgid="7498112907524977311">"Cihazlar"</string>
-    <string name="mr_button_content_description" msgid="3698378085901466129">"Yayın düğmesi"</string>
+    <string name="mr_button_content_description" msgid="3698378085901466129">"Yayınla düğmesi"</string>
     <string name="mr_cast_button_disconnected" msgid="816305490427819240">"Yayınla düğmesi. Bağlantı kesildi"</string>
     <string name="mr_cast_button_connecting" msgid="2187642765091873834">"Yayınla düğmesi. Bağlanıyor"</string>
     <string name="mr_cast_button_connected" msgid="5088427771788648085">"Yayınla düğmesi. Bağlandı"</string>
diff --git a/v7/palette/Android.mk b/v7/palette/Android.mk
deleted file mode 100644
index b7dafe9..0000000
--- a/v7/palette/Android.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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.
-
-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-v7-palette \
-#       android-support-compat \
-#       android-support-core-utils
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-v7-palette
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under, src/main)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/src/main/res
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat \
-    android-support-core-utils
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v7/palette/api/27.1.0.txt b/v7/palette/api/27.1.0.txt
new file mode 100644
index 0000000..2ff5fd3
--- /dev/null
+++ b/v7/palette/api/27.1.0.txt
@@ -0,0 +1,99 @@
+package android.support.v7.graphics {
+
+  public final class Palette {
+    method public static android.support.v7.graphics.Palette.Builder from(android.graphics.Bitmap);
+    method public static android.support.v7.graphics.Palette from(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+    method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap);
+    method public static deprecated android.support.v7.graphics.Palette generate(android.graphics.Bitmap, int);
+    method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, android.support.v7.graphics.Palette.PaletteAsyncListener);
+    method public static deprecated android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generateAsync(android.graphics.Bitmap, int, android.support.v7.graphics.Palette.PaletteAsyncListener);
+    method public int getColorForTarget(android.support.v7.graphics.Target, int);
+    method public int getDarkMutedColor(int);
+    method public android.support.v7.graphics.Palette.Swatch getDarkMutedSwatch();
+    method public int getDarkVibrantColor(int);
+    method public android.support.v7.graphics.Palette.Swatch getDarkVibrantSwatch();
+    method public int getDominantColor(int);
+    method public android.support.v7.graphics.Palette.Swatch getDominantSwatch();
+    method public int getLightMutedColor(int);
+    method public android.support.v7.graphics.Palette.Swatch getLightMutedSwatch();
+    method public int getLightVibrantColor(int);
+    method public android.support.v7.graphics.Palette.Swatch getLightVibrantSwatch();
+    method public int getMutedColor(int);
+    method public android.support.v7.graphics.Palette.Swatch getMutedSwatch();
+    method public android.support.v7.graphics.Palette.Swatch getSwatchForTarget(android.support.v7.graphics.Target);
+    method public java.util.List<android.support.v7.graphics.Palette.Swatch> getSwatches();
+    method public java.util.List<android.support.v7.graphics.Target> getTargets();
+    method public int getVibrantColor(int);
+    method public android.support.v7.graphics.Palette.Swatch getVibrantSwatch();
+  }
+
+  public static final class Palette.Builder {
+    ctor public Palette.Builder(android.graphics.Bitmap);
+    ctor public Palette.Builder(java.util.List<android.support.v7.graphics.Palette.Swatch>);
+    method public android.support.v7.graphics.Palette.Builder addFilter(android.support.v7.graphics.Palette.Filter);
+    method public android.support.v7.graphics.Palette.Builder addTarget(android.support.v7.graphics.Target);
+    method public android.support.v7.graphics.Palette.Builder clearFilters();
+    method public android.support.v7.graphics.Palette.Builder clearRegion();
+    method public android.support.v7.graphics.Palette.Builder clearTargets();
+    method public android.support.v7.graphics.Palette generate();
+    method public android.os.AsyncTask<android.graphics.Bitmap, java.lang.Void, android.support.v7.graphics.Palette> generate(android.support.v7.graphics.Palette.PaletteAsyncListener);
+    method public android.support.v7.graphics.Palette.Builder maximumColorCount(int);
+    method public android.support.v7.graphics.Palette.Builder resizeBitmapArea(int);
+    method public deprecated android.support.v7.graphics.Palette.Builder resizeBitmapSize(int);
+    method public android.support.v7.graphics.Palette.Builder setRegion(int, int, int, int);
+  }
+
+  public static abstract interface Palette.Filter {
+    method public abstract boolean isAllowed(int, float[]);
+  }
+
+  public static abstract interface Palette.PaletteAsyncListener {
+    method public abstract void onGenerated(android.support.v7.graphics.Palette);
+  }
+
+  public static final class Palette.Swatch {
+    ctor public Palette.Swatch(int, int);
+    method public int getBodyTextColor();
+    method public float[] getHsl();
+    method public int getPopulation();
+    method public int getRgb();
+    method public int getTitleTextColor();
+  }
+
+  public final class Target {
+    method public float getLightnessWeight();
+    method public float getMaximumLightness();
+    method public float getMaximumSaturation();
+    method public float getMinimumLightness();
+    method public float getMinimumSaturation();
+    method public float getPopulationWeight();
+    method public float getSaturationWeight();
+    method public float getTargetLightness();
+    method public float getTargetSaturation();
+    method public boolean isExclusive();
+    field public static final android.support.v7.graphics.Target DARK_MUTED;
+    field public static final android.support.v7.graphics.Target DARK_VIBRANT;
+    field public static final android.support.v7.graphics.Target LIGHT_MUTED;
+    field public static final android.support.v7.graphics.Target LIGHT_VIBRANT;
+    field public static final android.support.v7.graphics.Target MUTED;
+    field public static final android.support.v7.graphics.Target VIBRANT;
+  }
+
+  public static final class Target.Builder {
+    ctor public Target.Builder();
+    ctor public Target.Builder(android.support.v7.graphics.Target);
+    method public android.support.v7.graphics.Target build();
+    method public android.support.v7.graphics.Target.Builder setExclusive(boolean);
+    method public android.support.v7.graphics.Target.Builder setLightnessWeight(float);
+    method public android.support.v7.graphics.Target.Builder setMaximumLightness(float);
+    method public android.support.v7.graphics.Target.Builder setMaximumSaturation(float);
+    method public android.support.v7.graphics.Target.Builder setMinimumLightness(float);
+    method public android.support.v7.graphics.Target.Builder setMinimumSaturation(float);
+    method public android.support.v7.graphics.Target.Builder setPopulationWeight(float);
+    method public android.support.v7.graphics.Target.Builder setSaturationWeight(float);
+    method public android.support.v7.graphics.Target.Builder setTargetLightness(float);
+    method public android.support.v7.graphics.Target.Builder setTargetSaturation(float);
+  }
+
+}
+
diff --git a/v7/preference/Android.mk b/v7/preference/Android.mk
deleted file mode 100644
index 5a3f57a..0000000
--- a/v7/preference/Android.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-v7-preference \
-#       android-support-v7-appcompat \
-#       android-support-v7-recyclerview \
-#       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-v7-preference
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-v7-appcompat \
-    android-support-v7-recyclerview \
-    android-support-v4
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-LOCAL_EXPORT_PROGUARD_FLAG_FILES := proguard-rules.pro
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v7/preference/api/27.1.0.txt b/v7/preference/api/27.1.0.txt
new file mode 100644
index 0000000..ad64841
--- /dev/null
+++ b/v7/preference/api/27.1.0.txt
@@ -0,0 +1,512 @@
+package android.support.v14.preference {
+
+  public class EditTextPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+    ctor public EditTextPreferenceDialogFragment();
+    method public static android.support.v14.preference.EditTextPreferenceDialogFragment newInstance(java.lang.String);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class ListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+    ctor public ListPreferenceDialogFragment();
+    method public static android.support.v14.preference.ListPreferenceDialogFragment newInstance(java.lang.String);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class MultiSelectListPreference extends android.support.v7.preference.DialogPreference {
+    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
+    ctor public MultiSelectListPreference(android.content.Context);
+    method public int findIndexOfValue(java.lang.String);
+    method public java.lang.CharSequence[] getEntries();
+    method public java.lang.CharSequence[] getEntryValues();
+    method protected boolean[] getSelectedItems();
+    method public java.util.Set<java.lang.String> getValues();
+    method public void setEntries(java.lang.CharSequence[]);
+    method public void setEntries(int);
+    method public void setEntryValues(java.lang.CharSequence[]);
+    method public void setEntryValues(int);
+    method public void setValues(java.util.Set<java.lang.String>);
+  }
+
+  public class MultiSelectListPreferenceDialogFragment extends android.support.v14.preference.PreferenceDialogFragment {
+    ctor public MultiSelectListPreferenceDialogFragment();
+    method public static android.support.v14.preference.MultiSelectListPreferenceDialogFragment newInstance(java.lang.String);
+    method public void onDialogClosed(boolean);
+  }
+
+  public abstract class PreferenceDialogFragment extends android.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+    ctor public PreferenceDialogFragment();
+    method public android.support.v7.preference.DialogPreference getPreference();
+    method protected void onBindDialogView(android.view.View);
+    method public void onClick(android.content.DialogInterface, int);
+    method protected android.view.View onCreateDialogView(android.content.Context);
+    method public abstract void onDialogClosed(boolean);
+    method protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder);
+    field protected static final java.lang.String ARG_KEY = "key";
+  }
+
+  public abstract class PreferenceFragment extends android.app.Fragment implements android.support.v7.preference.DialogPreference.TargetFragment android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+    ctor public PreferenceFragment();
+    method public void addPreferencesFromResource(int);
+    method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+    method public final android.support.v7.widget.RecyclerView getListView();
+    method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+    method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+    method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+    method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+    method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+    method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+    method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+    method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+    method public void scrollToPreference(java.lang.String);
+    method public void scrollToPreference(android.support.v7.preference.Preference);
+    method public void setDivider(android.graphics.drawable.Drawable);
+    method public void setDividerHeight(int);
+    method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+    method public void setPreferencesFromResource(int, java.lang.String);
+    field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+  }
+
+  public static abstract interface PreferenceFragment.OnPreferenceDisplayDialogCallback {
+    method public abstract boolean onPreferenceDisplayDialog(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+  }
+
+  public static abstract interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+    method public abstract boolean onPreferenceStartFragment(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.Preference);
+  }
+
+  public static abstract interface PreferenceFragment.OnPreferenceStartScreenCallback {
+    method public abstract boolean onPreferenceStartScreen(android.support.v14.preference.PreferenceFragment, android.support.v7.preference.PreferenceScreen);
+  }
+
+  public class SwitchPreference extends android.support.v7.preference.TwoStatePreference {
+    ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public SwitchPreference(android.content.Context, android.util.AttributeSet);
+    ctor public SwitchPreference(android.content.Context);
+    method public java.lang.CharSequence getSwitchTextOff();
+    method public java.lang.CharSequence getSwitchTextOn();
+    method public void setSwitchTextOff(java.lang.CharSequence);
+    method public void setSwitchTextOff(int);
+    method public void setSwitchTextOn(java.lang.CharSequence);
+    method public void setSwitchTextOn(int);
+  }
+
+}
+
+package android.support.v7.preference {
+
+  public class CheckBoxPreference extends android.support.v7.preference.TwoStatePreference {
+    ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
+    ctor public CheckBoxPreference(android.content.Context);
+  }
+
+  public abstract class DialogPreference extends android.support.v7.preference.Preference {
+    ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public DialogPreference(android.content.Context, android.util.AttributeSet);
+    ctor public DialogPreference(android.content.Context);
+    method public android.graphics.drawable.Drawable getDialogIcon();
+    method public int getDialogLayoutResource();
+    method public java.lang.CharSequence getDialogMessage();
+    method public java.lang.CharSequence getDialogTitle();
+    method public java.lang.CharSequence getNegativeButtonText();
+    method public java.lang.CharSequence getPositiveButtonText();
+    method public void setDialogIcon(android.graphics.drawable.Drawable);
+    method public void setDialogIcon(int);
+    method public void setDialogLayoutResource(int);
+    method public void setDialogMessage(java.lang.CharSequence);
+    method public void setDialogMessage(int);
+    method public void setDialogTitle(java.lang.CharSequence);
+    method public void setDialogTitle(int);
+    method public void setNegativeButtonText(java.lang.CharSequence);
+    method public void setNegativeButtonText(int);
+    method public void setPositiveButtonText(java.lang.CharSequence);
+    method public void setPositiveButtonText(int);
+  }
+
+  public static abstract interface DialogPreference.TargetFragment {
+    method public abstract android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+  }
+
+  public class DropDownPreference extends android.support.v7.preference.ListPreference {
+    ctor public DropDownPreference(android.content.Context);
+    ctor public DropDownPreference(android.content.Context, android.util.AttributeSet);
+    ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public DropDownPreference(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.ArrayAdapter createAdapter();
+  }
+
+  public class EditTextPreference extends android.support.v7.preference.DialogPreference {
+    ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public EditTextPreference(android.content.Context, android.util.AttributeSet);
+    ctor public EditTextPreference(android.content.Context);
+    method public java.lang.String getText();
+    method public void setText(java.lang.String);
+  }
+
+  public class EditTextPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+    ctor public EditTextPreferenceDialogFragmentCompat();
+    method public static android.support.v7.preference.EditTextPreferenceDialogFragmentCompat newInstance(java.lang.String);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class ListPreference extends android.support.v7.preference.DialogPreference {
+    ctor public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public ListPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public ListPreference(android.content.Context, android.util.AttributeSet);
+    ctor public ListPreference(android.content.Context);
+    method public int findIndexOfValue(java.lang.String);
+    method public java.lang.CharSequence[] getEntries();
+    method public java.lang.CharSequence getEntry();
+    method public java.lang.CharSequence[] getEntryValues();
+    method public java.lang.String getValue();
+    method public void setEntries(java.lang.CharSequence[]);
+    method public void setEntries(int);
+    method public void setEntryValues(java.lang.CharSequence[]);
+    method public void setEntryValues(int);
+    method public void setValue(java.lang.String);
+    method public void setValueIndex(int);
+  }
+
+  public class ListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+    ctor public ListPreferenceDialogFragmentCompat();
+    method public static android.support.v7.preference.ListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class MultiSelectListPreferenceDialogFragmentCompat extends android.support.v7.preference.PreferenceDialogFragmentCompat {
+    ctor public MultiSelectListPreferenceDialogFragmentCompat();
+    method public static android.support.v7.preference.MultiSelectListPreferenceDialogFragmentCompat newInstance(java.lang.String);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class Preference implements java.lang.Comparable {
+    ctor public Preference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public Preference(android.content.Context, android.util.AttributeSet, int);
+    ctor public Preference(android.content.Context, android.util.AttributeSet);
+    ctor public Preference(android.content.Context);
+    method public boolean callChangeListener(java.lang.Object);
+    method public int compareTo(android.support.v7.preference.Preference);
+    method protected android.support.v7.preference.Preference findPreferenceInHierarchy(java.lang.String);
+    method public android.content.Context getContext();
+    method public java.lang.String getDependency();
+    method public android.os.Bundle getExtras();
+    method public java.lang.String getFragment();
+    method public android.graphics.drawable.Drawable getIcon();
+    method public android.content.Intent getIntent();
+    method public java.lang.String getKey();
+    method public final int getLayoutResource();
+    method public android.support.v7.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
+    method public android.support.v7.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
+    method public int getOrder();
+    method public android.support.v7.preference.PreferenceGroup getParent();
+    method protected boolean getPersistedBoolean(boolean);
+    method protected float getPersistedFloat(float);
+    method protected int getPersistedInt(int);
+    method protected long getPersistedLong(long);
+    method protected java.lang.String getPersistedString(java.lang.String);
+    method public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>);
+    method public android.support.v7.preference.PreferenceDataStore getPreferenceDataStore();
+    method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+    method public android.content.SharedPreferences getSharedPreferences();
+    method public boolean getShouldDisableView();
+    method public java.lang.CharSequence getSummary();
+    method public java.lang.CharSequence getTitle();
+    method public final int getWidgetLayoutResource();
+    method public boolean hasKey();
+    method public boolean isEnabled();
+    method public boolean isIconSpaceReserved();
+    method public boolean isPersistent();
+    method public boolean isSelectable();
+    method public boolean isSingleLineTitle();
+    method public final boolean isVisible();
+    method protected void notifyChanged();
+    method public void notifyDependencyChange(boolean);
+    method protected void notifyHierarchyChanged();
+    method public void onAttached();
+    method protected void onAttachedToHierarchy(android.support.v7.preference.PreferenceManager);
+    method public void onBindViewHolder(android.support.v7.preference.PreferenceViewHolder);
+    method protected void onClick();
+    method public void onDependencyChanged(android.support.v7.preference.Preference, boolean);
+    method public void onDetached();
+    method protected java.lang.Object onGetDefaultValue(android.content.res.TypedArray, int);
+    method public void onInitializeAccessibilityNodeInfo(android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method public void onParentChanged(android.support.v7.preference.Preference, boolean);
+    method protected void onPrepareForRemoval();
+    method protected void onRestoreInstanceState(android.os.Parcelable);
+    method protected android.os.Parcelable onSaveInstanceState();
+    method protected void onSetInitialValue(boolean, java.lang.Object);
+    method public android.os.Bundle peekExtras();
+    method protected boolean persistBoolean(boolean);
+    method protected boolean persistFloat(float);
+    method protected boolean persistInt(int);
+    method protected boolean persistLong(long);
+    method protected boolean persistString(java.lang.String);
+    method public boolean persistStringSet(java.util.Set<java.lang.String>);
+    method public void restoreHierarchyState(android.os.Bundle);
+    method public void saveHierarchyState(android.os.Bundle);
+    method public void setDefaultValue(java.lang.Object);
+    method public void setDependency(java.lang.String);
+    method public void setEnabled(boolean);
+    method public void setFragment(java.lang.String);
+    method public void setIcon(android.graphics.drawable.Drawable);
+    method public void setIcon(int);
+    method public void setIconSpaceReserved(boolean);
+    method public void setIntent(android.content.Intent);
+    method public void setKey(java.lang.String);
+    method public void setLayoutResource(int);
+    method public void setOnPreferenceChangeListener(android.support.v7.preference.Preference.OnPreferenceChangeListener);
+    method public void setOnPreferenceClickListener(android.support.v7.preference.Preference.OnPreferenceClickListener);
+    method public void setOrder(int);
+    method public void setPersistent(boolean);
+    method public void setPreferenceDataStore(android.support.v7.preference.PreferenceDataStore);
+    method public void setSelectable(boolean);
+    method public void setShouldDisableView(boolean);
+    method public void setSingleLineTitle(boolean);
+    method public void setSummary(java.lang.CharSequence);
+    method public void setSummary(int);
+    method public void setTitle(java.lang.CharSequence);
+    method public void setTitle(int);
+    method public void setViewId(int);
+    method public final void setVisible(boolean);
+    method public void setWidgetLayoutResource(int);
+    method public boolean shouldDisableDependents();
+    method protected boolean shouldPersist();
+    field public static final int DEFAULT_ORDER = 2147483647; // 0x7fffffff
+  }
+
+  public static class Preference.BaseSavedState extends android.view.AbsSavedState {
+    ctor public Preference.BaseSavedState(android.os.Parcel);
+    ctor public Preference.BaseSavedState(android.os.Parcelable);
+    field public static final android.os.Parcelable.Creator<android.support.v7.preference.Preference.BaseSavedState> CREATOR;
+  }
+
+  public static abstract interface Preference.OnPreferenceChangeListener {
+    method public abstract boolean onPreferenceChange(android.support.v7.preference.Preference, java.lang.Object);
+  }
+
+  public static abstract interface Preference.OnPreferenceClickListener {
+    method public abstract boolean onPreferenceClick(android.support.v7.preference.Preference);
+  }
+
+  public class PreferenceCategory extends android.support.v7.preference.PreferenceGroup {
+    ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
+    ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet);
+    ctor public PreferenceCategory(android.content.Context);
+  }
+
+  public abstract class PreferenceDataStore {
+    ctor public PreferenceDataStore();
+    method public boolean getBoolean(java.lang.String, boolean);
+    method public float getFloat(java.lang.String, float);
+    method public int getInt(java.lang.String, int);
+    method public long getLong(java.lang.String, long);
+    method public java.lang.String getString(java.lang.String, java.lang.String);
+    method public java.util.Set<java.lang.String> getStringSet(java.lang.String, java.util.Set<java.lang.String>);
+    method public void putBoolean(java.lang.String, boolean);
+    method public void putFloat(java.lang.String, float);
+    method public void putInt(java.lang.String, int);
+    method public void putLong(java.lang.String, long);
+    method public void putString(java.lang.String, java.lang.String);
+    method public void putStringSet(java.lang.String, java.util.Set<java.lang.String>);
+  }
+
+  public abstract class PreferenceDialogFragmentCompat extends android.support.v4.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+    ctor public PreferenceDialogFragmentCompat();
+    method public android.support.v7.preference.DialogPreference getPreference();
+    method protected void onBindDialogView(android.view.View);
+    method public void onClick(android.content.DialogInterface, int);
+    method protected android.view.View onCreateDialogView(android.content.Context);
+    method public abstract void onDialogClosed(boolean);
+    method protected void onPrepareDialogBuilder(android.support.v7.app.AlertDialog.Builder);
+    field protected static final java.lang.String ARG_KEY = "key";
+  }
+
+  public abstract class PreferenceFragmentCompat extends android.support.v4.app.Fragment implements android.support.v7.preference.DialogPreference.TargetFragment android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener {
+    ctor public PreferenceFragmentCompat();
+    method public void addPreferencesFromResource(int);
+    method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+    method public final android.support.v7.widget.RecyclerView getListView();
+    method public android.support.v7.preference.PreferenceManager getPreferenceManager();
+    method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+    method protected android.support.v7.widget.RecyclerView.Adapter onCreateAdapter(android.support.v7.preference.PreferenceScreen);
+    method public android.support.v7.widget.RecyclerView.LayoutManager onCreateLayoutManager();
+    method public abstract void onCreatePreferences(android.os.Bundle, java.lang.String);
+    method public android.support.v7.widget.RecyclerView onCreateRecyclerView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle);
+    method public void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+    method public void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+    method public boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+    method public void scrollToPreference(java.lang.String);
+    method public void scrollToPreference(android.support.v7.preference.Preference);
+    method public void setDivider(android.graphics.drawable.Drawable);
+    method public void setDividerHeight(int);
+    method public void setPreferenceScreen(android.support.v7.preference.PreferenceScreen);
+    method public void setPreferencesFromResource(int, java.lang.String);
+    field public static final java.lang.String ARG_PREFERENCE_ROOT = "android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+  }
+
+  public static abstract interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
+    method public abstract boolean onPreferenceDisplayDialog(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+  }
+
+  public static abstract interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
+    method public abstract boolean onPreferenceStartFragment(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.Preference);
+  }
+
+  public static abstract interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
+    method public abstract boolean onPreferenceStartScreen(android.support.v7.preference.PreferenceFragmentCompat, android.support.v7.preference.PreferenceScreen);
+  }
+
+  public abstract class PreferenceGroup extends android.support.v7.preference.Preference {
+    ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
+    ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet);
+    method public void addItemFromInflater(android.support.v7.preference.Preference);
+    method public boolean addPreference(android.support.v7.preference.Preference);
+    method protected void dispatchRestoreInstanceState(android.os.Bundle);
+    method protected void dispatchSaveInstanceState(android.os.Bundle);
+    method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+    method public int getInitialExpandedChildrenCount();
+    method public android.support.v7.preference.Preference getPreference(int);
+    method public int getPreferenceCount();
+    method protected boolean isOnSameScreenAsChildren();
+    method public boolean isOrderingAsAdded();
+    method protected boolean onPrepareAddPreference(android.support.v7.preference.Preference);
+    method public void removeAll();
+    method public boolean removePreference(android.support.v7.preference.Preference);
+    method public void setInitialExpandedChildrenCount(int);
+    method public void setOrderingAsAdded(boolean);
+  }
+
+  public static abstract interface PreferenceGroup.PreferencePositionCallback {
+    method public abstract int getPreferenceAdapterPosition(java.lang.String);
+    method public abstract int getPreferenceAdapterPosition(android.support.v7.preference.Preference);
+  }
+
+  public class PreferenceManager {
+    method public android.support.v7.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
+    method public android.support.v7.preference.Preference findPreference(java.lang.CharSequence);
+    method public android.content.Context getContext();
+    method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+    method public android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener getOnDisplayPreferenceDialogListener();
+    method public android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener getOnNavigateToScreenListener();
+    method public android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener getOnPreferenceTreeClickListener();
+    method public android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback getPreferenceComparisonCallback();
+    method public android.support.v7.preference.PreferenceDataStore getPreferenceDataStore();
+    method public android.support.v7.preference.PreferenceScreen getPreferenceScreen();
+    method public android.content.SharedPreferences getSharedPreferences();
+    method public int getSharedPreferencesMode();
+    method public java.lang.String getSharedPreferencesName();
+    method public boolean isStorageDefault();
+    method public boolean isStorageDeviceProtected();
+    method public static void setDefaultValues(android.content.Context, int, boolean);
+    method public static void setDefaultValues(android.content.Context, java.lang.String, int, int, boolean);
+    method public void setOnDisplayPreferenceDialogListener(android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener);
+    method public void setOnNavigateToScreenListener(android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener);
+    method public void setOnPreferenceTreeClickListener(android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener);
+    method public void setPreferenceComparisonCallback(android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback);
+    method public void setPreferenceDataStore(android.support.v7.preference.PreferenceDataStore);
+    method public boolean setPreferences(android.support.v7.preference.PreferenceScreen);
+    method public void setSharedPreferencesMode(int);
+    method public void setSharedPreferencesName(java.lang.String);
+    method public void setStorageDefault();
+    method public void setStorageDeviceProtected();
+    method public void showDialog(android.support.v7.preference.Preference);
+    field public static final java.lang.String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+  }
+
+  public static abstract interface PreferenceManager.OnDisplayPreferenceDialogListener {
+    method public abstract void onDisplayPreferenceDialog(android.support.v7.preference.Preference);
+  }
+
+  public static abstract interface PreferenceManager.OnNavigateToScreenListener {
+    method public abstract void onNavigateToScreen(android.support.v7.preference.PreferenceScreen);
+  }
+
+  public static abstract interface PreferenceManager.OnPreferenceTreeClickListener {
+    method public abstract boolean onPreferenceTreeClick(android.support.v7.preference.Preference);
+  }
+
+  public static abstract class PreferenceManager.PreferenceComparisonCallback {
+    ctor public PreferenceManager.PreferenceComparisonCallback();
+    method public abstract boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+    method public abstract boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+  }
+
+  public static class PreferenceManager.SimplePreferenceComparisonCallback extends android.support.v7.preference.PreferenceManager.PreferenceComparisonCallback {
+    ctor public PreferenceManager.SimplePreferenceComparisonCallback();
+    method public boolean arePreferenceContentsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+    method public boolean arePreferenceItemsTheSame(android.support.v7.preference.Preference, android.support.v7.preference.Preference);
+  }
+
+  public final class PreferenceScreen extends android.support.v7.preference.PreferenceGroup {
+    method public void setShouldUseGeneratedIds(boolean);
+    method public boolean shouldUseGeneratedIds();
+  }
+
+  public class PreferenceViewHolder extends android.support.v7.widget.RecyclerView.ViewHolder {
+    method public android.view.View findViewById(int);
+    method public boolean isDividerAllowedAbove();
+    method public boolean isDividerAllowedBelow();
+    method public void setDividerAllowedAbove(boolean);
+    method public void setDividerAllowedBelow(boolean);
+  }
+
+  public class SeekBarPreference extends android.support.v7.preference.Preference {
+    ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public SeekBarPreference(android.content.Context, android.util.AttributeSet);
+    ctor public SeekBarPreference(android.content.Context);
+    method public int getMax();
+    method public int getMin();
+    method public final int getSeekBarIncrement();
+    method public int getValue();
+    method public boolean isAdjustable();
+    method public void setAdjustable(boolean);
+    method public final void setMax(int);
+    method public void setMin(int);
+    method public final void setSeekBarIncrement(int);
+    method public void setValue(int);
+  }
+
+  public class SwitchPreferenceCompat extends android.support.v7.preference.TwoStatePreference {
+    ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet, int);
+    ctor public SwitchPreferenceCompat(android.content.Context, android.util.AttributeSet);
+    ctor public SwitchPreferenceCompat(android.content.Context);
+    method public java.lang.CharSequence getSwitchTextOff();
+    method public java.lang.CharSequence getSwitchTextOn();
+    method public void setSwitchTextOff(java.lang.CharSequence);
+    method public void setSwitchTextOff(int);
+    method public void setSwitchTextOn(java.lang.CharSequence);
+    method public void setSwitchTextOn(int);
+  }
+
+  public abstract class TwoStatePreference extends android.support.v7.preference.Preference {
+    ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet);
+    ctor public TwoStatePreference(android.content.Context);
+    method public boolean getDisableDependentsState();
+    method public java.lang.CharSequence getSummaryOff();
+    method public java.lang.CharSequence getSummaryOn();
+    method public boolean isChecked();
+    method public void setChecked(boolean);
+    method public void setDisableDependentsState(boolean);
+    method public void setSummaryOff(java.lang.CharSequence);
+    method public void setSummaryOff(int);
+    method public void setSummaryOn(java.lang.CharSequence);
+    method public void setSummaryOn(int);
+    method protected void syncSummaryView(android.support.v7.preference.PreferenceViewHolder);
+    field protected boolean mChecked;
+  }
+
+}
+
diff --git a/v7/recyclerview/Android.mk b/v7/recyclerview/Android.mk
deleted file mode 100644
index a62c3cd..0000000
--- a/v7/recyclerview/Android.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (C) 2013 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-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-v7-recyclerview \
-#       android-support-compat \
-#       android-support-core-ui
-#
-# in their makefiles to include the resources and their dependencies in their package.
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_MODULE := android-support-v7-recyclerview
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-compat \
-    android-support-core-ui
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-LOCAL_EXPORT_PROGUARD_FLAG_FILES := proguard-rules.pro
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/v7/recyclerview/api/27.1.0.txt b/v7/recyclerview/api/27.1.0.txt
new file mode 100644
index 0000000..cdff0f0
--- /dev/null
+++ b/v7/recyclerview/api/27.1.0.txt
@@ -0,0 +1,1026 @@
+package android.support.v7.recyclerview.extensions {
+
+  public final class AsyncDifferConfig<T> {
+    method public java.util.concurrent.Executor getBackgroundThreadExecutor();
+    method public android.support.v7.util.DiffUtil.ItemCallback<T> getDiffCallback();
+  }
+
+  public static final class AsyncDifferConfig.Builder<T> {
+    ctor public AsyncDifferConfig.Builder(android.support.v7.util.DiffUtil.ItemCallback<T>);
+    method public android.support.v7.recyclerview.extensions.AsyncDifferConfig<T> build();
+    method public android.support.v7.recyclerview.extensions.AsyncDifferConfig.Builder<T> setBackgroundThreadExecutor(java.util.concurrent.Executor);
+  }
+
+  public class AsyncListDiffer<T> {
+    ctor public AsyncListDiffer(android.support.v7.widget.RecyclerView.Adapter, android.support.v7.util.DiffUtil.ItemCallback<T>);
+    ctor public AsyncListDiffer(android.support.v7.util.ListUpdateCallback, android.support.v7.recyclerview.extensions.AsyncDifferConfig<T>);
+    method public java.util.List<T> getCurrentList();
+    method public void submitList(java.util.List<T>);
+  }
+
+  public abstract class ListAdapter<T, VH extends android.support.v7.widget.RecyclerView.ViewHolder> extends android.support.v7.widget.RecyclerView.Adapter {
+    ctor protected ListAdapter(android.support.v7.util.DiffUtil.ItemCallback<T>);
+    ctor protected ListAdapter(android.support.v7.recyclerview.extensions.AsyncDifferConfig<T>);
+    method protected T getItem(int);
+    method public int getItemCount();
+    method public void submitList(java.util.List<T>);
+  }
+
+}
+
+package android.support.v7.util {
+
+  public final class AdapterListUpdateCallback implements android.support.v7.util.ListUpdateCallback {
+    ctor public AdapterListUpdateCallback(android.support.v7.widget.RecyclerView.Adapter);
+    method public void onChanged(int, int, java.lang.Object);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
+  }
+
+  public class AsyncListUtil<T> {
+    ctor public AsyncListUtil(java.lang.Class<T>, int, android.support.v7.util.AsyncListUtil.DataCallback<T>, android.support.v7.util.AsyncListUtil.ViewCallback);
+    method public T getItem(int);
+    method public int getItemCount();
+    method public void onRangeChanged();
+    method public void refresh();
+  }
+
+  public static abstract class AsyncListUtil.DataCallback<T> {
+    ctor public AsyncListUtil.DataCallback();
+    method public abstract void fillData(T[], int, int);
+    method public int getMaxCachedTiles();
+    method public void recycleData(T[], int);
+    method public abstract int refreshData();
+  }
+
+  public static abstract class AsyncListUtil.ViewCallback {
+    ctor public AsyncListUtil.ViewCallback();
+    method public void extendRangeInto(int[], int[], int);
+    method public abstract void getItemRangeInto(int[]);
+    method public abstract void onDataRefresh();
+    method public abstract void onItemLoaded(int);
+    field public static final int HINT_SCROLL_ASC = 2; // 0x2
+    field public static final int HINT_SCROLL_DESC = 1; // 0x1
+    field public static final int HINT_SCROLL_NONE = 0; // 0x0
+  }
+
+  public class BatchingListUpdateCallback implements android.support.v7.util.ListUpdateCallback {
+    ctor public BatchingListUpdateCallback(android.support.v7.util.ListUpdateCallback);
+    method public void dispatchLastEvent();
+    method public void onChanged(int, int, java.lang.Object);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
+  }
+
+  public class DiffUtil {
+    method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback);
+    method public static android.support.v7.util.DiffUtil.DiffResult calculateDiff(android.support.v7.util.DiffUtil.Callback, boolean);
+  }
+
+  public static abstract class DiffUtil.Callback {
+    ctor public DiffUtil.Callback();
+    method public abstract boolean areContentsTheSame(int, int);
+    method public abstract boolean areItemsTheSame(int, int);
+    method public java.lang.Object getChangePayload(int, int);
+    method public abstract int getNewListSize();
+    method public abstract int getOldListSize();
+  }
+
+  public static class DiffUtil.DiffResult {
+    method public void dispatchUpdatesTo(android.support.v7.widget.RecyclerView.Adapter);
+    method public void dispatchUpdatesTo(android.support.v7.util.ListUpdateCallback);
+  }
+
+  public static abstract class DiffUtil.ItemCallback<T> {
+    ctor public DiffUtil.ItemCallback();
+    method public abstract boolean areContentsTheSame(T, T);
+    method public abstract boolean areItemsTheSame(T, T);
+    method public java.lang.Object getChangePayload(T, T);
+  }
+
+  public abstract interface ListUpdateCallback {
+    method public abstract void onChanged(int, int, java.lang.Object);
+    method public abstract void onInserted(int, int);
+    method public abstract void onMoved(int, int);
+    method public abstract void onRemoved(int, int);
+  }
+
+  public class SortedList<T> {
+    ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>);
+    ctor public SortedList(java.lang.Class<T>, android.support.v7.util.SortedList.Callback<T>, int);
+    method public int add(T);
+    method public void addAll(T[], boolean);
+    method public void addAll(T...);
+    method public void addAll(java.util.Collection<T>);
+    method public void beginBatchedUpdates();
+    method public void clear();
+    method public void endBatchedUpdates();
+    method public T get(int) throws java.lang.IndexOutOfBoundsException;
+    method public int indexOf(T);
+    method public void recalculatePositionOfItemAt(int);
+    method public boolean remove(T);
+    method public T removeItemAt(int);
+    method public void replaceAll(T[], boolean);
+    method public void replaceAll(T...);
+    method public void replaceAll(java.util.Collection<T>);
+    method public int size();
+    method public void updateItemAt(int, T);
+    field public static final int INVALID_POSITION = -1; // 0xffffffff
+  }
+
+  public static class SortedList.BatchedCallback<T2> extends android.support.v7.util.SortedList.Callback {
+    ctor public SortedList.BatchedCallback(android.support.v7.util.SortedList.Callback<T2>);
+    method public boolean areContentsTheSame(T2, T2);
+    method public boolean areItemsTheSame(T2, T2);
+    method public int compare(T2, T2);
+    method public void dispatchLastEvent();
+    method public void onChanged(int, int);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
+  }
+
+  public static abstract class SortedList.Callback<T2> implements java.util.Comparator android.support.v7.util.ListUpdateCallback {
+    ctor public SortedList.Callback();
+    method public abstract boolean areContentsTheSame(T2, T2);
+    method public abstract boolean areItemsTheSame(T2, T2);
+    method public abstract int compare(T2, T2);
+    method public java.lang.Object getChangePayload(T2, T2);
+    method public abstract void onChanged(int, int);
+    method public void onChanged(int, int, java.lang.Object);
+  }
+
+}
+
+package android.support.v7.widget {
+
+  public class DefaultItemAnimator extends android.support.v7.widget.SimpleItemAnimator {
+    ctor public DefaultItemAnimator();
+    method public boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+    method public boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+    method public boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void endAnimations();
+    method public boolean isRunning();
+    method public void runPendingAnimations();
+  }
+
+  public class DividerItemDecoration extends android.support.v7.widget.RecyclerView.ItemDecoration {
+    ctor public DividerItemDecoration(android.content.Context, int);
+    method public void setDrawable(android.graphics.drawable.Drawable);
+    method public void setOrientation(int);
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public class GridLayoutManager extends android.support.v7.widget.LinearLayoutManager {
+    ctor public GridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public GridLayoutManager(android.content.Context, int);
+    ctor public GridLayoutManager(android.content.Context, int, int, boolean);
+    method public int getSpanCount();
+    method public android.support.v7.widget.GridLayoutManager.SpanSizeLookup getSpanSizeLookup();
+    method public void setSpanCount(int);
+    method public void setSpanSizeLookup(android.support.v7.widget.GridLayoutManager.SpanSizeLookup);
+    field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+  }
+
+  public static final class GridLayoutManager.DefaultSpanSizeLookup extends android.support.v7.widget.GridLayoutManager.SpanSizeLookup {
+    ctor public GridLayoutManager.DefaultSpanSizeLookup();
+    method public int getSpanSize(int);
+  }
+
+  public static class GridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+    ctor public GridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayoutManager.LayoutParams(int, int);
+    ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public GridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+    method public int getSpanIndex();
+    method public int getSpanSize();
+    field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+  }
+
+  public static abstract class GridLayoutManager.SpanSizeLookup {
+    ctor public GridLayoutManager.SpanSizeLookup();
+    method public int getSpanGroupIndex(int, int);
+    method public int getSpanIndex(int, int);
+    method public abstract int getSpanSize(int);
+    method public void invalidateSpanIndexCache();
+    method public boolean isSpanIndexCacheEnabled();
+    method public void setSpanIndexCacheEnabled(boolean);
+  }
+
+  public class LinearLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.helper.ItemTouchHelper.ViewDropHandler android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+    ctor public LinearLayoutManager(android.content.Context);
+    ctor public LinearLayoutManager(android.content.Context, int, boolean);
+    ctor public LinearLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.graphics.PointF computeScrollVectorForPosition(int);
+    method public int findFirstCompletelyVisibleItemPosition();
+    method public int findFirstVisibleItemPosition();
+    method public int findLastCompletelyVisibleItemPosition();
+    method public int findLastVisibleItemPosition();
+    method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+    method protected int getExtraLayoutSpace(android.support.v7.widget.RecyclerView.State);
+    method public int getInitialPrefetchItemCount();
+    method public int getOrientation();
+    method public boolean getRecycleChildrenOnDetach();
+    method public boolean getReverseLayout();
+    method public boolean getStackFromEnd();
+    method protected boolean isLayoutRTL();
+    method public boolean isSmoothScrollbarEnabled();
+    method public void prepareForDrop(android.view.View, android.view.View, int, int);
+    method public void scrollToPositionWithOffset(int, int);
+    method public void setInitialPrefetchItemCount(int);
+    method public void setOrientation(int);
+    method public void setRecycleChildrenOnDetach(boolean);
+    method public void setReverseLayout(boolean);
+    method public void setSmoothScrollbarEnabled(boolean);
+    method public void setStackFromEnd(boolean);
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int INVALID_OFFSET = -2147483648; // 0x80000000
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  protected static class LinearLayoutManager.LayoutChunkResult {
+    ctor protected LinearLayoutManager.LayoutChunkResult();
+    field public int mConsumed;
+    field public boolean mFinished;
+    field public boolean mFocusable;
+    field public boolean mIgnoreConsumed;
+  }
+
+  public class LinearSmoothScroller extends android.support.v7.widget.RecyclerView.SmoothScroller {
+    ctor public LinearSmoothScroller(android.content.Context);
+    method public int calculateDtToFit(int, int, int, int, int);
+    method public int calculateDxToMakeVisible(android.view.View, int);
+    method public int calculateDyToMakeVisible(android.view.View, int);
+    method protected float calculateSpeedPerPixel(android.util.DisplayMetrics);
+    method protected int calculateTimeForDeceleration(int);
+    method protected int calculateTimeForScrolling(int);
+    method public android.graphics.PointF computeScrollVectorForPosition(int);
+    method protected int getHorizontalSnapPreference();
+    method protected int getVerticalSnapPreference();
+    method protected void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+    method protected void onStart();
+    method protected void onStop();
+    method protected void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+    method protected void updateActionForInterimTarget(android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+    field public static final int SNAP_TO_ANY = 0; // 0x0
+    field public static final int SNAP_TO_END = 1; // 0x1
+    field public static final int SNAP_TO_START = -1; // 0xffffffff
+    field protected final android.view.animation.DecelerateInterpolator mDecelerateInterpolator;
+    field protected int mInterimTargetDx;
+    field protected int mInterimTargetDy;
+    field protected final android.view.animation.LinearInterpolator mLinearInterpolator;
+    field protected android.graphics.PointF mTargetVector;
+  }
+
+  public class LinearSnapHelper extends android.support.v7.widget.SnapHelper {
+    ctor public LinearSnapHelper();
+    method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+    method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+  }
+
+  public abstract class OrientationHelper {
+    method public static android.support.v7.widget.OrientationHelper createHorizontalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public static android.support.v7.widget.OrientationHelper createOrientationHelper(android.support.v7.widget.RecyclerView.LayoutManager, int);
+    method public static android.support.v7.widget.OrientationHelper createVerticalHelper(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public abstract int getDecoratedEnd(android.view.View);
+    method public abstract int getDecoratedMeasurement(android.view.View);
+    method public abstract int getDecoratedMeasurementInOther(android.view.View);
+    method public abstract int getDecoratedStart(android.view.View);
+    method public abstract int getEnd();
+    method public abstract int getEndAfterPadding();
+    method public abstract int getEndPadding();
+    method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+    method public abstract int getMode();
+    method public abstract int getModeInOther();
+    method public abstract int getStartAfterPadding();
+    method public abstract int getTotalSpace();
+    method public int getTotalSpaceChange();
+    method public abstract int getTransformedEndWithDecoration(android.view.View);
+    method public abstract int getTransformedStartWithDecoration(android.view.View);
+    method public abstract void offsetChild(android.view.View, int);
+    method public abstract void offsetChildren(int);
+    method public void onLayoutComplete();
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int VERTICAL = 1; // 0x1
+    field protected final android.support.v7.widget.RecyclerView.LayoutManager mLayoutManager;
+  }
+
+  public class PagerSnapHelper extends android.support.v7.widget.SnapHelper {
+    ctor public PagerSnapHelper();
+    method public int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+    method protected android.support.v7.widget.LinearSmoothScroller createSnapScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+  }
+
+  public class RecyclerView extends android.view.ViewGroup implements android.support.v4.view.NestedScrollingChild2 android.support.v4.view.ScrollingView {
+    ctor public RecyclerView(android.content.Context);
+    ctor public RecyclerView(android.content.Context, android.util.AttributeSet);
+    ctor public RecyclerView(android.content.Context, android.util.AttributeSet, int);
+    method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration, int);
+    method public void addItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+    method public void addOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+    method public void addOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+    method public void addOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+    method public void clearOnChildAttachStateChangeListeners();
+    method public void clearOnScrollListeners();
+    method public int computeHorizontalScrollExtent();
+    method public int computeHorizontalScrollOffset();
+    method public int computeHorizontalScrollRange();
+    method public int computeVerticalScrollExtent();
+    method public int computeVerticalScrollOffset();
+    method public int computeVerticalScrollRange();
+    method public boolean dispatchNestedPreScroll(int, int, int[], int[], int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[], int);
+    method public boolean drawChild(android.graphics.Canvas, android.view.View, long);
+    method public android.view.View findChildViewUnder(float, float);
+    method public android.view.View findContainingItemView(android.view.View);
+    method public android.support.v7.widget.RecyclerView.ViewHolder findContainingViewHolder(android.view.View);
+    method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForAdapterPosition(int);
+    method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForItemId(long);
+    method public android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForLayoutPosition(int);
+    method public deprecated android.support.v7.widget.RecyclerView.ViewHolder findViewHolderForPosition(int);
+    method public boolean fling(int, int);
+    method public android.support.v7.widget.RecyclerView.Adapter getAdapter();
+    method public int getChildAdapterPosition(android.view.View);
+    method public long getChildItemId(android.view.View);
+    method public int getChildLayoutPosition(android.view.View);
+    method public deprecated int getChildPosition(android.view.View);
+    method public android.support.v7.widget.RecyclerView.ViewHolder getChildViewHolder(android.view.View);
+    method public android.support.v7.widget.RecyclerViewAccessibilityDelegate getCompatAccessibilityDelegate();
+    method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+    method public android.support.v7.widget.RecyclerView.EdgeEffectFactory getEdgeEffectFactory();
+    method public android.support.v7.widget.RecyclerView.ItemAnimator getItemAnimator();
+    method public android.support.v7.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+    method public int getItemDecorationCount();
+    method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+    method public int getMaxFlingVelocity();
+    method public int getMinFlingVelocity();
+    method public android.support.v7.widget.RecyclerView.OnFlingListener getOnFlingListener();
+    method public boolean getPreserveFocusAfterLayout();
+    method public android.support.v7.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+    method public int getScrollState();
+    method public boolean hasFixedSize();
+    method public boolean hasNestedScrollingParent(int);
+    method public boolean hasPendingAdapterUpdates();
+    method public void invalidateItemDecorations();
+    method public boolean isAnimating();
+    method public boolean isComputingLayout();
+    method public boolean isLayoutFrozen();
+    method public void offsetChildrenHorizontal(int);
+    method public void offsetChildrenVertical(int);
+    method public void onChildAttachedToWindow(android.view.View);
+    method public void onChildDetachedFromWindow(android.view.View);
+    method public void onDraw(android.graphics.Canvas);
+    method public void onScrollStateChanged(int);
+    method public void onScrolled(int, int);
+    method public void removeItemDecoration(android.support.v7.widget.RecyclerView.ItemDecoration);
+    method public void removeItemDecorationAt(int);
+    method public void removeOnChildAttachStateChangeListener(android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener);
+    method public void removeOnItemTouchListener(android.support.v7.widget.RecyclerView.OnItemTouchListener);
+    method public void removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+    method public void scrollToPosition(int);
+    method public void setAccessibilityDelegateCompat(android.support.v7.widget.RecyclerViewAccessibilityDelegate);
+    method public void setAdapter(android.support.v7.widget.RecyclerView.Adapter);
+    method public void setChildDrawingOrderCallback(android.support.v7.widget.RecyclerView.ChildDrawingOrderCallback);
+    method public void setEdgeEffectFactory(android.support.v7.widget.RecyclerView.EdgeEffectFactory);
+    method public void setHasFixedSize(boolean);
+    method public void setItemAnimator(android.support.v7.widget.RecyclerView.ItemAnimator);
+    method public void setItemViewCacheSize(int);
+    method public void setLayoutFrozen(boolean);
+    method public void setLayoutManager(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public void setOnFlingListener(android.support.v7.widget.RecyclerView.OnFlingListener);
+    method public deprecated void setOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener);
+    method public void setPreserveFocusAfterLayout(boolean);
+    method public void setRecycledViewPool(android.support.v7.widget.RecyclerView.RecycledViewPool);
+    method public void setRecyclerListener(android.support.v7.widget.RecyclerView.RecyclerListener);
+    method public void setScrollingTouchSlop(int);
+    method public void setViewCacheExtension(android.support.v7.widget.RecyclerView.ViewCacheExtension);
+    method public void smoothScrollBy(int, int);
+    method public void smoothScrollBy(int, int, android.view.animation.Interpolator);
+    method public void smoothScrollToPosition(int);
+    method public boolean startNestedScroll(int, int);
+    method public void stopNestedScroll(int);
+    method public void stopScroll();
+    method public void swapAdapter(android.support.v7.widget.RecyclerView.Adapter, boolean);
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int INVALID_TYPE = -1; // 0xffffffff
+    field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+    field public static final int NO_POSITION = -1; // 0xffffffff
+    field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+    field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+    field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+    field public static final int TOUCH_SLOP_DEFAULT = 0; // 0x0
+    field public static final int TOUCH_SLOP_PAGING = 1; // 0x1
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public static abstract class RecyclerView.Adapter<VH extends android.support.v7.widget.RecyclerView.ViewHolder> {
+    ctor public RecyclerView.Adapter();
+    method public final void bindViewHolder(VH, int);
+    method public final VH createViewHolder(android.view.ViewGroup, int);
+    method public abstract int getItemCount();
+    method public long getItemId(int);
+    method public int getItemViewType(int);
+    method public final boolean hasObservers();
+    method public final boolean hasStableIds();
+    method public final void notifyDataSetChanged();
+    method public final void notifyItemChanged(int);
+    method public final void notifyItemChanged(int, java.lang.Object);
+    method public final void notifyItemInserted(int);
+    method public final void notifyItemMoved(int, int);
+    method public final void notifyItemRangeChanged(int, int);
+    method public final void notifyItemRangeChanged(int, int, java.lang.Object);
+    method public final void notifyItemRangeInserted(int, int);
+    method public final void notifyItemRangeRemoved(int, int);
+    method public final void notifyItemRemoved(int);
+    method public void onAttachedToRecyclerView(android.support.v7.widget.RecyclerView);
+    method public abstract void onBindViewHolder(VH, int);
+    method public void onBindViewHolder(VH, int, java.util.List<java.lang.Object>);
+    method public abstract VH onCreateViewHolder(android.view.ViewGroup, int);
+    method public void onDetachedFromRecyclerView(android.support.v7.widget.RecyclerView);
+    method public boolean onFailedToRecycleView(VH);
+    method public void onViewAttachedToWindow(VH);
+    method public void onViewDetachedFromWindow(VH);
+    method public void onViewRecycled(VH);
+    method public void registerAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+    method public void setHasStableIds(boolean);
+    method public void unregisterAdapterDataObserver(android.support.v7.widget.RecyclerView.AdapterDataObserver);
+  }
+
+  public static abstract class RecyclerView.AdapterDataObserver {
+    ctor public RecyclerView.AdapterDataObserver();
+    method public void onChanged();
+    method public void onItemRangeChanged(int, int);
+    method public void onItemRangeChanged(int, int, java.lang.Object);
+    method public void onItemRangeInserted(int, int);
+    method public void onItemRangeMoved(int, int, int);
+    method public void onItemRangeRemoved(int, int);
+  }
+
+  public static abstract interface RecyclerView.ChildDrawingOrderCallback {
+    method public abstract int onGetChildDrawingOrder(int, int);
+  }
+
+  public static class RecyclerView.EdgeEffectFactory {
+    ctor public RecyclerView.EdgeEffectFactory();
+    method protected android.widget.EdgeEffect createEdgeEffect(android.support.v7.widget.RecyclerView, int);
+    field public static final int DIRECTION_BOTTOM = 3; // 0x3
+    field public static final int DIRECTION_LEFT = 0; // 0x0
+    field public static final int DIRECTION_RIGHT = 2; // 0x2
+    field public static final int DIRECTION_TOP = 1; // 0x1
+  }
+
+  public static abstract class RecyclerView.EdgeEffectFactory.EdgeDirection implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract class RecyclerView.ItemAnimator {
+    ctor public RecyclerView.ItemAnimator();
+    method public abstract boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public boolean canReuseUpdatedViewHolder(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object>);
+    method public final void dispatchAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchAnimationsFinished();
+    method public abstract void endAnimation(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public abstract void endAnimations();
+    method public long getAddDuration();
+    method public long getChangeDuration();
+    method public long getMoveDuration();
+    method public long getRemoveDuration();
+    method public abstract boolean isRunning();
+    method public final boolean isRunning(android.support.v7.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener);
+    method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+    method public void onAnimationFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void onAnimationStarted(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.ViewHolder, int, java.util.List<java.lang.Object>);
+    method public abstract void runPendingAnimations();
+    method public void setAddDuration(long);
+    method public void setChangeDuration(long);
+    method public void setMoveDuration(long);
+    method public void setRemoveDuration(long);
+    field public static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096; // 0x1000
+    field public static final int FLAG_CHANGED = 2; // 0x2
+    field public static final int FLAG_INVALIDATED = 4; // 0x4
+    field public static final int FLAG_MOVED = 2048; // 0x800
+    field public static final int FLAG_REMOVED = 8; // 0x8
+  }
+
+  public static abstract class RecyclerView.ItemAnimator.AdapterChanges implements java.lang.annotation.Annotation {
+  }
+
+  public static abstract interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+    method public abstract void onAnimationsFinished();
+  }
+
+  public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+    ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+    method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(android.support.v7.widget.RecyclerView.ViewHolder, int);
+    field public int bottom;
+    field public int changeFlags;
+    field public int left;
+    field public int right;
+    field public int top;
+  }
+
+  public static abstract class RecyclerView.ItemDecoration {
+    ctor public RecyclerView.ItemDecoration();
+    method public deprecated void getItemOffsets(android.graphics.Rect, int, android.support.v7.widget.RecyclerView);
+    method public void getItemOffsets(android.graphics.Rect, android.view.View, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+    method public void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+    method public deprecated void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+    method public void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State);
+    method public deprecated void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView);
+  }
+
+  public static abstract class RecyclerView.LayoutManager {
+    ctor public RecyclerView.LayoutManager();
+    method public void addDisappearingView(android.view.View);
+    method public void addDisappearingView(android.view.View, int);
+    method public void addView(android.view.View);
+    method public void addView(android.view.View, int);
+    method public void assertInLayoutOrScroll(java.lang.String);
+    method public void assertNotInLayoutOrScroll(java.lang.String);
+    method public void attachView(android.view.View, int, android.support.v7.widget.RecyclerView.LayoutParams);
+    method public void attachView(android.view.View, int);
+    method public void attachView(android.view.View);
+    method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
+    method public boolean canScrollHorizontally();
+    method public boolean canScrollVertically();
+    method public boolean checkLayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+    method public static int chooseSize(int, int, int);
+    method public void collectAdjacentPrefetchPositions(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+    method public void collectInitialPrefetchPositions(int, android.support.v7.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry);
+    method public int computeHorizontalScrollExtent(android.support.v7.widget.RecyclerView.State);
+    method public int computeHorizontalScrollOffset(android.support.v7.widget.RecyclerView.State);
+    method public int computeHorizontalScrollRange(android.support.v7.widget.RecyclerView.State);
+    method public int computeVerticalScrollExtent(android.support.v7.widget.RecyclerView.State);
+    method public int computeVerticalScrollOffset(android.support.v7.widget.RecyclerView.State);
+    method public int computeVerticalScrollRange(android.support.v7.widget.RecyclerView.State);
+    method public void detachAndScrapAttachedViews(android.support.v7.widget.RecyclerView.Recycler);
+    method public void detachAndScrapView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+    method public void detachAndScrapViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+    method public void detachView(android.view.View);
+    method public void detachViewAt(int);
+    method public void endAnimation(android.view.View);
+    method public android.view.View findContainingItemView(android.view.View);
+    method public android.view.View findViewByPosition(int);
+    method public abstract android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+    method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public android.support.v7.widget.RecyclerView.LayoutParams generateLayoutParams(android.content.Context, android.util.AttributeSet);
+    method public int getBaseline();
+    method public int getBottomDecorationHeight(android.view.View);
+    method public android.view.View getChildAt(int);
+    method public int getChildCount();
+    method public static deprecated int getChildMeasureSpec(int, int, int, boolean);
+    method public static int getChildMeasureSpec(int, int, int, int, boolean);
+    method public boolean getClipToPadding();
+    method public int getColumnCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public int getDecoratedBottom(android.view.View);
+    method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+    method public int getDecoratedLeft(android.view.View);
+    method public int getDecoratedMeasuredHeight(android.view.View);
+    method public int getDecoratedMeasuredWidth(android.view.View);
+    method public int getDecoratedRight(android.view.View);
+    method public int getDecoratedTop(android.view.View);
+    method public android.view.View getFocusedChild();
+    method public int getHeight();
+    method public int getHeightMode();
+    method public int getItemCount();
+    method public int getItemViewType(android.view.View);
+    method public int getLayoutDirection();
+    method public int getLeftDecorationWidth(android.view.View);
+    method public int getMinimumHeight();
+    method public int getMinimumWidth();
+    method public int getPaddingBottom();
+    method public int getPaddingEnd();
+    method public int getPaddingLeft();
+    method public int getPaddingRight();
+    method public int getPaddingStart();
+    method public int getPaddingTop();
+    method public int getPosition(android.view.View);
+    method public static android.support.v7.widget.RecyclerView.LayoutManager.Properties getProperties(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getRightDecorationWidth(android.view.View);
+    method public int getRowCountForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public int getSelectionModeForAccessibility(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public int getTopDecorationHeight(android.view.View);
+    method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+    method public int getWidth();
+    method public int getWidthMode();
+    method public boolean hasFocus();
+    method public void ignoreView(android.view.View);
+    method public boolean isAttachedToWindow();
+    method public boolean isAutoMeasureEnabled();
+    method public boolean isFocused();
+    method public final boolean isItemPrefetchEnabled();
+    method public boolean isLayoutHierarchical(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public boolean isMeasurementCacheEnabled();
+    method public boolean isSmoothScrolling();
+    method public boolean isViewPartiallyVisible(android.view.View, boolean, boolean);
+    method public void layoutDecorated(android.view.View, int, int, int, int);
+    method public void layoutDecoratedWithMargins(android.view.View, int, int, int, int);
+    method public void measureChild(android.view.View, int, int);
+    method public void measureChildWithMargins(android.view.View, int, int);
+    method public void moveView(int, int);
+    method public void offsetChildrenHorizontal(int);
+    method public void offsetChildrenVertical(int);
+    method public void onAdapterChanged(android.support.v7.widget.RecyclerView.Adapter, android.support.v7.widget.RecyclerView.Adapter);
+    method public boolean onAddFocusables(android.support.v7.widget.RecyclerView, java.util.ArrayList<android.view.View>, int, int);
+    method public void onAttachedToWindow(android.support.v7.widget.RecyclerView);
+    method public deprecated void onDetachedFromWindow(android.support.v7.widget.RecyclerView);
+    method public void onDetachedFromWindow(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.Recycler);
+    method public android.view.View onFocusSearchFailed(android.view.View, int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityEvent(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityNodeInfo(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method public void onInitializeAccessibilityNodeInfoForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, android.support.v4.view.accessibility.AccessibilityNodeInfoCompat);
+    method public android.view.View onInterceptFocusSearch(android.view.View, int);
+    method public void onItemsAdded(android.support.v7.widget.RecyclerView, int, int);
+    method public void onItemsChanged(android.support.v7.widget.RecyclerView);
+    method public void onItemsMoved(android.support.v7.widget.RecyclerView, int, int, int);
+    method public void onItemsRemoved(android.support.v7.widget.RecyclerView, int, int);
+    method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int);
+    method public void onItemsUpdated(android.support.v7.widget.RecyclerView, int, int, java.lang.Object);
+    method public void onLayoutChildren(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public void onLayoutCompleted(android.support.v7.widget.RecyclerView.State);
+    method public void onMeasure(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, int);
+    method public deprecated boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.view.View, android.view.View);
+    method public boolean onRequestChildFocus(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, android.view.View, android.view.View);
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void onScrollStateChanged(int);
+    method public boolean performAccessibilityAction(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, int, android.os.Bundle);
+    method public boolean performAccessibilityActionForItem(android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State, android.view.View, int, android.os.Bundle);
+    method public void postOnAnimation(java.lang.Runnable);
+    method public void removeAllViews();
+    method public void removeAndRecycleAllViews(android.support.v7.widget.RecyclerView.Recycler);
+    method public void removeAndRecycleView(android.view.View, android.support.v7.widget.RecyclerView.Recycler);
+    method public void removeAndRecycleViewAt(int, android.support.v7.widget.RecyclerView.Recycler);
+    method public boolean removeCallbacks(java.lang.Runnable);
+    method public void removeDetachedView(android.view.View);
+    method public void removeView(android.view.View);
+    method public void removeViewAt(int);
+    method public boolean requestChildRectangleOnScreen(android.support.v7.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+    method public boolean requestChildRectangleOnScreen(android.support.v7.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
+    method public void requestLayout();
+    method public void requestSimpleAnimationsInNextLayout();
+    method public int scrollHorizontallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public void scrollToPosition(int);
+    method public int scrollVerticallyBy(int, android.support.v7.widget.RecyclerView.Recycler, android.support.v7.widget.RecyclerView.State);
+    method public deprecated void setAutoMeasureEnabled(boolean);
+    method public final void setItemPrefetchEnabled(boolean);
+    method public void setMeasuredDimension(android.graphics.Rect, int, int);
+    method public void setMeasuredDimension(int, int);
+    method public void setMeasurementCacheEnabled(boolean);
+    method public void smoothScrollToPosition(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.State, int);
+    method public void startSmoothScroll(android.support.v7.widget.RecyclerView.SmoothScroller);
+    method public void stopIgnoringView(android.view.View);
+    method public boolean supportsPredictiveItemAnimations();
+  }
+
+  public static abstract interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+    method public abstract void addPosition(int, int);
+  }
+
+  public static class RecyclerView.LayoutManager.Properties {
+    ctor public RecyclerView.LayoutManager.Properties();
+    field public int orientation;
+    field public boolean reverseLayout;
+    field public int spanCount;
+    field public boolean stackFromEnd;
+  }
+
+  public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public RecyclerView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public RecyclerView.LayoutParams(int, int);
+    ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public RecyclerView.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+    method public int getViewAdapterPosition();
+    method public int getViewLayoutPosition();
+    method public deprecated int getViewPosition();
+    method public boolean isItemChanged();
+    method public boolean isItemRemoved();
+    method public boolean isViewInvalid();
+    method public boolean viewNeedsUpdate();
+  }
+
+  public static abstract interface RecyclerView.OnChildAttachStateChangeListener {
+    method public abstract void onChildViewAttachedToWindow(android.view.View);
+    method public abstract void onChildViewDetachedFromWindow(android.view.View);
+  }
+
+  public static abstract class RecyclerView.OnFlingListener {
+    ctor public RecyclerView.OnFlingListener();
+    method public abstract boolean onFling(int, int);
+  }
+
+  public static abstract interface RecyclerView.OnItemTouchListener {
+    method public abstract boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+    method public abstract void onRequestDisallowInterceptTouchEvent(boolean);
+    method public abstract void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+  }
+
+  public static abstract class RecyclerView.OnScrollListener {
+    ctor public RecyclerView.OnScrollListener();
+    method public void onScrollStateChanged(android.support.v7.widget.RecyclerView, int);
+    method public void onScrolled(android.support.v7.widget.RecyclerView, int, int);
+  }
+
+  public static class RecyclerView.RecycledViewPool {
+    ctor public RecyclerView.RecycledViewPool();
+    method public void clear();
+    method public android.support.v7.widget.RecyclerView.ViewHolder getRecycledView(int);
+    method public int getRecycledViewCount(int);
+    method public void putRecycledView(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void setMaxRecycledViews(int, int);
+  }
+
+  public final class RecyclerView.Recycler {
+    ctor public RecyclerView.Recycler();
+    method public void bindViewToPosition(android.view.View, int);
+    method public void clear();
+    method public int convertPreLayoutPositionToPostLayout(int);
+    method public java.util.List<android.support.v7.widget.RecyclerView.ViewHolder> getScrapList();
+    method public android.view.View getViewForPosition(int);
+    method public void recycleView(android.view.View);
+    method public void setViewCacheSize(int);
+  }
+
+  public static abstract interface RecyclerView.RecyclerListener {
+    method public abstract void onViewRecycled(android.support.v7.widget.RecyclerView.ViewHolder);
+  }
+
+  public static class RecyclerView.SimpleOnItemTouchListener implements android.support.v7.widget.RecyclerView.OnItemTouchListener {
+    ctor public RecyclerView.SimpleOnItemTouchListener();
+    method public boolean onInterceptTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+    method public void onRequestDisallowInterceptTouchEvent(boolean);
+    method public void onTouchEvent(android.support.v7.widget.RecyclerView, android.view.MotionEvent);
+  }
+
+  public static abstract class RecyclerView.SmoothScroller {
+    ctor public RecyclerView.SmoothScroller();
+    method public android.view.View findViewByPosition(int);
+    method public int getChildCount();
+    method public int getChildPosition(android.view.View);
+    method public android.support.v7.widget.RecyclerView.LayoutManager getLayoutManager();
+    method public int getTargetPosition();
+    method public deprecated void instantScrollToPosition(int);
+    method public boolean isPendingInitialRun();
+    method public boolean isRunning();
+    method protected void normalize(android.graphics.PointF);
+    method protected void onChildAttachedToWindow(android.view.View);
+    method protected abstract void onSeekTargetStep(int, int, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+    method protected abstract void onStart();
+    method protected abstract void onStop();
+    method protected abstract void onTargetFound(android.view.View, android.support.v7.widget.RecyclerView.State, android.support.v7.widget.RecyclerView.SmoothScroller.Action);
+    method public void setTargetPosition(int);
+    method protected final void stop();
+  }
+
+  public static class RecyclerView.SmoothScroller.Action {
+    ctor public RecyclerView.SmoothScroller.Action(int, int);
+    ctor public RecyclerView.SmoothScroller.Action(int, int, int);
+    ctor public RecyclerView.SmoothScroller.Action(int, int, int, android.view.animation.Interpolator);
+    method public int getDuration();
+    method public int getDx();
+    method public int getDy();
+    method public android.view.animation.Interpolator getInterpolator();
+    method public void jumpTo(int);
+    method public void setDuration(int);
+    method public void setDx(int);
+    method public void setDy(int);
+    method public void setInterpolator(android.view.animation.Interpolator);
+    method public void update(int, int, int, android.view.animation.Interpolator);
+    field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+  }
+
+  public static abstract interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+    method public abstract android.graphics.PointF computeScrollVectorForPosition(int);
+  }
+
+  public static class RecyclerView.State {
+    ctor public RecyclerView.State();
+    method public boolean didStructureChange();
+    method public <T> T get(int);
+    method public int getItemCount();
+    method public int getRemainingScrollHorizontal();
+    method public int getRemainingScrollVertical();
+    method public int getTargetScrollPosition();
+    method public boolean hasTargetScrollPosition();
+    method public boolean isMeasuring();
+    method public boolean isPreLayout();
+    method public void put(int, java.lang.Object);
+    method public void remove(int);
+    method public boolean willRunPredictiveAnimations();
+    method public boolean willRunSimpleAnimations();
+  }
+
+  public static abstract class RecyclerView.ViewCacheExtension {
+    ctor public RecyclerView.ViewCacheExtension();
+    method public abstract android.view.View getViewForPositionAndType(android.support.v7.widget.RecyclerView.Recycler, int, int);
+  }
+
+  public static abstract class RecyclerView.ViewHolder {
+    ctor public RecyclerView.ViewHolder(android.view.View);
+    method public final int getAdapterPosition();
+    method public final long getItemId();
+    method public final int getItemViewType();
+    method public final int getLayoutPosition();
+    method public final int getOldPosition();
+    method public final deprecated int getPosition();
+    method public final boolean isRecyclable();
+    method public final void setIsRecyclable(boolean);
+    field public final android.view.View itemView;
+  }
+
+  public class RecyclerViewAccessibilityDelegate extends android.support.v4.view.AccessibilityDelegateCompat {
+    ctor public RecyclerViewAccessibilityDelegate(android.support.v7.widget.RecyclerView);
+    method public android.support.v4.view.AccessibilityDelegateCompat getItemDelegate();
+  }
+
+  public static class RecyclerViewAccessibilityDelegate.ItemDelegate extends android.support.v4.view.AccessibilityDelegateCompat {
+    ctor public RecyclerViewAccessibilityDelegate.ItemDelegate(android.support.v7.widget.RecyclerViewAccessibilityDelegate);
+  }
+
+  public abstract class SimpleItemAnimator extends android.support.v7.widget.RecyclerView.ItemAnimator {
+    ctor public SimpleItemAnimator();
+    method public abstract boolean animateAdd(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public boolean animateAppearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateChange(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+    method public boolean animateDisappearance(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateMove(android.support.v7.widget.RecyclerView.ViewHolder, int, int, int, int);
+    method public boolean animatePersistence(android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo, android.support.v7.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateRemove(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+    method public final void dispatchChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+    method public final void dispatchMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public final void dispatchRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public boolean getSupportsChangeAnimations();
+    method public void onAddFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void onAddStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void onChangeFinished(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+    method public void onChangeStarting(android.support.v7.widget.RecyclerView.ViewHolder, boolean);
+    method public void onMoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void onMoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void onRemoveFinished(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void onRemoveStarting(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void setSupportsChangeAnimations(boolean);
+  }
+
+  public abstract class SnapHelper extends android.support.v7.widget.RecyclerView.OnFlingListener {
+    ctor public SnapHelper();
+    method public void attachToRecyclerView(android.support.v7.widget.RecyclerView) throws java.lang.IllegalStateException;
+    method public abstract int[] calculateDistanceToFinalSnap(android.support.v7.widget.RecyclerView.LayoutManager, android.view.View);
+    method public int[] calculateScrollDistance(int, int);
+    method protected android.support.v7.widget.RecyclerView.SmoothScroller createScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+    method protected deprecated android.support.v7.widget.LinearSmoothScroller createSnapScroller(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public abstract android.view.View findSnapView(android.support.v7.widget.RecyclerView.LayoutManager);
+    method public abstract int findTargetSnapPosition(android.support.v7.widget.RecyclerView.LayoutManager, int, int);
+    method public boolean onFling(int, int);
+  }
+
+  public class StaggeredGridLayoutManager extends android.support.v7.widget.RecyclerView.LayoutManager implements android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+    ctor public StaggeredGridLayoutManager(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public StaggeredGridLayoutManager(int, int);
+    method public android.graphics.PointF computeScrollVectorForPosition(int);
+    method public int[] findFirstCompletelyVisibleItemPositions(int[]);
+    method public int[] findFirstVisibleItemPositions(int[]);
+    method public int[] findLastCompletelyVisibleItemPositions(int[]);
+    method public int[] findLastVisibleItemPositions(int[]);
+    method public android.support.v7.widget.RecyclerView.LayoutParams generateDefaultLayoutParams();
+    method public int getGapStrategy();
+    method public int getOrientation();
+    method public boolean getReverseLayout();
+    method public int getSpanCount();
+    method public void invalidateSpanAssignments();
+    method public void scrollToPositionWithOffset(int, int);
+    method public void setGapStrategy(int);
+    method public void setOrientation(int);
+    method public void setReverseLayout(boolean);
+    method public void setSpanCount(int);
+    field public static final deprecated int GAP_HANDLING_LAZY = 1; // 0x1
+    field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
+    field public static final int GAP_HANDLING_NONE = 0; // 0x0
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public static class StaggeredGridLayoutManager.LayoutParams extends android.support.v7.widget.RecyclerView.LayoutParams {
+    ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
+    ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public StaggeredGridLayoutManager.LayoutParams(android.support.v7.widget.RecyclerView.LayoutParams);
+    method public final int getSpanIndex();
+    method public boolean isFullSpan();
+    method public void setFullSpan(boolean);
+    field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+  }
+
+}
+
+package android.support.v7.widget.helper {
+
+  public class ItemTouchHelper extends android.support.v7.widget.RecyclerView.ItemDecoration implements android.support.v7.widget.RecyclerView.OnChildAttachStateChangeListener {
+    ctor public ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper.Callback);
+    method public void attachToRecyclerView(android.support.v7.widget.RecyclerView);
+    method public void onChildViewAttachedToWindow(android.view.View);
+    method public void onChildViewDetachedFromWindow(android.view.View);
+    method public void startDrag(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void startSwipe(android.support.v7.widget.RecyclerView.ViewHolder);
+    field public static final int ACTION_STATE_DRAG = 2; // 0x2
+    field public static final int ACTION_STATE_IDLE = 0; // 0x0
+    field public static final int ACTION_STATE_SWIPE = 1; // 0x1
+    field public static final int ANIMATION_TYPE_DRAG = 8; // 0x8
+    field public static final int ANIMATION_TYPE_SWIPE_CANCEL = 4; // 0x4
+    field public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 2; // 0x2
+    field public static final int DOWN = 2; // 0x2
+    field public static final int END = 32; // 0x20
+    field public static final int LEFT = 4; // 0x4
+    field public static final int RIGHT = 8; // 0x8
+    field public static final int START = 16; // 0x10
+    field public static final int UP = 1; // 0x1
+  }
+
+  public static abstract class ItemTouchHelper.Callback {
+    ctor public ItemTouchHelper.Callback();
+    method public boolean canDropOver(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public android.support.v7.widget.RecyclerView.ViewHolder chooseDropTarget(android.support.v7.widget.RecyclerView.ViewHolder, java.util.List<android.support.v7.widget.RecyclerView.ViewHolder>, int, int);
+    method public void clearView(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public int convertToAbsoluteDirection(int, int);
+    method public static int convertToRelativeDirection(int, int);
+    method public long getAnimationDuration(android.support.v7.widget.RecyclerView, int, float, float);
+    method public int getBoundingBoxMargin();
+    method public static android.support.v7.widget.helper.ItemTouchUIUtil getDefaultUIUtil();
+    method public float getMoveThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public abstract int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public float getSwipeEscapeVelocity(float);
+    method public float getSwipeThreshold(android.support.v7.widget.RecyclerView.ViewHolder);
+    method public float getSwipeVelocityThreshold(float);
+    method public int interpolateOutOfBoundsScroll(android.support.v7.widget.RecyclerView, int, int, int, long);
+    method public boolean isItemViewSwipeEnabled();
+    method public boolean isLongPressDragEnabled();
+    method public static int makeFlag(int, int);
+    method public static int makeMovementFlags(int, int);
+    method public void onChildDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+    method public void onChildDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+    method public abstract boolean onMove(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void onMoved(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder, int, android.support.v7.widget.RecyclerView.ViewHolder, int, int, int);
+    method public void onSelectedChanged(android.support.v7.widget.RecyclerView.ViewHolder, int);
+    method public abstract void onSwiped(android.support.v7.widget.RecyclerView.ViewHolder, int);
+    field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
+    field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
+  }
+
+  public static abstract class ItemTouchHelper.SimpleCallback extends android.support.v7.widget.helper.ItemTouchHelper.Callback {
+    ctor public ItemTouchHelper.SimpleCallback(int, int);
+    method public int getDragDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public int getMovementFlags(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public int getSwipeDirs(android.support.v7.widget.RecyclerView, android.support.v7.widget.RecyclerView.ViewHolder);
+    method public void setDefaultDragDirs(int);
+    method public void setDefaultSwipeDirs(int);
+  }
+
+  public static abstract interface ItemTouchHelper.ViewDropHandler {
+    method public abstract void prepareForDrop(android.view.View, android.view.View, int, int);
+  }
+
+  public abstract interface ItemTouchUIUtil {
+    method public abstract void clearView(android.view.View);
+    method public abstract void onDraw(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+    method public abstract void onDrawOver(android.graphics.Canvas, android.support.v7.widget.RecyclerView, android.view.View, float, float, int, boolean);
+    method public abstract void onSelected(android.view.View);
+  }
+
+}
+
+package android.support.v7.widget.util {
+
+  public abstract class SortedListAdapterCallback<T2> extends android.support.v7.util.SortedList.Callback {
+    ctor public SortedListAdapterCallback(android.support.v7.widget.RecyclerView.Adapter);
+    method public void onChanged(int, int);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
+  }
+
+}
+
diff --git a/v7/recyclerview/src/main/java/android/support/v7/widget/FastScroller.java b/v7/recyclerview/src/main/java/android/support/v7/widget/FastScroller.java
index fbe234b..b383c2a 100644
--- a/v7/recyclerview/src/main/java/android/support/v7/widget/FastScroller.java
+++ b/v7/recyclerview/src/main/java/android/support/v7/widget/FastScroller.java
@@ -24,6 +24,7 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.StateListDrawable;
 import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.view.ViewCompat;
@@ -379,7 +380,8 @@
     }
 
     @Override
-    public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent ev) {
+    public boolean onInterceptTouchEvent(@NonNull RecyclerView recyclerView,
+            @NonNull MotionEvent ev) {
         final boolean handled;
         if (mState == STATE_VISIBLE) {
             boolean insideVerticalThumb = isPointInsideVerticalThumb(ev.getX(), ev.getY());
@@ -408,7 +410,7 @@
     }
 
     @Override
-    public void onTouchEvent(RecyclerView recyclerView, MotionEvent me) {
+    public void onTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent me) {
         if (mState == STATE_HIDDEN) {
             return;
         }
diff --git a/v7/recyclerview/src/main/java/android/support/v7/widget/LinearLayoutManager.java b/v7/recyclerview/src/main/java/android/support/v7/widget/LinearLayoutManager.java
index 359229a..70510f6 100644
--- a/v7/recyclerview/src/main/java/android/support/v7/widget/LinearLayoutManager.java
+++ b/v7/recyclerview/src/main/java/android/support/v7/widget/LinearLayoutManager.java
@@ -24,6 +24,7 @@
 import android.graphics.PointF;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.support.annotation.NonNull;
 import android.support.annotation.RestrictTo;
 import android.support.v4.os.TraceCompat;
 import android.support.v4.view.ViewCompat;
@@ -2092,7 +2093,7 @@
      */
     @RestrictTo(LIBRARY_GROUP)
     @Override
-    public void prepareForDrop(View view, View target, int x, int y) {
+    public void prepareForDrop(@NonNull View view, @NonNull View target, int x, int y) {
         assertNotInLayoutOrScroll("Cannot drop a view during a scroll or layout calculation");
         ensureLayoutState();
         resolveShouldLayoutReverse();
diff --git a/v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerView.java b/v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerView.java
index 991abb9..481444d 100644
--- a/v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerView.java
+++ b/v7/recyclerview/src/main/java/android/support/v7/widget/RecyclerView.java
@@ -6140,7 +6140,7 @@
          * @param holder Holder to be added to the pool.
          * @param dispatchRecycled True to dispatch View recycled callbacks.
          */
-        void addViewHolderToRecycledViewPool(ViewHolder holder, boolean dispatchRecycled) {
+        void addViewHolderToRecycledViewPool(@NonNull ViewHolder holder, boolean dispatchRecycled) {
             clearNestedRecyclerViewIfNotNested(holder);
             if (holder.hasAnyOfTheFlags(ViewHolder.FLAG_SET_A11Y_ITEM_DELEGATE)) {
                 holder.setFlags(0, ViewHolder.FLAG_SET_A11Y_ITEM_DELEGATE);
@@ -6371,7 +6371,7 @@
             return null;
         }
 
-        void dispatchViewRecycled(ViewHolder holder) {
+        void dispatchViewRecycled(@NonNull ViewHolder holder) {
             if (mRecyclerListener != null) {
                 mRecyclerListener.onViewRecycled(holder);
             }
@@ -10188,7 +10188,7 @@
             if (vScroll == 0 && hScroll == 0) {
                 return false;
             }
-            mRecyclerView.scrollBy(hScroll, vScroll);
+            mRecyclerView.smoothScrollBy(hScroll, vScroll);
             return true;
         }
 
@@ -10406,7 +10406,7 @@
          *         to continue with the current behavior and continue observing future events in
          *         the gesture.
          */
-        boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e);
+        boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e);
 
         /**
          * Process a touch event as part of a gesture that was claimed by returning true from
@@ -10415,7 +10415,7 @@
          * @param e MotionEvent describing the touch event. All coordinates are in
          *          the RecyclerView's coordinate system.
          */
-        void onTouchEvent(RecyclerView rv, MotionEvent e);
+        void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e);
 
         /**
          * Called when a child of RecyclerView does not want RecyclerView and its ancestors to
@@ -10440,12 +10440,12 @@
      */
     public static class SimpleOnItemTouchListener implements RecyclerView.OnItemTouchListener {
         @Override
-        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
+        public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
             return false;
         }
 
         @Override
-        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
+        public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
         }
 
         @Override
@@ -10504,7 +10504,7 @@
          *
          * @param holder The ViewHolder containing the view that was recycled
          */
-        void onViewRecycled(ViewHolder holder);
+        void onViewRecycled(@NonNull ViewHolder holder);
     }
 
     /**
@@ -10518,14 +10518,14 @@
          *
          * @param view The View which is attached to the RecyclerView
          */
-        void onChildViewAttachedToWindow(View view);
+        void onChildViewAttachedToWindow(@NonNull View view);
 
         /**
          * Called when a view is detached from RecyclerView.
          *
          * @param view The View which is being detached from the RecyclerView
          */
-        void onChildViewDetachedFromWindow(View view);
+        void onChildViewDetachedFromWindow(@NonNull View view);
     }
 
     /**
@@ -10542,6 +10542,7 @@
      * strong references to extra off-screen item views for caching purposes</p>
      */
     public abstract static class ViewHolder {
+        @NonNull
         public final View itemView;
         WeakReference<RecyclerView> mNestedRecyclerView;
         int mPosition = NO_POSITION;
diff --git a/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchHelper.java b/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchHelper.java
index d2b6a20..578805d 100644
--- a/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchHelper.java
+++ b/v7/recyclerview/src/main/java/android/support/v7/widget/helper/ItemTouchHelper.java
@@ -22,6 +22,7 @@
 import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.view.GestureDetectorCompat;
 import android.support.v4.view.ViewCompat;
@@ -112,34 +113,39 @@
     /**
      * A View is currently being swiped.
      */
+    @SuppressWarnings("WeakerAccess")
     public static final int ACTION_STATE_SWIPE = 1;
 
     /**
      * A View is currently being dragged.
      */
+    @SuppressWarnings("WeakerAccess")
     public static final int ACTION_STATE_DRAG = 2;
 
     /**
      * Animation type for views which are swiped successfully.
      */
+    @SuppressWarnings("WeakerAccess")
     public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 1 << 1;
 
     /**
      * Animation type for views which are not completely swiped thus will animate back to their
      * original position.
      */
+    @SuppressWarnings("WeakerAccess")
     public static final int ANIMATION_TYPE_SWIPE_CANCEL = 1 << 2;
 
     /**
      * Animation type for views that were dragged and now will animate to their final position.
      */
+    @SuppressWarnings("WeakerAccess")
     public static final int ANIMATION_TYPE_DRAG = 1 << 3;
 
-    static final String TAG = "ItemTouchHelper";
+    private static final String TAG = "ItemTouchHelper";
 
-    static final boolean DEBUG = false;
+    private static final boolean DEBUG = false;
 
-    static final int ACTIVE_POINTER_ID_NONE = -1;
+    private static final int ACTIVE_POINTER_ID_NONE = -1;
 
     static final int DIRECTION_FLAG_COUNT = 8;
 
@@ -159,7 +165,7 @@
      * This is necessary after swipe dismissing an item. We wait until animator finishes its job
      * to clean these views.
      */
-    final List<View> mPendingCleanup = new ArrayList<View>();
+    final List<View> mPendingCleanup = new ArrayList<>();
 
     /**
      * Re-use array to calculate dx dy for a ViewHolder
@@ -169,63 +175,64 @@
     /**
      * Currently selected view holder
      */
-    ViewHolder mSelected = null;
+    private ViewHolder mSelected = null;
 
     /**
      * The reference coordinates for the action start. For drag & drop, this is the time long
      * press is completed vs for swipe, this is the initial touch point.
      */
-    float mInitialTouchX;
+    private float mInitialTouchX;
 
-    float mInitialTouchY;
+    private float mInitialTouchY;
 
     /**
      * Set when ItemTouchHelper is assigned to a RecyclerView.
      */
-    float mSwipeEscapeVelocity;
+    private float mSwipeEscapeVelocity;
 
     /**
      * Set when ItemTouchHelper is assigned to a RecyclerView.
      */
-    float mMaxSwipeVelocity;
+    private float mMaxSwipeVelocity;
 
     /**
      * The diff between the last event and initial touch.
      */
-    float mDx;
+    private float mDx;
 
-    float mDy;
+    private float mDy;
 
     /**
      * The coordinates of the selected view at the time it is selected. We record these values
      * when action starts so that we can consistently position it even if LayoutManager moves the
      * View.
      */
-    float mSelectedStartX;
+    private float mSelectedStartX;
 
-    float mSelectedStartY;
+    private float mSelectedStartY;
 
     /**
      * The pointer we are tracking.
      */
-    int mActivePointerId = ACTIVE_POINTER_ID_NONE;
+    private int mActivePointerId = ACTIVE_POINTER_ID_NONE;
 
     /**
      * Developer callback which controls the behavior of ItemTouchHelper.
      */
-    Callback mCallback;
+    @NonNull
+    private Callback mCallback;
 
     /**
      * Current mode.
      */
-    int mActionState = ACTION_STATE_IDLE;
+    private int mActionState = ACTION_STATE_IDLE;
 
     /**
      * The direction flags obtained from unmasking
      * {@link Callback#getAbsoluteMovementFlags(RecyclerView, ViewHolder)} for the current
      * action state.
      */
-    int mSelectedFlags;
+    private int mSelectedFlags;
 
     /**
      * When a View is dragged or swiped and needs to go back to where it was, we create a Recover
@@ -234,17 +241,17 @@
      * Using framework animators has the side effect of clashing with ItemAnimator, creating
      * jumpy UIs.
      */
-    List<RecoverAnimation> mRecoverAnimations = new ArrayList<RecoverAnimation>();
+    List<RecoverAnimation> mRecoverAnimations = new ArrayList<>();
 
     private int mSlop;
 
-    RecyclerView mRecyclerView;
+    private RecyclerView mRecyclerView;
 
     /**
      * When user drags a view to the edge, we start scrolling the LayoutManager as long as View
      * is partially out of bounds.
      */
-    final Runnable mScrollRunnable = new Runnable() {
+    private final Runnable mScrollRunnable = new Runnable() {
         @Override
         public void run() {
             if (mSelected != null && scrollIfNecessary()) {
@@ -260,7 +267,7 @@
     /**
      * Used for detecting fling swipe
      */
-    VelocityTracker mVelocityTracker;
+    private VelocityTracker mVelocityTracker;
 
     //re-used list for selecting a swap target
     private List<ViewHolder> mSwapTargets;
@@ -278,19 +285,19 @@
      * until view reaches its final position (end of recover animation), we keep a reference so
      * that it can be drawn above other children.
      */
-    View mOverdrawChild = null;
+    private View mOverdrawChild = null;
 
     /**
      * We cache the position of the overdraw child to avoid recalculating it each time child
      * position callback is called. This value is invalidated whenever a child is attached or
      * detached.
      */
-    int mOverdrawChildPosition = -1;
+    private int mOverdrawChildPosition = -1;
 
     /**
      * Used to detect long press.
      */
-    GestureDetectorCompat mGestureDetector;
+    private GestureDetectorCompat mGestureDetector;
 
     /**
      * Callback for when long press occurs.
@@ -299,7 +306,8 @@
 
     private final OnItemTouchListener mOnItemTouchListener = new OnItemTouchListener() {
         @Override
-        public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event) {
+        public boolean onInterceptTouchEvent(@NonNull RecyclerView recyclerView,
+                @NonNull MotionEvent event) {
             mGestureDetector.onTouchEvent(event);
             if (DEBUG) {
                 Log.d(TAG, "intercept: x:" + event.getX() + ",y:" + event.getY() + ", " + event);
@@ -344,7 +352,7 @@
         }
 
         @Override
-        public void onTouchEvent(RecyclerView recyclerView, MotionEvent event) {
+        public void onTouchEvent(@NonNull RecyclerView recyclerView, @NonNull MotionEvent event) {
             mGestureDetector.onTouchEvent(event);
             if (DEBUG) {
                 Log.d(TAG,
@@ -429,7 +437,7 @@
      *
      * @param callback The Callback which controls the behavior of this touch helper.
      */
-    public ItemTouchHelper(Callback callback) {
+    public ItemTouchHelper(@NonNull Callback callback) {
         mCallback = callback;
     }
 
@@ -552,10 +560,10 @@
      * Starts dragging or swiping the given View. Call with null if you want to clear it.
      *
      * @param selected    The ViewHolder to drag or swipe. Can be null if you want to cancel the
-     *                    current action
+     *                    current action, but may not be null if actionState is ACTION_STATE_DRAG.
      * @param actionState The type of action
      */
-    void select(ViewHolder selected, int actionState) {
+    private void select(@Nullable ViewHolder selected, int actionState) {
         if (selected == mSelected && actionState == mActionState) {
             return;
         }
@@ -565,6 +573,10 @@
         endRecoverAnimation(selected, true);
         mActionState = actionState;
         if (actionState == ACTION_STATE_DRAG) {
+            if (selected == null) {
+                throw new IllegalArgumentException("Must pass a ViewHolder when dragging");
+            }
+
             // we remove after animation is complete. this means we only elevate the last drag
             // child but that should perform good enough as it is very hard to start dragging a
             // new child before the previous one settles.
@@ -675,7 +687,7 @@
         mRecyclerView.invalidate();
     }
 
-    void postDispatchSwipe(final RecoverAnimation anim, final int swipeDir) {
+    private void postDispatchSwipe(final RecoverAnimation anim, final int swipeDir) {
         // wait until animations are complete.
         mRecyclerView.post(new Runnable() {
             @Override
@@ -698,7 +710,7 @@
         });
     }
 
-    boolean hasRunningRecoverAnim() {
+    private boolean hasRunningRecoverAnim() {
         final int size = mRecoverAnimations.size();
         for (int i = 0; i < size; i++) {
             if (!mRecoverAnimations.get(i).mEnded) {
@@ -711,7 +723,7 @@
     /**
      * If user drags the view to the edge, trigger a scroll if necessary.
      */
-    boolean scrollIfNecessary() {
+    private boolean scrollIfNecessary() {
         if (mSelected == null) {
             mDragScrollStartTimeInMs = Long.MIN_VALUE;
             return false;
@@ -776,8 +788,8 @@
 
     private List<ViewHolder> findSwapTargets(ViewHolder viewHolder) {
         if (mSwapTargets == null) {
-            mSwapTargets = new ArrayList<ViewHolder>();
-            mDistances = new ArrayList<Integer>();
+            mSwapTargets = new ArrayList<>();
+            mDistances = new ArrayList<>();
         } else {
             mSwapTargets.clear();
             mDistances.clear();
@@ -826,7 +838,7 @@
     /**
      * Checks if we should swap w/ another view holder.
      */
-    void moveIfNecessary(ViewHolder viewHolder) {
+    private void moveIfNecessary(ViewHolder viewHolder) {
         if (mRecyclerView.isLayoutRequested()) {
             return;
         }
@@ -863,11 +875,11 @@
     }
 
     @Override
-    public void onChildViewAttachedToWindow(View view) {
+    public void onChildViewAttachedToWindow(@NonNull View view) {
     }
 
     @Override
-    public void onChildViewDetachedFromWindow(View view) {
+    public void onChildViewDetachedFromWindow(@NonNull View view) {
         removeChildDrawingOrderCallbackIfNecessary(view);
         final ViewHolder holder = mRecyclerView.getChildViewHolder(view);
         if (holder == null) {
@@ -886,7 +898,7 @@
     /**
      * Returns the animation type or 0 if cannot be found.
      */
-    int endRecoverAnimation(ViewHolder viewHolder, boolean override) {
+    private void endRecoverAnimation(ViewHolder viewHolder, boolean override) {
         final int recoverAnimSize = mRecoverAnimations.size();
         for (int i = recoverAnimSize - 1; i >= 0; i--) {
             final RecoverAnimation anim = mRecoverAnimations.get(i);
@@ -896,10 +908,9 @@
                     anim.cancel();
                 }
                 mRecoverAnimations.remove(i);
-                return anim.mAnimationType;
+                return;
             }
         }
-        return 0;
     }
 
     @Override
@@ -908,7 +919,7 @@
         outRect.setEmpty();
     }
 
-    void obtainVelocityTracker() {
+    private void obtainVelocityTracker() {
         if (mVelocityTracker != null) {
             mVelocityTracker.recycle();
         }
@@ -951,17 +962,17 @@
     /**
      * Checks whether we should select a View for swiping.
      */
-    boolean checkSelectForSwipe(int action, MotionEvent motionEvent, int pointerIndex) {
+    private void checkSelectForSwipe(int action, MotionEvent motionEvent, int pointerIndex) {
         if (mSelected != null || action != MotionEvent.ACTION_MOVE
                 || mActionState == ACTION_STATE_DRAG || !mCallback.isItemViewSwipeEnabled()) {
-            return false;
+            return;
         }
         if (mRecyclerView.getScrollState() == RecyclerView.SCROLL_STATE_DRAGGING) {
-            return false;
+            return;
         }
         final ViewHolder vh = findSwipedView(motionEvent);
         if (vh == null) {
-            return false;
+            return;
         }
         final int movementFlags = mCallback.getAbsoluteMovementFlags(mRecyclerView, vh);
 
@@ -969,7 +980,7 @@
                 >> (DIRECTION_FLAG_COUNT * ACTION_STATE_SWIPE);
 
         if (swipeFlags == 0) {
-            return false;
+            return;
         }
 
         // mDx and mDy are only set in allowed directions. We use custom x/y here instead of
@@ -986,30 +997,29 @@
         final float absDy = Math.abs(dy);
 
         if (absDx < mSlop && absDy < mSlop) {
-            return false;
+            return;
         }
         if (absDx > absDy) {
             if (dx < 0 && (swipeFlags & LEFT) == 0) {
-                return false;
+                return;
             }
             if (dx > 0 && (swipeFlags & RIGHT) == 0) {
-                return false;
+                return;
             }
         } else {
             if (dy < 0 && (swipeFlags & UP) == 0) {
-                return false;
+                return;
             }
             if (dy > 0 && (swipeFlags & DOWN) == 0) {
-                return false;
+                return;
             }
         }
         mDx = mDy = 0f;
         mActivePointerId = motionEvent.getPointerId(0);
         select(vh, ACTION_STATE_SWIPE);
-        return true;
     }
 
-    View findChildView(MotionEvent event) {
+    private View findChildView(MotionEvent event) {
         // first check elevated views, if none, then call RV
         final float x = event.getX();
         final float y = event.getY();
@@ -1063,7 +1073,7 @@
      *                   RecyclerView.
      * @see ItemTouchHelper.Callback#isItemViewSwipeEnabled()
      */
-    public void startDrag(ViewHolder viewHolder) {
+    public void startDrag(@NonNull ViewHolder viewHolder) {
         if (!mCallback.hasDragFlag(mRecyclerView, viewHolder)) {
             Log.e(TAG, "Start drag has been called but dragging is not enabled");
             return;
@@ -1110,7 +1120,7 @@
      * @param viewHolder The ViewHolder to start swiping. It must be a direct child of
      *                   RecyclerView.
      */
-    public void startSwipe(ViewHolder viewHolder) {
+    public void startSwipe(@NonNull ViewHolder viewHolder) {
         if (!mCallback.hasSwipeFlag(mRecyclerView, viewHolder)) {
             Log.e(TAG, "Start swipe has been called but swiping is not enabled");
             return;
@@ -1125,7 +1135,7 @@
         select(viewHolder, ACTION_STATE_SWIPE);
     }
 
-    RecoverAnimation findAnimation(MotionEvent event) {
+    private RecoverAnimation findAnimation(MotionEvent event) {
         if (mRecoverAnimations.isEmpty()) {
             return null;
         }
@@ -1139,7 +1149,7 @@
         return null;
     }
 
-    void updateDxDy(MotionEvent ev, int directionFlags, int pointerIndex) {
+    private void updateDxDy(MotionEvent ev, int directionFlags, int pointerIndex) {
         final float x = ev.getX(pointerIndex);
         final float y = ev.getY(pointerIndex);
 
@@ -1285,7 +1295,7 @@
         mRecyclerView.setChildDrawingOrderCallback(mChildDrawingOrderCallback);
     }
 
-    void removeChildDrawingOrderCallbackIfNecessary(View view) {
+    private void removeChildDrawingOrderCallbackIfNecessary(View view) {
         if (view == mOverdrawChild) {
             mOverdrawChild = null;
             // only remove if we've added
@@ -1312,15 +1322,15 @@
          * making layout stay consistent.
          *
          * @param view   The View which is being dragged. It is very likely that user is still
-         *               dragging this View so there might be other
-         *               {@link #prepareForDrop(View, View, int, int)} after this one.
+         *               dragging this View so there might be other calls to
+         *               {@code prepareForDrop()} after this one.
          * @param target The target view which is being dropped on.
          * @param x      The <code>left</code> offset of the View that is being dragged. This value
          *               includes the movement caused by the user.
          * @param y      The <code>top</code> offset of the View that is being dragged. This value
          *               includes the movement caused by the user.
          */
-        void prepareForDrop(View view, View target, int x, int y);
+        void prepareForDrop(@NonNull View view, @NonNull View target, int x, int y);
     }
 
     /**
@@ -1356,8 +1366,10 @@
     @SuppressWarnings("UnusedParameters")
     public abstract static class Callback {
 
+        @SuppressWarnings("WeakerAccess")
         public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200;
 
+        @SuppressWarnings("WeakerAccess")
         public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250;
 
         static final int RELATIVE_DIR_FLAGS = START | END
@@ -1440,6 +1452,8 @@
          *
          * @return The {@link ItemTouchUIUtil} instance that is used by the {@link Callback}
          */
+        @SuppressWarnings("WeakerAccess")
+        @NonNull
         public static ItemTouchUIUtil getDefaultUIUtil() {
             return sUICallback;
         }
@@ -1455,6 +1469,7 @@
          * of {@link #LEFT}, {@link #RIGHT}.
          * @see #convertToAbsoluteDirection(int, int)
          */
+        @SuppressWarnings("WeakerAccess")
         public static int convertToRelativeDirection(int flags, int layoutDirection) {
             int masked = flags & ABS_HORIZONTAL_DIR_FLAGS;
             if (masked == 0) {
@@ -1501,6 +1516,7 @@
          *                    {@link #RIGHT}, {@link #LEFT} {@link #START} and {@link #END}.
          * @return And integer that represents the given directions in the provided actionState.
          */
+        @SuppressWarnings("WeakerAccess")
         public static int makeFlag(int actionState, int directions) {
             return directions << (actionState * DIRECTION_FLAG_COUNT);
         }
@@ -1532,8 +1548,8 @@
          * @see #makeMovementFlags(int, int)
          * @see #makeFlag(int, int)
          */
-        public abstract int getMovementFlags(RecyclerView recyclerView,
-                ViewHolder viewHolder);
+        public abstract int getMovementFlags(@NonNull RecyclerView recyclerView,
+                @NonNull ViewHolder viewHolder);
 
         /**
          * Converts a given set of flags to absolution direction which means {@link #START} and
@@ -1544,6 +1560,7 @@
          * @param layoutDirection The layout direction of the RecyclerView.
          * @return Updated flags which includes only absolute direction values.
          */
+        @SuppressWarnings("WeakerAccess")
         public int convertToAbsoluteDirection(int flags, int layoutDirection) {
             int masked = flags & RELATIVE_DIR_FLAGS;
             if (masked == 0) {
@@ -1595,8 +1612,9 @@
          * @return True if the dragged ViewHolder can be replaced with the target ViewHolder, false
          * otherwise.
          */
-        public boolean canDropOver(RecyclerView recyclerView, ViewHolder current,
-                ViewHolder target) {
+        @SuppressWarnings("WeakerAccess")
+        public boolean canDropOver(@NonNull RecyclerView recyclerView, @NonNull ViewHolder current,
+                @NonNull ViewHolder target) {
             return true;
         }
 
@@ -1619,8 +1637,8 @@
          * {@code target}.
          * @see #onMoved(RecyclerView, ViewHolder, int, ViewHolder, int, int, int)
          */
-        public abstract boolean onMove(RecyclerView recyclerView,
-                ViewHolder viewHolder, ViewHolder target);
+        public abstract boolean onMove(@NonNull RecyclerView recyclerView,
+                @NonNull ViewHolder viewHolder, @NonNull ViewHolder target);
 
         /**
          * Returns whether ItemTouchHelper should start a drag and drop operation if an item is
@@ -1659,6 +1677,7 @@
          *
          * @return The extra margin to be added to the hit box of the dragged View.
          */
+        @SuppressWarnings("WeakerAccess")
         public int getBoundingBoxMargin() {
             return 0;
         }
@@ -1674,7 +1693,8 @@
          * @return A float value that denotes the fraction of the View size. Default value
          * is .5f .
          */
-        public float getSwipeThreshold(ViewHolder viewHolder) {
+        @SuppressWarnings("WeakerAccess")
+        public float getSwipeThreshold(@NonNull ViewHolder viewHolder) {
             return .5f;
         }
 
@@ -1687,7 +1707,8 @@
          * @return A float value that denotes the fraction of the View size. Default value is
          * .5f .
          */
-        public float getMoveThreshold(ViewHolder viewHolder) {
+        @SuppressWarnings("WeakerAccess")
+        public float getMoveThreshold(@NonNull ViewHolder viewHolder) {
             return .5f;
         }
 
@@ -1712,6 +1733,7 @@
          * @see #getSwipeVelocityThreshold(float)
          * @see #getSwipeThreshold(ViewHolder)
          */
+        @SuppressWarnings("WeakerAccess")
         public float getSwipeEscapeVelocity(float defaultValue) {
             return defaultValue;
         }
@@ -1735,6 +1757,7 @@
          * <code>defaultValue</code> parameter.
          * @see #getSwipeEscapeVelocity(float)
          */
+        @SuppressWarnings("WeakerAccess")
         public float getSwipeVelocityThreshold(float defaultValue) {
             return defaultValue;
         }
@@ -1765,8 +1788,9 @@
          * @return A ViewHolder to whose position the dragged ViewHolder should be
          * moved to.
          */
-        public ViewHolder chooseDropTarget(ViewHolder selected,
-                List<ViewHolder> dropTargets, int curX, int curY) {
+        @SuppressWarnings("WeakerAccess")
+        public ViewHolder chooseDropTarget(@NonNull ViewHolder selected,
+                @NonNull List<ViewHolder> dropTargets, int curX, int curY) {
             int right = curX + selected.itemView.getWidth();
             int bottom = curY + selected.itemView.getHeight();
             ViewHolder winner = null;
@@ -1845,7 +1869,7 @@
          *                   `direction` will be relative as well. ({@link #START} or {@link
          *                   #END}).
          */
-        public abstract void onSwiped(ViewHolder viewHolder, int direction);
+        public abstract void onSwiped(@NonNull ViewHolder viewHolder, int direction);
 
         /**
          * Called when the ViewHolder swiped or dragged by the ItemTouchHelper is changed.
@@ -1859,7 +1883,7 @@
          *                    {@link ItemTouchHelper#ACTION_STATE_DRAG}.
          * @see #clearView(RecyclerView, RecyclerView.ViewHolder)
          */
-        public void onSelectedChanged(ViewHolder viewHolder, int actionState) {
+        public void onSelectedChanged(@Nullable ViewHolder viewHolder, int actionState) {
             if (viewHolder != null) {
                 sUICallback.onSelected(viewHolder.itemView);
             }
@@ -1906,9 +1930,9 @@
          *                     are applied. This value does not include margins added by
          *                     {@link RecyclerView.ItemDecoration}s.
          */
-        public void onMoved(final RecyclerView recyclerView,
-                final ViewHolder viewHolder, int fromPos, final ViewHolder target, int toPos, int x,
-                int y) {
+        public void onMoved(@NonNull final RecyclerView recyclerView,
+                @NonNull final ViewHolder viewHolder, int fromPos, @NonNull final ViewHolder target,
+                int toPos, int x, int y) {
             final RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
             if (layoutManager instanceof ViewDropHandler) {
                 ((ViewDropHandler) layoutManager).prepareForDrop(viewHolder.itemView,
@@ -2002,7 +2026,7 @@
          * @param recyclerView The RecyclerView which is controlled by the ItemTouchHelper.
          * @param viewHolder   The View that was interacted by the user.
          */
-        public void clearView(RecyclerView recyclerView, ViewHolder viewHolder) {
+        public void clearView(@NonNull RecyclerView recyclerView, @NonNull ViewHolder viewHolder) {
             sUICallback.clearView(viewHolder.itemView);
         }
 
@@ -2033,8 +2057,8 @@
          * @see #onChildDrawOver(Canvas, RecyclerView, ViewHolder, float, float, int,
          * boolean)
          */
-        public void onChildDraw(Canvas c, RecyclerView recyclerView,
-                ViewHolder viewHolder,
+        public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
+                @NonNull ViewHolder viewHolder,
                 float dX, float dY, int actionState, boolean isCurrentlyActive) {
             sUICallback.onDraw(c, recyclerView, viewHolder.itemView, dX, dY, actionState,
                     isCurrentlyActive);
@@ -2067,7 +2091,7 @@
          * @see #onChildDrawOver(Canvas, RecyclerView, ViewHolder, float, float, int,
          * boolean)
          */
-        public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
+        public void onChildDrawOver(@NonNull Canvas c, @NonNull RecyclerView recyclerView,
                 ViewHolder viewHolder,
                 float dX, float dY, int actionState, boolean isCurrentlyActive) {
             sUICallback.onDrawOver(c, recyclerView, viewHolder.itemView, dX, dY, actionState,
@@ -2094,7 +2118,8 @@
          * @param animateDy     The vertical distance that the animation will offset
          * @return The duration for the animation
          */
-        public long getAnimationDuration(RecyclerView recyclerView, int animationType,
+        @SuppressWarnings("WeakerAccess")
+        public long getAnimationDuration(@NonNull RecyclerView recyclerView, int animationType,
                 float animateDx, float animateDy) {
             final RecyclerView.ItemAnimator itemAnimator = recyclerView.getItemAnimator();
             if (itemAnimator == null) {
@@ -2126,7 +2151,8 @@
          * @return The amount that RecyclerView should scroll. Keep in mind that this value will
          * be passed to {@link RecyclerView#scrollBy(int, int)} method.
          */
-        public int interpolateOutOfBoundsScroll(RecyclerView recyclerView,
+        @SuppressWarnings("WeakerAccess")
+        public int interpolateOutOfBoundsScroll(@NonNull RecyclerView recyclerView,
                 int viewSize, int viewSizeOutOfBounds,
                 int totalSize, long msSinceStartScroll) {
             final int maxScroll = getMaxDragScroll(recyclerView);
@@ -2207,7 +2233,8 @@
          *
          * @param defaultSwipeDirs Binary OR of directions in which the ViewHolders can be swiped.
          */
-        public void setDefaultSwipeDirs(int defaultSwipeDirs) {
+        @SuppressWarnings({"WeakerAccess", "unused"})
+        public void setDefaultSwipeDirs(@SuppressWarnings("unused") int defaultSwipeDirs) {
             mDefaultSwipeDirs = defaultSwipeDirs;
         }
 
@@ -2217,7 +2244,8 @@
          *
          * @param defaultDragDirs Binary OR of directions in which the ViewHolders can be dragged.
          */
-        public void setDefaultDragDirs(int defaultDragDirs) {
+        @SuppressWarnings({"WeakerAccess", "unused"})
+        public void setDefaultDragDirs(@SuppressWarnings("unused") int defaultDragDirs) {
             mDefaultDragDirs = defaultDragDirs;
         }
 
@@ -2227,10 +2255,12 @@
          * {@link #setDefaultSwipeDirs(int)}.
          *
          * @param recyclerView The RecyclerView to which the ItemTouchHelper is attached to.
-         * @param viewHolder   The RecyclerView for which the swipe direction is queried.
+         * @param viewHolder   The ViewHolder for which the swipe direction is queried.
          * @return A binary OR of direction flags.
          */
-        public int getSwipeDirs(RecyclerView recyclerView, ViewHolder viewHolder) {
+        @SuppressWarnings("WeakerAccess")
+        public int getSwipeDirs(@SuppressWarnings("unused") @NonNull RecyclerView recyclerView,
+                @NonNull @SuppressWarnings("unused") ViewHolder viewHolder) {
             return mDefaultSwipeDirs;
         }
 
@@ -2240,15 +2270,18 @@
          * {@link #setDefaultDragDirs(int)}.
          *
          * @param recyclerView The RecyclerView to which the ItemTouchHelper is attached to.
-         * @param viewHolder   The RecyclerView for which the swipe direction is queried.
+         * @param viewHolder   The ViewHolder for which the swipe direction is queried.
          * @return A binary OR of direction flags.
          */
-        public int getDragDirs(RecyclerView recyclerView, ViewHolder viewHolder) {
+        @SuppressWarnings("WeakerAccess")
+        public int getDragDirs(@SuppressWarnings("unused") @NonNull RecyclerView recyclerView,
+                @SuppressWarnings("unused") @NonNull ViewHolder viewHolder) {
             return mDefaultDragDirs;
         }
 
         @Override
-        public int getMovementFlags(RecyclerView recyclerView, ViewHolder viewHolder) {
+        public int getMovementFlags(@NonNull RecyclerView recyclerView,
+                @NonNull ViewHolder viewHolder) {
             return makeMovementFlags(getDragDirs(recyclerView, viewHolder),
                     getSwipeDirs(recyclerView, viewHolder));
         }
@@ -2342,7 +2375,7 @@
 
         final int mAnimationType;
 
-        public boolean mIsPendingCleanup;
+        boolean mIsPendingCleanup;
 
         float mX;
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/AsyncListUtilLayoutTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/AsyncListUtilLayoutTest.java
index 3ac53f4..3bfda56 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/AsyncListUtilLayoutTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/AsyncListUtilLayoutTest.java
@@ -22,6 +22,7 @@
 import static java.util.concurrent.TimeUnit.SECONDS;
 
 import android.content.Context;
+import android.support.annotation.NonNull;
 import android.support.test.filters.MediumTest;
 import android.support.test.filters.Suppress;
 import android.support.test.runner.AndroidJUnit4;
@@ -266,12 +267,12 @@
         }
 
         @Override
-        public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public SimpleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             return new SimpleViewHolder(parent.getContext());
         }
 
         @Override
-        public void onBindViewHolder(SimpleViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull SimpleViewHolder holder, int position) {
             final String item = mAsyncListUtil == null ? null : mAsyncListUtil.getItem(position);
             ((TextView) (holder.itemView)).setText(item == null ? "" : item);
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/AttachDetachCollector.java b/v7/recyclerview/tests/src/android/support/v7/widget/AttachDetachCollector.java
index 12281ae..dbd157e 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/AttachDetachCollector.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/AttachDetachCollector.java
@@ -16,6 +16,7 @@
 package android.support.v7.widget;
 
 
+import android.support.annotation.NonNull;
 import android.view.View;
 
 import java.util.ArrayList;
@@ -33,12 +34,12 @@
     }
 
     @Override
-    public void onChildViewAttachedToWindow(View view) {
+    public void onChildViewAttachedToWindow(@NonNull View view) {
         mAttached.add(view);
     }
 
     @Override
-    public void onChildViewDetachedFromWindow(View view) {
+    public void onChildViewDetachedFromWindow(@NonNull View view) {
         mDetached.add(view);
     }
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java
index eed7d20..e47a480 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/BaseRecyclerViewInstrumentationTest.java
@@ -32,6 +32,7 @@
 import android.app.Instrumentation;
 import android.graphics.Rect;
 import android.os.Looper;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.rule.ActivityTestRule;
@@ -456,13 +457,13 @@
         final RecyclerView.OnChildAttachStateChangeListener listener =
                 new RecyclerView.OnChildAttachStateChangeListener() {
                     @Override
-                    public void onChildViewAttachedToWindow(View view) {
+                    public void onChildViewAttachedToWindow(@NonNull View view) {
                         if (position == mRecyclerView.getChildAdapterPosition(view)) {
                             viewAdded.countDown();
                         }
                     }
                     @Override
-                    public void onChildViewDetachedFromWindow(View view) {
+                    public void onChildViewDetachedFromWindow(@NonNull View view) {
                     }
                 };
         final AtomicBoolean addedListener = new AtomicBoolean(false);
@@ -803,7 +804,7 @@
         }
 
         @Override
-        public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             final TextView textView = new TextView(parent.getContext());
             textView.setLayoutParams(new ViewGroup.LayoutParams(
                     ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
@@ -813,7 +814,7 @@
         }
 
         @Override
-        public void onBindViewHolder(TestViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
             ((TextView) holder.itemView).setText("Item " + position);
         }
 
@@ -878,7 +879,7 @@
         }
 
         @Override
-        public TestViewHolder onCreateViewHolder(ViewGroup parent,
+        public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                 int viewType) {
             TextView itemView = new TextView(parent.getContext());
             itemView.setFocusableInTouchMode(true);
@@ -887,7 +888,7 @@
         }
 
         @Override
-        public void onBindViewHolder(TestViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
             assertNotNull(holder.mOwnerRecyclerView);
             assertEquals(position, holder.getAdapterPosition());
             final Item item = mItems.get(position);
@@ -903,7 +904,7 @@
         }
 
         @Override
-        public void onViewRecycled(TestViewHolder holder) {
+        public void onViewRecycled(@NonNull TestViewHolder holder) {
             super.onViewRecycled(holder);
             final int adapterPosition = holder.getAdapterPosition();
             final boolean shouldHavePosition = !holder.isRemoved() && holder.isBound() &&
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/BaseStaggeredGridLayoutManagerTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/BaseStaggeredGridLayoutManagerTest.java
index 776b10d..2aa8b8b 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/BaseStaggeredGridLayoutManagerTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/BaseStaggeredGridLayoutManagerTest.java
@@ -18,6 +18,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.StateListDrawable;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.util.Log;
 import android.util.StateSet;
@@ -835,8 +836,9 @@
             mOrientation = orientation;
         }
 
+        @NonNull
         @Override
-        public TestViewHolder onCreateViewHolder(ViewGroup parent,
+        public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                 int viewType) {
             mRecyclerViewWidth = parent.getWidth();
             mRecyclerViewHeight = parent.getHeight();
@@ -875,7 +877,7 @@
         }
 
         @Override
-        public void onBindViewHolder(TestViewHolder holder,
+        public void onBindViewHolder(@NonNull TestViewHolder holder,
                 int position) {
             if (mSizeReference == null) {
                 mSizeReference = mOrientation == OrientationHelper.HORIZONTAL ? mRecyclerViewWidth
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentTest.java
index e963235..3cbe96f 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentTest.java
@@ -24,6 +24,7 @@
 import android.app.Activity;
 import android.graphics.Color;
 import android.graphics.Rect;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.util.LongSparseArray;
 import android.support.v7.widget.TestedFrameLayout.FullControlLayoutParams;
@@ -72,7 +73,7 @@
         WrappedRecyclerView rv = createRecyclerView(getActivity());
         TestAdapter testAdapter = new TestAdapter(20) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 holder.itemView.setLayoutParams(new ViewGroup.LayoutParams(itemWidth, itemHeight));
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentWithAspectRatioTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentWithAspectRatioTest.java
index b91c37a..0f2fbad 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentWithAspectRatioTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/BaseWrapContentWithAspectRatioTest.java
@@ -15,24 +15,25 @@
  */
 package android.support.v7.widget;
 
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
+import static android.support.v7.widget.LinearLayoutManager.HORIZONTAL;
+import static android.support.v7.widget.LinearLayoutManager.VERTICAL;
 
 import android.content.Context;
 import android.graphics.Color;
+import android.support.annotation.NonNull;
 import android.support.v4.util.Pair;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
 
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 
-import static android.support.v7.widget.LinearLayoutManager.HORIZONTAL;
-import static android.support.v7.widget.LinearLayoutManager.VERTICAL;
-
 abstract public class BaseWrapContentWithAspectRatioTest extends BaseRecyclerViewInstrumentationTest {
     final BaseWrapContentTest.WrapContentConfig mWrapContentConfig;
 
@@ -202,12 +203,12 @@
         }
 
         @Override
-        public WrapContentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public WrapContentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             return new WrapContentViewHolder(parent);
         }
 
         @Override
-        public void onBindViewHolder(WrapContentViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull WrapContentViewHolder holder, int position) {
             holder.mView.setBehavior(behaviors.get(position));
             holder.mView.prepareLayoutParams();
         }
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/CustomEdgeEffectTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/CustomEdgeEffectTest.java
index 0644416..adc7125 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/CustomEdgeEffectTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/CustomEdgeEffectTest.java
@@ -62,7 +62,7 @@
         mRecyclerView.setAdapter(new TestAdapter(NUM_ITEMS) {
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 TestViewHolder holder = super.onCreateViewHolder(parent, viewType);
                 holder.itemView.setMinimumHeight(mRecyclerView.getMeasuredHeight() * 2 / NUM_ITEMS);
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/DefaultItemAnimatorTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/DefaultItemAnimatorTest.java
index c28623f..1ea1675 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/DefaultItemAnimatorTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/DefaultItemAnimatorTest.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import android.support.annotation.NonNull;
 import android.support.test.filters.LargeTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
@@ -408,12 +409,12 @@
         }
 
         @Override
-        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             return new ViewHolder(new TextView(parent.getContext()));
         }
 
         @Override
-        public void onBindViewHolder(ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
             holder.bind(mItems.get(position));
         }
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/DividerItemDecorationTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/DividerItemDecorationTest.java
index 6459522..5effd32 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/DividerItemDecorationTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/DividerItemDecorationTest.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.graphics.Canvas;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
@@ -67,12 +68,12 @@
         }
 
         @Override
-        public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             return new ViewHolder(new TextView(parent.getContext()));
         }
 
         @Override
-        public void onBindViewHolder(ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
             holder.mTextView.setText(mDataset[position]);
         }
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/FocusSearchNavigationTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/FocusSearchNavigationTest.java
index 3755018..c954811 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/FocusSearchNavigationTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/FocusSearchNavigationTest.java
@@ -29,6 +29,7 @@
 import android.app.Activity;
 import android.content.Context;
 import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.LargeTest;
 import android.support.test.rule.ActivityTestRule;
@@ -244,7 +245,7 @@
         }
 
         @Override
-        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
+        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
         int viewType) {
             View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view,
                     parent, false);
@@ -259,7 +260,7 @@
         }
 
         @Override
-        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
             holder.itemView.setTag("pos " + position);
         }
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerCustomSizeInScrollDirectionTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerCustomSizeInScrollDirectionTest.java
index dec0d72..5c351eb 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerCustomSizeInScrollDirectionTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerCustomSizeInScrollDirectionTest.java
@@ -22,6 +22,7 @@
 import static org.junit.Assert.assertTrue;
 
 import android.graphics.Rect;
+import android.support.annotation.NonNull;
 import android.support.test.filters.MediumTest;
 import android.view.View;
 import android.view.ViewGroup;
@@ -71,7 +72,7 @@
 
         final GridTestAdapter testAdapter = new GridTestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerRtlTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerRtlTest.java
index 3343ff5..430622f 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerRtlTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerRtlTest.java
@@ -23,6 +23,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import android.support.annotation.NonNull;
 import android.support.test.filters.MediumTest;
 import android.view.View;
 import android.view.ViewGroup;
@@ -90,7 +91,7 @@
 
         RecyclerView rv = setupBasic(mConfig, new GridTestAdapter(mConfig.mItemCount) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (mItemsWrapContent) {
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java
index 985fd93..5fdb656 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/GridLayoutManagerTest.java
@@ -33,6 +33,7 @@
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.StateListDrawable;
 import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.test.annotation.UiThreadTest;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.SdkSuppress;
@@ -84,7 +85,7 @@
         RecyclerView recyclerView = setupBasic(new Config(2, 100).reverseLayout(reverseLayout),
                 new GridTestAdapter(100) {
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
@@ -126,7 +127,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         testViewHolder.itemView.setFocusable(true);
@@ -147,7 +148,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         holder.itemView.setMinimumHeight(mAttachedRv.getHeight() / 3);
@@ -322,7 +323,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         // Good to have colors for debugging
@@ -341,7 +342,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         if (position < spanCount * consecutiveFocusableRowsCount) {
@@ -412,7 +413,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         // Good to have colors for debugging
@@ -431,7 +432,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         if (position < spanCount * consecutiveFocusableRowsCount) {
@@ -502,7 +503,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         // Good to have colors for debugging
@@ -521,7 +522,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         if (position < spanCount * consecutiveFocusableColsCount) {
@@ -592,7 +593,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         // Good to have colors for debugging
@@ -611,7 +612,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         if (position < spanCount * consecutiveFocusableColsCount) {
@@ -846,7 +847,7 @@
         final RecyclerView rv = setupBasic(new Config(3, 100).orientation(orientation),
                 new GridTestAdapter(100) {
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         GridLayoutManager.LayoutParams glp = ensureGridLp(holder.itemView);
@@ -1076,7 +1077,7 @@
             final int removePos) throws Throwable {
         GridTestAdapter adapter = new GridTestAdapter(adapterSize) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
@@ -1219,7 +1220,7 @@
                 new HashMap<Integer, RecyclerView.ViewHolder>();
         RecyclerView recyclerView = setupBasic(new Config(3, 3), new GridTestAdapter(3) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 final GridLayoutManager.LayoutParams glp = ensureGridLp(holder.itemView);
@@ -1246,7 +1247,7 @@
         RecyclerView recyclerView = setupBasic(new Config(3, HORIZONTAL, false),
                 new GridTestAdapter(3) {
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         final GridLayoutManager.LayoutParams glp = ensureGridLp(holder.itemView);
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/ItemAnimatorV2ApiTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/ItemAnimatorV2ApiTest.java
index 4c7161b..7769168 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/ItemAnimatorV2ApiTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/ItemAnimatorV2ApiTest.java
@@ -82,7 +82,7 @@
 
         setupBasic(10, 0, 10, new TestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (position == 0) {
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerBaseConfigSetTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerBaseConfigSetTest.java
index 731cc67..0293646 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerBaseConfigSetTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerBaseConfigSetTest.java
@@ -29,6 +29,7 @@
 import static org.junit.Assert.assertThat;
 
 import android.graphics.Rect;
+import android.support.annotation.NonNull;
 import android.support.test.filters.LargeTest;
 import android.util.Log;
 import android.view.View;
@@ -205,7 +206,7 @@
         final int totalSpace = mLayoutManager.mOrientationHelper.getTotalSpace();
         final TestAdapter newAdapter = new TestAdapter(100) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (config.mOrientation == HORIZONTAL) {
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerPrepareForDropTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerPrepareForDropTest.java
index 2cdb2e7..6aa26b8 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerPrepareForDropTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerPrepareForDropTest.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 
+import android.support.annotation.NonNull;
 import android.support.test.filters.MediumTest;
 import android.view.View;
 
@@ -124,7 +125,8 @@
         final Config config = (Config) mConfig.clone();
         config.mTestAdapter = new BaseRecyclerViewInstrumentationTest.TestAdapter(100) {
             @Override
-            public void onBindViewHolder(BaseRecyclerViewInstrumentationTest.TestViewHolder holder,
+            public void onBindViewHolder(
+                    @NonNull BaseRecyclerViewInstrumentationTest.TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (config.mOrientation == HORIZONTAL) {
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerTest.java
index dd2c650..d04d8cc 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/LinearLayoutManagerTest.java
@@ -34,6 +34,7 @@
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.StateListDrawable;
 import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.SdkSuppress;
 import android.support.v4.view.AccessibilityDelegateCompat;
@@ -206,7 +207,7 @@
             RecyclerView mAttachedRv;
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                 TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                 // Good to have colors for debugging
                 StateListDrawable stl = new StateListDrawable();
@@ -224,7 +225,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (position < consecutiveFocusablesCount) {
@@ -292,7 +293,7 @@
             RecyclerView mAttachedRv;
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                 TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                 // Good to have colors for debugging
                 StateListDrawable stl = new StateListDrawable();
@@ -310,7 +311,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (position < consecutiveFocusablesCount) {
@@ -377,7 +378,7 @@
             RecyclerView mAttachedRv;
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                 TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                 // Good to have colors for debugging
                 StateListDrawable stl = new StateListDrawable();
@@ -395,7 +396,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (position < consecutiveFocusablesCount) {
@@ -463,7 +464,7 @@
             RecyclerView mAttachedRv;
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                 TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                 // Good to have colors for debugging
                 StateListDrawable stl = new StateListDrawable();
@@ -481,7 +482,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (position < consecutiveFocusablesCount) {
@@ -554,7 +555,7 @@
             RecyclerView mAttachedRv;
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                 TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                 // Good to have colors for debugging
                 StateListDrawable stl = new StateListDrawable();
@@ -572,7 +573,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (position < consecutiveFocusablesCount) {
@@ -710,7 +711,7 @@
             final int removePos) throws Throwable {
         config.adapter(new TestAdapter(adapterSize) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
@@ -808,7 +809,7 @@
         final boolean[] firstItemSpecialSize = new boolean[] {false};
         TestAdapter adapter = new TestAdapter(adapterSize) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
@@ -1123,7 +1124,7 @@
         final AtomicInteger childCount = new AtomicInteger(0);
         final TestAdapter adapter = new TestAdapter(300) {
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 final int cnt = childCount.incrementAndGet();
                 final TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/MultiRecyclerViewPrefetchTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/MultiRecyclerViewPrefetchTest.java
index 3eba432..ee08e98 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/MultiRecyclerViewPrefetchTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/MultiRecyclerViewPrefetchTest.java
@@ -21,6 +21,7 @@
 
 import android.content.Context;
 import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SdkSuppress;
 import android.support.test.filters.SmallTest;
@@ -116,15 +117,17 @@
 
             // first view 50x100 pixels, rest are 100x100 so second column is offset
             rv.setAdapter(new RecyclerView.Adapter() {
+                @NonNull
                 @Override
-                public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
+                public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                         int viewType) {
                     registerTimePassingMs(5);
                     return new RecyclerView.ViewHolder(new View(parent.getContext())) {};
                 }
 
                 @Override
-                public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+                public void onBindViewHolder(
+                        @NonNull RecyclerView.ViewHolder holder, int position) {
                     registerTimePassingMs(5);
                     holder.itemView.setMinimumWidth(100);
                     holder.itemView.setMinimumHeight(position == 0 ? 50 : 100);
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java
index 973b138..b746092 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAccessibilityLifecycleTest.java
@@ -28,6 +28,7 @@
 import static org.mockito.Mockito.verify;
 
 import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.MediumTest;
 import android.support.test.filters.SdkSuppress;
@@ -77,7 +78,7 @@
         };
         TestAdapter adapter = new TestAdapter(10) {
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 TestViewHolder vh = super.onCreateViewHolder(parent, viewType);
                 ViewCompat.setImportantForAccessibility(vh.itemView,
@@ -189,7 +190,7 @@
         };
         final TestAdapter adapter = new TestAdapter(100) {
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 TestViewHolder vh = super.onCreateViewHolder(parent, viewType);
                 ViewCompat.setAccessibilityDelegate(vh.itemView, delegateCompat);
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java
index da5be39..de31415 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewAnimationsTest.java
@@ -63,7 +63,7 @@
     public void keepFocusAfterChangeAnimation() throws Throwable {
         setupBasic(10, 0, 5, new TestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 holder.itemView.setFocusableInTouchMode(true);
@@ -111,7 +111,7 @@
         final List<RecyclerView.ViewHolder> mRecycled = new ArrayList<>();
         final TestAdapter adapter = new TestAdapter(1) {
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 super.onViewRecycled(holder);
                 mRecycled.add(holder);
             }
@@ -500,7 +500,7 @@
     public void reuseHiddenViewTest(ReuseTestCallback callback) throws Throwable {
         TestAdapter adapter = new TestAdapter(10) {
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 super.onViewRecycled(holder);
                 recycledVHs.add(holder);
             }
@@ -600,7 +600,7 @@
         // RecyclerView is expected to change it to 'expectedImportantForAccessibility'.
         TestAdapter adapter = new TestAdapter(1) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
                 super.onBindViewHolder(holder, position);
                 ViewCompat.setImportantForAccessibility(
                         holder.itemView, boundImportantForAccessibility);
@@ -739,7 +739,7 @@
                 = new ArrayList<RecyclerView.ViewHolder>();
         TestAdapter adapter = new TestAdapter(50) {
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 super.onViewRecycled(holder);
                 mRecycledViews.add(holder);
             }
@@ -859,7 +859,7 @@
             }
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 TestViewHolder vh = super.onCreateViewHolder(parent, viewType);
                 if (DEBUG) {
@@ -869,7 +869,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (DEBUG) {
@@ -946,7 +946,7 @@
             }
 
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 TestViewHolder vh = super.onCreateViewHolder(parent, viewType);
                 if (DEBUG) {
@@ -1064,7 +1064,7 @@
         final AtomicInteger childCount = new AtomicInteger(0);
         final TestAdapter adapter = new TestAdapter(1000) {
             @Override
-            public TestViewHolder onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 childCount.incrementAndGet();
                 return super.onCreateViewHolder(parent, viewType);
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java
index 50e2d8b..4f29ad3 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewBasicTest.java
@@ -222,7 +222,7 @@
         mRecyclerView.setLayoutManager(layoutManager);
         MockAdapter adapter = new MockAdapter(100) {
             @Override
-            public void onViewRecycled(RecyclerView.ViewHolder holder) {
+            public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
                 super.onViewRecycled(holder);
                 recycledVhs.add(holder);
             }
@@ -245,7 +245,7 @@
         mRecyclerView.setLayoutManager(layoutManager);
         MockAdapter adapter = new MockAdapter(100) {
             @Override
-            public void onViewRecycled(RecyclerView.ViewHolder holder) {
+            public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
                 super.onViewRecycled(holder);
                 recycledVhs.add(holder);
             }
@@ -338,8 +338,10 @@
         };
         mRecyclerView.setLayoutManager(mlm);
         mRecyclerView.setAdapter(new MockAdapter(3) {
+            @NonNull
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 final LoggingView itemView = new LoggingView(parent.getContext());
                 //noinspection ResourceType
                 itemView.setId(3);
@@ -716,13 +718,14 @@
             this.mCount = count;
         }
 
+        @NonNull
         @Override
-        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             return new MockViewHolder(new TextView(parent.getContext()));
         }
 
         @Override
-        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
 
         }
 
@@ -797,14 +800,14 @@
         }
 
         @Override
-        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             LinearLayout holder = new LinearLayout(parent.getContext());
             holder.setOrientation(LinearLayout.HORIZONTAL);
             return new MockViewHolder(holder);
         }
 
         @Override
-        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
             LinearLayout l = (LinearLayout) holder.itemView;
             l.removeAllViews();
             if (position == 0) {
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewCacheTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewCacheTest.java
index 1267fdb..b38c794 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewCacheTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewCacheTest.java
@@ -35,6 +35,7 @@
 import android.os.Build;
 import android.os.Parcelable;
 import android.os.SystemClock;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SdkSuppress;
 import android.support.test.filters.SmallTest;
@@ -305,8 +306,10 @@
 
         // 100x100 pixel views
         mRecyclerView.setAdapter(new RecyclerView.Adapter() {
+            @NonNull
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 View view = new View(getContext());
                 view.setMinimumWidth(100);
                 view.setMinimumHeight(100);
@@ -315,7 +318,7 @@
             }
 
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {}
+            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {}
 
             @Override
             public int getItemCount() {
@@ -345,7 +348,8 @@
         // 1000x1000 pixel views
         RecyclerView.Adapter adapter = new RecyclerView.Adapter() {
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 mRecyclerView.registerTimePassingMs(5);
                 View view = new View(getContext());
                 view.setMinimumWidth(1000);
@@ -354,7 +358,7 @@
             }
 
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
                 mRecyclerView.registerTimePassingMs(5);
             }
 
@@ -404,7 +408,8 @@
         // 100x100 pixel views
         RecyclerView.Adapter adapter = new RecyclerView.Adapter() {
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 mRecyclerView.registerTimePassingMs(5);
                 View view = new View(getContext());
                 view.setMinimumWidth(100);
@@ -413,7 +418,8 @@
             }
 
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+            public void onBindViewHolder(
+                    @NonNull RecyclerView.ViewHolder holder, int position) {
                 mRecyclerView.registerTimePassingMs(5);
             }
 
@@ -462,7 +468,8 @@
         // 100x100 pixel views
         RecyclerView.Adapter adapter = new RecyclerView.Adapter() {
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 mRecyclerView.registerTimePassingMs(5);
                 View view = new View(getContext());
                 view.setMinimumWidth(100);
@@ -471,7 +478,7 @@
             }
 
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
                 mRecyclerView.registerTimePassingMs(5);
             }
 
@@ -481,7 +488,7 @@
             }
 
             @Override
-            public void onViewRecycled(RecyclerView.ViewHolder holder) {
+            public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
                 // verify unbound view doesn't get
                 assertNotEquals(RecyclerView.NO_POSITION, holder.getAdapterPosition());
             }
@@ -519,13 +526,15 @@
 
         // first view 50x100 pixels, rest are 100x100 so second column is offset
         mRecyclerView.setAdapter(new RecyclerView.Adapter() {
+            @NonNull
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 return new RecyclerView.ViewHolder(new View(getContext())) {};
             }
 
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
                 holder.itemView.setMinimumWidth(100);
                 holder.itemView.setMinimumHeight(position == 0 ? 50 : 100);
             }
@@ -593,13 +602,15 @@
                 new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
         mRecyclerView.setLayoutManager(sglm);
         mRecyclerView.setAdapter(new RecyclerView.Adapter() {
+            @NonNull
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 return new RecyclerView.ViewHolder(new View(getContext())) {};
             }
 
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
                 holder.itemView.setMinimumWidth(100);
                 holder.itemView.setMinimumHeight(position == 0 ? 100 : 200);
             }
@@ -639,12 +650,13 @@
 
         final RecyclerView.Adapter adapter = new RecyclerView.Adapter() {
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 return new RecyclerView.ViewHolder(new View(parent.getContext())) {};
             }
 
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
                 int height = expandedPosition[0] == position ? 400 : 100;
                 holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(200, height));
             }
@@ -744,7 +756,7 @@
         InnerAdapter() {}
 
         @Override
-        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             mRecyclerView.registerTimePassingMs(5);
             View view = new View(parent.getContext());
             view.setLayoutParams(new RecyclerView.LayoutParams(100, 100));
@@ -752,7 +764,7 @@
         }
 
         @Override
-        public void onBindViewHolder(ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
             mRecyclerView.registerTimePassingMs(5);
             mItemsBound++;
         }
@@ -803,7 +815,7 @@
         }
 
         @Override
-        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             mRecyclerView.registerTimePassingMs(5);
 
             RecyclerView rv = new RecyclerView(parent.getContext()) {
@@ -821,7 +833,7 @@
         }
 
         @Override
-        public void onBindViewHolder(ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
             mRecyclerView.registerTimePassingMs(5);
 
             // Tests may rely on bound holders not being shared between inner adapters,
@@ -836,7 +848,7 @@
         }
 
         @Override
-        public void onViewRecycled(ViewHolder holder) {
+        public void onViewRecycled(@NonNull ViewHolder holder) {
             mSavedStates.set(holder.getAdapterPosition(),
                     holder.mRecyclerView.getLayoutManager().onSaveInstanceState());
         }
@@ -1153,8 +1165,9 @@
             }
         }
 
+        @NonNull
         @Override
-        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             mRecyclerView.registerTimePassingMs(5);
             RecyclerView rv = new RecyclerView(parent.getContext());
             rv.setLayoutManager(new LinearLayoutManager(parent.getContext(),
@@ -1165,7 +1178,7 @@
         }
 
         @Override
-        public void onBindViewHolder(ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
             mRecyclerView.registerTimePassingMs(5);
             // if we had actual data to put into our adapter, this is where we'd do it...
 
@@ -1180,7 +1193,7 @@
         }
 
         @Override
-        public void onViewRecycled(ViewHolder holder) {
+        public void onViewRecycled(@NonNull ViewHolder holder) {
             if (holder.getAdapterPosition() >= 0) {
                 mSavedStates.set(holder.getAdapterPosition(),
                         holder.mRecyclerView.getLayoutManager().onSaveInstanceState());
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java
index 584a116..d2a3b2a 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFastScrollerTest.java
@@ -26,6 +26,7 @@
 import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.drawable.StateListDrawable;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.annotation.UiThreadTest;
 import android.support.test.filters.LargeTest;
@@ -417,7 +418,7 @@
         }
 
         @Override
-        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
+        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                 int viewType) {
             final ViewHolder h = new ViewHolder(new TextView(parent.getContext()));
             h.mTextView.setMinimumHeight(128);
@@ -436,7 +437,7 @@
         }
 
         @Override
-        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
             holder.itemView.setTag("pos " + position);
         }
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFocusRecoveryTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFocusRecoveryTest.java
index 0354d53..0c7a54f 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFocusRecoveryTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewFocusRecoveryTest.java
@@ -662,7 +662,7 @@
         final int TYPE_NO_FOCUS = 1001;
         TestAdapter adapter = new FocusTestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (holder.getItemViewType() == TYPE_NO_FOCUS) {
@@ -706,7 +706,7 @@
 
         FocusTestAdapter adapter = new FocusTestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (holder.getItemId() == toFocusId.get()) {
@@ -817,7 +817,7 @@
         }
 
         @Override
-        public FocusViewHolder onCreateViewHolder(ViewGroup parent,
+        public FocusViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                 int viewType) {
             final FocusViewHolder fvh;
             if (mFocusOnChild) {
@@ -832,7 +832,7 @@
         }
 
         @Override
-        public void onBindViewHolder(TestViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
             cast(holder).bindTo(mItems.get(position));
         }
     }
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
index 3b7cac7..cffb24e 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewLayoutTest.java
@@ -118,7 +118,7 @@
         final AtomicBoolean receivedOnRecycled = new AtomicBoolean(false);
         final TestAdapter adapter = new TestAdapter(20) {
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 super.onViewRecycled(holder);
                 if (receivedOnRecycled.getAndSet(true)) {
                     return;
@@ -505,7 +505,7 @@
 
         final TestAdapter adapter = new TestAdapter(2) {
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 // If the recycled holder is currently in the cache, then it's position in the
                 // adapter should be RecyclerView.NO_POSITION.
                 if (mRecyclerView.mRecycler.mCachedViews.contains(holder)) {
@@ -590,7 +590,7 @@
 
         final TestAdapter adapter = new TestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
                 // Only track the top 5 positions that are going to be cached and then reused.
                 if (position >= 5) {
                     // If we are in the first phase, put the items in the map, if we are in the
@@ -764,7 +764,7 @@
         final AtomicInteger detachCounter = new AtomicInteger(0);
         rv.setAdapter(new TestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 holder.itemView.setFocusable(true);
@@ -779,7 +779,7 @@
             }
 
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 super.onViewRecycled(holder);
                 check.run();
             }
@@ -812,7 +812,7 @@
         mRecyclerView = rv;
         rv.setAdapter(new TestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 holder.itemView.setFocusableInTouchMode(true);
@@ -1055,14 +1055,14 @@
         final int scrollY = 50;
         RecyclerView.Adapter adapter = new RecyclerView.Adapter() {
             @Override
-            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            public RecyclerView.ViewHolder onCreateViewHolder(
+                    @NonNull ViewGroup parent, int viewType) {
                 View view = new View(parent.getContext());
                 view.setScrollY(scrollY);
-                return new RecyclerView.ViewHolder(view) {
-                };
+                return new RecyclerView.ViewHolder(view) {};
             }
             @Override
-            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {}
+            public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {}
             @Override
             public int getItemCount() {
                 return 1;
@@ -1239,7 +1239,7 @@
         recyclerView.setLayoutManager(tlm);
         final TestAdapter adapter = new TestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
                 super.onBindViewHolder(holder, position);
                 holder.itemView.setFocusable(false);
                 holder.itemView.setFocusableInTouchMode(false);
@@ -1268,7 +1268,7 @@
         recyclerView.setLayoutManager(tlm);
         final TestAdapter adapter = new TestAdapter(10) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder, int position) {
+            public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
                 super.onBindViewHolder(holder, position);
                 holder.itemView.setFocusable(true);
                 holder.itemView.setFocusableInTouchMode(true);
@@ -2177,7 +2177,7 @@
         final List<View> recycled = new ArrayList<>();
         TestAdapter testAdapter = new TestAdapter(10) {
             @Override
-            public boolean onFailedToRecycleView(TestViewHolder holder) {
+            public boolean onFailedToRecycleView(@NonNull TestViewHolder holder) {
                 failedToRecycle.add(holder.itemView);
                 if (unsetTransientState) {
                     setHasTransientState(holder.itemView, false);
@@ -2186,7 +2186,7 @@
             }
 
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 recycled.add(holder.itemView);
                 super.onViewRecycled(holder);
             }
@@ -2343,13 +2343,13 @@
         TestAdapter adapter = new TestAdapter(10) {
             @Override
             public boolean onFailedToRecycleView(
-                    TestViewHolder holder) {
+                    @NonNull TestViewHolder holder) {
                 failedToRecycle.set(true);
                 return false;
             }
 
             @Override
-            public void onViewRecycled(TestViewHolder holder) {
+            public void onViewRecycled(@NonNull TestViewHolder holder) {
                 recycledViewCount.incrementAndGet();
                 super.onViewRecycled(holder);
             }
@@ -3191,7 +3191,7 @@
         recyclerView.setAdapter(testAdapter);
         recyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() {
             @Override
-            public void onViewRecycled(RecyclerView.ViewHolder holder) {
+            public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
                 recycledViewCount.incrementAndGet();
             }
         });
@@ -4098,20 +4098,20 @@
     private TestAdapter2 createOwnerCheckingAdapter() {
         return new TestAdapter2(10) {
             @Override
-            public void onViewRecycled(TestViewHolder2 holder) {
+            public void onViewRecycled(@NonNull TestViewHolder2 holder) {
                 assertSame("on recycled should be called w/ the creator adapter", this,
                         holder.mData);
                 super.onViewRecycled(holder);
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder2 holder, int position) {
+            public void onBindViewHolder(@NonNull TestViewHolder2 holder, int position) {
                 super.onBindViewHolder(holder, position);
                 assertSame("on bind should be called w/ the creator adapter", this, holder.mData);
             }
 
             @Override
-            public TestViewHolder2 onCreateViewHolder(ViewGroup parent,
+            public TestViewHolder2 onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 final TestViewHolder2 vh = super.onCreateViewHolder(parent, viewType);
                 vh.mData = this;
@@ -4123,7 +4123,7 @@
     private TestAdapter2 createBinderCheckingAdapter() {
         return new TestAdapter2(10) {
             @Override
-            public void onViewRecycled(TestViewHolder2 holder) {
+            public void onViewRecycled(@NonNull TestViewHolder2 holder) {
                 assertSame("on recycled should be called w/ the creator adapter", this,
                         holder.mData);
                 holder.mData = null;
@@ -4131,7 +4131,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder2 holder, int position) {
+            public void onBindViewHolder(@NonNull TestViewHolder2 holder, int position) {
                 super.onBindViewHolder(holder, position);
                 holder.mData = this;
             }
@@ -4290,7 +4290,7 @@
             }
 
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (position >= layoutStart && position < invalidatedCount + layoutStart) {
@@ -4983,13 +4983,13 @@
         }
 
         @Override
-        public TestViewHolder2 onCreateViewHolder(ViewGroup parent,
+        public TestViewHolder2 onCreateViewHolder(@NonNull ViewGroup parent,
                 int viewType) {
             return new TestViewHolder2(new TextView(parent.getContext()));
         }
 
         @Override
-        public void onBindViewHolder(TestViewHolder2 holder, int position) {
+        public void onBindViewHolder(@NonNull TestViewHolder2 holder, int position) {
             final Item item = mItems.get(position);
             ((TextView) (holder.itemView)).setText(item.mText + "(" + item.mAdapterIndex + ")");
         }
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewOnGenericMotionEventTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewOnGenericMotionEventTest.java
index 2f80156..19e838e 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewOnGenericMotionEventTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/RecyclerViewOnGenericMotionEventTest.java
@@ -20,6 +20,7 @@
 import static org.junit.Assert.assertNotEquals;
 
 import android.content.Context;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
@@ -186,12 +187,12 @@
         }
 
         @Override
-        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             return new MockViewHolder(new TextView(parent.getContext()));
         }
 
         @Override
-        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
 
         }
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java
index 6a32572..4197df3 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerBaseConfigSetTest.java
@@ -33,6 +33,7 @@
 import android.os.Looper;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.support.annotation.NonNull;
 import android.support.test.filters.FlakyTest;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.Suppress;
@@ -95,7 +96,7 @@
         setupByConfig(mConfig.itemCount(5),
                 new GridTestAdapter(mConfig.mItemCount, mConfig.mOrientation) {
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         if (wrapContent) {
@@ -353,7 +354,7 @@
         final int totalSpace = mLayoutManager.mPrimaryOrientation.getTotalSpace();
         final TestAdapter newAdapter = new TestAdapter(100) {
             @Override
-            public void onBindViewHolder(TestViewHolder holder,
+            public void onBindViewHolder(@NonNull TestViewHolder holder,
                     int position) {
                 super.onBindViewHolder(holder, position);
                 if (mConfig.mOrientation == LinearLayoutManager.HORIZONTAL) {
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerTest.java
index cfc9c4e..8ed96e4 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/StaggeredGridLayoutManagerTest.java
@@ -38,6 +38,7 @@
 import android.graphics.drawable.StateListDrawable;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.support.annotation.NonNull;
 import android.support.test.filters.LargeTest;
 import android.support.v4.view.AccessibilityDelegateCompat;
 import android.text.TextUtils;
@@ -91,8 +92,10 @@
         setupByConfig(new Config(orientation, false, 1, GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS),
                 new GridTestAdapter(10, orientation) {
 
+                    @NonNull
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+                    public TestViewHolder onCreateViewHolder(
+                            @NonNull ViewGroup parent, int viewType) {
                         View view = new View(parent.getContext());
                         StaggeredGridLayoutManager.LayoutParams layoutParams =
                                 new StaggeredGridLayoutManager.LayoutParams(
@@ -104,7 +107,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder, int position) {
+                    public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
                         // No actual binding needed, but we need to override this to prevent default
                         // behavior of GridTestAdapter.
                     }
@@ -147,6 +150,7 @@
         });
         assertTrue(mRecyclerView.isLayoutRequested());
     }
+
     @Test
     public void areAllStartsTheSame() throws Throwable {
         setupByConfig(new Config(VERTICAL, false, 3, GAP_HANDLING_NONE).itemCount(300));
@@ -336,8 +340,10 @@
         setupByConfig(new Config(VERTICAL, false, 3, GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS),
                 new GridTestAdapter(1000, VERTICAL) {
 
+                    @NonNull
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+                    public TestViewHolder onCreateViewHolder(
+                            @NonNull ViewGroup parent, int viewType) {
                         FrameLayout fl = new FrameLayout(parent.getContext());
                         EditText editText = new EditText(parent.getContext());
                         fl.addView(editText);
@@ -346,7 +352,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder, int position) {
+                    public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
                         Item item = mItems.get(position);
                         holder.mBoundItem = item;
                         ((EditText) ((FrameLayout) holder.itemView).getChildAt(0)).setText(
@@ -397,7 +403,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         testViewHolder.itemView.setFocusable(true);
@@ -418,7 +424,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         holder.itemView.setMinimumHeight(mAttachedRv.getHeight() / 3);
@@ -490,7 +496,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         testViewHolder.itemView.setFocusable(true);
@@ -511,7 +517,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) holder.itemView
@@ -604,7 +610,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         testViewHolder.itemView.setFocusable(true);
@@ -625,7 +631,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) holder.itemView
@@ -719,7 +725,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         testViewHolder.itemView.setFocusable(true);
@@ -740,7 +746,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) holder.itemView
@@ -827,7 +833,7 @@
                     RecyclerView mAttachedRv;
 
                     @Override
-                    public TestViewHolder onCreateViewHolder(ViewGroup parent,
+                    public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                             int viewType) {
                         TestViewHolder testViewHolder = super.onCreateViewHolder(parent, viewType);
                         testViewHolder.itemView.setFocusable(true);
@@ -848,7 +854,7 @@
                     }
 
                     @Override
-                    public void onBindViewHolder(TestViewHolder holder,
+                    public void onBindViewHolder(@NonNull TestViewHolder holder,
                             int position) {
                         super.onBindViewHolder(holder, position);
                         RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) holder.itemView
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/TestResizingRelayoutWithAutoMeasure.java b/v7/recyclerview/tests/src/android/support/v7/widget/TestResizingRelayoutWithAutoMeasure.java
index 9881653..6f99f35 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/TestResizingRelayoutWithAutoMeasure.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/TestResizingRelayoutWithAutoMeasure.java
@@ -188,13 +188,13 @@
         }
 
         @Override
-        public TestViewHolder onCreateViewHolder(ViewGroup parent,
+        public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                 int viewType) {
             return new TestViewHolder(new View(parent.getContext()));
         }
 
         @Override
-        public void onBindViewHolder(TestViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
             holder.mBoundItem = new Item(position, "none");
             if (mMinItemHeight < 1 && mMinItemWidth < 1) {
                 return;
@@ -222,4 +222,4 @@
             return mSize;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/WrapContentBasicTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/WrapContentBasicTest.java
index 1947bc9..00d332a 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/WrapContentBasicTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/WrapContentBasicTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.MediumTest;
 import android.support.test.runner.AndroidJUnit4;
@@ -246,12 +247,12 @@
     public class WrapAdapter extends RecyclerView.Adapter {
 
         @Override
-        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
             return null;
         }
 
         @Override
-        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
 
         }
 
diff --git a/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java b/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java
index 090ea69..99d1066 100644
--- a/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java
+++ b/v7/recyclerview/tests/src/android/support/v7/widget/helper/ItemTouchHelperTest.java
@@ -27,6 +27,7 @@
 import static org.junit.Assert.assertTrue;
 
 import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.test.filters.LargeTest;
 import android.support.test.filters.SdkSuppress;
 import android.support.test.filters.Suppress;
@@ -245,14 +246,15 @@
         }
 
         @Override
-        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
-                RecyclerView.ViewHolder target) {
+        public boolean onMove(@NonNull RecyclerView recyclerView,
+                @NonNull RecyclerView.ViewHolder viewHolder,
+                @NonNull RecyclerView.ViewHolder target) {
             mMoveRecordList.add(new MoveRecord(viewHolder, target));
             return true;
         }
 
         @Override
-        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
+        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
             mSwipeRecords.add(new SwipeRecord(viewHolder, direction));
         }
 
@@ -266,7 +268,8 @@
         }
 
         @Override
-        public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+        public void clearView(@NonNull RecyclerView recyclerView,
+                @NonNull RecyclerView.ViewHolder viewHolder) {
             super.clearView(recyclerView, viewHolder);
             mCleared.add(viewHolder);
         }
diff --git a/viewpager2/build.gradle b/viewpager2/build.gradle
index 2fee643..7f75d09 100644
--- a/viewpager2/build.gradle
+++ b/viewpager2/build.gradle
@@ -42,4 +42,4 @@
     mavenGroup = LibraryGroups.SUPPORT
     inceptionYear = "2017"
     description = "AndroidX Widget ViewPager2"
-}
\ No newline at end of file
+}
diff --git a/wear/Android.mk b/wear/Android.mk
deleted file mode 100644
index 9e5bf5b..0000000
--- a/wear/Android.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-# Here is a prebuilt library containing all the wearable stubs necessary for ambient mode
-include $(CLEAR_VARS)
-LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
-        prebuilt-com.google.android.wearable-stubs:wear_stubs/com.google.android.wearable-stubs.jar
-include $(BUILD_MULTI_PREBUILT)
-
-# Here is the final static library that apps can link against.
-# Applications that use this library must specify
-#
-#   LOCAL_STATIC_ANDROID_LIBRARIES := \
-#       android-support-wear \
-#       android-support-core-ui \
-#       android-support-v7-recyclerview
-#
-# in their makefiles to include the resources and their dependencies in their package
-
-include $(CLEAR_VARS)
-LOCAL_USE_AAPT2 := true
-LOCAL_AAPT2_ONLY := true
-LOCAL_MODULE := android-support-wear
-LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
-LOCAL_SRC_FILES := $(call all-java-files-under,src/main/java)
-LOCAL_MANIFEST_FILE := src/main/AndroidManifest.xml
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_JAVA_LIBRARIES := \
-    android-support-annotations
-LOCAL_SHARED_ANDROID_LIBRARIES := \
-    android-support-core-ui \
-    android-support-percent \
-    android-support-v7-recyclerview \
-    android-support-v4 \
-    android-support-constraint-layout
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    prebuilt-com.google.android.wearable-stubs
-LOCAL_JAR_EXCLUDE_FILES := none
-LOCAL_JAVA_LANGUAGE_VERSION := 1.7
-LOCAL_AAPT_FLAGS := --add-javadoc-annotation doconly
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
diff --git a/wear/api/27.1.0.txt b/wear/api/27.1.0.txt
new file mode 100644
index 0000000..9c5a543
--- /dev/null
+++ b/wear/api/27.1.0.txt
@@ -0,0 +1,283 @@
+package android.support.wear.ambient {
+
+  public final deprecated class AmbientMode extends android.app.Fragment {
+    ctor public AmbientMode();
+    method public static <T extends android.app.Activity> android.support.wear.ambient.AmbientMode.AmbientController attachAmbientSupport(T);
+    field public static final java.lang.String EXTRA_BURN_IN_PROTECTION = "com.google.android.wearable.compat.extra.BURN_IN_PROTECTION";
+    field public static final java.lang.String EXTRA_LOWBIT_AMBIENT = "com.google.android.wearable.compat.extra.LOWBIT_AMBIENT";
+    field public static final java.lang.String FRAGMENT_TAG = "android.support.wearable.ambient.AmbientMode";
+  }
+
+  public static abstract class AmbientMode.AmbientCallback {
+    ctor public AmbientMode.AmbientCallback();
+    method public void onEnterAmbient(android.os.Bundle);
+    method public void onExitAmbient();
+    method public void onUpdateAmbient();
+  }
+
+  public static abstract interface AmbientMode.AmbientCallbackProvider {
+    method public abstract android.support.wear.ambient.AmbientMode.AmbientCallback getAmbientCallback();
+  }
+
+  public final class AmbientMode.AmbientController {
+    method public boolean isAmbient();
+  }
+
+  public final class AmbientModeSupport extends android.support.v4.app.Fragment {
+    ctor public AmbientModeSupport();
+    method public static <T extends android.support.v4.app.FragmentActivity> android.support.wear.ambient.AmbientModeSupport.AmbientController attach(T);
+    field public static final java.lang.String EXTRA_BURN_IN_PROTECTION = "com.google.android.wearable.compat.extra.BURN_IN_PROTECTION";
+    field public static final java.lang.String EXTRA_LOWBIT_AMBIENT = "com.google.android.wearable.compat.extra.LOWBIT_AMBIENT";
+    field public static final java.lang.String FRAGMENT_TAG = "android.support.wearable.ambient.AmbientMode";
+  }
+
+  public static abstract class AmbientModeSupport.AmbientCallback {
+    ctor public AmbientModeSupport.AmbientCallback();
+    method public void onEnterAmbient(android.os.Bundle);
+    method public void onExitAmbient();
+    method public void onUpdateAmbient();
+  }
+
+  public static abstract interface AmbientModeSupport.AmbientCallbackProvider {
+    method public abstract android.support.wear.ambient.AmbientModeSupport.AmbientCallback getAmbientCallback();
+  }
+
+  public final class AmbientModeSupport.AmbientController {
+    method public boolean isAmbient();
+  }
+
+}
+
+package android.support.wear.utils {
+
+  public class MetadataConstants {
+    method public static int getPreviewDrawableResourceId(android.content.Context, boolean);
+    method public static boolean isNotificationBridgingEnabled(android.content.Context);
+    method public static boolean isStandalone(android.content.Context);
+    field public static final java.lang.String NOTIFICATION_BRIDGE_MODE_BRIDGING = "BRIDGING";
+    field public static final java.lang.String NOTIFICATION_BRIDGE_MODE_METADATA_NAME = "com.google.android.wearable.notificationBridgeMode";
+    field public static final java.lang.String NOTIFICATION_BRIDGE_MODE_NO_BRIDGING = "NO_BRIDGING";
+    field public static final java.lang.String STANDALONE_METADATA_NAME = "com.google.android.wearable.standalone";
+    field public static final java.lang.String WATCH_FACE_PREVIEW_CIRCULAR_METADATA_NAME = "com.google.android.wearable.watchface.preview_circular";
+    field public static final java.lang.String WATCH_FACE_PREVIEW_METADATA_NAME = "com.google.android.wearable.watchface.preview";
+  }
+
+}
+
+package android.support.wear.widget {
+
+  public class BoxInsetLayout extends android.view.ViewGroup {
+    ctor public BoxInsetLayout(android.content.Context);
+    ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet);
+    ctor public BoxInsetLayout(android.content.Context, android.util.AttributeSet, int);
+    method public android.support.wear.widget.BoxInsetLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+  }
+
+  public static class BoxInsetLayout.LayoutParams extends android.widget.FrameLayout.LayoutParams {
+    ctor public BoxInsetLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public BoxInsetLayout.LayoutParams(int, int);
+    ctor public BoxInsetLayout.LayoutParams(int, int, int);
+    ctor public BoxInsetLayout.LayoutParams(int, int, int, int);
+    ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public BoxInsetLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public BoxInsetLayout.LayoutParams(android.widget.FrameLayout.LayoutParams);
+    ctor public BoxInsetLayout.LayoutParams(android.support.wear.widget.BoxInsetLayout.LayoutParams);
+    field public static final int BOX_ALL = 15; // 0xf
+    field public static final int BOX_BOTTOM = 8; // 0x8
+    field public static final int BOX_LEFT = 1; // 0x1
+    field public static final int BOX_NONE = 0; // 0x0
+    field public static final int BOX_RIGHT = 4; // 0x4
+    field public static final int BOX_TOP = 2; // 0x2
+    field public int boxedEdges;
+  }
+
+  public class CircularProgressLayout extends android.widget.FrameLayout {
+    ctor public CircularProgressLayout(android.content.Context);
+    ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet);
+    ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public CircularProgressLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getBackgroundColor();
+    method public int[] getColorSchemeColors();
+    method public android.support.wear.widget.CircularProgressLayout.OnTimerFinishedListener getOnTimerFinishedListener();
+    method public android.support.v4.widget.CircularProgressDrawable getProgressDrawable();
+    method public float getStartingRotation();
+    method public float getStrokeWidth();
+    method public long getTotalTime();
+    method public boolean isIndeterminate();
+    method public boolean isTimerRunning();
+    method public void setColorSchemeColors(int...);
+    method public void setIndeterminate(boolean);
+    method public void setOnTimerFinishedListener(android.support.wear.widget.CircularProgressLayout.OnTimerFinishedListener);
+    method public void setStartingRotation(float);
+    method public void setStrokeWidth(float);
+    method public void setTotalTime(long);
+    method public void startTimer();
+    method public void stopTimer();
+  }
+
+  public static abstract interface CircularProgressLayout.OnTimerFinishedListener {
+    method public abstract void onTimerFinished(android.support.wear.widget.CircularProgressLayout);
+  }
+
+  public class CurvingLayoutCallback extends android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback {
+    ctor public CurvingLayoutCallback(android.content.Context);
+    method public void adjustAnchorOffsetXY(android.view.View, float[]);
+    method public void onLayoutFinished(android.view.View, android.support.v7.widget.RecyclerView);
+  }
+
+  public class RoundedDrawable extends android.graphics.drawable.Drawable {
+    ctor public RoundedDrawable();
+    method public void draw(android.graphics.Canvas);
+    method public int getBackgroundColor();
+    method public android.graphics.drawable.Drawable getDrawable();
+    method public int getOpacity();
+    method public int getRadius();
+    method public boolean isClipEnabled();
+    method public void setAlpha(int);
+    method public void setBackgroundColor(int);
+    method public void setClipEnabled(boolean);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDrawable(android.graphics.drawable.Drawable);
+    method public void setRadius(int);
+  }
+
+  public class SwipeDismissFrameLayout extends android.widget.FrameLayout {
+    ctor public SwipeDismissFrameLayout(android.content.Context);
+    ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet);
+    ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public SwipeDismissFrameLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addCallback(android.support.wear.widget.SwipeDismissFrameLayout.Callback);
+    method public void removeCallback(android.support.wear.widget.SwipeDismissFrameLayout.Callback);
+  }
+
+  public static abstract class SwipeDismissFrameLayout.Callback {
+    ctor public SwipeDismissFrameLayout.Callback();
+    method public void onDismissed(android.support.wear.widget.SwipeDismissFrameLayout);
+    method public void onSwipeCanceled(android.support.wear.widget.SwipeDismissFrameLayout);
+    method public void onSwipeStarted(android.support.wear.widget.SwipeDismissFrameLayout);
+  }
+
+  public class WearableLinearLayoutManager extends android.support.v7.widget.LinearLayoutManager {
+    ctor public WearableLinearLayoutManager(android.content.Context, android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback);
+    ctor public WearableLinearLayoutManager(android.content.Context);
+    method public android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback getLayoutCallback();
+    method public void setLayoutCallback(android.support.wear.widget.WearableLinearLayoutManager.LayoutCallback);
+  }
+
+  public static abstract class WearableLinearLayoutManager.LayoutCallback {
+    ctor public WearableLinearLayoutManager.LayoutCallback();
+    method public abstract void onLayoutFinished(android.view.View, android.support.v7.widget.RecyclerView);
+  }
+
+  public class WearableRecyclerView extends android.support.v7.widget.RecyclerView {
+    ctor public WearableRecyclerView(android.content.Context);
+    ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet);
+    ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet, int);
+    ctor public WearableRecyclerView(android.content.Context, android.util.AttributeSet, int, int);
+    method public float getBezelFraction();
+    method public float getScrollDegreesPerScreen();
+    method public boolean isCircularScrollingGestureEnabled();
+    method public boolean isEdgeItemsCenteringEnabled();
+    method public void setBezelFraction(float);
+    method public void setCircularScrollingGestureEnabled(boolean);
+    method public void setEdgeItemsCenteringEnabled(boolean);
+    method public void setScrollDegreesPerScreen(float);
+  }
+
+}
+
+package android.support.wear.widget.drawer {
+
+  public class WearableActionDrawerView extends android.support.wear.widget.drawer.WearableDrawerView {
+    ctor public WearableActionDrawerView(android.content.Context);
+    ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet);
+    ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet, int);
+    ctor public WearableActionDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.view.Menu getMenu();
+    method public void setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener);
+    method public void setTitle(java.lang.CharSequence);
+  }
+
+  public class WearableDrawerController {
+    method public void closeDrawer();
+    method public void openDrawer();
+    method public void peekDrawer();
+  }
+
+  public class WearableDrawerLayout extends android.widget.FrameLayout implements android.support.v4.view.NestedScrollingParent android.view.View.OnLayoutChangeListener {
+    ctor public WearableDrawerLayout(android.content.Context);
+    ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet);
+    ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public WearableDrawerLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public void onFlingComplete(android.view.View);
+    method public void onLayoutChange(android.view.View, int, int, int, int, int, int, int, int);
+    method public void setDrawerStateCallback(android.support.wear.widget.drawer.WearableDrawerLayout.DrawerStateCallback);
+  }
+
+  public static class WearableDrawerLayout.DrawerStateCallback {
+    ctor public WearableDrawerLayout.DrawerStateCallback();
+    method public void onDrawerClosed(android.support.wear.widget.drawer.WearableDrawerLayout, android.support.wear.widget.drawer.WearableDrawerView);
+    method public void onDrawerOpened(android.support.wear.widget.drawer.WearableDrawerLayout, android.support.wear.widget.drawer.WearableDrawerView);
+    method public void onDrawerStateChanged(android.support.wear.widget.drawer.WearableDrawerLayout, int);
+  }
+
+  public class WearableDrawerView extends android.widget.FrameLayout {
+    ctor public WearableDrawerView(android.content.Context);
+    ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet);
+    ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet, int);
+    ctor public WearableDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.support.wear.widget.drawer.WearableDrawerController getController();
+    method public android.view.View getDrawerContent();
+    method public int getDrawerState();
+    method public boolean isAutoPeekEnabled();
+    method public boolean isClosed();
+    method public boolean isLocked();
+    method public boolean isLockedWhenClosed();
+    method public boolean isOpenOnlyAtTopEnabled();
+    method public boolean isOpened();
+    method public boolean isPeekOnScrollDownEnabled();
+    method public boolean isPeeking();
+    method public void onDrawerClosed();
+    method public void onDrawerOpened();
+    method public void onDrawerStateChanged(int);
+    method public void onPeekContainerClicked(android.view.View);
+    method public void setDrawerContent(android.view.View);
+    method public void setIsAutoPeekEnabled(boolean);
+    method public void setIsLocked(boolean);
+    method public void setLockedWhenClosed(boolean);
+    method public void setOpenOnlyAtTopEnabled(boolean);
+    method public void setPeekContent(android.view.View);
+    method public void setPeekOnScrollDownEnabled(boolean);
+    field public static final int STATE_DRAGGING = 1; // 0x1
+    field public static final int STATE_IDLE = 0; // 0x0
+    field public static final int STATE_SETTLING = 2; // 0x2
+  }
+
+  public class WearableNavigationDrawerView extends android.support.wear.widget.drawer.WearableDrawerView {
+    ctor public WearableNavigationDrawerView(android.content.Context);
+    ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet);
+    ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet, int);
+    ctor public WearableNavigationDrawerView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addOnItemSelectedListener(android.support.wear.widget.drawer.WearableNavigationDrawerView.OnItemSelectedListener);
+    method public int getNavigationStyle();
+    method public void removeOnItemSelectedListener(android.support.wear.widget.drawer.WearableNavigationDrawerView.OnItemSelectedListener);
+    method public void setAdapter(android.support.wear.widget.drawer.WearableNavigationDrawerView.WearableNavigationDrawerAdapter);
+    method public void setCurrentItem(int, boolean);
+    field public static final int MULTI_PAGE = 1; // 0x1
+    field public static final int SINGLE_PAGE = 0; // 0x0
+  }
+
+  public static abstract interface WearableNavigationDrawerView.OnItemSelectedListener {
+    method public abstract void onItemSelected(int);
+  }
+
+  public static abstract class WearableNavigationDrawerView.WearableNavigationDrawerAdapter {
+    ctor public WearableNavigationDrawerView.WearableNavigationDrawerAdapter();
+    method public abstract int getCount();
+    method public abstract android.graphics.drawable.Drawable getItemDrawable(int);
+    method public abstract java.lang.CharSequence getItemText(int);
+    method public void notifyDataSetChanged();
+  }
+
+}
+
diff --git a/wear/tests/src/android/support/wear/ambient/AmbientModeSupportResumeTest.java b/wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportResumeTest.java
similarity index 100%
rename from wear/tests/src/android/support/wear/ambient/AmbientModeSupportResumeTest.java
rename to wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportResumeTest.java
diff --git a/wear/tests/src/android/support/wear/ambient/AmbientModeSupportResumeTestActivity.java b/wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportResumeTestActivity.java
similarity index 100%
rename from wear/tests/src/android/support/wear/ambient/AmbientModeSupportResumeTestActivity.java
rename to wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportResumeTestActivity.java
diff --git a/wear/tests/src/android/support/wear/ambient/AmbientModeSupportTest.java b/wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportTest.java
similarity index 100%
rename from wear/tests/src/android/support/wear/ambient/AmbientModeSupportTest.java
rename to wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportTest.java
diff --git a/wear/tests/src/android/support/wear/ambient/AmbientModeSupportTestActivity.java b/wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportTestActivity.java
similarity index 100%
rename from wear/tests/src/android/support/wear/ambient/AmbientModeSupportTestActivity.java
rename to wear/src/androidTest/java/android/support/wear/ambient/AmbientModeSupportTestActivity.java