Merge "Update VideoView's internal state when playback completed" into androidx-master-dev
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index a665eae..c0b1b7f7 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -33,5 +33,6 @@
       <option name="IGNORE_POINT_TO_ITSELF" value="false" />
       <option name="myAdditionalJavadocTags" value="hide" />
     </inspection_tool>
+    <inspection_tool class="MissingDeprecatedAnnotation" enabled="true" level="ERROR" enabled_by_default="true" />
   </profile>
 </component>
\ No newline at end of file
diff --git a/OWNERS b/OWNERS
index 11887f0..e4a4a30 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,15 +1,14 @@
 adamp@google.com
 alanv@google.com
 aurimas@google.com
-chet@google.com
 ccraik@google.com
 clarabayarri@google.com
 ilake@google.com
 jeffrygaston@google.com
 kirillg@google.com
-kkam@google.com
 mount@google.com
 pavlis@google.com
+romainguy@android.com
 sergeyv@google.com
 shepshapard@google.com
 sumir@google.com
diff --git a/activity/api/1.0.0-alpha06.txt b/activity/api/1.0.0-alpha06.txt
new file mode 100644
index 0000000..1d5064e
--- /dev/null
+++ b/activity/api/1.0.0-alpha06.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.activity {
+
+  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+    ctor public ComponentActivity();
+    method public void addOnBackPressedCallback(androidx.activity.OnBackPressedCallback);
+    method public void addOnBackPressedCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
+    method @Deprecated public Object? getLastCustomNonConfigurationInstance();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+    method public androidx.lifecycle.ViewModelStore getViewModelStore();
+    method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
+    method public final Object? onRetainNonConfigurationInstance();
+    method public void removeOnBackPressedCallback(androidx.activity.OnBackPressedCallback);
+  }
+
+  public interface OnBackPressedCallback {
+    method public boolean handleOnBackPressed();
+  }
+
+}
+
diff --git a/activity/api/res-1.0.0-alpha06.txt b/activity/api/res-1.0.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/activity/api/res-1.0.0-alpha06.txt
diff --git a/activity/api/restricted_1.0.0-alpha06.txt b/activity/api/restricted_1.0.0-alpha06.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/activity/api/restricted_1.0.0-alpha06.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/activity/ktx/api/1.0.0-alpha06.txt b/activity/ktx/api/1.0.0-alpha06.txt
new file mode 100644
index 0000000..be35c63
--- /dev/null
+++ b/activity/ktx/api/1.0.0-alpha06.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.activity {
+
+  public final class ActivityViewModelLazyKt {
+    ctor public ActivityViewModelLazyKt();
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM>! viewModels(androidx.activity.ComponentActivity, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>! factoryProducer = null);
+  }
+
+}
+
diff --git a/activity/ktx/api/res-1.0.0-alpha06.txt b/activity/ktx/api/res-1.0.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/activity/ktx/api/res-1.0.0-alpha06.txt
diff --git a/activity/ktx/api/restricted_1.0.0-alpha06.txt b/activity/ktx/api/restricted_1.0.0-alpha06.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/activity/ktx/api/restricted_1.0.0-alpha06.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/annotations/api/1.1.0-alpha03.txt b/annotations/api/1.1.0-alpha03.txt
new file mode 100644
index 0000000..7226b13
--- /dev/null
+++ b/annotations/api/1.1.0-alpha03.txt
@@ -0,0 +1,246 @@
+// Signature format: 3.0
+package androidx.annotation {
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface AnimRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface AnimatorRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface AnyRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface AnyThread {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface ArrayRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface AttrRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface BinderThread {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface BoolRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface CallSuper {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface CheckResult {
+    method public abstract String suggest() default "";
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.FIELD}) public @interface ColorInt {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.FIELD}) public @interface ColorLong {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface ColorRes {
+  }
+
+  @java.lang.annotation.Inherited @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public @interface ContentView {
+    method @LayoutRes public abstract int value();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface DimenRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Dimension {
+    method @DimensionUnit public abstract int unit() default androidx.annotation.Dimension.PX;
+    field public static final int DP = 0; // 0x0
+    field public static final int PX = 1; // 0x1
+    field public static final int SP = 2; // 0x2
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface DrawableRes {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface FloatRange {
+    method public abstract double from() default java.lang.Double.NEGATIVE_INFINITY;
+    method public abstract boolean fromInclusive() default true;
+    method public abstract double to() default java.lang.Double.POSITIVE_INFINITY;
+    method public abstract boolean toInclusive() default true;
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface FontRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface FractionRes {
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface GuardedBy {
+    method public abstract String value();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.FIELD}) public @interface HalfFloat {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface IdRes {
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public @interface InspectableProperty {
+    method public abstract int attributeId() default 0;
+    method public abstract androidx.annotation.InspectableProperty.EnumMap[] enumMapping() default {};
+    method public abstract androidx.annotation.InspectableProperty.FlagMap[] flagMapping() default {};
+    method public abstract boolean hasAttributeId() default true;
+    method public abstract String name() default "";
+    method public abstract androidx.annotation.InspectableProperty.ValueType valueType() default androidx.annotation.InspectableProperty.ValueType.INFERRED;
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface InspectableProperty.EnumMap {
+    method public abstract String name();
+    method public abstract int value();
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface InspectableProperty.FlagMap {
+    method public abstract int mask() default 0;
+    method public abstract String name();
+    method public abstract int target();
+  }
+
+  public enum InspectableProperty.ValueType {
+    enum_constant public static final androidx.annotation.InspectableProperty.ValueType COLOR;
+    enum_constant public static final androidx.annotation.InspectableProperty.ValueType GRAVITY;
+    enum_constant public static final androidx.annotation.InspectableProperty.ValueType INFERRED;
+    enum_constant public static final androidx.annotation.InspectableProperty.ValueType INT_ENUM;
+    enum_constant public static final androidx.annotation.InspectableProperty.ValueType INT_FLAG;
+    enum_constant public static final androidx.annotation.InspectableProperty.ValueType NONE;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface IntDef {
+    method public abstract boolean flag() default false;
+    method public abstract boolean open() default false;
+    method public abstract int[] value() default {};
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface IntRange {
+    method public abstract long from() default java.lang.Long.MIN_VALUE;
+    method public abstract long to() default java.lang.Long.MAX_VALUE;
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface IntegerRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface InterpolatorRes {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.PACKAGE, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.ANNOTATION_TYPE, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD}) public @interface Keep {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface LayoutRes {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface LongDef {
+    method public abstract boolean flag() default false;
+    method public abstract boolean open() default false;
+    method public abstract long[] value() default {};
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface MainThread {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface MenuRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface NavigationRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.ANNOTATION_TYPE, java.lang.annotation.ElementType.PACKAGE}) public @interface NonNull {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.ANNOTATION_TYPE, java.lang.annotation.ElementType.PACKAGE}) public @interface Nullable {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface PluralsRes {
+  }
+
+  @Dimension(unit=androidx.annotation.Dimension.PX) @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface Px {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface RawRes {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface RequiresApi {
+    method @IntRange(from=1) public abstract int api() default 1;
+    method @IntRange(from=1) public abstract int value() default 1;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR}) public @interface RequiresFeature {
+    method public abstract String enforcement();
+    method public abstract String name();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER}) public @interface RequiresPermission {
+    method public abstract String[] allOf() default {};
+    method public abstract String[] anyOf() default {};
+    method public abstract boolean conditional() default false;
+    method public abstract String value() default "";
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface RequiresPermission.Read {
+    method public abstract androidx.annotation.RequiresPermission value() default @androidx.annotation.RequiresPermission;
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface RequiresPermission.Write {
+    method public abstract androidx.annotation.RequiresPermission value() default @androidx.annotation.RequiresPermission;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PACKAGE}) public @interface RestrictTo {
+    method public abstract androidx.annotation.RestrictTo.Scope[] value();
+  }
+
+  public enum RestrictTo.Scope {
+    enum_constant @Deprecated public static final androidx.annotation.RestrictTo.Scope GROUP_ID;
+    enum_constant public static final androidx.annotation.RestrictTo.Scope LIBRARY;
+    enum_constant public static final androidx.annotation.RestrictTo.Scope LIBRARY_GROUP;
+    enum_constant public static final androidx.annotation.RestrictTo.Scope LIBRARY_GROUP_PREFIX;
+    enum_constant public static final androidx.annotation.RestrictTo.Scope SUBCLASSES;
+    enum_constant public static final androidx.annotation.RestrictTo.Scope TESTS;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface Size {
+    method public abstract long max() default java.lang.Long.MAX_VALUE;
+    method public abstract long min() default java.lang.Long.MIN_VALUE;
+    method public abstract long multiple() default 1;
+    method public abstract long value() default -1;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface StringDef {
+    method public abstract boolean open() default false;
+    method public abstract String[] value() default {};
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface StringRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface StyleRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface StyleableRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD}) public @interface TransitionRes {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface UiThread {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface VisibleForTesting {
+    method @ProductionVisibility public abstract int otherwise() default androidx.annotation.VisibleForTesting.PRIVATE;
+    field public static final int NONE = 5; // 0x5
+    field public static final int PACKAGE_PRIVATE = 3; // 0x3
+    field public static final int PRIVATE = 2; // 0x2
+    field public static final int PROTECTED = 4; // 0x4
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.PARAMETER}) public @interface WorkerThread {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface XmlRes {
+  }
+
+}
+
diff --git a/annotations/api/restricted_1.1.0-alpha03.txt b/annotations/api/restricted_1.1.0-alpha03.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/annotations/api/restricted_1.1.0-alpha03.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/appcompat/api/1.1.0-alpha04.ignore b/appcompat/api/1.1.0-alpha04.ignore
new file mode 100644
index 0000000..f8fc8c9
--- /dev/null
+++ b/appcompat/api/1.1.0-alpha04.ignore
@@ -0,0 +1,5 @@
+// Baseline format: 1.0
+RemovedPackage: androidx.appcompat.content.res:
+    Removed package androidx.appcompat.content.res
+
+
diff --git a/appcompat/api/1.1.0-alpha04.txt b/appcompat/api/1.1.0-alpha04.txt
new file mode 100644
index 0000000..fdf6fc5
--- /dev/null
+++ b/appcompat/api/1.1.0-alpha04.txt
@@ -0,0 +1,980 @@
+// Signature format: 3.0
+package androidx.appcompat.app {
+
+  public abstract class ActionBar {
+    ctor public ActionBar();
+    method public abstract void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+    method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!);
+    method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+    method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
+    method @Deprecated public abstract void addTab(androidx.appcompat.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 @Deprecated public abstract int getNavigationItemCount();
+    method @Deprecated public abstract int getNavigationMode();
+    method @Deprecated public abstract int getSelectedNavigationIndex();
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab? getSelectedTab();
+    method public abstract CharSequence? getSubtitle();
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! getTabAt(int);
+    method @Deprecated public abstract int getTabCount();
+    method public android.content.Context! getThemedContext();
+    method public abstract CharSequence? getTitle();
+    method public abstract void hide();
+    method public boolean isHideOnContentScrollEnabled();
+    method public abstract boolean isShowing();
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! newTab();
+    method @Deprecated public abstract void removeAllTabs();
+    method public abstract void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+    method @Deprecated public abstract void removeTab(androidx.appcompat.app.ActionBar.Tab!);
+    method @Deprecated public abstract void removeTabAt(int);
+    method @Deprecated public abstract void selectTab(androidx.appcompat.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!, androidx.appcompat.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(CharSequence?);
+    method public void setHomeActionContentDescription(@StringRes int);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
+    method public void setHomeAsUpIndicator(@DrawableRes int);
+    method public void setHomeButtonEnabled(boolean);
+    method public abstract void setIcon(@DrawableRes int);
+    method public abstract void setIcon(android.graphics.drawable.Drawable!);
+    method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
+    method public abstract void setLogo(@DrawableRes int);
+    method public abstract void setLogo(android.graphics.drawable.Drawable!);
+    method @Deprecated public abstract void setNavigationMode(int);
+    method @Deprecated public abstract void setSelectedNavigationItem(int);
+    method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method public abstract void setSubtitle(CharSequence!);
+    method public abstract void setSubtitle(int);
+    method public abstract void setTitle(CharSequence!);
+    method public abstract void setTitle(@StringRes 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 @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
+    field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
+    field @Deprecated public static final 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(androidx.appcompat.app.ActionBar.LayoutParams!);
+    ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+    field public int gravity;
+  }
+
+  public static interface ActionBar.OnMenuVisibilityListener {
+    method public void onMenuVisibilityChanged(boolean);
+  }
+
+  @Deprecated public static interface ActionBar.OnNavigationListener {
+    method @Deprecated public boolean onNavigationItemSelected(int, long);
+  }
+
+  @Deprecated public abstract static class ActionBar.Tab {
+    ctor @Deprecated public ActionBar.Tab();
+    method @Deprecated public abstract CharSequence! getContentDescription();
+    method @Deprecated public abstract android.view.View! getCustomView();
+    method @Deprecated public abstract android.graphics.drawable.Drawable! getIcon();
+    method @Deprecated public abstract int getPosition();
+    method @Deprecated public abstract Object! getTag();
+    method @Deprecated public abstract CharSequence! getText();
+    method @Deprecated public abstract void select();
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(@StringRes int);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(CharSequence!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(android.view.View!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(int);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(android.graphics.drawable.Drawable!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
+    method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
+    field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
+  }
+
+  @Deprecated public static interface ActionBar.TabListener {
+    method @Deprecated public void onTabReselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+    method @Deprecated public void onTabSelected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+    method @Deprecated public void onTabUnselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+  }
+
+  public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
+    ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
+    ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
+    method public androidx.appcompat.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(androidx.appcompat.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 interface ActionBarDrawerToggle.Delegate {
+    method public android.content.Context! getActionBarThemedContext();
+    method public android.graphics.drawable.Drawable! getThemeUpIndicator();
+    method public boolean isNavigationVisible();
+    method public void setActionBarDescription(@StringRes int);
+    method public void setActionBarUpIndicator(android.graphics.drawable.Drawable!, @StringRes int);
+  }
+
+  public static interface ActionBarDrawerToggle.DelegateProvider {
+    method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+  }
+
+  public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
+    ctor protected AlertDialog(android.content.Context);
+    ctor protected AlertDialog(android.content.Context, @StyleRes 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, CharSequence!, android.os.Message!);
+    method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public void setButton(int, 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(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, @StyleRes int);
+    method public androidx.appcompat.app.AlertDialog create();
+    method public android.content.Context getContext();
+    method public androidx.appcompat.app.AlertDialog.Builder! setAdapter(android.widget.ListAdapter!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
+    method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
+    method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
+    method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence[]!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence[]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButtonIcon(android.graphics.drawable.Drawable!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setOnKeyListener(android.content.DialogInterface.OnKeyListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence[]!, int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
+    method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
+    method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
+    method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
+    method public androidx.appcompat.app.AlertDialog! show();
+  }
+
+  public class AppCompatActivity extends androidx.fragment.app.FragmentActivity implements androidx.appcompat.app.ActionBarDrawerToggle.DelegateProvider androidx.appcompat.app.AppCompatCallback androidx.core.app.TaskStackBuilder.SupportParentable {
+    ctor public AppCompatActivity();
+    method public androidx.appcompat.app.AppCompatDelegate getDelegate();
+    method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+    method public androidx.appcompat.app.ActionBar? getSupportActionBar();
+    method public android.content.Intent? getSupportParentActivityIntent();
+    method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+    method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+    method protected void onNightModeChanged(int);
+    method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+    method @CallSuper public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
+    method @CallSuper public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
+    method @Deprecated public void onSupportContentChanged();
+    method public boolean onSupportNavigateUp();
+    method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+    method public void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+    method @Deprecated public void setSupportProgress(int);
+    method @Deprecated public void setSupportProgressBarIndeterminate(boolean);
+    method @Deprecated public void setSupportProgressBarIndeterminateVisibility(boolean);
+    method @Deprecated public void setSupportProgressBarVisibility(boolean);
+    method public androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.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 interface AppCompatCallback {
+    method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+    method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+    method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.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 void attachBaseContext(android.content.Context!);
+    method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+    method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback?);
+    method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
+    method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
+    method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+    method public static int getDefaultNightMode();
+    method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+    method public int getLocalNightMode();
+    method public abstract android.view.MenuInflater! getMenuInflater();
+    method public abstract androidx.appcompat.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(@LayoutRes 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(androidx.appcompat.widget.Toolbar?);
+    method public void setTheme(@StyleRes int);
+    method public abstract void setTitle(CharSequence?);
+    method public abstract androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.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 @Deprecated public static final int MODE_NIGHT_AUTO = 0; // 0x0
+    field public static final int MODE_NIGHT_AUTO_BATTERY = 3; // 0x3
+    field @Deprecated public static final int MODE_NIGHT_AUTO_TIME = 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_UNSPECIFIED = -100; // 0xffffff9c
+    field public static final int MODE_NIGHT_YES = 2; // 0x2
+  }
+
+  public class AppCompatDialog extends android.app.Dialog implements androidx.appcompat.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 androidx.appcompat.app.AppCompatDelegate! getDelegate();
+    method public androidx.appcompat.app.ActionBar! getSupportActionBar();
+    method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+    method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+    method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
+    method public boolean supportRequestWindowFeature(int);
+  }
+
+  public class AppCompatDialogFragment extends androidx.fragment.app.DialogFragment {
+    ctor public AppCompatDialogFragment();
+  }
+
+  public class AppCompatViewInflater {
+    ctor public AppCompatViewInflater();
+    method protected androidx.appcompat.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatButton createButton(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatCheckBox createCheckBox(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatEditText createEditText(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatImageButton createImageButton(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatImageView createImageView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatRadioButton createRadioButton(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatRatingBar createRatingBar(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatSeekBar createSeekBar(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.AppCompatToggleButton createToggleButton(android.content.Context!, android.util.AttributeSet!);
+    method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
+  }
+
+}
+
+package androidx.appcompat.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 @ColorInt public int getColor();
+    method public int getDirection();
+    method public float getGapSize();
+    method public int getOpacity();
+    method public final android.graphics.Paint! getPaint();
+    method @FloatRange(from=0.0, to=1.0) 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(@ColorInt int);
+    method public void setColorFilter(android.graphics.ColorFilter!);
+    method public void setDirection(int);
+    method public void setGapSize(float);
+    method public void setProgress(@FloatRange(from=0.0, to=1.0) 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 androidx.appcompat.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 CharSequence! getSubtitle();
+    method public Object! getTag();
+    method public abstract 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(CharSequence!);
+    method public abstract void setSubtitle(int);
+    method public void setTag(Object!);
+    method public abstract void setTitle(CharSequence!);
+    method public abstract void setTitle(int);
+    method public void setTitleOptionalHint(boolean);
+  }
+
+  public static interface ActionMode.Callback {
+    method public boolean onActionItemClicked(androidx.appcompat.view.ActionMode!, android.view.MenuItem!);
+    method public boolean onCreateActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+    method public void onDestroyActionMode(androidx.appcompat.view.ActionMode!);
+    method public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+  }
+
+  public interface CollapsibleActionView {
+    method public void onActionViewCollapsed();
+    method public void onActionViewExpanded();
+  }
+
+  public class ContextThemeWrapper extends android.content.ContextWrapper {
+    ctor public ContextThemeWrapper();
+    ctor public ContextThemeWrapper(android.content.Context!, @StyleRes 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 androidx.appcompat.widget {
+
+  public class ActionMenuView extends androidx.appcompat.widget.LinearLayoutCompat {
+    ctor public ActionMenuView(android.content.Context!);
+    ctor public ActionMenuView(android.content.Context!, android.util.AttributeSet!);
+    method public void dismissPopupMenus();
+    method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+    method protected androidx.appcompat.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(androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener!);
+    method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+    method public void setPopupTheme(@StyleRes int);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class ActionMenuView.LayoutParams extends androidx.appcompat.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(androidx.appcompat.widget.ActionMenuView.LayoutParams!);
+    ctor public ActionMenuView.LayoutParams(int, int);
+    field @android.view.ViewDebug.ExportedProperty public int cellsUsed;
+    field @android.view.ViewDebug.ExportedProperty public boolean expandable;
+    field @android.view.ViewDebug.ExportedProperty public int extraPixels;
+    field @android.view.ViewDebug.ExportedProperty public boolean isOverflowButton;
+    field @android.view.ViewDebug.ExportedProperty public boolean preventEdgeOffset;
+  }
+
+  public static interface ActionMenuView.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem!);
+  }
+
+  public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
+  }
+
+  public class AppCompatButton extends android.widget.Button implements androidx.core.widget.AutoSizeableTextView androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method public void setSupportAllCaps(boolean);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
+  }
+
+  public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.core.view.TintableBackgroundView androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) 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 androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
+  }
+
+  public class AppCompatImageButton extends android.widget.ImageButton implements androidx.core.view.TintableBackgroundView androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportImageTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
+  }
+
+  public class AppCompatImageView extends android.widget.ImageView implements androidx.core.view.TintableBackgroundView androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportImageTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
+  }
+
+  public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
+  }
+
+  public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.core.view.TintableBackgroundView androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) 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 androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+  }
+
+  public class AppCompatTextView extends android.widget.TextView implements androidx.core.widget.AutoSizeableTextView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+    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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+    method public androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParamsCompat();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+    method public void setPrecomputedText(androidx.core.text.PrecomputedTextCompat);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+    method public void setTextAppearance(android.content.Context!, int);
+    method public void setTextFuture(java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat>?);
+    method public void setTextMetricsParamsCompat(androidx.core.text.PrecomputedTextCompat.Params);
+  }
+
+  public class AppCompatToggleButton extends android.widget.ToggleButton {
+    ctor public AppCompatToggleButton(android.content.Context!);
+    ctor public AppCompatToggleButton(android.content.Context!, android.util.AttributeSet!);
+    ctor public AppCompatToggleButton(android.content.Context!, android.util.AttributeSet!, 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 androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+    method protected androidx.appcompat.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(androidx.appcompat.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?, @AttrRes int);
+    ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int, @StyleRes 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 @StyleRes public int getAnimationStyle();
+    method public android.graphics.drawable.Drawable? getBackground();
+    method public android.graphics.Rect? getEpicenterBounds();
+    method public int getHeight();
+    method public int getHorizontalOffset();
+    method public int getInputMethodMode();
+    method public android.widget.ListView? getListView();
+    method public int getPromptPosition();
+    method public 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(@StyleRes int);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setContentWidth(int);
+    method public void setDropDownGravity(int);
+    method public void setEpicenterBounds(android.graphics.Rect?);
+    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, @AttrRes int, @StyleRes 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(@MenuRes int);
+    method public void setGravity(int);
+    method public void setOnDismissListener(androidx.appcompat.widget.PopupMenu.OnDismissListener?);
+    method public void setOnMenuItemClickListener(androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener?);
+    method public void show();
+  }
+
+  public static interface PopupMenu.OnDismissListener {
+    method public void onDismiss(androidx.appcompat.widget.PopupMenu!);
+  }
+
+  public static interface PopupMenu.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem!);
+  }
+
+  public class SearchView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.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 CharSequence! getQuery();
+    method public CharSequence? getQueryHint();
+    method public androidx.cursoradapter.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(androidx.appcompat.widget.SearchView.OnCloseListener!);
+    method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener!);
+    method public void setOnQueryTextListener(androidx.appcompat.widget.SearchView.OnQueryTextListener!);
+    method public void setOnSearchClickListener(android.view.View.OnClickListener!);
+    method public void setOnSuggestionListener(androidx.appcompat.widget.SearchView.OnSuggestionListener!);
+    method public void setQuery(CharSequence!, boolean);
+    method public void setQueryHint(CharSequence?);
+    method public void setQueryRefinementEnabled(boolean);
+    method public void setSearchableInfo(android.app.SearchableInfo!);
+    method public void setSubmitButtonEnabled(boolean);
+    method public void setSuggestionsAdapter(androidx.cursoradapter.widget.CursorAdapter!);
+  }
+
+  public static interface SearchView.OnCloseListener {
+    method public boolean onClose();
+  }
+
+  public static interface SearchView.OnQueryTextListener {
+    method public boolean onQueryTextChange(String!);
+    method public boolean onQueryTextSubmit(String!);
+  }
+
+  public static interface SearchView.OnSuggestionListener {
+    method public boolean onSuggestionClick(int);
+    method public boolean onSuggestionSelect(int);
+  }
+
+  public class ShareActionProvider extends androidx.core.view.ActionProvider {
+    ctor public ShareActionProvider(android.content.Context!);
+    method public android.view.View! onCreateActionView();
+    method public void setOnShareTargetSelectedListener(androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener!);
+    method public void setShareHistoryFileName(String!);
+    method public void setShareIntent(android.content.Intent!);
+    field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+  }
+
+  public static interface ShareActionProvider.OnShareTargetSelectedListener {
+    method public boolean onShareTargetSelected(androidx.appcompat.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 CharSequence! getTextOff();
+    method public 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(CharSequence!);
+    method public void setTextOn(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 interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
+    method public android.content.res.Resources.Theme? getDropDownViewTheme();
+    method public 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 androidx.appcompat.widget.Toolbar.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+    method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+    method public CharSequence? getCollapseContentDescription();
+    method public android.graphics.drawable.Drawable? getCollapseIcon();
+    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 CharSequence! getLogoDescription();
+    method public android.view.Menu! getMenu();
+    method public CharSequence? getNavigationContentDescription();
+    method public android.graphics.drawable.Drawable? getNavigationIcon();
+    method public android.graphics.drawable.Drawable? getOverflowIcon();
+    method public int getPopupTheme();
+    method public CharSequence! getSubtitle();
+    method public 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(@MenuRes int);
+    method public boolean isOverflowMenuShowing();
+    method public void setCollapseContentDescription(@StringRes int);
+    method public void setCollapseContentDescription(CharSequence?);
+    method public void setCollapseIcon(@DrawableRes int);
+    method public void setCollapseIcon(android.graphics.drawable.Drawable?);
+    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(@DrawableRes int);
+    method public void setLogo(android.graphics.drawable.Drawable!);
+    method public void setLogoDescription(@StringRes int);
+    method public void setLogoDescription(CharSequence!);
+    method public void setNavigationContentDescription(@StringRes int);
+    method public void setNavigationContentDescription(CharSequence?);
+    method public void setNavigationIcon(@DrawableRes int);
+    method public void setNavigationIcon(android.graphics.drawable.Drawable?);
+    method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
+    method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
+    method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+    method public void setPopupTheme(@StyleRes int);
+    method public void setSubtitle(@StringRes int);
+    method public void setSubtitle(CharSequence!);
+    method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
+    method public void setSubtitleTextColor(@ColorInt int);
+    method public void setSubtitleTextColor(android.content.res.ColorStateList);
+    method public void setTitle(@StringRes int);
+    method public void setTitle(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!, @StyleRes int);
+    method public void setTitleTextColor(@ColorInt int);
+    method public void setTitleTextColor(android.content.res.ColorStateList);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class Toolbar.LayoutParams extends androidx.appcompat.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(androidx.appcompat.widget.Toolbar.LayoutParams!);
+    ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+  }
+
+  public static interface Toolbar.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem!);
+  }
+
+  public static class Toolbar.SavedState extends androidx.customview.view.AbsSavedState {
+    ctor public Toolbar.SavedState(android.os.Parcel!);
+    ctor public Toolbar.SavedState(android.os.Parcel!, ClassLoader!);
+    ctor public Toolbar.SavedState(android.os.Parcelable!);
+    field public static final android.os.Parcelable.Creator<androidx.appcompat.widget.Toolbar.SavedState>! CREATOR;
+  }
+
+  public class TooltipCompat {
+    method public static void setTooltipText(android.view.View, CharSequence?);
+  }
+
+}
+
diff --git a/appcompat/api/current.txt b/appcompat/api/current.txt
index 0b1a7fa..fdf6fc5 100644
--- a/appcompat/api/current.txt
+++ b/appcompat/api/current.txt
@@ -274,7 +274,6 @@
     method public abstract void onPostCreate(android.os.Bundle!);
     method public abstract void onPostResume();
     method public abstract void onSaveInstanceState(android.os.Bundle!);
-    method public void onSetTheme(@StyleRes int);
     method public abstract void onStart();
     method public abstract void onStop();
     method public abstract boolean requestWindowFeature(int);
@@ -286,6 +285,7 @@
     method public abstract void setHandleNativeActionModesEnabled(boolean);
     method public abstract void setLocalNightMode(int);
     method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+    method public void setTheme(@StyleRes int);
     method public abstract void setTitle(CharSequence?);
     method public abstract androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
     field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
diff --git a/appcompat/api/res-1.1.0-alpha04.txt b/appcompat/api/res-1.1.0-alpha04.txt
new file mode 100644
index 0000000..b171b18
--- /dev/null
+++ b/appcompat/api/res-1.1.0-alpha04.txt
@@ -0,0 +1,366 @@
+style TextAppearance_AppCompat
+style TextAppearance_AppCompat_Body1
+style TextAppearance_AppCompat_Body2
+style TextAppearance_AppCompat_Button
+style TextAppearance_AppCompat_Caption
+style TextAppearance_AppCompat_Display1
+style TextAppearance_AppCompat_Display2
+style TextAppearance_AppCompat_Display3
+style TextAppearance_AppCompat_Display4
+style TextAppearance_AppCompat_Headline
+style TextAppearance_AppCompat_Inverse
+style TextAppearance_AppCompat_Large
+style TextAppearance_AppCompat_Large_Inverse
+style TextAppearance_AppCompat_Light_SearchResult_Subtitle
+style TextAppearance_AppCompat_Light_SearchResult_Title
+style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large
+style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small
+style TextAppearance_AppCompat_Medium
+style TextAppearance_AppCompat_Medium_Inverse
+style TextAppearance_AppCompat_Menu
+style TextAppearance_AppCompat_SearchResult_Subtitle
+style TextAppearance_AppCompat_SearchResult_Title
+style TextAppearance_AppCompat_Small
+style TextAppearance_AppCompat_Small_Inverse
+style TextAppearance_AppCompat_Subhead
+style TextAppearance_AppCompat_Subhead_Inverse
+style TextAppearance_AppCompat_Title
+style TextAppearance_AppCompat_Title_Inverse
+style TextAppearance_AppCompat_Widget_ActionBar_Menu
+style TextAppearance_AppCompat_Widget_ActionBar_Subtitle
+style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse
+style TextAppearance_AppCompat_Widget_ActionBar_Title
+style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse
+style TextAppearance_AppCompat_Widget_ActionMode_Subtitle
+style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse
+style TextAppearance_AppCompat_Widget_ActionMode_Title
+style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse
+style TextAppearance_AppCompat_Widget_Button
+style TextAppearance_AppCompat_Widget_Button_Borderless_Colored
+style TextAppearance_AppCompat_Widget_Button_Colored
+style TextAppearance_AppCompat_Widget_Button_Inverse
+style TextAppearance_AppCompat_Widget_DropDownItem
+style TextAppearance_AppCompat_Widget_PopupMenu_Header
+style TextAppearance_AppCompat_Widget_PopupMenu_Large
+style TextAppearance_AppCompat_Widget_PopupMenu_Small
+style TextAppearance_AppCompat_Widget_Switch
+style TextAppearance_AppCompat_Widget_TextView_SpinnerItem
+style Theme_AppCompat
+style Theme_AppCompat_DayNight
+style Theme_AppCompat_DayNight_DarkActionBar
+style Theme_AppCompat_DayNight_Dialog
+style Theme_AppCompat_DayNight_Dialog_Alert
+style Theme_AppCompat_DayNight_Dialog_MinWidth
+style Theme_AppCompat_DayNight_DialogWhenLarge
+style Theme_AppCompat_DayNight_NoActionBar
+style Theme_AppCompat_Dialog
+style Theme_AppCompat_Dialog_Alert
+style Theme_AppCompat_Dialog_MinWidth
+style Theme_AppCompat_DialogWhenLarge
+style Theme_AppCompat_Light
+style Theme_AppCompat_Light_DarkActionBar
+style Theme_AppCompat_Light_Dialog
+style Theme_AppCompat_Light_Dialog_Alert
+style Theme_AppCompat_Light_Dialog_MinWidth
+style Theme_AppCompat_Light_DialogWhenLarge
+style Theme_AppCompat_Light_NoActionBar
+style Theme_AppCompat_NoActionBar
+style ThemeOverlay_AppCompat
+style ThemeOverlay_AppCompat_ActionBar
+style ThemeOverlay_AppCompat_Dark
+style ThemeOverlay_AppCompat_Dark_ActionBar
+style ThemeOverlay_AppCompat_DayNight
+style ThemeOverlay_AppCompat_DayNight_ActionBar
+style ThemeOverlay_AppCompat_Dialog
+style ThemeOverlay_AppCompat_Dialog_Alert
+style ThemeOverlay_AppCompat_Light
+style Widget_AppCompat_ActionBar
+style Widget_AppCompat_ActionBar_Solid
+style Widget_AppCompat_ActionBar_TabBar
+style Widget_AppCompat_ActionBar_TabText
+style Widget_AppCompat_ActionBar_TabView
+style Widget_AppCompat_ActionButton
+style Widget_AppCompat_ActionButton_CloseMode
+style Widget_AppCompat_ActionButton_Overflow
+style Widget_AppCompat_ActionMode
+style Widget_AppCompat_AutoCompleteTextView
+style Widget_AppCompat_Button
+style Widget_AppCompat_Button_Borderless
+style Widget_AppCompat_Button_Borderless_Colored
+style Widget_AppCompat_Button_ButtonBar_AlertDialog
+style Widget_AppCompat_Button_Colored
+style Widget_AppCompat_Button_Small
+style Widget_AppCompat_ButtonBar
+style Widget_AppCompat_ButtonBar_AlertDialog
+style Widget_AppCompat_CompoundButton_CheckBox
+style Widget_AppCompat_CompoundButton_RadioButton
+style Widget_AppCompat_CompoundButton_Switch
+style Widget_AppCompat_DrawerArrowToggle
+style Widget_AppCompat_DropDownItem_Spinner
+style Widget_AppCompat_EditText
+style Widget_AppCompat_ImageButton
+style Widget_AppCompat_Light_ActionBar
+style Widget_AppCompat_Light_ActionBar_Solid
+style Widget_AppCompat_Light_ActionBar_Solid_Inverse
+style Widget_AppCompat_Light_ActionBar_TabBar
+style Widget_AppCompat_Light_ActionBar_TabBar_Inverse
+style Widget_AppCompat_Light_ActionBar_TabText
+style Widget_AppCompat_Light_ActionBar_TabText_Inverse
+style Widget_AppCompat_Light_ActionBar_TabView
+style Widget_AppCompat_Light_ActionBar_TabView_Inverse
+style Widget_AppCompat_Light_ActionButton
+style Widget_AppCompat_Light_ActionButton_CloseMode
+style Widget_AppCompat_Light_ActionButton_Overflow
+style Widget_AppCompat_Light_ActionMode_Inverse
+style Widget_AppCompat_Light_AutoCompleteTextView
+style Widget_AppCompat_Light_DropDownItem_Spinner
+style Widget_AppCompat_Light_ListPopupWindow
+style Widget_AppCompat_Light_ListView_DropDown
+style Widget_AppCompat_Light_PopupMenu
+style Widget_AppCompat_Light_PopupMenu_Overflow
+style Widget_AppCompat_Light_SearchView
+style Widget_AppCompat_Light_Spinner_DropDown_ActionBar
+style Widget_AppCompat_ListPopupWindow
+style Widget_AppCompat_ListView
+style Widget_AppCompat_ListView_DropDown
+style Widget_AppCompat_ListView_Menu
+style Widget_AppCompat_PopupMenu
+style Widget_AppCompat_PopupMenu_Overflow
+style Widget_AppCompat_PopupWindow
+style Widget_AppCompat_ProgressBar
+style Widget_AppCompat_ProgressBar_Horizontal
+style Widget_AppCompat_RatingBar
+style Widget_AppCompat_RatingBar_Indicator
+style Widget_AppCompat_RatingBar_Small
+style Widget_AppCompat_SearchView
+style Widget_AppCompat_SearchView_ActionBar
+style Widget_AppCompat_SeekBar
+style Widget_AppCompat_SeekBar_Discrete
+style Widget_AppCompat_Spinner
+style Widget_AppCompat_Spinner_DropDown
+style Widget_AppCompat_Spinner_DropDown_ActionBar
+style Widget_AppCompat_Spinner_Underlined
+style Widget_AppCompat_TextView
+style Widget_AppCompat_TextView_SpinnerItem
+style Widget_AppCompat_Toolbar
+style Widget_AppCompat_Toolbar_Button_Navigation
+attr actionBarDivider
+attr actionBarItemBackground
+attr actionBarPopupTheme
+attr actionBarSize
+attr actionBarSplitStyle
+attr actionBarStyle
+attr actionBarTabBarStyle
+attr actionBarTabStyle
+attr actionBarTabTextStyle
+attr actionBarTheme
+attr actionBarWidgetTheme
+attr actionButtonStyle
+attr actionDropDownStyle
+attr actionLayout
+attr actionMenuTextAppearance
+attr actionMenuTextColor
+attr actionModeBackground
+attr actionModeCloseButtonStyle
+attr actionModeCloseDrawable
+attr actionModeCopyDrawable
+attr actionModeCutDrawable
+attr actionModeFindDrawable
+attr actionModePasteDrawable
+attr actionModeSelectAllDrawable
+attr actionModeShareDrawable
+attr actionModeSplitBackground
+attr actionModeStyle
+attr actionModeWebSearchDrawable
+attr actionOverflowButtonStyle
+attr actionOverflowMenuStyle
+attr actionProviderClass
+attr actionViewClass
+attr alertDialogStyle
+attr alertDialogTheme
+attr arrowHeadLength
+attr arrowShaftLength
+attr autoCompleteTextViewStyle
+attr autoSizeMaxTextSize
+attr autoSizeMinTextSize
+attr autoSizePresetSizes
+attr autoSizeStepGranularity
+attr autoSizeTextType
+attr background
+attr backgroundSplit
+attr backgroundStacked
+attr backgroundTint
+attr backgroundTintMode
+attr barLength
+attr borderlessButtonStyle
+attr buttonBarButtonStyle
+attr buttonBarNegativeButtonStyle
+attr buttonBarNeutralButtonStyle
+attr buttonBarPositiveButtonStyle
+attr buttonBarStyle
+attr buttonGravity
+attr buttonStyle
+attr buttonStyleSmall
+attr buttonTint
+attr buttonTintMode
+attr checkboxStyle
+attr checkedTextViewStyle
+attr closeIcon
+attr closeItemLayout
+attr collapseContentDescription
+attr collapseIcon
+attr color
+attr colorAccent
+attr colorBackgroundFloating
+attr colorButtonNormal
+attr colorControlActivated
+attr colorControlHighlight
+attr colorControlNormal
+attr colorError
+attr colorPrimary
+attr colorPrimaryDark
+attr commitIcon
+attr contentInsetEnd
+attr contentInsetEndWithActions
+attr contentInsetLeft
+attr contentInsetRight
+attr contentInsetStart
+attr contentInsetStartWithNavigation
+attr customNavigationLayout
+attr dialogCornerRadius
+attr dialogPreferredPadding
+attr dialogTheme
+attr displayOptions
+attr divider
+attr dividerHorizontal
+attr dividerPadding
+attr dividerVertical
+attr drawableSize
+attr drawerArrowStyle
+attr dropDownListViewStyle
+attr editTextBackground
+attr editTextColor
+attr editTextStyle
+attr elevation
+attr firstBaselineToTopHeight
+attr fontFamily
+attr fontVariationSettings
+attr gapBetweenBars
+attr goIcon
+attr height
+attr hideOnContentScroll
+attr homeAsUpIndicator
+attr homeLayout
+attr icon
+attr iconTint
+attr iconTintMode
+attr iconifiedByDefault
+attr imageButtonStyle
+attr indeterminateProgressStyle
+attr isLightTheme
+attr itemPadding
+attr lastBaselineToBottomHeight
+attr layout
+attr lineHeight
+attr listChoiceBackgroundIndicator
+attr listChoiceIndicatorMultipleAnimated
+attr listChoiceIndicatorSingleAnimated
+attr listDividerAlertDialog
+attr listPopupWindowStyle
+attr listPreferredItemHeight
+attr listPreferredItemHeightLarge
+attr listPreferredItemHeightSmall
+attr listPreferredItemPaddingEnd
+attr listPreferredItemPaddingLeft
+attr listPreferredItemPaddingRight
+attr listPreferredItemPaddingStart
+attr logo
+attr logoDescription
+attr maxButtonHeight
+attr measureWithLargestChild
+attr navigationContentDescription
+attr navigationIcon
+attr navigationMode
+attr overlapAnchor
+attr paddingEnd
+attr paddingStart
+attr panelBackground
+attr popupMenuStyle
+attr popupTheme
+attr popupWindowStyle
+attr preserveIconSpacing
+attr progressBarPadding
+attr progressBarStyle
+attr queryBackground
+attr queryHint
+attr radioButtonStyle
+attr ratingBarStyle
+attr ratingBarStyleIndicator
+attr ratingBarStyleSmall
+attr searchHintIcon
+attr searchIcon
+attr searchViewStyle
+attr seekBarStyle
+attr selectableItemBackground
+attr selectableItemBackgroundBorderless
+attr showAsAction
+attr showDividers
+attr showText
+attr spinBars
+attr spinnerDropDownItemStyle
+attr spinnerStyle
+attr splitTrack
+attr srcCompat
+attr state_above_anchor
+attr submitBackground
+attr subtitle
+attr subtitleTextAppearance
+attr subtitleTextColor
+attr subtitleTextStyle
+attr suggestionRowLayout
+layout support_simple_spinner_dropdown_item
+attr switchMinWidth
+attr switchPadding
+attr switchStyle
+attr switchTextAppearance
+attr textAllCaps
+attr textAppearanceLargePopupMenu
+attr textAppearanceListItem
+attr textAppearanceListItemSecondary
+attr textAppearanceListItemSmall
+attr textAppearancePopupMenuHeader
+attr textAppearanceSearchResultSubtitle
+attr textAppearanceSearchResultTitle
+attr textAppearanceSmallPopupMenu
+attr textColorAlertDialogListItem
+attr textLocale
+attr theme
+attr thickness
+attr thumbTextPadding
+attr thumbTint
+attr thumbTintMode
+attr tickMark
+attr tickMarkTint
+attr tickMarkTintMode
+attr tint
+attr tintMode
+attr title
+attr titleMargin
+attr titleMarginBottom
+attr titleMarginEnd
+attr titleMarginStart
+attr titleMarginTop
+attr titleMargins
+attr titleTextAppearance
+attr titleTextColor
+attr titleTextStyle
+attr toolbarNavigationButtonStyle
+attr toolbarStyle
+attr track
+attr trackTint
+attr trackTintMode
+attr voiceIcon
+attr windowActionBar
+attr windowActionBarOverlay
+attr windowActionModeOverlay
+attr windowNoTitle
diff --git a/appcompat/build.gradle b/appcompat/build.gradle
index 3c8cde2..2d6dd6f 100644
--- a/appcompat/build.gradle
+++ b/appcompat/build.gradle
@@ -1,7 +1,8 @@
-import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
 
+import static androidx.build.dependencies.DependenciesKt.*
+
 plugins {
     id("SupportAndroidLibraryPlugin")
 }
@@ -10,8 +11,8 @@
     api(project(":annotation"))
 
     api(project(":core"))
-    implementation(project(":collection"))
-    api(project(":cursoradapter"))
+    implementation("androidx.collection:collection:1.0.0")
+    api("androidx.cursoradapter:cursoradapter:1.0.0")
     api(project(":fragment"))
     api(project(":appcompat:appcompat-resources"))
     api("androidx.drawerlayout:drawerlayout:1.0.0")
diff --git a/appcompat/res-public/values/public_styles.xml b/appcompat/res-public/values/public_styles.xml
index aa1475e..a7cfee8 100644
--- a/appcompat/res-public/values/public_styles.xml
+++ b/appcompat/res-public/values/public_styles.xml
@@ -87,6 +87,8 @@
     <public type="style" name="ThemeOverlay.AppCompat.ActionBar"/>
     <public type="style" name="ThemeOverlay.AppCompat.Dark"/>
     <public type="style" name="ThemeOverlay.AppCompat.Dark.ActionBar"/>
+    <public type="style" name="ThemeOverlay.AppCompat.DayNight"/>
+    <public type="style" name="ThemeOverlay.AppCompat.DayNight.ActionBar"/>
     <public type="style" name="ThemeOverlay.AppCompat.Dialog"/>
     <public type="style" name="ThemeOverlay.AppCompat.Dialog.Alert"/>
     <public type="style" name="ThemeOverlay.AppCompat.Light"/>
diff --git a/appcompat/res/values-night/themes_daynight.xml b/appcompat/res/values-night/themes_daynight.xml
index 6d4c57d..1acf5c9 100644
--- a/appcompat/res/values-night/themes_daynight.xml
+++ b/appcompat/res/values-night/themes_daynight.xml
@@ -47,4 +47,7 @@
          {@candroidx.appcompat.app.app.AlertDialog} class. -->
     <style name="Theme.AppCompat.DayNight.Dialog.Alert" parent="Theme.AppCompat.Dialog.Alert" />
 
+    <!-- Variant of ThemeOverlay.AppCompat which switches to light/dark based on the night mode -->
+    <style name="ThemeOverlay.AppCompat.DayNight" parent="ThemeOverlay.AppCompat.Dark" />
+
 </resources>
\ No newline at end of file
diff --git a/appcompat/res/values/themes_daynight.xml b/appcompat/res/values/themes_daynight.xml
index 808ec8e..1ebf92f 100644
--- a/appcompat/res/values/themes_daynight.xml
+++ b/appcompat/res/values/themes_daynight.xml
@@ -47,4 +47,13 @@
          {@candroidx.appcompat.app.app.AlertDialog} class. -->
     <style name="Theme.AppCompat.DayNight.Dialog.Alert" parent="Theme.AppCompat.Light.Dialog.Alert" />
 
+    <!-- Variant of ThemeOverlay.AppCompat which switches to light/dark based on the night mode. -->
+    <style name="ThemeOverlay.AppCompat.DayNight" parent="ThemeOverlay.AppCompat.Light" />
+
+    <!-- Variant of ThemeOverlay.AppCompat.ActionBar which switches to light/dark based on the night mode. -->
+    <style name="ThemeOverlay.AppCompat.DayNight.ActionBar">
+        <item name="colorControlNormal">?android:attr/textColorPrimary</item>
+        <item name="searchViewStyle">@style/Widget.AppCompat.SearchView.ActionBar</item>
+    </style>
+
 </resources>
\ No newline at end of file
diff --git a/appcompat/resources/api/1.1.0-alpha04.txt b/appcompat/resources/api/1.1.0-alpha04.txt
new file mode 100644
index 0000000..990b059
--- /dev/null
+++ b/appcompat/resources/api/1.1.0-alpha04.txt
@@ -0,0 +1,35 @@
+// Signature format: 3.0
+package androidx.appcompat.content.res {
+
+  public final class AppCompatResources {
+    method public static android.content.res.ColorStateList! getColorStateList(android.content.Context, @ColorRes int);
+    method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+  }
+
+}
+
+package androidx.appcompat.graphics.drawable {
+
+  public class AnimatedStateListDrawableCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback androidx.core.graphics.drawable.TintAwareDrawable {
+    ctor public AnimatedStateListDrawableCompat();
+    method public void addState(int[], android.graphics.drawable.Drawable, int);
+    method public void addState(int[]!, android.graphics.drawable.Drawable!);
+    method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
+    method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat? create(android.content.Context, @DrawableRes int, android.content.res.Resources.Theme?);
+    method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat! 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 final android.graphics.drawable.Drawable.ConstantState! getConstantState();
+    method public int getOpacity();
+    method public void inflate(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 invalidateDrawable(android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter!);
+    method public void setDither(boolean);
+    method public void setEnterFadeDuration(int);
+    method public void setExitFadeDuration(int);
+    method public void unscheduleDrawable(android.graphics.drawable.Drawable, Runnable);
+  }
+
+}
+
diff --git a/appcompat/resources/api/res-1.1.0-alpha04.txt b/appcompat/resources/api/res-1.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appcompat/resources/api/res-1.1.0-alpha04.txt
diff --git a/appcompat/resources/build.gradle b/appcompat/resources/build.gradle
index d1816eb..ebdf4d3 100644
--- a/appcompat/resources/build.gradle
+++ b/appcompat/resources/build.gradle
@@ -13,10 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import static androidx.build.dependencies.DependenciesKt.*
+
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
 
+import static androidx.build.dependencies.DependenciesKt.*
+
 plugins {
     id("SupportAndroidLibraryPlugin")
 }
@@ -24,9 +26,8 @@
 dependencies {
     api(project(":annotation"))
 
-    api(project(":core"))
-    api(project(":collection"))
-    api("androidx.cursoradapter:cursoradapter:1.0.0")
+    api("androidx.core:core:1.0.1")
+    implementation("androidx.collection:collection:1.0.0")
     api("androidx.vectordrawable:vectordrawable:1.0.1")
     api("androidx.vectordrawable:vectordrawable-animated:1.0.0")
 
diff --git a/appcompat/resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java b/appcompat/resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
index 2bd036f..025d2c8 100644
--- a/appcompat/resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
+++ b/appcompat/resources/src/main/java/androidx/appcompat/content/res/AppCompatResources.java
@@ -16,6 +16,7 @@
 
 package androidx.appcompat.content.res;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
@@ -42,6 +43,7 @@
  * Class for accessing an application's resources through AppCompat, and thus any backward
  * compatible functionality.
  */
+@SuppressLint("RestrictedAPI") // Temporary until we have correct restriction scopes for 1.0
 public final class AppCompatResources {
 
     private static final String LOG_TAG = "AppCompatResources";
diff --git a/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java b/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
index a398233..03e3203 100644
--- a/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
+++ b/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
@@ -39,11 +39,11 @@
 import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.appcompat.resources.R;
 import androidx.appcompat.widget.ResourceManagerInternal;
 import androidx.collection.LongSparseArray;
 import androidx.collection.SparseArrayCompat;
 import androidx.core.graphics.drawable.TintAwareDrawable;
-import androidx.appcompat.resources.R;
 import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
 import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
 
@@ -87,6 +87,7 @@
  * {@link android.R.attr#state_pressed}
  * @see ResourceManagerInternal#getDrawable(Context, int)
  */
+@SuppressLint("RestrictedAPI") // Temporary until we have correct restriction scopes for 1.0
 public class AnimatedStateListDrawableCompat extends StateListDrawable
         implements TintAwareDrawable {
     private static final String LOGTAG = AnimatedStateListDrawableCompat.class.getSimpleName();
diff --git a/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawable.java b/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawable.java
index 65a3878..e501460 100644
--- a/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawable.java
+++ b/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/StateListDrawable.java
@@ -22,6 +22,7 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 import static androidx.core.content.res.TypedArrayUtils.obtainAttributes;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
@@ -76,6 +77,7 @@
  * @hide
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
+@SuppressLint("RestrictedAPI") // Temporary until we have correct restriction scopes for 1.0
 class StateListDrawable extends DrawableContainer {
     private static final String TAG = "StateListDrawable";
     private static final boolean DEBUG = false;
diff --git a/appcompat/resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java b/appcompat/resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
index 58b1d10..1e788d5 100644
--- a/appcompat/resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
+++ b/appcompat/resources/src/main/java/androidx/appcompat/widget/DrawableUtils.java
@@ -18,6 +18,7 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
+import android.annotation.SuppressLint;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
@@ -39,6 +40,7 @@
 
 /** @hide */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
+@SuppressLint("RestrictedAPI") // Temporary until we have correct restriction scopes for 1.0
 public class DrawableUtils {
     private static final int[] CHECKED_STATE_SET = new int[]{android.R.attr.state_checked};
     private static final int[] EMPTY_STATE_SET = new int[0];
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index c34cc57..23c9a09 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -84,7 +84,7 @@
     @Override
     public void setTheme(@StyleRes final int resId) {
         super.setTheme(resId);
-        getDelegate().onSetTheme(resId);
+        getDelegate().setTheme(resId);
     }
 
     @Override
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index 6dca0e7..e0d27bb 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -316,7 +316,7 @@
      * This should be called from {@link Activity#setTheme(int)} to notify AppCompat of what
      * the current theme resource id is.
      */
-    public void onSetTheme(@StyleRes int themeResId) {
+    public void setTheme(@StyleRes int themeResId) {
     }
 
     /**
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index bc93b5e..f369f1d 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -591,7 +591,7 @@
     }
 
     @Override
-    public void onSetTheme(@StyleRes int themeResId) {
+    public void setTheme(@StyleRes int themeResId) {
         mThemeResId = themeResId;
     }
 
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
index d0443af..865d6f5 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
@@ -58,7 +58,7 @@
 
         final AppCompatDelegate delegate = getDelegate();
         // Make sure we provide the delegate with the current theme res id
-        delegate.onSetTheme(getThemeResId(context, theme));
+        delegate.setTheme(getThemeResId(context, theme));
 
         // This is a bit weird, but Dialog's are typically created and setup before being shown,
         // which means that we can't rely on onCreate() being called before a content view is set.
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java b/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
index 4775d45..4b83512 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
@@ -101,6 +102,9 @@
         setWillNotDraw(mIsSplit ? mSplitBackground == null :
                 mBackground == null && mStackedBackground == null);
         invalidate();
+        if (Build.VERSION.SDK_INT >= 21) {
+            invalidateOutline();
+        }
     }
 
     public void setStackedBackground(Drawable bg) {
@@ -119,6 +123,9 @@
         setWillNotDraw(mIsSplit ? mSplitBackground == null :
                 mBackground == null && mStackedBackground == null);
         invalidate();
+        if (Build.VERSION.SDK_INT >= 21) {
+            invalidateOutline();
+        }
     }
 
     public void setSplitBackground(Drawable bg) {
@@ -136,6 +143,9 @@
         setWillNotDraw(mIsSplit ? mSplitBackground == null :
                 mBackground == null && mStackedBackground == null);
         invalidate();
+        if (Build.VERSION.SDK_INT >= 21) {
+            invalidateOutline();
+        }
     }
 
     @Override
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java b/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java
index 635176a..4c92f45 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/SuggestionsAdapter.java
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import android.annotation.SuppressLint;
 import android.app.SearchManager;
 import android.app.SearchableInfo;
 import android.content.ComponentName;
@@ -55,6 +56,7 @@
 /**
  * Provides the contents for the suggestion drop-down list.in {@link SearchView}.
  */
+@SuppressLint("RestrictedAPI") // Temporary until we have correct restriction scopes for 1.0
 class SuggestionsAdapter extends ResourceCursorAdapter implements OnClickListener {
 
     private static final boolean DBG = false;
diff --git a/benchmark/api/1.0.0-alpha01.txt b/benchmark/api/1.0.0-alpha01.txt
new file mode 100644
index 0000000..d5985e3
--- /dev/null
+++ b/benchmark/api/1.0.0-alpha01.txt
@@ -0,0 +1,23 @@
+// Signature format: 3.0
+package androidx.benchmark {
+
+  public final class BenchmarkRule implements org.junit.rules.TestRule {
+    ctor public BenchmarkRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public androidx.benchmark.BenchmarkState getState();
+    method public inline void measure(kotlin.jvm.functions.Function1<? super androidx.benchmark.BenchmarkRule.Context,kotlin.Unit> block);
+    property public final androidx.benchmark.BenchmarkState state;
+  }
+
+  public final class BenchmarkRule.Context {
+    method public inline <T> T! runWithTimingDisabled(kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  public final class BenchmarkState {
+    method public boolean keepRunning();
+    method public void pauseTiming();
+    method public void resumeTiming();
+  }
+
+}
+
diff --git a/benchmark/api/current.txt b/benchmark/api/current.txt
new file mode 100644
index 0000000..d5985e3
--- /dev/null
+++ b/benchmark/api/current.txt
@@ -0,0 +1,23 @@
+// Signature format: 3.0
+package androidx.benchmark {
+
+  public final class BenchmarkRule implements org.junit.rules.TestRule {
+    ctor public BenchmarkRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public androidx.benchmark.BenchmarkState getState();
+    method public inline void measure(kotlin.jvm.functions.Function1<? super androidx.benchmark.BenchmarkRule.Context,kotlin.Unit> block);
+    property public final androidx.benchmark.BenchmarkState state;
+  }
+
+  public final class BenchmarkRule.Context {
+    method public inline <T> T! runWithTimingDisabled(kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  public final class BenchmarkState {
+    method public boolean keepRunning();
+    method public void pauseTiming();
+    method public void resumeTiming();
+  }
+
+}
+
diff --git a/benchmark/api/res-1.0.0-alpha01.txt b/benchmark/api/res-1.0.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/api/res-1.0.0-alpha01.txt
diff --git a/benchmark/api/restricted_1.0.0-alpha01.txt b/benchmark/api/restricted_1.0.0-alpha01.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/benchmark/api/restricted_1.0.0-alpha01.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/benchmark/api/restricted_current.txt b/benchmark/api/restricted_current.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/benchmark/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/benchmark/build.gradle b/benchmark/build.gradle
index babffd4..97a598e 100644
--- a/benchmark/build.gradle
+++ b/benchmark/build.gradle
@@ -29,7 +29,7 @@
     implementation(TEST_RUNNER)
 
     androidTestImplementation(JUNIT)
-    androidTestImplementation(KOTLIN_STDLIB)
+    implementation(KOTLIN_STDLIB)
 }
 
 supportLibrary {
diff --git a/benchmark/src/androidTest/AndroidManifest.xml b/benchmark/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..5413ace
--- /dev/null
+++ b/benchmark/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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="androidx.benchmark.test">
+    <!-- Important: disable debuggable for accurate performance results -->
+    <application
+        android:debuggable="false"
+        tools:replace="android:debuggable"/>
+</manifest>
diff --git a/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkRuleAnnotationTest.kt b/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkRuleAnnotationTest.kt
new file mode 100644
index 0000000..8769686
--- /dev/null
+++ b/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkRuleAnnotationTest.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.benchmark
+
+import androidx.test.filters.SmallTest
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class BenchmarkRuleAnnotationTest {
+    @Suppress("MemberVisibilityCanBePrivate") // intentionally public
+    // NOTE: not annotated, so will throw when state is accessed
+    val unannotatedRule = BenchmarkRule()
+
+    @Test(expected = IllegalStateException::class)
+    fun throwsIfNotAnnotated() {
+        unannotatedRule.state
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun throwsIfNotAnnotatedMeasure() {
+        unannotatedRule.measure { }
+    }
+}
diff --git a/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkRuleTest.kt b/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkRuleTest.kt
index a72ad3b..1978a60 100644
--- a/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkRuleTest.kt
+++ b/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkRuleTest.kt
@@ -16,20 +16,29 @@
 
 package androidx.benchmark
 
-import androidx.test.filters.SmallTest
+import androidx.test.filters.LargeTest
+import org.junit.Assert.assertTrue
+import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
+import java.util.concurrent.TimeUnit
 
-@SmallTest
+@LargeTest
 @RunWith(JUnit4::class)
 class BenchmarkRuleTest {
-    @Suppress("MemberVisibilityCanBePrivate") // intentionally public
-    // NOTE: not annotated, so will throw when state is accessed
-    val rule = BenchmarkRule()
+    @get:Rule
+    val benchmarkRule = BenchmarkRule()
 
-    @Test(expected = IllegalStateException::class)
-    fun throwsIfNotAnnotated() {
-        rule.state
+    @Test
+    fun runWithTimingDisabled() {
+        benchmarkRule.measure {
+            runWithTimingDisabled {
+                Thread.sleep(5)
+            }
+        }
+        val min = benchmarkRule.state.stats.min
+        assertTrue("minimum $min should be less than 1ms",
+            min < TimeUnit.MILLISECONDS.toNanos(1))
     }
 }
diff --git a/benchmark/src/androidTest/java/androidx/benchmark/TrivialBenchmark.kt b/benchmark/src/androidTest/java/androidx/benchmark/TrivialBenchmark.kt
index b267d6a..1560aa9 100644
--- a/benchmark/src/androidTest/java/androidx/benchmark/TrivialBenchmark.kt
+++ b/benchmark/src/androidTest/java/androidx/benchmark/TrivialBenchmark.kt
@@ -29,16 +29,12 @@
     val benchmarkRule = BenchmarkRule()
 
     @Test
-    fun nothing() {
-        val state = benchmarkRule.state
-        while (state.keepRunning()) {}
-    }
+    fun nothing() = benchmarkRule.measure { }
 
     @Test
     fun increment() {
-        val state = benchmarkRule.state
         var i = 0
-        while (state.keepRunning()) {
+        benchmarkRule.measure {
             i++
         }
     }
diff --git a/benchmark/src/main/java/androidx/benchmark/BenchmarkRule.java b/benchmark/src/main/java/androidx/benchmark/BenchmarkRule.java
deleted file mode 100644
index f1a8013..0000000
--- a/benchmark/src/main/java/androidx/benchmark/BenchmarkRule.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * 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.benchmark;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.app.Activity;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.test.platform.app.InstrumentationRegistry;
-
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-/**
- * Use this rule to make sure we report the status after the test success.
- *
- * <pre>
- * {@literal @}Rule public BenchmarkRule benchmarkRule = new BenchmarkRule();
- * {@literal @}Test public void functionName() {
- *     ...
- *     BenchmarkState state = benchmarkRule.getBenchmarkState();
- *     while (state.keepRunning()) {
- *         // DO YOUR TEST HERE!
- *     }
- *     ...
- * }
- * </pre>
- *
- * When test succeeded, the status report will use the key as
- * "functionName[optional subTestName]_*"
- *
- * Notice that optional subTestName can't be just numbers, that means each sub test needs to have a
- * name when using parameterization.
- */
-
-public class BenchmarkRule implements TestRule {
-    private static final String TAG = "BenchmarkRule";
-    @SuppressWarnings("WeakerAccess") // synthetic access
-    final BenchmarkState mState = new BenchmarkState();
-    @SuppressWarnings("WeakerAccess") // synthetic access
-    boolean mApplied = false;
-
-    @NonNull
-    public BenchmarkState getState() {
-        if (!mApplied) {
-            throw new IllegalStateException("Cannot get state before BenchmarkRule is applied"
-                    + " to a test. Check that your BenchmarkRule is annotated correctly"
-                    + " (@Rule in Java, @get:Rule in Kotlin).");
-        }
-        return mState;
-    }
-
-    @NonNull
-    @Override
-    public Statement apply(@NonNull final Statement base, @NonNull final Description description) {
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                mApplied = true;
-                String invokeMethodName = description.getMethodName();
-                Log.i(TAG, "Running " + description.getClassName() + "#" + invokeMethodName);
-
-                // validate and simplify the function name.
-                // First, remove the "test" prefix which normally comes from CTS test.
-                // Then make sure the [subTestName] is valid, not just numbers like [0].
-                if (invokeMethodName.startsWith("test")) {
-                    assertTrue("The test name " + invokeMethodName + " is too short",
-                            invokeMethodName.length() > 5);
-                    invokeMethodName = invokeMethodName.substring(4, 5).toLowerCase()
-                            + invokeMethodName.substring(5);
-                }
-
-                int index = invokeMethodName.lastIndexOf('[');
-                if (index > 0) {
-                    boolean allDigits = true;
-                    for (int i = index + 1; i < invokeMethodName.length() - 1; i++) {
-                        if (!Character.isDigit(invokeMethodName.charAt(i))) {
-                            allDigits = false;
-                            break;
-                        }
-                    }
-                    assertFalse("The name in [] can't contain only digits for " + invokeMethodName,
-                            allDigits);
-                }
-
-                base.evaluate();
-
-                InstrumentationRegistry.getInstrumentation().sendStatus(Activity.RESULT_OK,
-                        mState.getFullStatusReport(invokeMethodName));
-            }
-        };
-    }
-}
-
diff --git a/benchmark/src/main/java/androidx/benchmark/BenchmarkRule.kt b/benchmark/src/main/java/androidx/benchmark/BenchmarkRule.kt
new file mode 100644
index 0000000..e60e504
--- /dev/null
+++ b/benchmark/src/main/java/androidx/benchmark/BenchmarkRule.kt
@@ -0,0 +1,177 @@
+/*
+ * 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.benchmark
+
+import android.app.Activity
+import android.util.Log
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+
+/**
+ * JUnit rule for benchmarking code on an Android device.
+
+ * ```
+ * @get:Rule
+ * val benchmarkRule = BenchmarkRule();
+ *
+ * @Test
+ * fun myBenchmark() {
+ *     ...
+ *     benchmarkRule.benchmark {
+ *         doSomeWork()
+ *     }
+ *     ...
+ * }
+ * ```
+ *
+ * Benchmark results will be output:
+ * - Summary in AndroidStudio in the test log,
+ * - In simple form in Logcat with the tag "Benchmark"
+ * - In csv form in Logcat with the tag "BenchmarkCsv"
+ * - To the instrumentation status result Bundle on the gradle command line
+ *
+ * Every test in the Class using this @Rule must contain a single benchmark.
+ */
+class BenchmarkRule : TestRule {
+    private val internalState = BenchmarkState()
+
+    val state: BenchmarkState
+    get() {
+        if (!applied) {
+            throw IllegalStateException(
+                "Cannot get state before BenchmarkRule is applied to a test. Check that your " +
+                        "BenchmarkRule is annotated correctly (@Rule in Java, @get:Rule in Kotlin)."
+            )
+        }
+        return internalState
+    }
+
+    internal // synthetic access
+    var applied = false
+
+    /** @hide */
+    val context = Context()
+
+    /**
+     * Handle used for controlling timing during [measure].
+     */
+    inner class Context internal constructor() {
+        /**
+         * Disable timing for a block of code.
+         *
+         * Used for disabling timing for work that isn't part of the benchmark:
+         * - When constructing per-loop randomized inputs for operations with caching,
+         * - Controlling which parts of multi-stage work are measured (e.g. View measure/layout)
+         * - Disabling timing during per-loop verification
+         *
+         * ```
+         * @Test
+         * fun bitmapProcessing() = benchmarkRule.measure {
+         *     val input: Bitmap = runWithTimingDisabled { constructTestBitmap() }
+         *     processBitmap(input)
+         * }
+         * ```
+         */
+        inline fun <T> runWithTimingDisabled(block: () -> T): T {
+            state.pauseTiming()
+            val ret = block()
+            state.resumeTiming()
+            return ret
+        }
+    }
+
+    /**
+     * Benchmark a block of code.
+     *
+     * ```
+     * @get:Rule
+     * val benchmarkRule = BenchmarkRule();
+     *
+     * @Test
+     * fun myBenchmark() {
+     *     ...
+     *     benchmarkRule.benchmark {
+     *         doSomeWork()
+     *     }
+     *     ...
+     * }
+     * ```
+     *
+     * @param block The block of code to benchmark.
+     */
+    inline fun measure(crossinline block: Context.() -> Unit) {
+        // Extract members to locals, to ensure we check #applied, and we don't hit accessors
+        val localState = state
+        val localContext = context
+
+        while (localState.keepRunning()) {
+            block(localContext)
+        }
+    }
+
+    override fun apply(base: Statement, description: Description): Statement {
+        return object : Statement() {
+            @Throws(Throwable::class)
+            override fun evaluate() {
+                applied = true
+                var invokeMethodName = description.methodName
+                Log.i(TAG, "Running " + description.className + "#" + invokeMethodName)
+
+                // validate and simplify the function name.
+                // First, remove the "test" prefix which normally comes from CTS test.
+                // Then make sure the [subTestName] is valid, not just numbers like [0].
+                if (invokeMethodName.startsWith("test")) {
+                    assertTrue(
+                        "The test name $invokeMethodName is too short",
+                        invokeMethodName.length > 5
+                    )
+                    invokeMethodName = invokeMethodName.substring(4, 5).toLowerCase() +
+                            invokeMethodName.substring(5)
+                }
+
+                val index = invokeMethodName.lastIndexOf('[')
+                if (index > 0) {
+                    val allDigits =
+                        invokeMethodName.substring(index + 1, invokeMethodName.length - 1)
+                            .all { Character.isDigit(it) }
+                    assertFalse(
+                        "The name in [] can't contain only digits for $invokeMethodName",
+                        allDigits
+                    )
+                }
+
+                base.evaluate()
+
+                InstrumentationRegistry.getInstrumentation().sendStatus(
+                    Activity.RESULT_OK,
+                    state.getFullStatusReport(invokeMethodName)
+                )
+            }
+        }
+    }
+
+    /**
+     * @hide
+     */
+    companion object {
+        private const val TAG = "BenchmarkRule"
+    }
+}
diff --git a/benchmark/src/main/java/androidx/benchmark/BenchmarkState.java b/benchmark/src/main/java/androidx/benchmark/BenchmarkState.java
index 480bc92..ccace7d 100644
--- a/benchmark/src/main/java/androidx/benchmark/BenchmarkState.java
+++ b/benchmark/src/main/java/androidx/benchmark/BenchmarkState.java
@@ -97,6 +97,9 @@
     // Individual duration in nano seconds.
     private ArrayList<Long> mResults = new ArrayList<>();
 
+    // not for external construction
+    BenchmarkState() {}
+
     /**
      * Stops the benchmark timer.
      * <p>
@@ -216,7 +219,7 @@
      * @return Stats from run.
      */
     @NonNull
-    public Stats getStats() {
+    Stats getStats() {
         if (mState != FINISHED) {
             throw new IllegalStateException("The benchmark hasn't finished");
         }
diff --git a/benchmark/src/main/java/androidx/benchmark/Stats.java b/benchmark/src/main/java/androidx/benchmark/Stats.java
index 28c2bbc..c853df9 100644
--- a/benchmark/src/main/java/androidx/benchmark/Stats.java
+++ b/benchmark/src/main/java/androidx/benchmark/Stats.java
@@ -26,7 +26,7 @@
  * Provides statistics such as mean, median, min, max, and percentiles, given a list of input
  * values.
  */
-public class Stats {
+final class Stats {
     private long mMedian, mMin, mMax, mPercentile90, mPercentile95;
     private double mMean, mStandardDeviation;
 
diff --git a/browser/api/1.1.0-alpha02.txt b/browser/api/1.1.0-alpha02.txt
index 8057733..56bcfe8 100644
--- a/browser/api/1.1.0-alpha02.txt
+++ b/browser/api/1.1.0-alpha02.txt
@@ -83,12 +83,12 @@
     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 int DARK_THEME_AUTO = 0; // 0x0
-    field public static final int DARK_THEME_DISABLE = 2; // 0x2
-    field public static final int DARK_THEME_ENABLE = 1; // 0x1
+    field public static final int COLOR_SCHEME_DARK = 2; // 0x2
+    field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
+    field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
     field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
     field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
-    field public static final String EXTRA_DARK_THEME = "androidx.browser.customtabs.extra.DARK_THEME";
+    field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
     field public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
     field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
     field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
@@ -127,7 +127,7 @@
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
-    method public androidx.browser.customtabs.CustomTabsIntent.Builder setDarkThemeBehavior(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
diff --git a/browser/api/current.txt b/browser/api/current.txt
index 8057733..56bcfe8 100644
--- a/browser/api/current.txt
+++ b/browser/api/current.txt
@@ -83,12 +83,12 @@
     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 int DARK_THEME_AUTO = 0; // 0x0
-    field public static final int DARK_THEME_DISABLE = 2; // 0x2
-    field public static final int DARK_THEME_ENABLE = 1; // 0x1
+    field public static final int COLOR_SCHEME_DARK = 2; // 0x2
+    field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
+    field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
     field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
     field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
-    field public static final String EXTRA_DARK_THEME = "androidx.browser.customtabs.extra.DARK_THEME";
+    field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
     field public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
     field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
     field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
@@ -127,7 +127,7 @@
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
-    method public androidx.browser.customtabs.CustomTabsIntent.Builder setDarkThemeBehavior(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
     method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
diff --git a/browser/src/androidTest/java/androidx/browser/customtabs/CustomTabsIntentTest.java b/browser/src/androidTest/java/androidx/browser/customtabs/CustomTabsIntentTest.java
index fec50fe..dd67cac 100644
--- a/browser/src/androidTest/java/androidx/browser/customtabs/CustomTabsIntentTest.java
+++ b/browser/src/androidTest/java/androidx/browser/customtabs/CustomTabsIntentTest.java
@@ -77,30 +77,30 @@
     }
 
     @Test
-    public void testDarkThemeBehavior() {
+    public void testColorScheme() {
         try {
-            new CustomTabsIntent.Builder().setDarkThemeBehavior(-1);
+            new CustomTabsIntent.Builder().setColorScheme(-1);
             fail("Underflow arguments are expected to throw an exception");
         } catch (IllegalArgumentException exception) {
         }
 
         try {
-            new CustomTabsIntent.Builder().setDarkThemeBehavior(42);
+            new CustomTabsIntent.Builder().setColorScheme(42);
             fail("Overflow arguments are expected to throw an exception");
         } catch (IllegalArgumentException exception) {
         }
 
         // None of the valid parameters should throw.
-        final int[] behaviourValues = new int[] {
-            CustomTabsIntent.DARK_THEME_AUTO,
-            CustomTabsIntent.DARK_THEME_ENABLE,
-            CustomTabsIntent.DARK_THEME_DISABLE
+        final int[] colorSchemeValues = new int[] {
+            CustomTabsIntent.COLOR_SCHEME_SYSTEM,
+            CustomTabsIntent.COLOR_SCHEME_LIGHT,
+            CustomTabsIntent.COLOR_SCHEME_DARK
         };
 
-        for (int value : behaviourValues) {
+        for (int value : colorSchemeValues) {
             Intent intent =
-                    new CustomTabsIntent.Builder().setDarkThemeBehavior(value).build().intent;
-            assertEquals(value, intent.getIntExtra(CustomTabsIntent.EXTRA_DARK_THEME, -1));
+                    new CustomTabsIntent.Builder().setColorScheme(value).build().intent;
+            assertEquals(value, intent.getIntExtra(CustomTabsIntent.EXTRA_COLOR_SCHEME, -1));
         }
     }
 }
diff --git a/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java b/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
index d31f8c5..b118e9c 100644
--- a/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
+++ b/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
@@ -74,37 +74,39 @@
      * @hide
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
-    @IntDef({DARK_THEME_AUTO, DARK_THEME_ENABLE, DARK_THEME_DISABLE})
+    @IntDef({COLOR_SCHEME_SYSTEM, COLOR_SCHEME_LIGHT, COLOR_SCHEME_DARK})
     @Retention(RetentionPolicy.SOURCE)
-    public @interface DarkThemeBehavior {
+    public @interface ColorScheme {
     }
 
     /**
-     * Dark theme will be enabled or disabled according to system configuration.
+     * Applies either a light or dark color scheme to the user interface in the custom tab depending
+     * on the user's system settings.
      */
-    public static final int DARK_THEME_AUTO = 0;
+    public static final int COLOR_SCHEME_SYSTEM = 0;
 
     /**
-     * Dark theme should be enabled for the custom tab. The user interface will be darkened, and the
-     * website will receive signals enabling it to participate in the dark theme as well.
+     * Applies a light color scheme to the user interface in the custom tab.
      */
-    public static final int DARK_THEME_ENABLE = 1;
+    public static final int COLOR_SCHEME_LIGHT = 1;
 
     /**
-     * Dark theme should be disabled for the custom tab.
+     * Applies a light color scheme to the user interface in the custom tab. Colors set through
+     * {@link #EXTRA_TOOLBAR_COLOR} may be darkened to match user expectations.
      */
-    public static final int DARK_THEME_DISABLE = 2;
+    public static final int COLOR_SCHEME_DARK = 2;
 
     /**
-     * Maximum value for the DARK_THEME_* configuration options. For validation purposes only.
+     * Maximum value for the COLOR_SCHEME_* configuration options. For validation purposes only.
      */
-    private static final int DARK_THEME_MAX = 2;
+    private static final int COLOR_SCHEME_MAX = 2;
 
     /**
-     * Extra (int) that specifies whether dark theme should be applied to the custom tab. Default is
-     * {@link #DARK_THEME_AUTO}.
+     * Extra (int) that specifies which color scheme should be applied to the custom tab. Default is
+     * {@link #COLOR_SCHEME_SYSTEM}.
      */
-    public static final String EXTRA_DARK_THEME = "androidx.browser.customtabs.extra.DARK_THEME";
+    public static final String EXTRA_COLOR_SCHEME =
+            "androidx.browser.customtabs.extra.COLOR_SCHEME";
 
     /**
      * Extra that changes the background color for the toolbar. colorRes is an int that specifies a
@@ -566,19 +568,19 @@
         }
 
         /**
-         * Sets behavior of the custom tab in regards to dark theme.
+         * Sets the color scheme that should be applied to the user interface in the custom tab.
          *
-         * @param behavior Desired dark theme behavior.
-         * @see CustomTabsIntent#DARK_THEME_AUTO
-         * @see CustomTabsIntent#DARK_THEME_ENABLE
-         * @see CustomTabsIntent#DARK_THEME_DISABLE
+         * @param colorScheme Desired color scheme.
+         * @see CustomTabsIntent#COLOR_SCHEME_SYSTEM
+         * @see CustomTabsIntent#COLOR_SCHEME_LIGHT
+         * @see CustomTabsIntent#COLOR_SCHEME_DARK
          */
         @NonNull
-        public Builder setDarkThemeBehavior(@DarkThemeBehavior int behavior) {
-            if (behavior < 0 || behavior > DARK_THEME_MAX) {
-                throw new IllegalArgumentException("Invalid value for the behavior argument");
+        public Builder setColorScheme(@ColorScheme int colorScheme) {
+            if (colorScheme < 0 || colorScheme > COLOR_SCHEME_MAX) {
+                throw new IllegalArgumentException("Invalid value for the colorScheme argument");
             }
-            mIntent.putExtra(EXTRA_DARK_THEME, behavior);
+            mIntent.putExtra(EXTRA_COLOR_SCHEME, colorScheme);
             return this;
         }
 
diff --git a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
index e52874a..c0034a6 100644
--- a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
@@ -197,6 +197,10 @@
 
         val jacocoUberJar = Jacoco.createUberJarTask(this)
         buildOnServerTask.dependsOn(jacocoUberJar)
+        val checkSameVersionLibraryGroupsTask = project.tasks.register(
+            CHECK_SAME_VERSION_LIBRARY_GROUPS,
+            CheckSameVersionLibraryGroupsTask::class.java)
+        buildOnServerTask.dependsOn(checkSameVersionLibraryGroupsTask)
 
         project.createClockLockTasks()
 
@@ -357,6 +361,7 @@
         const val BUILD_TEST_APKS = "buildTestApks"
         const val CHECK_RELEASE_READY_TASK = "checkReleaseReady"
         const val CHECK_NO_WARNINGS_TASK = "checkNoWarnings"
+        const val CHECK_SAME_VERSION_LIBRARY_GROUPS = "checkSameVersionLibraryGroups"
     }
 }
 
diff --git a/buildSrc/src/main/kotlin/androidx/build/CheckResourceApiTask.kt b/buildSrc/src/main/kotlin/androidx/build/CheckResourceApiTask.kt
index e97f7b3..bfaa10a 100644
--- a/buildSrc/src/main/kotlin/androidx/build/CheckResourceApiTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/CheckResourceApiTask.kt
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.build
 
 import org.gradle.api.DefaultTask
diff --git a/buildSrc/src/main/kotlin/androidx/build/CheckSameVersionLibraryGroupsTask.kt b/buildSrc/src/main/kotlin/androidx/build/CheckSameVersionLibraryGroupsTask.kt
new file mode 100644
index 0000000..53005db
--- /dev/null
+++ b/buildSrc/src/main/kotlin/androidx/build/CheckSameVersionLibraryGroupsTask.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.build
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
+import org.gradle.api.tasks.TaskAction
+
+/**
+ * Task that checks that all libraries within groups with requireSameVersion set to true
+ * are actually of the same version.
+ */
+open class CheckSameVersionLibraryGroupsTask : DefaultTask() {
+
+    @TaskAction
+    fun checkSameVersionLibraryGroups() {
+        val map = HashMap<String, Pair<String, String>>()
+        project.subprojects { project ->
+            val library = project.extensions.findByType(SupportLibraryExtension::class.java)
+            val requireSameVersion = library?.mavenGroup?.requireSameVersion ?: false
+            if (requireSameVersion) {
+                if (project.version == SupportLibraryExtension.DEFAULT_UNSPECIFIED_VERSION) {
+                    throw GradleException("Library $group:${project.name} does not specify " +
+                            "a version, however it is within library group $group which requires" +
+                            " all member libraries to be of the same version")
+                }
+                val group = library!!.mavenGroup!!.group
+                if (map.contains(group)) {
+                    val existingVersion = map.get(group)!!.first
+                    val libraryInSameGroup = map.get(group)!!.second
+                    if (existingVersion != project.version) {
+                        throw GradleException("Library $group:${project.name} with version " +
+                                "${project.version} is part of the $group library group" +
+                                " which requires all member libraries to have the same " +
+                                "version, however library $group:$libraryInSameGroup within" +
+                                " the same library group has different version $existingVersion")
+                    }
+                } else {
+                    map.put(group, Pair(project.version as String, project.name))
+                }
+            }
+        }
+    }
+}
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt
index 049ca9e..93493d5 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt
@@ -20,68 +20,74 @@
  * The list of maven group names of all the libraries in this project.
  */
 object LibraryGroups {
-    const val ACTIVITY = "androidx.activity"
-    const val ANIMATION = "androidx.animation"
-    const val ANNOTATION = "androidx.annotation"
-    const val APPCOMPAT = "androidx.appcompat"
-    const val ARCH_CORE = "androidx.arch.core"
-    const val ASYNCLAYOUTINFLATER = "androidx.asynclayoutinflater"
-    const val BIOMETRIC = "androidx.biometric"
-    const val BROWSER = "androidx.browser"
-    const val BENCHMARK = "androidx.benchmark"
-    const val CAR = "androidx.car"
-    const val CARDVIEW = "androidx.cardview"
-    const val COLLECTION = "androidx.collection"
-    const val CONCURRENT = "androidx.concurrent"
-    const val CONTENTPAGER = "androidx.contentpager"
-    const val COORDINATORLAYOUT = "androidx.coordinatorlayout"
-    const val CORE = "androidx.core"
-    const val CURSORADAPTER = "androidx.cursoradapter"
-    const val CUSTOMVIEW = "androidx.customview"
-    const val DOCUMENTFILE = "androidx.documentfile"
-    const val DRAWERLAYOUT = "androidx.drawerlayout"
-    const val DYNAMICANIMATION = "androidx.dynamicanimation"
-    const val EMOJI = "androidx.emoji"
-    const val ENTERPRISE = "androidx.enterprise"
-    const val EXIFINTERFACE = "androidx.exifinterface"
-    const val FRAGMENT = "androidx.fragment"
-    const val GRIDLAYOUT = "androidx.gridlayout"
-    const val HEIFWRITER = "androidx.heifwriter"
-    const val INTERPOLATOR = "androidx.interpolator"
-    const val JETIFIER = "com.android.tools.build.jetifier"
-    const val LEANBACK = "androidx.leanback"
-    const val LEGACY = "androidx.legacy"
-    const val LIFECYCLE = "androidx.lifecycle"
-    const val LOADER = "androidx.loader"
-    const val LOCALBROADCASTMANAGER = "androidx.localbroadcastmanager"
-    const val MEDIA = "androidx.media"
-    const val MEDIA2 = "androidx.media2"
-    const val MEDIAROUTER = "androidx.mediarouter"
-    const val NAVIGATION = "androidx.navigation"
-    const val PAGING = "androidx.paging"
-    const val PALETTE = "androidx.palette"
-    const val PERCENTLAYOUT = "androidx.percentlayout"
-    const val PERSISTENCE = "androidx.sqlite"
-    const val PREFERENCE = "androidx.preference"
-    const val PRINT = "androidx.print"
-    const val RECOMMENDATION = "androidx.recommendation"
-    const val RECYCLERVIEW = "androidx.recyclerview"
-    const val SAVEDSTATE = "androidx.savedstate"
-    const val SECURITY = "androidx.security"
-    const val SHARETARGET = "androidx.sharetarget"
-    const val SLICE = "androidx.slice"
-    const val REMOTECALLBACK = "androidx.remotecallback"
-    const val ROOM = "androidx.room"
-    const val SLIDINGPANELAYOUT = "androidx.slidingpanelayout"
-    const val SWIPEREFRESHLAYOUT = "androidx.swiperefreshlayout"
-    const val TEXTCLASSIFIER = "androidx.textclassifier"
-    const val TRANSITION = "androidx.transition"
-    const val TVPROVIDER = "androidx.tvprovider"
-    const val VECTORDRAWABLE = "androidx.vectordrawable"
-    const val VERSIONEDPARCELABLE = "androidx.versionedparcelable"
-    const val VIEWPAGER = "androidx.viewpager"
-    const val VIEWPAGER2 = "androidx.viewpager2"
-    const val WEAR = "androidx.wear"
-    const val WEBKIT = "androidx.webkit"
-    const val WORKMANAGER = "android.arch.work"
+    val ACTIVITY = LibraryGroup("androidx.activity", false)
+    val ANIMATION = LibraryGroup("androidx.animation", false)
+    val ANNOTATION = LibraryGroup("androidx.annotation", false)
+    val APPCOMPAT = LibraryGroup("androidx.appcompat", false)
+    val ARCH_CORE = LibraryGroup("androidx.arch.core", false)
+    val ASYNCLAYOUTINFLATER = LibraryGroup("androidx.asynclayoutinflater", false)
+    val BIOMETRIC = LibraryGroup("androidx.biometric", false)
+    val BROWSER = LibraryGroup("androidx.browser", false)
+    val BENCHMARK = LibraryGroup("androidx.benchmark", false)
+    val CAR = LibraryGroup("androidx.car", false)
+    val CARDVIEW = LibraryGroup("androidx.cardview", false)
+    val COLLECTION = LibraryGroup("androidx.collection", false)
+    val CONCURRENT = LibraryGroup("androidx.concurrent", false)
+    val CONTENTPAGER = LibraryGroup("androidx.contentpager", false)
+    val COORDINATORLAYOUT = LibraryGroup("androidx.coordinatorlayout", false)
+    val CORE = LibraryGroup("androidx.core", false)
+    val CURSORADAPTER = LibraryGroup("androidx.cursoradapter", false)
+    val CUSTOMVIEW = LibraryGroup("androidx.customview", false)
+    val DOCUMENTFILE = LibraryGroup("androidx.documentfile", false)
+    val DRAWERLAYOUT = LibraryGroup("androidx.drawerlayout", false)
+    val DYNAMICANIMATION = LibraryGroup("androidx.dynamicanimation", false)
+    val EMOJI = LibraryGroup("androidx.emoji", false)
+    val ENTERPRISE = LibraryGroup("androidx.enterprise", false)
+    val EXIFINTERFACE = LibraryGroup("androidx.exifinterface", false)
+    val FRAGMENT = LibraryGroup("androidx.fragment", false)
+    val GRIDLAYOUT = LibraryGroup("androidx.gridlayout", false)
+    val HEIFWRITER = LibraryGroup("androidx.heifwriter", false)
+    val INTERPOLATOR = LibraryGroup("androidx.interpolator", false)
+    val JETIFIER = LibraryGroup("com.android.tools.build.jetifier", false)
+    val LEANBACK = LibraryGroup("androidx.leanback", false)
+    val LEGACY = LibraryGroup("androidx.legacy", false)
+    val LIFECYCLE = LibraryGroup("androidx.lifecycle", false)
+    val LOADER = LibraryGroup("androidx.loader", false)
+    val LOCALBROADCASTMANAGER = LibraryGroup("androidx.localbroadcastmanager", false)
+    val MEDIA = LibraryGroup("androidx.media", false)
+    val MEDIA2 = LibraryGroup("androidx.media2", false)
+    val MEDIAROUTER = LibraryGroup("androidx.mediarouter", false)
+    val NAVIGATION = LibraryGroup("androidx.navigation", false)
+    val PAGING = LibraryGroup("androidx.paging", false)
+    val PALETTE = LibraryGroup("androidx.palette", false)
+    val PERCENTLAYOUT = LibraryGroup("androidx.percentlayout", false)
+    val PERSISTENCE = LibraryGroup("androidx.sqlite", false)
+    val PREFERENCE = LibraryGroup("androidx.preference", false)
+    val PRINT = LibraryGroup("androidx.print", false)
+    val RECOMMENDATION = LibraryGroup("androidx.recommendation", false)
+    val RECYCLERVIEW = LibraryGroup("androidx.recyclerview", false)
+    val SAVEDSTATE = LibraryGroup("androidx.savedstate", false)
+    val SECURITY = LibraryGroup("androidx.security", false)
+    val SHARETARGET = LibraryGroup("androidx.sharetarget", false)
+    val SLICE = LibraryGroup("androidx.slice", false)
+    val REMOTECALLBACK = LibraryGroup("androidx.remotecallback", false)
+    val ROOM = LibraryGroup("androidx.room", false)
+    val SLIDINGPANELAYOUT = LibraryGroup("androidx.slidingpanelayout", false)
+    val SWIPEREFRESHLAYOUT = LibraryGroup("androidx.swiperefreshlayout", false)
+    val TEXTCLASSIFIER = LibraryGroup("androidx.textclassifier", false)
+    val TRANSITION = LibraryGroup("androidx.transition", false)
+    val TVPROVIDER = LibraryGroup("androidx.tvprovider", false)
+    val VECTORDRAWABLE = LibraryGroup("androidx.vectordrawable", false)
+    val VERSIONEDPARCELABLE = LibraryGroup("androidx.versionedparcelable", false)
+    val VIEWPAGER = LibraryGroup("androidx.viewpager", false)
+    val VIEWPAGER2 = LibraryGroup("androidx.viewpager2", false)
+    val WEAR = LibraryGroup("androidx.wear", false)
+    val WEBKIT = LibraryGroup("androidx.webkit", false)
+    val WORKMANAGER = LibraryGroup("androidx.work", false)
 }
+
+/**
+ * This object contains the library group, as well as whether libraries
+ * in this group are all required to have the same development version.
+ */
+data class LibraryGroup(val group: String = "unspecified", val requireSameVersion: Boolean = false)
\ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 52fa406..28eae6c 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -20,11 +20,11 @@
  * The list of versions codes of all the libraries in this project.
  */
 object LibraryVersions {
-    val ACTIVITY = Version("1.0.0-alpha05")
+    val ACTIVITY = Version("1.0.0-alpha06")
     val ANIMATION = Version("1.0.0-alpha01")
     val ANIMATION_TESTING = Version("1.1.0-alpha01")
-    val ANNOTATION = Version("1.1.0-alpha02")
-    val APPCOMPAT = Version("1.1.0-alpha03")
+    val ANNOTATION = Version("1.1.0-alpha03")
+    val APPCOMPAT = Version("1.1.0-alpha04")
     val ARCH_CORE = Version("2.1.0-alpha01")
     val ARCH_CORE_TESTING = ARCH_CORE
     val ARCH_RUNTIME = Version("2.1.0-alpha01")
@@ -36,10 +36,10 @@
     val CAR_CLUSTER = Version("1.0.0-alpha5")
     val CAR_MODERATOR = Version("1.0.0-alpha1")
     val CARDVIEW = Version("1.1.0-alpha01")
-    val COLLECTION = Version("1.1.0-alpha03")
+    val COLLECTION = Version("1.1.0-alpha04")
     val CONTENTPAGER = Version("1.1.0-alpha01")
     val COORDINATORLAYOUT = Version("1.1.0-alpha02")
-    val CORE = Version("1.1.0-alpha05")
+    val CORE = Version("1.1.0-alpha06")
     val CURSORADAPTER = Version("1.1.0-alpha01")
     val CUSTOMVIEW = Version("1.1.0-alpha01")
     val DOCUMENTFILE = Version("1.1.0-alpha01")
@@ -48,8 +48,8 @@
     val DYNAMICANIMATION_KTX = Version("1.0.0-alpha02")
     val EMOJI = Version("1.1.0-alpha01")
     val ENTERPRISE = Version("1.0.0-alpha01")
-    val EXIFINTERFACE = Version("1.1.0-alpha01")
-    val FRAGMENT = Version("1.1.0-alpha05")
+    val EXIFINTERFACE = Version("1.1.0-alpha02")
+    val FRAGMENT = Version("1.1.0-alpha06")
     val FUTURES = Version("1.0.0-alpha03")
     val GRIDLAYOUT = Version("1.1.0-alpha01")
     val HEIFWRITER = Version("1.1.0-alpha01")
@@ -59,14 +59,15 @@
     val LEANBACK_PREFERENCE = Version("1.1.0-alpha02")
     val LEGACY = Version("1.1.0-alpha01")
     val LOCALBROADCASTMANAGER = Version("1.1.0-alpha02")
-    val LIFECYCLE = Version("2.1.0-alpha03")
+    val LIFECYCLE = Version("2.1.0-alpha04")
+    val LIFECYCLES_COROUTINES = Version("1.0.0-alpha01")
     val LIFECYCLES_SAVEDSTATE = Version("1.0.0-alpha01")
-    val LOADER = Version("1.1.0-beta01")
-    val MEDIA = Version("1.1.0-alpha02")
+    val LOADER = Version("1.1.0-beta02")
+    val MEDIA = Version("1.1.0-alpha03")
     val MEDIA2 = Version("1.0.0-alpha05")
     val MEDIA2_EXOPLAYER = Version("1.0.0-alpha02")
     val MEDIA2_WIDGET = Version("1.0.0-alpha07")
-    val MEDIAROUTER = Version("1.1.0-alpha02")
+    val MEDIAROUTER = Version("1.1.0-alpha03")
     val NAVIGATION = Version("2.0.0-rc02")
     val NAVIGATION_TESTING = Version("1.0.0-alpha08") // Unpublished
     val PAGING = Version("2.2.0-alpha01")
@@ -74,12 +75,12 @@
     val PRINT = Version("1.1.0-alpha01")
     val PERCENTLAYOUT = Version("1.1.0-alpha01")
     val PERSISTENCE = Version("2.0.1")
-    val PREFERENCE = Version("1.1.0-alpha04")
+    val PREFERENCE = Version("1.1.0-alpha05")
     val RECOMMENDATION = Version("1.1.0-alpha01")
-    val RECYCLERVIEW = Version("1.1.0-alpha03")
+    val RECYCLERVIEW = Version("1.1.0-alpha04")
     val REMOTECALLBACK = Version("1.0.0-alpha02")
-    val ROOM = Version("2.1.0-alpha05")
-    val SAVEDSTATE = Version("1.0.0-alpha02")
+    val ROOM = Version("2.1.0-alpha06")
+    val SAVEDSTATE = Version("1.0.0-alpha03")
     val SECURITY = Version("1.0.0-alpha01")
     val SHARETARGET = Version("1.0.0-alpha01")
     val SLICE = Version("1.1.0-alpha01")
@@ -88,14 +89,14 @@
     val SLIDINGPANELAYOUT = Version("1.1.0-alpha01")
     val SWIPE_REFRESH_LAYOUT = Version("1.1.0-alpha01")
     val TEXTCLASSIFIER = Version("1.0.0-alpha03")
-    val TRANSITION = Version("1.1.0-alpha02")
+    val TRANSITION = Version("1.1.0-beta01")
     val TVPROVIDER = Version("1.1.0-alpha01")
     val VECTORDRAWABLE = Version("1.1.0-alpha02")
     val VECTORDRAWABLE_ANIMATED = Version("1.1.0-alpha02")
     val VERSIONED_PARCELABLE = Version("1.1.0-alpha02")
     val VIEWPAGER = Version("1.1.0-alpha01")
-    val VIEWPAGER2 = Version("1.0.0-alpha02")
+    val VIEWPAGER2 = Version("1.0.0-alpha03")
     val WEAR = Version("1.1.0-alpha01")
     val WEBKIT = Version("1.1.0-alpha01")
-    val WORKMANAGER = Version("1.0.0")
+    val WORKMANAGER = Version("2.0.0-rc01")
 }
diff --git a/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index 9451043..edb053b 100644
--- a/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -30,7 +30,7 @@
 fun Project.configureMavenArtifactUpload(extension: SupportLibraryExtension) {
     afterEvaluate {
         if (extension.publish) {
-            val mavenGroup = extension.mavenGroup
+            val mavenGroup = extension.mavenGroup?.group
             if (mavenGroup == null) {
                 throw Exception("You must specify mavenGroup for $name project")
             }
diff --git a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
index e271431..da72c9b 100644
--- a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
@@ -27,13 +27,13 @@
 val RELEASE_RULE = docsRules("public", false) {
     prebuilts(LibraryGroups.ACTIVITY, "1.0.0-alpha04")
     prebuilts(LibraryGroups.ANNOTATION, "1.1.0-alpha01")
-    ignore(LibraryGroups.APPCOMPAT, "appcompat-resources")
+    ignore(LibraryGroups.APPCOMPAT.group, "appcompat-resources")
     prebuilts(LibraryGroups.APPCOMPAT, "1.1.0-alpha02")
     prebuilts(LibraryGroups.ARCH_CORE, "2.0.0")
     prebuilts(LibraryGroups.ASYNCLAYOUTINFLATER, "1.0.0")
     prebuilts(LibraryGroups.BIOMETRIC, "biometric", "1.0.0-alpha03")
     prebuilts(LibraryGroups.BROWSER, "1.0.0")
-    ignore(LibraryGroups.CAR, "car-moderator")
+    ignore(LibraryGroups.CAR.group, "car-moderator")
     prebuilts(LibraryGroups.CAR, "car-cluster", "1.0.0-alpha5")
     prebuilts(LibraryGroups.CAR, "car", "1.0.0-alpha5")
             .addStubs("car/stubs/android.car.jar")
@@ -59,24 +59,25 @@
     prebuilts(LibraryGroups.INTERPOLATOR, "1.0.0")
     prebuilts(LibraryGroups.LEANBACK, "1.1.0-alpha01")
     prebuilts(LibraryGroups.LEGACY, "1.0.0")
-    ignore(LibraryGroups.LIFECYCLE, "lifecycle-savedstate-core")
-    ignore(LibraryGroups.LIFECYCLE, "lifecycle-savedstate-fragment")
-    ignore(LibraryGroups.LIFECYCLE, "lifecycle-viewmodel-savedstate")
-    ignore(LibraryGroups.LIFECYCLE, "lifecycle-viewmodel-fragment")
-    ignore(LibraryGroups.LIFECYCLE, "lifecycle-livedata-ktx")
-    ignore(LibraryGroups.LIFECYCLE, "lifecycle-livedata-core-ktx")
-    ignore(LibraryGroups.LIFECYCLE, "lifecycle-compiler")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-savedstate-core")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-savedstate-fragment")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-viewmodel-savedstate")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-viewmodel-fragment")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-livedata-ktx")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-livedata-core-ktx")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-compiler")
+    ignore(LibraryGroups.LIFECYCLE.group, "lifecycle-common-eap")
     prebuilts(LibraryGroups.LIFECYCLE, "2.1.0-alpha02")
     prebuilts(LibraryGroups.LOADER, "1.1.0-alpha01")
     prebuilts(LibraryGroups.LOCALBROADCASTMANAGER, "1.1.0-alpha01")
     prebuilts(LibraryGroups.MEDIA, "media", "1.1.0-alpha01")
     // TODO: Rename media-widget to media2-widget after 1.0.0-alpha06
     prebuilts(LibraryGroups.MEDIA, "media-widget", "1.0.0-alpha06")
-    ignore(LibraryGroups.MEDIA2, "media2-widget")
-    ignore(LibraryGroups.MEDIA2, "media2-exoplayer")
+    ignore(LibraryGroups.MEDIA2.group, "media2-widget")
+    ignore(LibraryGroups.MEDIA2.group, "media2-exoplayer")
     prebuilts(LibraryGroups.MEDIA2, "1.0.0-alpha03")
     prebuilts(LibraryGroups.MEDIAROUTER, "1.1.0-alpha01")
-    ignore(LibraryGroups.NAVIGATION, "navigation-testing")
+    ignore(LibraryGroups.NAVIGATION.group, "navigation-testing")
     prebuilts(LibraryGroups.NAVIGATION, "2.0.0-rc02")
     prebuilts(LibraryGroups.PAGING, "2.1.0")
     prebuilts(LibraryGroups.PALETTE, "1.0.0")
@@ -94,8 +95,8 @@
     prebuilts(LibraryGroups.SLICE, "slice-builders-ktx", "1.0.0-alpha6")
     prebuilts(LibraryGroups.SLICE, "slice-core", "1.0.0")
     // TODO: land prebuilts
-//    prebuilts(LibraryGroups.SLICE, "slice-test", "1.0.0")
-    ignore(LibraryGroups.SLICE, "slice-test")
+//    prebuilts(LibraryGroups.SLICE.group, "slice-test", "1.0.0")
+    ignore(LibraryGroups.SLICE.group, "slice-test")
     prebuilts(LibraryGroups.SLICE, "slice-view", "1.0.0")
     prebuilts(LibraryGroups.SLIDINGPANELAYOUT, "1.0.0")
     prebuilts(LibraryGroups.SWIPEREFRESHLAYOUT, "1.1.0-alpha01")
@@ -109,13 +110,13 @@
     prebuilts(LibraryGroups.WEAR, "1.0.0")
             .addStubs("wear/wear_stubs/com.google.android.wearable-stubs.jar")
     prebuilts(LibraryGroups.WEBKIT, "1.0.0")
-    prebuilts(LibraryGroups.WORKMANAGER, "1.0.0-rc02")
+    ignore(LibraryGroups.WORKMANAGER.group, "2.0.0-rc01")
     default(Ignore)
 }
 
 val TIP_OF_TREE = docsRules("tipOfTree", true) {
     // TODO: remove once we'll figure out our strategy about it
-    ignore(LibraryGroups.CONCURRENT)
+    ignore(LibraryGroups.CONCURRENT.group)
     default(TipOfTree)
 }
 
@@ -154,23 +155,24 @@
      * docs for a project with the given [groupName] and [name] will be built from a prebuilt with
      * the given [version].
      */
-    fun prebuilts(groupName: String, moduleName: String, version: String): Prebuilts {
+    fun prebuilts(libraryGroup: LibraryGroup, moduleName: String, version: String): Prebuilts {
         val strategy = Prebuilts(Version(version))
-        rules.add(DocsRule(Exact(groupName, moduleName), strategy))
+        rules.add(DocsRule(Exact(libraryGroup.group, moduleName), strategy))
         return strategy
     }
 
     /**
      * docs for projects within [groupName] will be built from prebuilts with the given [version]
      */
-    fun prebuilts(groupName: String, version: String) = prebuilts(groupName, Version(version))
+    fun prebuilts(libraryGroup: LibraryGroup, version: String) =
+            prebuilts(libraryGroup, Version(version))
 
     /**
      * docs for projects within [groupName] will be built from prebuilts with the given [version]
      */
-    fun prebuilts(groupName: String, version: Version): Prebuilts {
+    fun prebuilts(libraryGroup: LibraryGroup, version: Version): Prebuilts {
         val strategy = Prebuilts(version)
-        rules.add(DocsRule(Group(groupName), strategy))
+        rules.add(DocsRule(Group(libraryGroup.group), strategy))
         return strategy
     }
 
@@ -244,7 +246,7 @@
 
         override fun toString() = "Prebuilts(\"$version\")"
         fun dependency(extension: SupportLibraryExtension): String {
-            return "${extension.mavenGroup}:${extension.project.name}:$version"
+            return "${extension.mavenGroup?.group}:${extension.project.name}:$version"
         }
     }
 }
@@ -252,7 +254,7 @@
 class PublishDocsRules(val name: String, val offline: Boolean, private val rules: List<DocsRule>) {
     fun resolve(extension: SupportLibraryExtension): DocsRule? {
         val mavenGroup = extension.mavenGroup
-        return if (mavenGroup == null) null else resolve(mavenGroup, extension.project.name)
+        return if (mavenGroup == null) null else resolve(mavenGroup.group, extension.project.name)
     }
 
     fun resolve(groupName: String, moduleName: String): DocsRule {
diff --git a/buildSrc/src/main/kotlin/androidx/build/Release.kt b/buildSrc/src/main/kotlin/androidx/build/Release.kt
index 8ef06ab..911c0ad 100644
--- a/buildSrc/src/main/kotlin/androidx/build/Release.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/Release.kt
@@ -197,7 +197,7 @@
                             " because publish is false!"
             )
         }
-        val mavenGroup = extension.mavenGroup ?: throw IllegalArgumentException(
+        val mavenGroup = extension.mavenGroup?.group ?: throw IllegalArgumentException(
                 "Cannot register a project to release if it does not have a mavenGroup set up"
         )
         val version = extension.mavenVersion ?: throw IllegalArgumentException(
diff --git a/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt
index 28f5356..24a70ca 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SupportAndroidLibraryPlugin.kt
@@ -57,7 +57,7 @@
             }
             if (supportLibraryExtension.publish) {
                 project.extra.set("publish", true)
-                project.addToProjectMap(supportLibraryExtension.mavenGroup)
+                project.addToProjectMap(supportLibraryExtension.mavenGroup?.group)
             }
             val library = project.extensions.findByType(LibraryExtension::class.java)
                     ?: return@afterEvaluate
@@ -128,7 +128,7 @@
             }
         }
 
-        val group = supportLibraryExtension.mavenGroup
+        val group = supportLibraryExtension.mavenGroup?.group
 
         // NOTE: we assume here that all benchmarks have package name $groupname.benchmark.test
         val aotCompile = "cmd package compile -m speed -f $group.benchmark.test"
diff --git a/buildSrc/src/main/kotlin/androidx/build/SupportJavaLibraryPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/SupportJavaLibraryPlugin.kt
index f8299a0..65a4b95 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SupportJavaLibraryPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SupportJavaLibraryPlugin.kt
@@ -44,7 +44,7 @@
             }
             if (supportLibraryExtension.publish) {
                 project.extra.set("publish", true)
-                project.addToProjectMap(supportLibraryExtension.mavenGroup)
+                project.addToProjectMap(supportLibraryExtension.mavenGroup?.group)
             }
             Dokka.registerJavaProject(project, supportLibraryExtension)
             if (supportLibraryExtension.useMetalava) {
diff --git a/buildSrc/src/main/kotlin/androidx/build/SupportLibraryExtension.kt b/buildSrc/src/main/kotlin/androidx/build/SupportLibraryExtension.kt
index dd00bb7..cf8b798 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SupportLibraryExtension.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SupportLibraryExtension.kt
@@ -29,7 +29,7 @@
     var mavenVersion: Version? by Delegates.observable<Version?>(null) { _, _, new: Version? ->
         project.version = new?.toString()
     }
-    var mavenGroup: String? = null
+    var mavenGroup: LibraryGroup? = null
     var description: String? = null
     var inceptionYear: String? = null
     var url = SUPPORT_URL
@@ -66,6 +66,7 @@
                 "https://developer.android.com/topic/libraries/architecture/index.html"
         @JvmField
         val SUPPORT_URL = "http://developer.android.com/tools/extras/support-library.html"
+        val DEFAULT_UNSPECIFIED_VERSION = "unspecified"
     }
 }
 
diff --git a/buildSrc/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt b/buildSrc/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
index 2743b7b..54dfb097 100644
--- a/buildSrc/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/VerifyDependencyVersionsTask.kt
@@ -56,9 +56,11 @@
         // If the version is unspecified then treat as an alpha version. If the depending project's
         // version is unspecified then it won't matter, and if the dependency's version is
         // unspecified then any non alpha project won't be able to depend on it to ensure safety.
-        val projectVersionExtra = if (project.version == "unspecified") "-alpha01"
+        val projectVersionExtra = if (project.version ==
+            SupportLibraryExtension.DEFAULT_UNSPECIFIED_VERSION) "-alpha01"
             else Version(project.version.toString()).extra ?: ""
-        val dependencyVersionExtra = if (dependency.version!! == "unspecified") "-alpha01" else
+        val dependencyVersionExtra = if (dependency.version!! ==
+            SupportLibraryExtension.DEFAULT_UNSPECIFIED_VERSION) "-alpha01" else
             Version(dependency.version!!).extra ?: ""
         val projectReleasePhase = releasePhase(projectVersionExtra)
         if (projectReleasePhase < 0) {
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
index 2d3ac7e..b393aba 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
@@ -41,7 +41,9 @@
 const val KOTLIN_STDLIB = "org.jetbrains.kotlin:kotlin-stdlib:1.3.0"
 const val KOTLIN_METADATA = "me.eugeniomarletti.kotlin.metadata:kotlin-metadata:1.4.0"
 const val KOTLIN_METADATA_JVM = "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.0.5"
-const val KOTLIN_COROUTINES = "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0"
+const val KOTLIN_COROUTINES = "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.0"
+const val KOTLIN_COROUTINES_CORE = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0"
+const val KOTLIN_COROUTINES_TEST = "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.1.0"
 const val LEAKCANARY_INSTRUMENTATION =
         "com.squareup.leakcanary:leakcanary-android-instrumentation:1.6.2"
 const val MOCKITO_CORE = "org.mockito:mockito-core:2.19.0"
@@ -54,6 +56,7 @@
 const val TEST_RUNNER = "androidx.test:runner:1.1.0"
 const val TEST_RULES = "androidx.test:rules:1.1.0"
 const val TEST_EXT_JUNIT = "androidx.test.ext:junit:1.0.0"
+const val TEST_EXT_KTX = "androidx.test.ext:junit-ktx:1.1.0"
 const val TEST_UIAUTOMATOR = "androidx.test.uiautomator:uiautomator:2.2.0"
 const val TRUTH = "com.google.truth:truth:0.42"
 /**
@@ -109,5 +112,6 @@
 const val ARCH_ROOM_RUNTIME = "androidx.room:room-runtime:2.0.0"
 const val ARCH_ROOM_COMPILER = "androidx.room:room-compiler:2.0.0"
 const val ARCH_ROOM_RXJAVA = "androidx.room:room-rxjava2:2.0.0"
+const val ARCH_ROOM_TESTING = "androidx.room:room-testing:2.0.0"
 
 const val ROBOLECTRIC = "org.robolectric:robolectric:4.1"
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index 7c3cf36..c8a8168 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -276,8 +276,8 @@
     }
 
     companion object {
-        // dummy test to ensure no failure due to "no instrumentation. See b/112645580
-        // and b/126377106
+        // dummy test to ensure no failure due to "no instrumentation. We can eventually remove
+        // if we resolve b/127819369
         private val ALWAYS_BUILD = setOf("dumb-test")
     }
 }
\ No newline at end of file
diff --git a/car/cluster/api/1.0.0-alpha5.txt b/car/cluster/api/1.0.0-alpha5.txt
index bcdbdbb..8469597 100644
--- a/car/cluster/api/1.0.0-alpha5.txt
+++ b/car/cluster/api/1.0.0-alpha5.txt
@@ -196,12 +196,13 @@
 
   public class RichText implements androidx.versionedparcelable.VersionedParcelable {
     method public java.util.List<androidx.car.cluster.navigation.RichTextElement> getElements();
+    method public String getText();
   }
 
   public static final class RichText.Builder {
     ctor public RichText.Builder();
     method public androidx.car.cluster.navigation.RichText.Builder addElement(androidx.car.cluster.navigation.RichTextElement);
-    method public androidx.car.cluster.navigation.RichText build();
+    method public androidx.car.cluster.navigation.RichText build(String);
   }
 
   public class RichTextElement implements androidx.versionedparcelable.VersionedParcelable {
@@ -209,10 +210,11 @@
     method public String getText();
   }
 
-  public static class RichTextElement.Builder {
+  public static final class RichTextElement.Builder {
     ctor public RichTextElement.Builder();
-    method public androidx.car.cluster.navigation.RichTextElement! build(String);
-    method public androidx.car.cluster.navigation.RichTextElement.Builder! setImage(androidx.car.cluster.navigation.ImageReference?);
+    method public androidx.car.cluster.navigation.RichTextElement build();
+    method public androidx.car.cluster.navigation.RichTextElement.Builder setImage(androidx.car.cluster.navigation.ImageReference?);
+    method public androidx.car.cluster.navigation.RichTextElement.Builder setText(String?);
   }
 
   public class Segment implements androidx.versionedparcelable.VersionedParcelable {
diff --git a/car/cluster/api/current.txt b/car/cluster/api/current.txt
index bcdbdbb..8469597 100644
--- a/car/cluster/api/current.txt
+++ b/car/cluster/api/current.txt
@@ -196,12 +196,13 @@
 
   public class RichText implements androidx.versionedparcelable.VersionedParcelable {
     method public java.util.List<androidx.car.cluster.navigation.RichTextElement> getElements();
+    method public String getText();
   }
 
   public static final class RichText.Builder {
     ctor public RichText.Builder();
     method public androidx.car.cluster.navigation.RichText.Builder addElement(androidx.car.cluster.navigation.RichTextElement);
-    method public androidx.car.cluster.navigation.RichText build();
+    method public androidx.car.cluster.navigation.RichText build(String);
   }
 
   public class RichTextElement implements androidx.versionedparcelable.VersionedParcelable {
@@ -209,10 +210,11 @@
     method public String getText();
   }
 
-  public static class RichTextElement.Builder {
+  public static final class RichTextElement.Builder {
     ctor public RichTextElement.Builder();
-    method public androidx.car.cluster.navigation.RichTextElement! build(String);
-    method public androidx.car.cluster.navigation.RichTextElement.Builder! setImage(androidx.car.cluster.navigation.ImageReference?);
+    method public androidx.car.cluster.navigation.RichTextElement build();
+    method public androidx.car.cluster.navigation.RichTextElement.Builder setImage(androidx.car.cluster.navigation.ImageReference?);
+    method public androidx.car.cluster.navigation.RichTextElement.Builder setText(String?);
   }
 
   public class Segment implements androidx.versionedparcelable.VersionedParcelable {
diff --git a/car/cluster/api/restricted_1.0.0-alpha5.txt b/car/cluster/api/restricted_1.0.0-alpha5.txt
index 19769fb..63fd874 100644
--- a/car/cluster/api/restricted_1.0.0-alpha5.txt
+++ b/car/cluster/api/restricted_1.0.0-alpha5.txt
@@ -6,7 +6,7 @@
   }
 
   public class RichTextElement implements androidx.versionedparcelable.VersionedParcelable {
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public RichTextElement(String, androidx.car.cluster.navigation.ImageReference?);
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public RichTextElement(String?, androidx.car.cluster.navigation.ImageReference?);
   }
 
 }
diff --git a/car/cluster/api/restricted_current.txt b/car/cluster/api/restricted_current.txt
index 19769fb..63fd874 100644
--- a/car/cluster/api/restricted_current.txt
+++ b/car/cluster/api/restricted_current.txt
@@ -6,7 +6,7 @@
   }
 
   public class RichTextElement implements androidx.versionedparcelable.VersionedParcelable {
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public RichTextElement(String, androidx.car.cluster.navigation.ImageReference?);
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public RichTextElement(String?, androidx.car.cluster.navigation.ImageReference?);
   }
 
 }
diff --git a/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextElementTest.java b/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextElementTest.java
index f1a1cd7..79ae40d 100644
--- a/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextElementTest.java
+++ b/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextElementTest.java
@@ -44,23 +44,17 @@
         assertEquals(element, createSampleElement());
         assertNotEquals(element, new RichTextElement.Builder()
                 .setImage(TEST_IMAGE)
-                .build(""));
+                .setText("")
+                .build());
         assertNotEquals(element, new RichTextElement.Builder()
                 .setImage(null)
-                .build(TEST_TEXT));
+                .setText(TEST_TEXT)
+                .build());
 
         assertEquals(element.hashCode(), createSampleElement().hashCode());
     }
 
     /**
-     * Test that a text representation must be provided.
-     */
-    @Test(expected = NullPointerException.class)
-    public void builder_textIsMandatory() {
-        new RichTextElement.Builder().build(null);
-    }
-
-    /**
      * Test that an empty string will be returned from {@link RichTextElement#getText()} to the
      * consumer, even if no string was received.
      */
@@ -75,6 +69,7 @@
     public RichTextElement createSampleElement() {
         return new RichTextElement.Builder()
                 .setImage(TEST_IMAGE)
-                .build(TEST_TEXT);
+                .setText(TEST_TEXT)
+                .build();
     }
 }
diff --git a/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextTest.java b/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextTest.java
index cac4cb0..f7d7aac 100644
--- a/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextTest.java
+++ b/car/cluster/src/androidTest/java/androidx/car/cluster/navigation/RichTextTest.java
@@ -36,6 +36,7 @@
 @SmallTest
 public class RichTextTest {
     private static final String TEST_TEXT = "foo";
+    private static final String TEST_TEXT_ELEMENT = "bar";
 
     /**
      * Test a few equality conditions
@@ -43,14 +44,14 @@
     @Test
     public void equality() {
         RichText expected = createSampleRichText();
-        RichTextElement element = new RichTextElement.Builder().build(TEST_TEXT);
+        RichTextElement element = new RichTextElement.Builder().setText(TEST_TEXT_ELEMENT).build();
 
         assertEquals(expected, createSampleRichText());
-        assertNotEquals(expected, new RichText.Builder().build());
+        assertNotEquals(expected, new RichText.Builder().build(TEST_TEXT));
         assertNotEquals(expected, new RichText.Builder()
                 .addElement(element)
                 .addElement(element)
-                .build());
+                .build(TEST_TEXT));
 
         assertEquals(expected.hashCode(), createSampleRichText().hashCode());
     }
@@ -60,7 +61,7 @@
      */
     @Test
     public void immutability() {
-        assertImmutable(new RichText.Builder().build().getElements());
+        assertImmutable(new RichText.Builder().build(TEST_TEXT).getElements());
         assertImmutable(new RichText().getElements());
     }
 
@@ -74,6 +75,14 @@
     }
 
     /**
+     * Test that a text representation must not be null.
+     */
+    @Test(expected = NullPointerException.class)
+    public void builder_textIsMandatory() {
+        new RichText.Builder().build(null);
+    }
+
+    /**
      * Builder doesn't accept null elements
      */
     @Test(expected = NullPointerException.class)
@@ -86,7 +95,7 @@
      */
     public static RichText createSampleRichText() {
         return new RichText.Builder()
-                .addElement(new RichTextElement.Builder().build(TEST_TEXT))
-                .build();
+                .addElement(new RichTextElement.Builder().setText(TEST_TEXT_ELEMENT).build())
+                .build(TEST_TEXT);
     }
 }
diff --git a/car/cluster/src/main/java/androidx/car/cluster/navigation/RichText.java b/car/cluster/src/main/java/androidx/car/cluster/navigation/RichText.java
index 60c31c7..6b61bc9 100644
--- a/car/cluster/src/main/java/androidx/car/cluster/navigation/RichText.java
+++ b/car/cluster/src/main/java/androidx/car/cluster/navigation/RichText.java
@@ -30,17 +30,27 @@
 import java.util.Objects;
 
 /**
- * Immutable sequence of graphic elements (e.g.: text, images) to be displayed one after another in
- * the same way as a {@link CharSequence} would. Elements in this sequence are represented by
- * {@link RichTextElement} instances.
+ * A {@link RichText} is an immutable sequence of graphic elements (e.g.: text, images)
+ * to be displayed one after another.
+ * <p>
+ * Elements in this sequence are represented by {@link RichTextElement} instances.
+ * <p>
+ * Each sequence will have a textual representation provided by {@link #getText()}
+ * and in the case of the absence of a rich representation, the sequence of elements
+ * {@link #getElements()} may be left empty. The textual representation may also be used as a
+ * fallback for when {@link RichTextElement}s fail to render.
  */
 @VersionedParcelize
 public class RichText implements VersionedParcelable {
     @ParcelField(1)
     List<RichTextElement> mElements;
 
+    @ParcelField(2)
+    String mText;
+
     /**
      * Used by {@link VersionedParcelable}
+     *
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -51,7 +61,8 @@
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    RichText(@NonNull List<RichTextElement> elements) {
+    RichText(@NonNull String text, @NonNull List<RichTextElement> elements) {
+        mText = text;
         mElements = new ArrayList<>(elements);
     }
 
@@ -77,13 +88,24 @@
          * Returns a {@link RichText} built with the provided information.
          */
         @NonNull
-        public RichText build() {
-            return new RichText(mElements);
+        public RichText build(@NonNull String text) {
+            return new RichText(Preconditions.checkNotNull(text), mElements);
         }
     }
 
     /**
-     * Returns the sequence of graphic elements
+     * Returns the plaintext string of this {@link RichText}.
+     */
+    @NonNull
+    public String getText() {
+        return Common.nonNullOrEmpty(mText);
+    }
+
+    /**
+     * Returns the sequence of graphic elements.
+     * <p>
+     * If no rich representation is available, the list may be empty and {@link #getText()} should
+     * be used as a fallback.
      */
     @NonNull
     public List<RichTextElement> getElements() {
@@ -99,16 +121,17 @@
             return false;
         }
         RichText richText = (RichText) o;
-        return Objects.equals(getElements(), richText.getElements());
+        return Objects.equals(getText(), richText.getText())
+                && Objects.equals(getElements(), richText.getElements());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(getElements());
+        return Objects.hash(getText(), getElements());
     }
 
     @Override
     public String toString() {
-        return String.format("{elements: %s}", mElements);
+        return String.format("{text: '%s', elements: %s}", mText, mElements);
     }
 }
diff --git a/car/cluster/src/main/java/androidx/car/cluster/navigation/RichTextElement.java b/car/cluster/src/main/java/androidx/car/cluster/navigation/RichTextElement.java
index 96cb264..92a1723 100644
--- a/car/cluster/src/main/java/androidx/car/cluster/navigation/RichTextElement.java
+++ b/car/cluster/src/main/java/androidx/car/cluster/navigation/RichTextElement.java
@@ -21,7 +21,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
-import androidx.core.util.Preconditions;
 import androidx.versionedparcelable.ParcelField;
 import androidx.versionedparcelable.VersionedParcelable;
 import androidx.versionedparcelable.VersionedParcelize;
@@ -32,10 +31,10 @@
  * An item in a {@link RichText} sequence, acting as a union of different graphic elements that can
  * be displayed one after another.
  * <p>
- * All {@link RichTextElement} must contain a textual representation of its content, which will be
- * used by consumers incapable of rendering the desired graphic element. A {@link RichTextElement}
- * can only contain one other graphic element. Consumers must attempt to render such element and
- * only fallback to text if needed.
+ * A {@link RichTextElement} can contain text and a graphic element as its representation.
+ * Consumers must attempt to render the graphic element if present. In case of failure to render
+ * the element, the first line of fallback should be {@link #getText()}. If that is also empty,
+ * fallback to {@link RichText#getText()} will be used.
  * <p>
  * New graphic element types might be added in the future. If such elements are unknown to the
  * consumer, they will be delivered to the consumer as just text.
@@ -49,6 +48,7 @@
 
     /**
      * Used by {@link VersionedParcelable}
+     *
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
@@ -59,17 +59,17 @@
      * @hide
      */
     @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public RichTextElement(@NonNull String text, @Nullable ImageReference image) {
-        mText = Preconditions.checkNotNull(text, "A textual representation of this "
-                + "element must be provided.");
+    public RichTextElement(@Nullable String text, @Nullable ImageReference image) {
+        mText = text;
         mImage = image;
     }
 
     /**
      * Builder for creating a {@link RichTextElement}
      */
-    public static class Builder {
+    public static final class Builder {
         private ImageReference mImage;
+        private String mText;
 
         /**
          * Sets an image to be displayed as part of the {@link RichText} sequence. Images in the
@@ -80,6 +80,7 @@
          *              textual representation should be used.
          * @return this object for chaining
          */
+        @NonNull
         public Builder setImage(@Nullable ImageReference image) {
             // Note: if new graphic element types are added in the future, this API should enforce
             // that no more than one of them is set at each moment.
@@ -88,20 +89,34 @@
         }
 
         /**
-         * Builds a {@link RichTextElement} with the given textual representation, and any other
-         * optional representation provided to this builder. If no other graphic element is provided
-         * or if such graphic element cannot be rendered by the consumer, this text will be used
-         * instead.
+         * Sets the textual representation for this element to be displayed as part of the
+         * {@link RichText} sequence.
          *
          * @param text textual representation to use
+         * @return this object for chaining
          */
-        public RichTextElement build(@NonNull String text) {
-            return new RichTextElement(Preconditions.checkNotNull(text), mImage);
+        @NonNull
+        public Builder setText(@Nullable String text) {
+            mText = text;
+            return this;
+        }
+
+        /**
+         * Builds a {@link RichTextElement} with an optional textual representation, and any other
+         * optional representation provided to this builder. If no other graphic element is provided
+         * or if such graphic element cannot be rendered by the consumer, text will be used instead.
+         */
+        @NonNull
+        public RichTextElement build() {
+            return new RichTextElement(Common.nonNullOrEmpty(mText), mImage);
         }
     }
 
     /**
-     * Returns the textual representation of this element
+     * Returns the textual representation of this element.
+     * <p>
+     * If {@link #getImage()} is provided, then this is used as a fallback in the case of render
+     * failures.
      */
     @NonNull
     public String getText() {
@@ -109,8 +124,12 @@
     }
 
     /**
-     * Returns an image representing this element, or null if the textual representation should be
-     * used instead.
+     * Returns an image representing this element. This representation should be used over
+     * the textual representation {@link #getText()} whenever possible.
+     * <p>
+     * In case of failure to render, initial fallback to {@link #getText()} should be used.
+     * Fallback to {@link RichText#getText()} should be used if textual fallback is not provided
+     * (empty string).
      */
     @Nullable
     public ImageReference getImage() {
diff --git a/car/core/api/1.0.0-alpha7.txt b/car/core/api/1.0.0-alpha7.txt
index a192354..a5d0f09 100644
--- a/car/core/api/1.0.0-alpha7.txt
+++ b/car/core/api/1.0.0-alpha7.txt
@@ -95,6 +95,7 @@
 
   public class CarUxRestrictionsHelper {
     ctor public CarUxRestrictionsHelper(android.content.Context!, androidx.car.uxrestrictions.OnUxRestrictionsChangedListener);
+    method public androidx.car.uxrestrictions.CarUxRestrictions getCurrentCarUxRestrictions();
     method public void start();
     method public void stop();
   }
diff --git a/car/core/api/current.txt b/car/core/api/current.txt
index a192354..a5d0f09 100644
--- a/car/core/api/current.txt
+++ b/car/core/api/current.txt
@@ -95,6 +95,7 @@
 
   public class CarUxRestrictionsHelper {
     ctor public CarUxRestrictionsHelper(android.content.Context!, androidx.car.uxrestrictions.OnUxRestrictionsChangedListener);
+    method public androidx.car.uxrestrictions.CarUxRestrictions getCurrentCarUxRestrictions();
     method public void start();
     method public void stop();
   }
diff --git a/car/core/build.gradle b/car/core/build.gradle
index df5f78c..9fba2a1 100644
--- a/car/core/build.gradle
+++ b/car/core/build.gradle
@@ -8,12 +8,12 @@
 
 dependencies {
     api(project(":appcompat"))
-    api(project(":cardview"))
-    api(project(":coordinatorlayout"))
+    api("androidx.cardview:cardview:1.0.0")
+    api("androidx.coordinatorlayout:coordinatorlayout:1.0.0")
     api(project(":annotation"))
     api(project(":recyclerview"))
-    api(project(":gridlayout"))
-    api(project(":preference"))
+    api("androidx.gridlayout:gridlayout:1.0.0")
+    api("androidx.preference:preference:1.0.0")
     api(CONSTRAINT_LAYOUT, { transitive = true })
     api(SUPPORT_DESIGN, libs.exclude_for_material)
 
diff --git a/car/core/res/layout/car_paged_scrollbar_buttons.xml b/car/core/res/layout/car_paged_scrollbar_buttons.xml
index 3a430e2..47c918e 100644
--- a/car/core/res/layout/car_paged_scrollbar_buttons.xml
+++ b/car/core/res/layout/car_paged_scrollbar_buttons.xml
@@ -21,7 +21,6 @@
 
     <ImageButton
         android:id="@+id/page_up"
-        android:background="?attr/selectableItemBackgroundBorderless"
         android:layout_width="@dimen/car_scroll_bar_button_size"
         android:layout_height="@dimen/car_scroll_bar_button_size"
         android:contentDescription="@string/scroll_bar_page_up_button"
@@ -51,7 +50,6 @@
 
     <ImageButton
         android:id="@+id/page_down"
-        android:background="?attr/selectableItemBackgroundBorderless"
         android:layout_width="@dimen/car_scroll_bar_button_size"
         android:layout_height="@dimen/car_scroll_bar_button_size"
         android:contentDescription="@string/scroll_bar_page_down_button"
diff --git a/car/core/res/values/themes.xml b/car/core/res/values/themes.xml
index e960ba5..f8160d5 100644
--- a/car/core/res/values/themes.xml
+++ b/car/core/res/values/themes.xml
@@ -83,7 +83,6 @@
         <item name="selectableItemBackground">@drawable/car_card_ripple_background_light</item>
         <item name="selectableItemBackgroundBorderless">@drawable/car_button_ripple_background_light</item>
         <item name="switchStyle">@style/Widget.Car.Switch</item>
-        <item name="tabStyle">@style/Widget.Car.TabLayout</item>
         <item name="checkboxStyle">@style/Widget.Car.CheckBox.Light</item>
         <item name="toolbarNavigationButtonStyle">@style/Widget.Car.Toolbar.Button.Navigation.Light</item>
         <item name="toolbarStyle">@style/Widget.Car.Toolbar.Light</item>
diff --git a/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java b/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java
index 75375df..65ad2f8 100644
--- a/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java
+++ b/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java
@@ -24,6 +24,7 @@
 import android.content.Context;
 import android.content.ServiceConnection;
 import android.os.IBinder;
+import android.os.SystemClock;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
@@ -54,7 +55,7 @@
         }
         mListener = listener;
         mCar = Car.createCar(context, mServiceConnection);
-    };
+    }
 
     /**
      * Starts monitoring any changes in {@link CarUxRestrictions}.
@@ -103,6 +104,29 @@
         }
     }
 
+    /**
+     * Gets the current UX restrictions {@link CarUxRestrictions} in place.
+     *
+     * @return current UX restrictions that is in effect. If the current UX restrictions cannot
+     * be obtained, the default of no active restrictions is returned.
+     */
+    @NonNull
+    public CarUxRestrictions getCurrentCarUxRestrictions() {
+        try {
+            if (mCarUxRestrictionsManager != null) {
+                return new CarUxRestrictions(
+                        mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
+            }
+        } catch (CarNotConnectedException e) {
+            // Do nothing.
+            Log.w(TAG, "getCurrentCarUxRestrictions(); cannot get current UX restrictions.");
+        }
+
+        return new CarUxRestrictions.Builder(false,
+                CarUxRestrictions.UX_RESTRICTIONS_BASELINE, SystemClock.elapsedRealtimeNanos())
+                .build();
+    }
+
     private final ServiceConnection mServiceConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
diff --git a/collection/api/1.1.0-alpha04.txt b/collection/api/1.1.0-alpha04.txt
new file mode 100644
index 0000000..179d17f
--- /dev/null
+++ b/collection/api/1.1.0-alpha04.txt
@@ -0,0 +1,183 @@
+// Signature format: 3.0
+package androidx.collection {
+
+  public class ArrayMap<K, V> extends androidx.collection.SimpleArrayMap<K,V> implements java.util.Map<K,V> {
+    ctor public ArrayMap();
+    ctor public ArrayMap(int);
+    ctor public ArrayMap(androidx.collection.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<E> java.util.Set<E> {
+    ctor public ArraySet();
+    ctor public ArraySet(int);
+    ctor public ArraySet(androidx.collection.ArraySet<E>?);
+    ctor public ArraySet(java.util.Collection<E>?);
+    method public boolean add(E?);
+    method public void addAll(androidx.collection.ArraySet<? extends E>);
+    method public boolean addAll(java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(Object?);
+    method public boolean containsAll(java.util.Collection<?>);
+    method public void ensureCapacity(int);
+    method public int indexOf(Object?);
+    method public boolean isEmpty();
+    method public java.util.Iterator<E>! iterator();
+    method public boolean remove(Object?);
+    method public boolean removeAll(androidx.collection.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 Object[] toArray();
+    method public <T> T[] toArray(T[]);
+    method public E? valueAt(int);
+  }
+
+  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 androidx.collection.LongSparseArray<E>! clone();
+    method public boolean containsKey(long);
+    method public boolean containsValue(E!);
+    method @Deprecated 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 boolean isEmpty();
+    method public long keyAt(int);
+    method public void put(long, E!);
+    method public void putAll(androidx.collection.LongSparseArray<? extends E>);
+    method public E? putIfAbsent(long, E!);
+    method public void remove(long);
+    method public boolean remove(long, Object!);
+    method public void removeAt(int);
+    method public E? replace(long, E!);
+    method public boolean replace(long, E!, E!);
+    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 int createCount();
+    method protected void entryRemoved(boolean, K, V, V?);
+    method public final void evictAll();
+    method public final int evictionCount();
+    method public final V? get(K);
+    method public final int hitCount();
+    method public final int maxSize();
+    method public final int missCount();
+    method public final V? put(K, V);
+    method public final int putCount();
+    method public final V? remove(K);
+    method public void resize(int);
+    method public final int size();
+    method protected int sizeOf(K, V);
+    method public final java.util.Map<K,V>! snapshot();
+    method public final String toString();
+    method public void trimToSize(int);
+  }
+
+  public class SimpleArrayMap<K, V> {
+    ctor public SimpleArrayMap();
+    ctor public SimpleArrayMap(int);
+    ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap<K,V>!);
+    method public void clear();
+    method public boolean containsKey(Object?);
+    method public boolean containsValue(Object!);
+    method public void ensureCapacity(int);
+    method public V? get(Object!);
+    method public V! getOrDefault(Object!, V!);
+    method public int indexOfKey(Object?);
+    method public boolean isEmpty();
+    method public K! keyAt(int);
+    method public V? put(K!, V!);
+    method public void putAll(androidx.collection.SimpleArrayMap<? extends K,? extends V>);
+    method public V? putIfAbsent(K!, V!);
+    method public V? remove(Object!);
+    method public boolean remove(Object!, Object!);
+    method public V! removeAt(int);
+    method public V? replace(K!, V!);
+    method public boolean replace(K!, V!, V!);
+    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 androidx.collection.SparseArrayCompat<E>! clone();
+    method public boolean containsKey(int);
+    method public boolean containsValue(E!);
+    method @Deprecated 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 boolean isEmpty();
+    method public int keyAt(int);
+    method public void put(int, E!);
+    method public void putAll(androidx.collection.SparseArrayCompat<? extends E>);
+    method public E? putIfAbsent(int, E!);
+    method public void remove(int);
+    method public boolean remove(int, Object!);
+    method public void removeAt(int);
+    method public void removeAtRange(int, int);
+    method public E? replace(int, E!);
+    method public boolean replace(int, E!, E!);
+    method public void setValueAt(int, E!);
+    method public int size();
+    method public E! valueAt(int);
+  }
+
+}
+
diff --git a/collection/api/restricted_1.1.0-alpha04.txt b/collection/api/restricted_1.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/collection/api/restricted_1.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/collection/api/restricted_current.txt b/collection/api/restricted_current.txt
index 7345795..da4f6cc 100644
--- a/collection/api/restricted_current.txt
+++ b/collection/api/restricted_current.txt
@@ -1,9 +1 @@
 // Signature format: 3.0
-package androidx.collection {
-
-  public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void append(E!);
-  }
-
-}
-
diff --git a/collection/ktx/api/1.1.0-alpha04.txt b/collection/ktx/api/1.1.0-alpha04.txt
new file mode 100644
index 0000000..3fe6a36
--- /dev/null
+++ b/collection/ktx/api/1.1.0-alpha04.txt
@@ -0,0 +1,52 @@
+// Signature format: 3.0
+package androidx.collection {
+
+  public final class ArrayMapKt {
+    ctor public ArrayMapKt();
+    method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
+    method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
+  public final class ArraySetKt {
+    ctor public ArraySetKt();
+    method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
+    method public static <T> androidx.collection.ArraySet<T> arraySetOf(T... values);
+  }
+
+  public final class LongSparseArrayKt {
+    ctor public LongSparseArrayKt();
+    method public static inline operator <T> boolean contains(androidx.collection.LongSparseArray<T>, long key);
+    method public static inline <T> void forEach(androidx.collection.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+    method public static inline <T> T! getOrDefault(androidx.collection.LongSparseArray<T>, long key, T! defaultValue);
+    method public static inline <T> T! getOrElse(androidx.collection.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static inline <T> int getSize(androidx.collection.LongSparseArray<T>);
+    method public static inline <T> boolean isNotEmpty(androidx.collection.LongSparseArray<T>);
+    method public static <T> kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray<T>);
+    method public static operator <T> androidx.collection.LongSparseArray<T> plus(androidx.collection.LongSparseArray<T>, androidx.collection.LongSparseArray<T> other);
+    method @Deprecated public static <T> boolean remove(androidx.collection.LongSparseArray<T>, long key, T! value);
+    method public static inline operator <T> void set(androidx.collection.LongSparseArray<T>, long key, T! value);
+    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.LongSparseArray<T>);
+  }
+
+  public final class LruCacheKt {
+    ctor public LruCacheKt();
+    method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf = { _, _ -> 1 }, kotlin.jvm.functions.Function1<? super K,? extends V> create = { (V)null }, kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved = { _, _, _, _ ->  });
+  }
+
+  public final class SparseArrayKt {
+    ctor public SparseArrayKt();
+    method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
+    method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+    method public static inline <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T! defaultValue);
+    method public static inline <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
+    method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
+    method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
+    method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
+    method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T! value);
+    method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T! value);
+    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
+  }
+
+}
+
diff --git a/collection/ktx/api/restricted_1.1.0-alpha04.txt b/collection/ktx/api/restricted_1.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/collection/ktx/api/restricted_1.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/collection/src/main/java/androidx/collection/ArraySet.java b/collection/src/main/java/androidx/collection/ArraySet.java
index 7963bbc..0ae9d0e 100644
--- a/collection/src/main/java/androidx/collection/ArraySet.java
+++ b/collection/src/main/java/androidx/collection/ArraySet.java
@@ -16,11 +16,8 @@
 
 package androidx.collection;
 
-import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
 
 import java.lang.reflect.Array;
 import java.util.Collection;
@@ -406,35 +403,6 @@
     }
 
     /**
-     * Special fast path for appending items to the end of the array without validation.
-     * The array must already be large enough to contain the item.
-     * @hide
-     */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
-    public void append(E value) {
-        final int index = mSize;
-        final int hash = value == null ? 0 : value.hashCode();
-        if (index >= mHashes.length) {
-            throw new IllegalStateException("Array is full");
-        }
-        if (index > 0 && mHashes[index - 1] > hash) {
-            // Cannot optimize since it would break the sorted order - fallback to add()
-            if (DEBUG) {
-                RuntimeException e = new RuntimeException("here");
-                System.err.println(TAG + " New hash " + hash
-                        + " is before end of array hash " + mHashes[index - 1]
-                        + " at index " + index);
-                e.printStackTrace();
-            }
-            add(value);
-            return;
-        }
-        mSize = index + 1;
-        mHashes[index] = hash;
-        mArray[index] = value;
-    }
-
-    /**
      * Perform a {@link #add(Object)} of all values in <var>array</var>
      * @param array The array whose contents are to be retrieved.
      */
diff --git a/core/api/1.1.0-alpha05.ignore b/core/api/1.1.0-alpha05.ignore
index 74eb4e8..441ccd3 100644
--- a/core/api/1.1.0-alpha05.ignore
+++ b/core/api/1.1.0-alpha05.ignore
@@ -1,55 +1,3 @@
 // Baseline format: 1.0
-DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getCancelLabel():
-    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getCancelLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getConfirmLabel():
-    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getConfirmLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getInProgressLabel():
-    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getInProgressLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setCancelLabel(CharSequence):
-    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setCancelLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setConfirmLabel(CharSequence):
-    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setConfirmLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setInProgressLabel(CharSequence):
-    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setInProgressLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getContentIcon():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getContentIcon(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getContentIconGravity():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getContentIconGravity(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getCustomContentHeight():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getCustomContentHeight(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getCustomSizePreset():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getCustomSizePreset(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getGravity():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getGravity(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintAvoidBackgroundClipping():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getHintAvoidBackgroundClipping(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintHideIcon():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getHintHideIcon(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintScreenTimeout():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getHintScreenTimeout(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintShowBackgroundOnly():
-    Method androidx.core.app.NotificationCompat.WearableExtender.getHintShowBackgroundOnly(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setContentIcon(int):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setContentIcon(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setContentIconGravity(int):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setContentIconGravity(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setCustomContentHeight(int):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setCustomContentHeight(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setCustomSizePreset(int):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setCustomSizePreset(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setGravity(int):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setGravity(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintAvoidBackgroundClipping(boolean):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setHintAvoidBackgroundClipping(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintHideIcon(boolean):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setHintHideIcon(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintScreenTimeout(int):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setHintScreenTimeout(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintShowBackgroundOnly(boolean):
-    Method androidx.core.app.NotificationCompat.WearableExtender.setHintShowBackgroundOnly(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
-
-
 RemovedDeprecatedMethod: androidx.core.graphics.drawable.IconCompat#createFromIcon(android.graphics.drawable.Icon):
     Removed deprecated method androidx.core.graphics.drawable.IconCompat.createFromIcon(android.graphics.drawable.Icon)
-
-
diff --git a/core/api/1.1.0-alpha06.ignore b/core/api/1.1.0-alpha06.ignore
new file mode 100644
index 0000000..74eb4e8
--- /dev/null
+++ b/core/api/1.1.0-alpha06.ignore
@@ -0,0 +1,55 @@
+// Baseline format: 1.0
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getCancelLabel():
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getCancelLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getConfirmLabel():
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getConfirmLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getInProgressLabel():
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getInProgressLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setCancelLabel(CharSequence):
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setCancelLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setConfirmLabel(CharSequence):
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setConfirmLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setInProgressLabel(CharSequence):
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setInProgressLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getContentIcon():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getContentIcon(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getContentIconGravity():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getContentIconGravity(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getCustomContentHeight():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getCustomContentHeight(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getCustomSizePreset():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getCustomSizePreset(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getGravity():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getGravity(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintAvoidBackgroundClipping():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintAvoidBackgroundClipping(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintHideIcon():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintHideIcon(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintScreenTimeout():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintScreenTimeout(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintShowBackgroundOnly():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintShowBackgroundOnly(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setContentIcon(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setContentIcon(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setContentIconGravity(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setContentIconGravity(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setCustomContentHeight(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setCustomContentHeight(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setCustomSizePreset(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setCustomSizePreset(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setGravity(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setGravity(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintAvoidBackgroundClipping(boolean):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintAvoidBackgroundClipping(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintHideIcon(boolean):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintHideIcon(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintScreenTimeout(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintScreenTimeout(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintShowBackgroundOnly(boolean):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintShowBackgroundOnly(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+
+
+RemovedDeprecatedMethod: androidx.core.graphics.drawable.IconCompat#createFromIcon(android.graphics.drawable.Icon):
+    Removed deprecated method androidx.core.graphics.drawable.IconCompat.createFromIcon(android.graphics.drawable.Icon)
+
+
diff --git a/core/api/1.1.0-alpha06.txt b/core/api/1.1.0-alpha06.txt
new file mode 100644
index 0000000..0ece2e3
--- /dev/null
+++ b/core/api/1.1.0-alpha06.txt
@@ -0,0 +1,2943 @@
+// Signature format: 3.0
+package androidx.core.accessibilityservice {
+
+  public final class AccessibilityServiceInfoCompat {
+    method public static String capabilityToString(int);
+    method public static String feedbackTypeToString(int);
+    method public static String? flagToString(int);
+    method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
+    method public static 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 androidx.core.app {
+
+  public class ActivityCompat extends androidx.core.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 @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
+    method public static void postponeEnterTransition(android.app.Activity);
+    method public static void recreate(android.app.Activity);
+    method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity!, android.view.DragEvent!);
+    method public static void requestPermissions(android.app.Activity, String[], @IntRange(from=0) int);
+    method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
+    method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+    method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
+    method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
+    method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, 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 interface ActivityCompat.OnRequestPermissionsResultCallback {
+    method public void onRequestPermissionsResult(int, String[], int[]);
+  }
+
+  public static interface ActivityCompat.PermissionCompatDelegate {
+    method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
+    method public boolean requestPermissions(android.app.Activity, String[], @IntRange(from=0) 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 androidx.core.app.ActivityOptionsCompat makeBasic();
+    method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
+    method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
+    method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
+    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+    method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View,java.lang.String>...!);
+    method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
+    method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+    method public void requestUsageTimeReport(android.app.PendingIntent);
+    method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
+    method public android.os.Bundle? toBundle();
+    method public void update(androidx.core.app.ActivityOptionsCompat);
+    field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+    field public static final 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);
+  }
+
+  @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
+    ctor public AppComponentFactory();
+    method public final android.app.Activity! instantiateActivity(ClassLoader!, String!, android.content.Intent!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.app.Application! instantiateApplication(ClassLoader!, String!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.content.ContentProvider! instantiateProvider(ClassLoader!, String!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.content.BroadcastReceiver! instantiateReceiver(ClassLoader!, String!, android.content.Intent!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public final android.app.Service! instantiateService(ClassLoader!, String!, android.content.Intent!) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public class AppLaunchChecker {
+    ctor @Deprecated public AppLaunchChecker();
+    method public static boolean hasStartedFromLauncher(android.content.Context);
+    method public static void onActivityCreate(android.app.Activity);
+  }
+
+  public final class AppOpsManagerCompat {
+    method public static int noteOp(android.content.Context, String, int, String);
+    method public static int noteOpNoThrow(android.content.Context, String, int, String);
+    method public static int noteProxyOp(android.content.Context, String, String);
+    method public static int noteProxyOpNoThrow(android.content.Context, String, String);
+    method public static String? permissionToOp(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, String?);
+    method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
+  }
+
+  public class DialogCompat {
+    method public static android.view.View requireViewById(android.app.Dialog, int);
+  }
+
+  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 abstract class JobIntentService extends android.app.Service {
+    ctor public JobIntentService();
+    method public static void enqueueWork(android.content.Context, 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 final class NavUtils {
+    method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
+    method public static android.content.Intent? getParentActivityIntent(android.content.Context, 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 String? getParentActivityName(android.app.Activity);
+    method public static 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 String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
+  }
+
+  public class NotificationCompat {
+    ctor @Deprecated public NotificationCompat();
+    method public static androidx.core.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 String! getCategory(android.app.Notification!);
+    method public static String! getChannelId(android.app.Notification!);
+    method @RequiresApi(19) public static CharSequence! getContentTitle(android.app.Notification!);
+    method public static android.os.Bundle? getExtras(android.app.Notification!);
+    method public static String! getGroup(android.app.Notification!);
+    method public static int getGroupAlertBehavior(android.app.Notification!);
+    method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action>! getInvisibleActions(android.app.Notification!);
+    method public static boolean getLocalOnly(android.app.Notification!);
+    method public static String! getShortcutId(android.app.Notification!);
+    method public static 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 String CATEGORY_ALARM = "alarm";
+    field public static final String CATEGORY_CALL = "call";
+    field public static final String CATEGORY_EMAIL = "email";
+    field public static final String CATEGORY_ERROR = "err";
+    field public static final String CATEGORY_EVENT = "event";
+    field public static final String CATEGORY_MESSAGE = "msg";
+    field public static final String CATEGORY_NAVIGATION = "navigation";
+    field public static final String CATEGORY_PROGRESS = "progress";
+    field public static final String CATEGORY_PROMO = "promo";
+    field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+    field public static final String CATEGORY_REMINDER = "reminder";
+    field public static final String CATEGORY_SERVICE = "service";
+    field public static final String CATEGORY_SOCIAL = "social";
+    field public static final String CATEGORY_STATUS = "status";
+    field public static final String CATEGORY_SYSTEM = "sys";
+    field public static final String CATEGORY_TRANSPORT = "transport";
+    field @ColorInt 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 String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+    field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+    field public static final String EXTRA_BIG_TEXT = "android.bigText";
+    field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+    field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+    field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
+    field public static final String EXTRA_INFO_TEXT = "android.infoText";
+    field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+    field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+    field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+    field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+    field public static final String EXTRA_MESSAGES = "android.messages";
+    field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
+    field public static final String EXTRA_PEOPLE = "android.people";
+    field public static final String EXTRA_PICTURE = "android.picture";
+    field public static final String EXTRA_PROGRESS = "android.progress";
+    field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+    field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+    field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+    field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+    field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+    field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+    field public static final String EXTRA_SMALL_ICON = "android.icon";
+    field public static final String EXTRA_SUB_TEXT = "android.subText";
+    field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+    field public static final String EXTRA_TEMPLATE = "android.template";
+    field public static final String EXTRA_TEXT = "android.text";
+    field public static final String EXTRA_TEXT_LINES = "android.textLines";
+    field public static final String EXTRA_TITLE = "android.title";
+    field public static final 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 @Deprecated public static final 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, CharSequence!, android.app.PendingIntent!);
+    method public android.app.PendingIntent! getActionIntent();
+    method public boolean getAllowGeneratedReplies();
+    method public androidx.core.app.RemoteInput[]! getDataOnlyRemoteInputs();
+    method public android.os.Bundle! getExtras();
+    method public int getIcon();
+    method public androidx.core.app.RemoteInput[]! getRemoteInputs();
+    method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
+    method public boolean getShowsUserInterface();
+    method public CharSequence! getTitle();
+    field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+    field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+    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 CharSequence! title;
+  }
+
+  public static final class NotificationCompat.Action.Builder {
+    ctor public NotificationCompat.Action.Builder(int, CharSequence!, android.app.PendingIntent!);
+    ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Action.Builder! addExtras(android.os.Bundle!);
+    method public androidx.core.app.NotificationCompat.Action.Builder! addRemoteInput(androidx.core.app.RemoteInput!);
+    method public androidx.core.app.NotificationCompat.Action! build();
+    method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Extender!);
+    method public android.os.Bundle! getExtras();
+    method public androidx.core.app.NotificationCompat.Action.Builder! setAllowGeneratedReplies(boolean);
+    method public androidx.core.app.NotificationCompat.Action.Builder! setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
+    method public androidx.core.app.NotificationCompat.Action.Builder! setShowsUserInterface(boolean);
+  }
+
+  public static interface NotificationCompat.Action.Extender {
+    method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+  }
+
+  @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
+  }
+
+  public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
+    ctor public NotificationCompat.Action.WearableExtender();
+    ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! clone();
+    method public androidx.core.app.NotificationCompat.Action.Builder! extend(androidx.core.app.NotificationCompat.Action.Builder!);
+    method @Deprecated public CharSequence! getCancelLabel();
+    method @Deprecated public CharSequence! getConfirmLabel();
+    method public boolean getHintDisplayActionInline();
+    method public boolean getHintLaunchesActivity();
+    method @Deprecated public CharSequence! getInProgressLabel();
+    method public boolean isAvailableOffline();
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! setAvailableOffline(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setCancelLabel(CharSequence!);
+    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setConfirmLabel(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintDisplayActionInline(boolean);
+    method public androidx.core.app.NotificationCompat.Action.WearableExtender! setHintLaunchesActivity(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender! setInProgressLabel(CharSequence!);
+  }
+
+  public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
+    ctor public NotificationCompat.BigPictureStyle();
+    ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! bigLargeIcon(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! bigPicture(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! setBigContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.BigPictureStyle! setSummaryText(CharSequence!);
+  }
+
+  public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
+    ctor public NotificationCompat.BigTextStyle();
+    ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder!);
+    method public androidx.core.app.NotificationCompat.BigTextStyle! bigText(CharSequence!);
+    method public androidx.core.app.NotificationCompat.BigTextStyle! setBigContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.BigTextStyle! setSummaryText(CharSequence!);
+  }
+
+  public static class NotificationCompat.Builder {
+    ctor public NotificationCompat.Builder(android.content.Context, String);
+    ctor @Deprecated public NotificationCompat.Builder(android.content.Context!);
+    method public androidx.core.app.NotificationCompat.Builder! addAction(int, CharSequence!, android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.Builder! addAction(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Builder! addExtras(android.os.Bundle!);
+    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(int, CharSequence!, android.app.PendingIntent!);
+    method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder! addInvisibleAction(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.Builder! addPerson(String!);
+    method public android.app.Notification! build();
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Extender!);
+    method public android.os.Bundle! getExtras();
+    method @Deprecated public android.app.Notification! getNotification();
+    method protected static CharSequence! limitCharSequenceLength(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setAutoCancel(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setBadgeIconType(int);
+    method public androidx.core.app.NotificationCompat.Builder! setCategory(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setChannelId(String);
+    method public androidx.core.app.NotificationCompat.Builder! setColor(@ColorInt int);
+    method public androidx.core.app.NotificationCompat.Builder! setColorized(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setContent(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentInfo(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentIntent(android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentText(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setCustomBigContentView(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setCustomContentView(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setCustomHeadsUpContentView(android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setDefaults(int);
+    method public androidx.core.app.NotificationCompat.Builder! setDeleteIntent(android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.Builder! setExtras(android.os.Bundle!);
+    method public androidx.core.app.NotificationCompat.Builder! setFullScreenIntent(android.app.PendingIntent!, boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setGroup(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setGroupAlertBehavior(int);
+    method public androidx.core.app.NotificationCompat.Builder! setGroupSummary(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setLargeIcon(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.Builder! setLights(@ColorInt int, int, int);
+    method public androidx.core.app.NotificationCompat.Builder! setLocalOnly(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setNumber(int);
+    method public androidx.core.app.NotificationCompat.Builder! setOngoing(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setOnlyAlertOnce(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setPriority(int);
+    method public androidx.core.app.NotificationCompat.Builder! setProgress(int, int, boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setPublicVersion(android.app.Notification!);
+    method public androidx.core.app.NotificationCompat.Builder! setRemoteInputHistory(CharSequence[]!);
+    method public androidx.core.app.NotificationCompat.Builder! setShortcutId(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setShowWhen(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int);
+    method public androidx.core.app.NotificationCompat.Builder! setSmallIcon(int, int);
+    method public androidx.core.app.NotificationCompat.Builder! setSortKey(String!);
+    method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!);
+    method public androidx.core.app.NotificationCompat.Builder! setSound(android.net.Uri!, int);
+    method public androidx.core.app.NotificationCompat.Builder! setStyle(androidx.core.app.NotificationCompat.Style!);
+    method public androidx.core.app.NotificationCompat.Builder! setSubText(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!);
+    method public androidx.core.app.NotificationCompat.Builder! setTicker(CharSequence!, android.widget.RemoteViews!);
+    method public androidx.core.app.NotificationCompat.Builder! setTimeoutAfter(long);
+    method public androidx.core.app.NotificationCompat.Builder! setUsesChronometer(boolean);
+    method public androidx.core.app.NotificationCompat.Builder! setVibrate(long[]!);
+    method public androidx.core.app.NotificationCompat.Builder! setVisibility(int);
+    method public androidx.core.app.NotificationCompat.Builder! setWhen(long);
+    field @Deprecated public java.util.ArrayList<java.lang.String>! mPeople;
+  }
+
+  public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
+    ctor public NotificationCompat.CarExtender();
+    ctor public NotificationCompat.CarExtender(android.app.Notification!);
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+    method @ColorInt public int getColor();
+    method public android.graphics.Bitmap! getLargeIcon();
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! getUnreadConversation();
+    method public androidx.core.app.NotificationCompat.CarExtender! setColor(@ColorInt int);
+    method public androidx.core.app.NotificationCompat.CarExtender! setLargeIcon(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.CarExtender! setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation!);
+  }
+
+  public static class NotificationCompat.CarExtender.UnreadConversation {
+    method public long getLatestTimestamp();
+    method public String[]! getMessages();
+    method public String! getParticipant();
+    method public String[]! getParticipants();
+    method public android.app.PendingIntent! getReadPendingIntent();
+    method public androidx.core.app.RemoteInput! getRemoteInput();
+    method public android.app.PendingIntent! getReplyPendingIntent();
+  }
+
+  public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
+    ctor public NotificationCompat.CarExtender.UnreadConversation.Builder(String!);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! addMessage(String!);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation! build();
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setLatestTimestamp(long);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReadPendingIntent(android.app.PendingIntent!);
+    method public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder! setReplyAction(android.app.PendingIntent!, androidx.core.app.RemoteInput!);
+  }
+
+  public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
+    ctor public NotificationCompat.DecoratedCustomViewStyle();
+  }
+
+  public static interface NotificationCompat.Extender {
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+  }
+
+  public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
+    ctor public NotificationCompat.InboxStyle();
+    ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder!);
+    method public androidx.core.app.NotificationCompat.InboxStyle! addLine(CharSequence!);
+    method public androidx.core.app.NotificationCompat.InboxStyle! setBigContentTitle(CharSequence!);
+    method public androidx.core.app.NotificationCompat.InboxStyle! setSummaryText(CharSequence!);
+  }
+
+  public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
+    ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
+    ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
+    method public void addCompatExtras(android.os.Bundle!);
+    method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, CharSequence!);
+    method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(CharSequence!, long, androidx.core.app.Person!);
+    method public androidx.core.app.NotificationCompat.MessagingStyle! addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message!);
+    method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification!);
+    method public CharSequence? getConversationTitle();
+    method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message>! getMessages();
+    method public androidx.core.app.Person! getUser();
+    method @Deprecated public CharSequence! getUserDisplayName();
+    method public boolean isGroupConversation();
+    method public androidx.core.app.NotificationCompat.MessagingStyle! setConversationTitle(CharSequence?);
+    method public androidx.core.app.NotificationCompat.MessagingStyle! setGroupConversation(boolean);
+    field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+  }
+
+  public static final class NotificationCompat.MessagingStyle.Message {
+    ctor public NotificationCompat.MessagingStyle.Message(CharSequence!, long, androidx.core.app.Person?);
+    ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence!, long, CharSequence!);
+    method public String? getDataMimeType();
+    method public android.net.Uri? getDataUri();
+    method public android.os.Bundle getExtras();
+    method public androidx.core.app.Person? getPerson();
+    method @Deprecated public CharSequence? getSender();
+    method public CharSequence getText();
+    method public long getTimestamp();
+    method public androidx.core.app.NotificationCompat.MessagingStyle.Message! setData(String!, android.net.Uri!);
+  }
+
+  public abstract static class NotificationCompat.Style {
+    ctor public NotificationCompat.Style();
+    method public android.app.Notification! build();
+    method public void setBuilder(androidx.core.app.NotificationCompat.Builder!);
+  }
+
+  public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
+    ctor public NotificationCompat.WearableExtender();
+    ctor public NotificationCompat.WearableExtender(android.app.Notification!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! addAction(androidx.core.app.NotificationCompat.Action!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! addActions(java.util.List<androidx.core.app.NotificationCompat.Action>!);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPage(android.app.Notification!);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! addPages(java.util.List<android.app.Notification>!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! clearActions();
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! clearPages();
+    method public androidx.core.app.NotificationCompat.WearableExtender! clone();
+    method public androidx.core.app.NotificationCompat.Builder! extend(androidx.core.app.NotificationCompat.Builder!);
+    method public java.util.List<androidx.core.app.NotificationCompat.Action>! getActions();
+    method @Deprecated public android.graphics.Bitmap! getBackground();
+    method public String! getBridgeTag();
+    method public int getContentAction();
+    method @Deprecated public int getContentIcon();
+    method @Deprecated public int getContentIconGravity();
+    method public boolean getContentIntentAvailableOffline();
+    method @Deprecated public int getCustomContentHeight();
+    method @Deprecated public int getCustomSizePreset();
+    method public String! getDismissalId();
+    method @Deprecated public android.app.PendingIntent! getDisplayIntent();
+    method @Deprecated public int getGravity();
+    method @Deprecated public boolean getHintAmbientBigPicture();
+    method @Deprecated public boolean getHintAvoidBackgroundClipping();
+    method public boolean getHintContentIntentLaunchesActivity();
+    method @Deprecated public boolean getHintHideIcon();
+    method @Deprecated public int getHintScreenTimeout();
+    method @Deprecated public boolean getHintShowBackgroundOnly();
+    method @Deprecated public java.util.List<android.app.Notification>! getPages();
+    method public boolean getStartScrollBottom();
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setBackground(android.graphics.Bitmap!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setBridgeTag(String!);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setContentAction(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIcon(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setContentIconGravity(int);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setContentIntentAvailableOffline(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomContentHeight(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setCustomSizePreset(int);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setDismissalId(String!);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setDisplayIntent(android.app.PendingIntent!);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setGravity(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAmbientBigPicture(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintAvoidBackgroundClipping(boolean);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setHintContentIntentLaunchesActivity(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintHideIcon(boolean);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintScreenTimeout(int);
+    method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender! setHintShowBackgroundOnly(boolean);
+    method public androidx.core.app.NotificationCompat.WearableExtender! setStartScrollBottom(boolean);
+    field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+    field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+    field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+    field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+    field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+    field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+    field @Deprecated 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 String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
+    field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
+    field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
+    field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
+    field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
+    field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
+  }
+
+  public abstract class NotificationCompatSideChannelService extends android.app.Service {
+    ctor public NotificationCompatSideChannelService();
+    method public abstract void cancel(String!, int, String!);
+    method public abstract void cancelAll(String!);
+    method public abstract void notify(String!, int, 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(String?, int);
+    method public void cancelAll();
+    method public void createNotificationChannel(android.app.NotificationChannel);
+    method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
+    method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup>);
+    method public void createNotificationChannels(java.util.List<android.app.NotificationChannel>);
+    method public void deleteNotificationChannel(String);
+    method public void deleteNotificationChannelGroup(String);
+    method public static androidx.core.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 android.app.NotificationChannel? getNotificationChannel(String);
+    method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
+    method public java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups();
+    method public java.util.List<android.app.NotificationChannel> getNotificationChannels();
+    method public void notify(int, android.app.Notification);
+    method public void notify(String?, int, android.app.Notification);
+    field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
+    field public static final 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 class Person {
+    method public static androidx.core.app.Person fromBundle(android.os.Bundle);
+    method public androidx.core.graphics.drawable.IconCompat? getIcon();
+    method public String? getKey();
+    method public CharSequence? getName();
+    method public String? getUri();
+    method public boolean isBot();
+    method public boolean isImportant();
+    method public androidx.core.app.Person.Builder toBuilder();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static class Person.Builder {
+    ctor public Person.Builder();
+    method public androidx.core.app.Person build();
+    method public androidx.core.app.Person.Builder setBot(boolean);
+    method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
+    method public androidx.core.app.Person.Builder setImportant(boolean);
+    method public androidx.core.app.Person.Builder setKey(String?);
+    method public androidx.core.app.Person.Builder setName(CharSequence?);
+    method public androidx.core.app.Person.Builder setUri(String?);
+  }
+
+  public final class RemoteActionCompat {
+    ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
+    ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
+    method public static androidx.core.app.RemoteActionCompat createFromBundle(android.os.Bundle);
+    method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
+    method public android.app.PendingIntent getActionIntent();
+    method public CharSequence getContentDescription();
+    method public androidx.core.graphics.drawable.IconCompat getIcon();
+    method public CharSequence getTitle();
+    method public boolean isEnabled();
+    method public void setEnabled(boolean);
+    method public void setShouldShowIcon(boolean);
+    method public boolean shouldShowIcon();
+    method public android.os.Bundle toBundle();
+    method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
+  }
+
+  public final class RemoteInput {
+    method public static void addDataResultToIntent(androidx.core.app.RemoteInput!, android.content.Intent!, java.util.Map<java.lang.String,android.net.Uri>!);
+    method public static void addResultsToIntent(androidx.core.app.RemoteInput[]!, android.content.Intent!, android.os.Bundle!);
+    method public boolean getAllowFreeFormInput();
+    method public java.util.Set<java.lang.String>! getAllowedDataTypes();
+    method public CharSequence[]! getChoices();
+    method public static java.util.Map<java.lang.String,android.net.Uri>! getDataResultsFromIntent(android.content.Intent!, String!);
+    method public android.os.Bundle! getExtras();
+    method public CharSequence! getLabel();
+    method public String! getResultKey();
+    method public static android.os.Bundle! getResultsFromIntent(android.content.Intent!);
+    method public static int getResultsSource(android.content.Intent);
+    method public boolean isDataOnly();
+    method public static void setResultsSource(android.content.Intent, int);
+    field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+    field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+    field public static final int SOURCE_CHOICE = 1; // 0x1
+    field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+  }
+
+  public static final class RemoteInput.Builder {
+    ctor public RemoteInput.Builder(String);
+    method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
+    method public androidx.core.app.RemoteInput build();
+    method public android.os.Bundle getExtras();
+    method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
+    method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+    method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence[]?);
+    method public androidx.core.app.RemoteInput.Builder setLabel(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!, androidx.core.app.ShareCompat.IntentBuilder!);
+    method public static void configureMenuItem(android.view.Menu!, int, androidx.core.app.ShareCompat.IntentBuilder!);
+    method public static android.content.ComponentName! getCallingActivity(android.app.Activity!);
+    method public static String! getCallingPackage(android.app.Activity!);
+    field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
+    field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
+  }
+
+  public static class ShareCompat.IntentBuilder {
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailBcc(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailBcc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailCc(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailCc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailTo(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addEmailTo(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! addStream(android.net.Uri!);
+    method public android.content.Intent! createChooserIntent();
+    method public static androidx.core.app.ShareCompat.IntentBuilder! from(android.app.Activity!);
+    method public android.content.Intent! getIntent();
+    method public androidx.core.app.ShareCompat.IntentBuilder! setChooserTitle(CharSequence!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setChooserTitle(@StringRes int);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setEmailBcc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setEmailCc(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setEmailTo(String[]!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setHtmlText(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setStream(android.net.Uri!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setSubject(String!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setText(CharSequence!);
+    method public androidx.core.app.ShareCompat.IntentBuilder! setType(String!);
+    method public void startChooser();
+  }
+
+  public static class ShareCompat.IntentReader {
+    method public static androidx.core.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 CharSequence! getCallingApplicationLabel();
+    method public String! getCallingPackage();
+    method public String[]! getEmailBcc();
+    method public String[]! getEmailCc();
+    method public String[]! getEmailTo();
+    method public String! getHtmlText();
+    method public android.net.Uri! getStream();
+    method public android.net.Uri! getStream(int);
+    method public int getStreamCount();
+    method public String! getSubject();
+    method public CharSequence! getText();
+    method public 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>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
+  }
+
+  public static interface SharedElementCallback.OnSharedElementsReadyListener {
+    method public void onSharedElementsReady();
+  }
+
+  public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
+    method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
+    method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+    method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
+    method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
+    method public androidx.core.app.TaskStackBuilder! addParentStack(android.content.ComponentName!);
+    method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
+    method public android.content.Intent? editIntentAt(int);
+    method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
+    method @Deprecated public 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 @Deprecated public java.util.Iterator<android.content.Intent>! iterator();
+    method public void startActivities();
+    method public void startActivities(android.os.Bundle?);
+  }
+
+  public static interface TaskStackBuilder.SupportParentable {
+    method public android.content.Intent? getSupportParentActivityIntent();
+  }
+
+}
+
+package androidx.core.content {
+
+  public final class ContentResolverCompat {
+    method public static android.database.Cursor! query(android.content.ContentResolver!, android.net.Uri!, String[]!, String!, String[]!, String!, androidx.core.os.CancellationSignal!);
+  }
+
+  public class ContextCompat {
+    ctor protected ContextCompat();
+    method public static int checkSelfPermission(android.content.Context, String);
+    method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
+    method public static java.io.File! getCodeCacheDir(android.content.Context);
+    method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
+    method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
+    method public static java.io.File? getDataDir(android.content.Context);
+    method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+    method public static java.io.File[] getExternalCacheDirs(android.content.Context);
+    method public static java.io.File[] getExternalFilesDirs(android.content.Context, String?);
+    method public static java.util.concurrent.Executor! getMainExecutor(android.content.Context!);
+    method public static java.io.File? getNoBackupFilesDir(android.content.Context);
+    method public static java.io.File[] getObbDirs(android.content.Context);
+    method public static <T> T? getSystemService(android.content.Context, Class<T>);
+    method public static String? getSystemServiceName(android.content.Context, Class<?>);
+    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 class FileProvider extends android.content.ContentProvider {
+    ctor public FileProvider();
+    method public int delete(android.net.Uri, String?, String[]?);
+    method public String! getType(android.net.Uri);
+    method public static android.net.Uri! getUriForFile(android.content.Context, 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, String[]?, String?, String[]?, String?);
+    method public int update(android.net.Uri, android.content.ContentValues!, String?, String[]?);
+  }
+
+  public final class IntentCompat {
+    method public static android.content.Intent makeMainSelectorActivity(String, String);
+    field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+    field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+    field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
+  }
+
+  public final class MimeTypeFilter {
+    method public static boolean matches(String?, String);
+    method public static String? matches(String?, String[]);
+    method public static String? matches(String[]?, String);
+    method public static String[] matchesMany(String[]?, String);
+  }
+
+  public final class PermissionChecker {
+    method public static int checkCallingOrSelfPermission(android.content.Context, String);
+    method public static int checkCallingPermission(android.content.Context, String, String?);
+    method public static int checkPermission(android.content.Context, String, int, int, String?);
+    method public static int checkSelfPermission(android.content.Context, 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
+  }
+
+  @Deprecated public final class SharedPreferencesCompat {
+  }
+
+  @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
+    method @Deprecated public void apply(android.content.SharedPreferences.Editor);
+    method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
+  }
+
+}
+
+package androidx.core.content.pm {
+
+  @Deprecated public final class ActivityInfoCompat {
+    field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
+  }
+
+  public final class PackageInfoCompat {
+    method public static long getLongVersionCode(android.content.pm.PackageInfo);
+  }
+
+  public final class PermissionInfoCompat {
+    method public static int getProtection(android.content.pm.PermissionInfo);
+    method public static int getProtectionFlags(android.content.pm.PermissionInfo);
+  }
+
+  public class ShortcutInfoCompat {
+    method public android.content.ComponentName? getActivity();
+    method public java.util.Set<java.lang.String>? getCategories();
+    method public CharSequence? getDisabledMessage();
+    method public String getId();
+    method public android.content.Intent getIntent();
+    method public android.content.Intent[] getIntents();
+    method public CharSequence? getLongLabel();
+    method public CharSequence getShortLabel();
+    method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
+  }
+
+  public static class ShortcutInfoCompat.Builder {
+    ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
+    method public androidx.core.content.pm.ShortcutInfoCompat build();
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String>);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent[]);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person[]);
+    method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
+  }
+
+  public class ShortcutManagerCompat {
+    method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat>);
+    method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
+    method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat> getDynamicShortcuts(android.content.Context);
+    method public static int getMaxShortcutCountPerActivity(android.content.Context);
+    method public static boolean isRequestPinShortcutSupported(android.content.Context);
+    method public static void removeAllDynamicShortcuts(android.content.Context);
+    method public void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String>);
+    method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
+    method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat>);
+    field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+  }
+
+}
+
+package androidx.core.content.res {
+
+  public final class ConfigurationHelper {
+    method public static int getDensityDpi(android.content.res.Resources);
+  }
+
+  public final class ResourcesCompat {
+    method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
+    method public static float getFloat(android.content.res.Resources, @DimenRes int);
+    method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
+    method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
+  }
+
+  public abstract static class ResourcesCompat.FontCallback {
+    ctor public ResourcesCompat.FontCallback();
+    method public abstract void onFontRetrievalFailed(int);
+    method public abstract void onFontRetrieved(android.graphics.Typeface);
+  }
+
+}
+
+package androidx.core.database {
+
+  public final class CursorWindowCompat {
+    method public static android.database.CursorWindow create(String?, long);
+  }
+
+  @Deprecated public final class DatabaseUtilsCompat {
+    method @Deprecated public static String[]! appendSelectionArgs(String[]!, String[]!);
+    method @Deprecated public static String! concatenateWhere(String!, String!);
+  }
+
+}
+
+package androidx.core.database.sqlite {
+
+  public final class SQLiteCursorCompat {
+    method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
+  }
+
+}
+
+package androidx.core.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 ColorUtils {
+    method @ColorInt public static int HSLToColor(float[]);
+    method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
+    method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
+    method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
+    method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+    method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
+    method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double);
+    method public static void XYZToLAB(@FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_X) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Y) double, @FloatRange(from=0.0f, to=androidx.core.graphics.ColorUtils.XYZ_WHITE_REFERENCE_Z) double, double[]);
+    method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
+    method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
+    method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
+    method public static double calculateContrast(@ColorInt int, @ColorInt int);
+    method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
+    method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
+    method public static void colorToHSL(@ColorInt int, float[]);
+    method public static void colorToLAB(@ColorInt int, double[]);
+    method public static void colorToXYZ(@ColorInt int, double[]);
+    method public static int compositeColors(@ColorInt int, @ColorInt int);
+    method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
+    method public static double distanceEuclidean(double[], double[]);
+    method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
+  }
+
+  public final class PaintCompat {
+    method public static boolean hasGlyph(android.graphics.Paint, String);
+  }
+
+  public final class PathSegment {
+    ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
+    method public android.graphics.PointF getEnd();
+    method public float getEndFraction();
+    method public android.graphics.PointF getStart();
+    method public float getStartFraction();
+  }
+
+  public final class PathUtils {
+    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment> flatten(android.graphics.Path);
+    method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, @FloatRange(from=0) float);
+  }
+
+  public class TypefaceCompat {
+    method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
+  }
+
+}
+
+package androidx.core.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 @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
+    method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
+    method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
+    method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
+    method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
+    method public static void setTint(android.graphics.drawable.Drawable, @ColorInt 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 extends androidx.versionedparcelable.CustomVersionedParcelable {
+    method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
+    method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithAdaptiveBitmap(android.graphics.Bitmap!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithBitmap(android.graphics.Bitmap!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(String!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithContentUri(android.net.Uri!);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithData(byte[]!, int, int);
+    method public static androidx.core.graphics.drawable.IconCompat! createWithResource(android.content.Context!, @DrawableRes int);
+    method @IdRes public int getResId();
+    method public String getResPackage();
+    method public int getType();
+    method public android.net.Uri getUri();
+    method public android.graphics.drawable.Drawable! loadDrawable(android.content.Context!);
+    method public androidx.core.graphics.drawable.IconCompat! setTint(@ColorInt int);
+    method public androidx.core.graphics.drawable.IconCompat! setTintList(android.content.res.ColorStateList!);
+    method public androidx.core.graphics.drawable.IconCompat! setTintMode(android.graphics.PorterDuff.Mode!);
+    method public android.os.Bundle! toBundle();
+    method @RequiresApi(23) public android.graphics.drawable.Icon! toIcon();
+    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  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 androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
+    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
+    method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
+  }
+
+}
+
+package androidx.core.hardware.display {
+
+  public final class DisplayManagerCompat {
+    method public android.view.Display? getDisplay(int);
+    method public android.view.Display[] getDisplays();
+    method public android.view.Display[] getDisplays(String?);
+    method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
+    field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+  }
+
+}
+
+package androidx.core.hardware.fingerprint {
+
+  @Deprecated public final class FingerprintManagerCompat {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
+    method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+  }
+
+  @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
+    ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
+    method @Deprecated public void onAuthenticationError(int, CharSequence!);
+    method @Deprecated public void onAuthenticationFailed();
+    method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
+    method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
+  }
+
+  @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
+    ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
+    method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
+  }
+
+  @Deprecated public static class FingerprintManagerCompat.CryptoObject {
+    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
+    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
+    ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
+    method @Deprecated public javax.crypto.Cipher? getCipher();
+    method @Deprecated public javax.crypto.Mac? getMac();
+    method @Deprecated public java.security.Signature? getSignature();
+  }
+
+}
+
+package androidx.core.location {
+
+  public final class LocationManagerCompat {
+    method public static boolean isLocationEnabled(android.location.LocationManager);
+  }
+
+}
+
+package androidx.core.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 androidx.core.net {
+
+  public final class ConnectivityManagerCompat {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
+    method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) 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 @Deprecated public static void clearThreadStatsTag();
+    method @Deprecated public static int getThreadStatsTag();
+    method @Deprecated public static void incrementOperationCount(int);
+    method @Deprecated public static void incrementOperationCount(int, int);
+    method @Deprecated public static void setThreadStatsTag(int);
+    method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
+    method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
+  }
+
+}
+
+package androidx.core.os {
+
+  public class BuildCompat {
+    method @Deprecated public static boolean isAtLeastN();
+    method @Deprecated public static boolean isAtLeastNMR1();
+    method @Deprecated public static boolean isAtLeastO();
+    method @Deprecated public static boolean isAtLeastOMR1();
+    method @Deprecated public static boolean isAtLeastP();
+    method public static boolean isAtLeastQ();
+  }
+
+  public final class CancellationSignal {
+    ctor public CancellationSignal();
+    method public void cancel();
+    method public Object? getCancellationSignalObject();
+    method public boolean isCanceled();
+    method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
+    method public void throwIfCanceled();
+  }
+
+  public static interface CancellationSignal.OnCancelListener {
+    method public void onCancel();
+  }
+
+  public final class ConfigurationCompat {
+    method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
+  }
+
+  public final class EnvironmentCompat {
+    method public static String! getStorageState(java.io.File);
+    field public static final String MEDIA_UNKNOWN = "unknown";
+  }
+
+  public final class HandlerCompat {
+    method public static android.os.Handler createAsync(android.os.Looper);
+    method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
+    method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
+  }
+
+  public final class LocaleListCompat {
+    method public static androidx.core.os.LocaleListCompat create(java.util.Locale...);
+    method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
+    method public java.util.Locale! get(int);
+    method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
+    method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
+    method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
+    method public java.util.Locale? getFirstMatch(String[]);
+    method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale!);
+    method public boolean isEmpty();
+    method @IntRange(from=0) public int size();
+    method public String toLanguageTags();
+    method public Object? unwrap();
+    method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
+    method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
+  }
+
+  public final class MessageCompat {
+    method public static boolean isAsynchronous(android.os.Message);
+    method public static void setAsynchronous(android.os.Message, boolean);
+  }
+
+  public class OperationCanceledException extends java.lang.RuntimeException {
+    ctor public OperationCanceledException();
+    ctor public OperationCanceledException(String?);
+  }
+
+  public final class ParcelCompat {
+    method public static boolean readBoolean(android.os.Parcel);
+    method public static void writeBoolean(android.os.Parcel, boolean);
+  }
+
+  @Deprecated public final class ParcelableCompat {
+    method @Deprecated public static <T> android.os.Parcelable.Creator<T>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T>!);
+  }
+
+  @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
+    method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
+    method @Deprecated public T[]! newArray(int);
+  }
+
+  public final class TraceCompat {
+    method public static void beginSection(String);
+    method public static void endSection();
+  }
+
+  public class UserManagerCompat {
+    method public static boolean isUserUnlocked(android.content.Context);
+  }
+
+}
+
+package androidx.core.provider {
+
+  public final class FontRequest {
+    ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]>>);
+    ctor public FontRequest(String, String, String, @ArrayRes int);
+    method public java.util.List<java.util.List<byte[]>>? getCertificates();
+    method @ArrayRes public int getCertificatesArrayResId();
+    method public String getProviderAuthority();
+    method public String getProviderPackage();
+    method public String getQuery();
+  }
+
+  public class FontsContractCompat {
+    method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo[]);
+    method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
+  }
+
+  public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
+    ctor public FontsContractCompat.Columns();
+    field public static final String FILE_ID = "file_id";
+    field public static final String ITALIC = "font_italic";
+    field public static final 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 String TTC_INDEX = "font_ttc_index";
+    field public static final String VARIATION_SETTINGS = "font_variation_settings";
+    field public static final String WEIGHT = "font_weight";
+  }
+
+  public static class FontsContractCompat.FontFamilyResult {
+    method public androidx.core.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 @IntRange(from=0) public int getTtcIndex();
+    method public android.net.Uri getUri();
+    method @IntRange(from=1, to=1000) 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 androidx.core.telephony.mbms {
+
+  public final class MbmsHelper {
+    method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
+  }
+
+}
+
+package androidx.core.text {
+
+  public final class BidiFormatter {
+    method public static androidx.core.text.BidiFormatter! getInstance();
+    method public static androidx.core.text.BidiFormatter! getInstance(boolean);
+    method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
+    method public boolean getStereoReset();
+    method public boolean isRtl(String!);
+    method public boolean isRtl(CharSequence!);
+    method public boolean isRtlContext();
+    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
+    method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
+    method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
+    method public String! unicodeWrap(String!, boolean);
+    method public CharSequence! unicodeWrap(CharSequence!, boolean);
+    method public String! unicodeWrap(String!);
+    method public CharSequence! unicodeWrap(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 androidx.core.text.BidiFormatter! build();
+    method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
+    method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
+  }
+
+  public final class HtmlCompat {
+    method public static android.text.Spanned fromHtml(String, int);
+    method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
+    method public static String toHtml(android.text.Spanned, int);
+    field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+    field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+    field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+    field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+    field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+  }
+
+  public final class ICUCompat {
+    method public static String? maximizeAndGetScript(java.util.Locale!);
+  }
+
+  public class PrecomputedTextCompat implements android.text.Spannable {
+    method public char charAt(int);
+    method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
+    method @IntRange(from=0) public int getParagraphCount();
+    method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+    method public androidx.core.text.PrecomputedTextCompat.Params getParams();
+    method public int getSpanEnd(Object!);
+    method public int getSpanFlags(Object!);
+    method public int getSpanStart(Object!);
+    method public <T> T[]! getSpans(int, int, Class<T>!);
+    method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
+    method public int length();
+    method public int nextSpanTransition(int, int, Class!);
+    method public void removeSpan(Object!);
+    method public void setSpan(Object!, int, int, int);
+    method public CharSequence! subSequence(int, int);
+  }
+
+  public static final class PrecomputedTextCompat.Params {
+    ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
+    method @RequiresApi(23) public int getBreakStrategy();
+    method @RequiresApi(23) public int getHyphenationFrequency();
+    method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
+    method public android.text.TextPaint getTextPaint();
+  }
+
+  public static class PrecomputedTextCompat.Params.Builder {
+    ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
+    method public androidx.core.text.PrecomputedTextCompat.Params build();
+    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
+    method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
+    method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
+  }
+
+  public interface TextDirectionHeuristicCompat {
+    method public boolean isRtl(char[]!, int, int);
+    method public boolean isRtl(CharSequence!, int, int);
+  }
+
+  public final class TextDirectionHeuristicsCompat {
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
+    field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
+  }
+
+  public final class TextUtilsCompat {
+    method public static int getLayoutDirectionFromLocale(java.util.Locale?);
+    method public static String htmlEncode(String);
+  }
+
+}
+
+package androidx.core.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, String?);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+    method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String[]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+    method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String[]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
+  }
+
+}
+
+package androidx.core.util {
+
+  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 interface Consumer<T> {
+    method public void accept(T!);
+  }
+
+  public class ObjectsCompat {
+    method public static boolean equals(Object?, Object?);
+    method public static int hash(java.lang.Object...?);
+    method public static int hashCode(Object?);
+  }
+
+  public class Pair<F, S> {
+    ctor public Pair(F?, S?);
+    method public static <A, B> androidx.core.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 interface Pools.Pool<T> {
+    method public T? acquire();
+    method public boolean release(T);
+  }
+
+  public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
+    ctor public Pools.SimplePool(int);
+    method public T! acquire();
+    method public boolean release(T);
+  }
+
+  public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
+    ctor public Pools.SynchronizedPool(int);
+  }
+
+  public interface Supplier<T> {
+    method public T! get();
+  }
+
+}
+
+package androidx.core.view {
+
+  public class AccessibilityDelegateCompat {
+    ctor public AccessibilityDelegateCompat();
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public androidx.core.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!, androidx.core.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(androidx.core.view.ActionProvider.VisibilityListener!);
+  }
+
+  public static interface ActionProvider.VisibilityListener {
+    method public void onActionProviderVisibilityChanged(boolean);
+  }
+
+  public final class DisplayCutoutCompat {
+    ctor public DisplayCutoutCompat(android.graphics.Rect!, java.util.List<android.graphics.Rect>!);
+    method public java.util.List<android.graphics.Rect>! getBoundingRects();
+    method public int getSafeInsetBottom();
+    method public int getSafeInsetLeft();
+    method public int getSafeInsetRight();
+    method public int getSafeInsetTop();
+  }
+
+  public final class DragAndDropPermissionsCompat {
+    method public void release();
+  }
+
+  public class DragStartHelper {
+    ctor public DragStartHelper(android.view.View!, androidx.core.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 interface DragStartHelper.OnDragStartListener {
+    method public boolean onDragStart(android.view.View!, androidx.core.view.DragStartHelper!);
+  }
+
+  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 @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
+    method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
+    method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
+  }
+
+  @Deprecated public interface LayoutInflaterFactory {
+    method @Deprecated public android.view.View! onCreateView(android.view.View!, 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 void setGroupDividerEnabled(android.view.Menu!, boolean);
+    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+  }
+
+  public final class MenuItemCompat {
+    method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
+    method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
+    method public static androidx.core.view.ActionProvider! getActionProvider(android.view.MenuItem!);
+    method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
+    method public static int getAlphabeticModifiers(android.view.MenuItem!);
+    method public static 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 CharSequence! getTooltipText(android.view.MenuItem!);
+    method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
+    method public static android.view.MenuItem! setActionProvider(android.view.MenuItem!, androidx.core.view.ActionProvider!);
+    method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
+    method @Deprecated public static 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!, 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 @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
+    method public static void setShortcut(android.view.MenuItem!, char, char, int, int);
+    method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
+    method public static void setTooltipText(android.view.MenuItem!, CharSequence!);
+    field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+    field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+    field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+    field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+    field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+  }
+
+  @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
+    method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
+    method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
+  }
+
+  public final class MotionEventCompat {
+    method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
+    method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
+    method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
+    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
+    method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
+    method @Deprecated public static int getButtonState(android.view.MotionEvent!);
+    method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
+    method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
+    method @Deprecated public static int getSource(android.view.MotionEvent!);
+    method @Deprecated public static float getX(android.view.MotionEvent!, int);
+    method @Deprecated public static float getY(android.view.MotionEvent!, int);
+    method public static boolean isFromSource(android.view.MotionEvent!, int);
+    field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
+    field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
+    field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
+    field @Deprecated public static final int ACTION_MASK = 255; // 0xff
+    field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
+    field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+    field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+    field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
+    field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
+    field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
+    field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
+    field @Deprecated public static final int AXIS_GAS = 22; // 0x16
+    field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
+    field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
+    field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
+    field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
+    field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
+    field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
+    field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
+    field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
+    field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
+    field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
+    field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
+    field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
+    field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
+    field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
+    field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
+    field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
+    field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
+    field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
+    field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
+    field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
+    field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
+    field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
+    field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+    field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+    field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
+    field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
+    field @Deprecated public static final int AXIS_RX = 12; // 0xc
+    field @Deprecated public static final int AXIS_RY = 13; // 0xd
+    field @Deprecated public static final int AXIS_RZ = 14; // 0xe
+    field public static final int AXIS_SCROLL = 26; // 0x1a
+    field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
+    field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
+    field @Deprecated public static final int AXIS_TILT = 25; // 0x19
+    field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+    field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
+    field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+    field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+    field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
+    field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
+    field @Deprecated public static final int AXIS_X = 0; // 0x0
+    field @Deprecated public static final int AXIS_Y = 1; // 0x1
+    field @Deprecated public static final int AXIS_Z = 11; // 0xb
+    field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
+  }
+
+  public interface NestedScrollingChild {
+    method public boolean dispatchNestedFling(float, float, boolean);
+    method public boolean dispatchNestedPreFling(float, float);
+    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
+    method public boolean hasNestedScrollingParent();
+    method public boolean isNestedScrollingEnabled();
+    method public void setNestedScrollingEnabled(boolean);
+    method public boolean startNestedScroll(int);
+    method public void stopNestedScroll();
+  }
+
+  public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
+    method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
+    method public boolean hasNestedScrollingParent(int);
+    method public boolean startNestedScroll(int, int);
+    method public void stopNestedScroll(int);
+  }
+
+  public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
+    method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
+  }
+
+  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 void dispatchNestedScroll(int, 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 interface NestedScrollingParent {
+    method public int getNestedScrollAxes();
+    method public boolean onNestedFling(android.view.View, float, float, boolean);
+    method public boolean onNestedPreFling(android.view.View, float, float);
+    method public void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public void onNestedScroll(android.view.View, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public void onStopNestedScroll(android.view.View);
+  }
+
+  public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
+    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);
+  }
+
+  public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
+    method public void onNestedScroll(android.view.View, int, int, int, int, int, 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 interface OnApplyWindowInsetsListener {
+    method public androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View!, androidx.core.view.WindowInsetsCompat!);
+  }
+
+  public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
+    method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
+    method public boolean onPreDraw();
+    method public void onViewAttachedToWindow(android.view.View!);
+    method public void onViewDetachedFromWindow(android.view.View!);
+    method public void removeListener();
+  }
+
+  public final class PointerIconCompat {
+    method public static androidx.core.view.PointerIconCompat! create(android.graphics.Bitmap!, float, float);
+    method public static androidx.core.view.PointerIconCompat! getSystemIcon(android.content.Context!, int);
+    method public static androidx.core.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 @Deprecated public static boolean isQuickScaleEnabled(Object!);
+    method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector!);
+    method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
+    method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector!, boolean);
+  }
+
+  public interface ScrollingView {
+    method public int computeHorizontalScrollExtent();
+    method public int computeHorizontalScrollOffset();
+    method public int computeHorizontalScrollRange();
+    method public int computeVerticalScrollExtent();
+    method public int computeVerticalScrollOffset();
+    method public int computeVerticalScrollRange();
+  }
+
+  public interface TintableBackgroundView {
+    method public android.content.res.ColorStateList? getSupportBackgroundTintList();
+    method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+    method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+  }
+
+  @Deprecated public final class VelocityTrackerCompat {
+    method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
+    method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
+  }
+
+  public class ViewCompat {
+    ctor protected ViewCompat();
+    method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
+    method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View>, int);
+    method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+    method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
+    method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
+    method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
+    method public static void cancelDragAndDrop(android.view.View);
+    method @Deprecated public static int combineMeasuredStates(int, int);
+    method public static androidx.core.view.WindowInsetsCompat! dispatchApplyWindowInsets(android.view.View, androidx.core.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 void dispatchNestedScroll(android.view.View, int, int, 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 void enableAccessibleClickableSpanSupport(android.view.View!);
+    method public static int generateViewId();
+    method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
+    method public static int getAccessibilityLiveRegion(android.view.View);
+    method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat! getAccessibilityNodeProvider(android.view.View);
+    method @UiThread public static CharSequence! getAccessibilityPaneTitle(android.view.View!);
+    method @Deprecated public static float getAlpha(android.view.View!);
+    method public static android.content.res.ColorStateList! getBackgroundTintList(android.view.View);
+    method public static android.graphics.PorterDuff.Mode! getBackgroundTintMode(android.view.View);
+    method public static android.graphics.Rect? getClipBounds(android.view.View);
+    method public static 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 @Deprecated public static int getLayerType(android.view.View!);
+    method public static int getLayoutDirection(android.view.View);
+    method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
+    method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
+    method @Deprecated public static int getMeasuredState(android.view.View!);
+    method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
+    method public static int getMinimumHeight(android.view.View);
+    method public static int getMinimumWidth(android.view.View);
+    method public static int getNextClusterForwardId(android.view.View);
+    method @Deprecated public static int getOverScrollMode(android.view.View!);
+    method @Px public static int getPaddingEnd(android.view.View);
+    method @Px public static int getPaddingStart(android.view.View);
+    method public static android.view.ViewParent! getParentForAccessibility(android.view.View);
+    method @Deprecated public static float getPivotX(android.view.View!);
+    method @Deprecated public static float getPivotY(android.view.View!);
+    method @Deprecated public static float getRotation(android.view.View!);
+    method @Deprecated public static float getRotationX(android.view.View!);
+    method @Deprecated public static float getRotationY(android.view.View!);
+    method @Deprecated public static float getScaleX(android.view.View!);
+    method @Deprecated public static float getScaleY(android.view.View!);
+    method public static int getScrollIndicators(android.view.View);
+    method public static String? getTransitionName(android.view.View);
+    method @Deprecated public static float getTranslationX(android.view.View!);
+    method @Deprecated public static float getTranslationY(android.view.View!);
+    method public static float getTranslationZ(android.view.View);
+    method public static int getWindowSystemUiVisibility(android.view.View);
+    method @Deprecated public static float getX(android.view.View!);
+    method @Deprecated public static float getY(android.view.View!);
+    method public static float getZ(android.view.View);
+    method public static boolean hasAccessibilityDelegate(android.view.View);
+    method public static boolean 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 @UiThread public static boolean isAccessibilityHeading(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 @Deprecated public static boolean isOpaque(android.view.View!);
+    method public static boolean isPaddingRelative(android.view.View);
+    method @UiThread public static boolean isScreenReaderFocusable(android.view.View!);
+    method @Deprecated public static 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 androidx.core.view.WindowInsetsCompat! onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat!);
+    method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+    method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle!);
+    method public static void postInvalidateOnAnimation(android.view.View);
+    method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
+    method public static void postOnAnimation(android.view.View, Runnable!);
+    method public static void postOnAnimationDelayed(android.view.View, Runnable!, long);
+    method public static void removeAccessibilityAction(android.view.View, int);
+    method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
+    method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
+    method public static void requestApplyInsets(android.view.View);
+    method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
+    method @Deprecated public static int resolveSizeAndState(int, int, int);
+    method public static boolean restoreDefaultFocus(android.view.View);
+    method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat!);
+    method @UiThread public static void setAccessibilityHeading(android.view.View!, boolean);
+    method public static void setAccessibilityLiveRegion(android.view.View, int);
+    method @UiThread public static void setAccessibilityPaneTitle(android.view.View!, CharSequence!);
+    method @Deprecated public static void setActivated(android.view.View!, boolean);
+    method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) 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 @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
+    method public static void setClipBounds(android.view.View, android.graphics.Rect!);
+    method public static void setElevation(android.view.View, float);
+    method @Deprecated public static 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, @IdRes int);
+    method public static void setLayerPaint(android.view.View, android.graphics.Paint!);
+    method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
+    method public static void setLayoutDirection(android.view.View, int);
+    method public static void setNestedScrollingEnabled(android.view.View, boolean);
+    method public static void setNextClusterForwardId(android.view.View, int);
+    method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener!);
+    method @Deprecated public static void setOverScrollMode(android.view.View!, int);
+    method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
+    method @Deprecated public static void setPivotX(android.view.View!, float);
+    method @Deprecated public static void setPivotY(android.view.View!, float);
+    method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat!);
+    method @Deprecated public static void setRotation(android.view.View!, float);
+    method @Deprecated public static void setRotationX(android.view.View!, float);
+    method @Deprecated public static void setRotationY(android.view.View!, float);
+    method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
+    method @Deprecated public static void setScaleX(android.view.View!, float);
+    method @Deprecated public static void setScaleY(android.view.View!, float);
+    method @UiThread public static void setScreenReaderFocusable(android.view.View!, boolean);
+    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, CharSequence?);
+    method public static void setTransitionName(android.view.View, String!);
+    method @Deprecated public static void setTranslationX(android.view.View!, float);
+    method @Deprecated public static void setTranslationY(android.view.View!, float);
+    method public static void setTranslationZ(android.view.View, float);
+    method @Deprecated public static void setX(android.view.View!, float);
+    method @Deprecated public static 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!, 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 @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+    field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
+    field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+    field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+    field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+    field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+    field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+    field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+    field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+    field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
+    field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+    field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+    field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+    field public static final int TYPE_NON_TOUCH = 1; // 0x1
+    field public static final int TYPE_TOUCH = 0; // 0x0
+  }
+
+  public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
+    method public boolean onUnhandledKeyEvent(android.view.View!, android.view.KeyEvent!);
+  }
+
+  public final class ViewConfigurationCompat {
+    method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+    method public static int getScaledHoverSlop(android.view.ViewConfiguration!);
+    method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
+    method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
+    method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
+    method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration!, android.content.Context);
+  }
+
+  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 @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+    method public static void setLayoutMode(android.view.ViewGroup, int);
+    method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
+    method public static void setTransitionGroup(android.view.ViewGroup, boolean);
+    field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+    field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+  }
+
+  public final class ViewParentCompat {
+    method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent!, android.view.View!, android.view.View!, int);
+    method public static boolean onNestedFling(android.view.ViewParent!, android.view.View!, float, float, boolean);
+    method public static boolean onNestedPreFling(android.view.ViewParent!, android.view.View!, float, float);
+    method public static void onNestedPreScroll(android.view.ViewParent!, android.view.View!, int, int, int[]!);
+    method public static void 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 onNestedScroll(android.view.ViewParent!, android.view.View!, int, 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 @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
+  }
+
+  public final class ViewPropertyAnimatorCompat {
+    method public androidx.core.view.ViewPropertyAnimatorCompat! alpha(float);
+    method public androidx.core.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 androidx.core.view.ViewPropertyAnimatorCompat! rotation(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationX(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationXBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationY(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! rotationYBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleX(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleXBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleY(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! scaleYBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setDuration(long);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setInterpolator(android.view.animation.Interpolator!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setListener(androidx.core.view.ViewPropertyAnimatorListener!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setStartDelay(long);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener!);
+    method public void start();
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationX(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationXBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationY(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationYBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationZ(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! translationZBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! withEndAction(Runnable!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! withLayer();
+    method public androidx.core.view.ViewPropertyAnimatorCompat! withStartAction(Runnable!);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! x(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! xBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! y(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! yBy(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! z(float);
+    method public androidx.core.view.ViewPropertyAnimatorCompat! zBy(float);
+  }
+
+  public interface ViewPropertyAnimatorListener {
+    method public void onAnimationCancel(android.view.View!);
+    method public void onAnimationEnd(android.view.View!);
+    method public void onAnimationStart(android.view.View!);
+  }
+
+  public class ViewPropertyAnimatorListenerAdapter implements androidx.core.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 interface ViewPropertyAnimatorUpdateListener {
+    method public void onAnimationUpdate(android.view.View!);
+  }
+
+  public final class WindowCompat {
+    method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes 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(androidx.core.view.WindowInsetsCompat!);
+    method public androidx.core.view.WindowInsetsCompat! consumeDisplayCutout();
+    method public androidx.core.view.WindowInsetsCompat! consumeStableInsets();
+    method public androidx.core.view.WindowInsetsCompat! consumeSystemWindowInsets();
+    method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
+    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 androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(int, int, int, int);
+    method public androidx.core.view.WindowInsetsCompat! replaceSystemWindowInsets(android.graphics.Rect!);
+  }
+
+}
+
+package androidx.core.view.accessibility {
+
+  public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+    method public void onClick(android.view.View!);
+  }
+
+  public final class AccessibilityEventCompat {
+    method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
+    method @Deprecated public static androidx.core.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 @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
+    method @Deprecated public static 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_PANE_APPEARED = 16; // 0x10
+    field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+    field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+    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 @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+    field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+    field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+    field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+    field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+    field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+    field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+    field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+    field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+    field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+    field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+    field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+  }
+
+  public final class AccessibilityManagerCompat {
+    method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+    method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
+    method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
+    method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
+    method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
+    method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener!);
+  }
+
+  @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
+    method @Deprecated public void onAccessibilityStateChanged(boolean);
+  }
+
+  @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
+    ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
+  }
+
+  public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
+    method public void onTouchExplorationStateChanged(boolean);
+  }
+
+  public class AccessibilityNodeInfoCompat {
+    ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
+    method public void addAction(int);
+    method public void addAction(androidx.core.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<androidx.core.view.accessibility.AccessibilityNodeInfoCompat>! findAccessibilityNodeInfosByText(String!);
+    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat>! findAccessibilityNodeInfosByViewId(String!);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
+    method public java.util.List<androidx.core.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 androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
+    method public int getChildCount();
+    method public CharSequence! getClassName();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
+    method public CharSequence! getContentDescription();
+    method public int getDrawingOrder();
+    method public CharSequence! getError();
+    method public android.os.Bundle! getExtras();
+    method public CharSequence? getHintText();
+    method @Deprecated public Object! getInfo();
+    method public int getInputType();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
+    method public int getLiveRegion();
+    method public int getMaxTextLength();
+    method public int getMovementGranularities();
+    method public CharSequence! getPackageName();
+    method public CharSequence? getPaneTitle();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
+    method public CharSequence? getRoleDescription();
+    method public CharSequence! getText();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method public CharSequence? getTooltipText();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+    method public String! getViewIdResourceName();
+    method public androidx.core.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 isHeading();
+    method public boolean isImportantForAccessibility();
+    method public boolean isLongClickable();
+    method public boolean isMultiLine();
+    method public boolean isPassword();
+    method public boolean isScreenReaderFocusable();
+    method public boolean isScrollable();
+    method public boolean isSelected();
+    method public boolean isShowingHintText();
+    method public boolean isVisibleToUser();
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.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(androidx.core.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(CharSequence!);
+    method @Deprecated public void setClickable(boolean);
+    method public void setCollectionInfo(Object!);
+    method public void setCollectionItemInfo(Object!);
+    method public void setContentDescription(CharSequence!);
+    method public void setContentInvalid(boolean);
+    method @Deprecated 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(CharSequence!);
+    method @Deprecated public void setFocusable(boolean);
+    method public void setFocused(boolean);
+    method public void setHeading(boolean);
+    method public void setHintText(CharSequence?);
+    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 @Deprecated public void setLongClickable(boolean);
+    method public void setMaxTextLength(int);
+    method public void setMovementGranularities(int);
+    method public void setMultiLine(boolean);
+    method public void setPackageName(CharSequence!);
+    method public void setPaneTitle(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(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
+    method public void setRoleDescription(CharSequence?);
+    method public void setScreenReaderFocusable(boolean);
+    method @Deprecated public void setScrollable(boolean);
+    method public void setSelected(boolean);
+    method public void setShowingHintText(boolean);
+    method public void setSource(android.view.View!);
+    method public void setSource(android.view.View!, int);
+    method public void setText(CharSequence!);
+    method public void setTextSelection(int, int);
+    method public void setTooltipText(CharSequence?);
+    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(String!);
+    method public void setVisibleToUser(boolean);
+    method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
+    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+    field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+    field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+    field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+    field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+    field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+    field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+    field public static final 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, CharSequence!);
+    method public int getId();
+    method public CharSequence! getLabel();
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
+    field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
+  }
+
+  public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
+    method public int getColumnCount();
+    method public int getRowCount();
+    method public int getSelectionMode();
+    method public boolean isHierarchical();
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
+    method public static androidx.core.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 @Deprecated public boolean isHeading();
+    method public boolean isSelected();
+    method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
+    method public static androidx.core.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 androidx.core.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(Object!);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
+    method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat>? findAccessibilityNodeInfosByText(String!, int);
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
+    method public 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 @Deprecated public AccessibilityRecordCompat(Object!);
+    method @Deprecated public boolean equals(Object?);
+    method @Deprecated public int getAddedCount();
+    method @Deprecated public CharSequence! getBeforeText();
+    method @Deprecated public CharSequence! getClassName();
+    method @Deprecated public CharSequence! getContentDescription();
+    method @Deprecated public int getCurrentItemIndex();
+    method @Deprecated public int getFromIndex();
+    method @Deprecated public Object! getImpl();
+    method @Deprecated public int getItemCount();
+    method @Deprecated public int getMaxScrollX();
+    method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord!);
+    method @Deprecated public int getMaxScrollY();
+    method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord!);
+    method @Deprecated public android.os.Parcelable! getParcelableData();
+    method @Deprecated public int getRemovedCount();
+    method @Deprecated public int getScrollX();
+    method @Deprecated public int getScrollY();
+    method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
+    method @Deprecated public java.util.List<java.lang.CharSequence>! getText();
+    method @Deprecated public int getToIndex();
+    method @Deprecated public int getWindowId();
+    method @Deprecated public int hashCode();
+    method @Deprecated public boolean isChecked();
+    method @Deprecated public boolean isEnabled();
+    method @Deprecated public boolean isFullScreen();
+    method @Deprecated public boolean isPassword();
+    method @Deprecated public boolean isScrollable();
+    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
+    method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
+    method @Deprecated public void recycle();
+    method @Deprecated public void setAddedCount(int);
+    method @Deprecated public void setBeforeText(CharSequence!);
+    method @Deprecated public void setChecked(boolean);
+    method @Deprecated public void setClassName(CharSequence!);
+    method @Deprecated public void setContentDescription(CharSequence!);
+    method @Deprecated public void setCurrentItemIndex(int);
+    method @Deprecated public void setEnabled(boolean);
+    method @Deprecated public void setFromIndex(int);
+    method @Deprecated public void setFullScreen(boolean);
+    method @Deprecated public void setItemCount(int);
+    method @Deprecated public void setMaxScrollX(int);
+    method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord!, int);
+    method @Deprecated public void setMaxScrollY(int);
+    method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord!, int);
+    method @Deprecated public void setParcelableData(android.os.Parcelable!);
+    method @Deprecated public void setPassword(boolean);
+    method @Deprecated public void setRemovedCount(int);
+    method @Deprecated public void setScrollX(int);
+    method @Deprecated public void setScrollY(int);
+    method @Deprecated public void setScrollable(boolean);
+    method @Deprecated public void setSource(android.view.View!);
+    method @Deprecated public void setSource(android.view.View!, int);
+    method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View!, int);
+    method @Deprecated public void setToIndex(int);
+  }
+
+  public interface AccessibilityViewCommand {
+    method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
+  }
+
+  public abstract static class AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.CommandArguments();
+  }
+
+  public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
+    method public boolean getExtendSelection();
+    method public int getGranularity();
+  }
+
+  public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.MoveHtmlArguments();
+    method public String! getHTMLElement();
+  }
+
+  public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.MoveWindowArguments();
+    method public int getX();
+    method public int getY();
+  }
+
+  public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.ScrollToPositionArguments();
+    method public int getColumn();
+    method public int getRow();
+  }
+
+  public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.SetProgressArguments();
+    method public float getProgress();
+  }
+
+  public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.SetSelectionArguments();
+    method public int getEnd();
+    method public int getStart();
+  }
+
+  public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
+    ctor public AccessibilityViewCommand.SetTextArguments();
+    method public CharSequence! getText();
+  }
+
+  public class AccessibilityWindowInfoCompat {
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getAnchor();
+    method public void getBoundsInScreen(android.graphics.Rect!);
+    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getChild(int);
+    method public int getChildCount();
+    method public int getId();
+    method public int getLayer();
+    method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getParent();
+    method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getRoot();
+    method public CharSequence! getTitle();
+    method public int getType();
+    method public boolean isAccessibilityFocused();
+    method public boolean isActive();
+    method public boolean isFocused();
+    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain();
+    method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat! obtain(androidx.core.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 androidx.core.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 androidx.core.view.inputmethod {
+
+  public final class EditorInfoCompat {
+    ctor @Deprecated public EditorInfoCompat();
+    method public static String[] getContentMimeTypes(android.view.inputmethod.EditorInfo!);
+    method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, 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 @Deprecated public InputConnectionCompat();
+    method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
+    method public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
+    field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+  }
+
+  public static interface InputConnectionCompat.OnCommitContentListener {
+    method public boolean onCommitContent(androidx.core.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 Object? unwrap();
+    method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
+  }
+
+}
+
+package androidx.core.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 androidx.core.widget.AutoScrollHelper setActivationDelay(int);
+    method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
+    method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
+    method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
+    method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
+    method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
+    method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
+    method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
+    method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
+    method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
+    method public androidx.core.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 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 class ContentLoadingProgressBar extends android.widget.ProgressBar {
+    ctor public ContentLoadingProgressBar(android.content.Context);
+    ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
+    method public void hide();
+    method public void onAttachedToWindow();
+    method public void onDetachedFromWindow();
+    method public void show();
+  }
+
+  public final class EdgeEffectCompat {
+    ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
+    method @Deprecated public boolean draw(android.graphics.Canvas!);
+    method @Deprecated public void finish();
+    method @Deprecated public boolean isFinished();
+    method @Deprecated public boolean onAbsorb(int);
+    method @Deprecated public boolean onPull(float);
+    method @Deprecated public boolean onPull(float, float);
+    method public static void onPull(android.widget.EdgeEffect, float, float);
+    method @Deprecated public boolean onRelease();
+    method @Deprecated public 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 @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
+    method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
+  }
+
+  public class ListViewAutoScrollHelper extends androidx.core.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 final class ListViewCompat {
+    method public static boolean canScrollList(android.widget.ListView, int);
+    method public static void scrollListBy(android.widget.ListView, int);
+  }
+
+  public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+    method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+    method public void dispatchNestedScroll(int, int, 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 void onNestedPreScroll(android.view.View, int, int, int[], int);
+    method public void onNestedScroll(android.view.View, int, int, 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 boolean pageScroll(int);
+    method public void setFillViewport(boolean);
+    method public void setOnScrollChangeListener(androidx.core.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 interface NestedScrollView.OnScrollChangeListener {
+    method public void onScrollChange(androidx.core.widget.NestedScrollView!, int, int, int, int);
+  }
+
+  public final class PopupMenuCompat {
+    method public static android.view.View.OnTouchListener? getDragToOpenListener(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);
+  }
+
+  @Deprecated public final class ScrollerCompat {
+    method @Deprecated public void abortAnimation();
+    method @Deprecated public boolean computeScrollOffset();
+    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
+    method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
+    method @Deprecated public void fling(int, int, int, int, int, int, int, int);
+    method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
+    method @Deprecated public float getCurrVelocity();
+    method @Deprecated public int getCurrX();
+    method @Deprecated public int getCurrY();
+    method @Deprecated public int getFinalX();
+    method @Deprecated public int getFinalY();
+    method @Deprecated public boolean isFinished();
+    method @Deprecated public boolean isOverScrolled();
+    method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
+    method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
+    method @Deprecated public boolean springBack(int, int, int, int, int, int);
+    method @Deprecated public void startScroll(int, int, int, int);
+    method @Deprecated public 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.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
+    method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
+    method public static android.graphics.drawable.Drawable[] getCompoundDrawablesRelative(android.widget.TextView);
+    method public static int getFirstBaselineToTopHeight(android.widget.TextView);
+    method public static int getLastBaselineToBottomHeight(android.widget.TextView);
+    method public static int getMaxLines(android.widget.TextView);
+    method public static int getMinLines(android.widget.TextView);
+    method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(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 setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
+    method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
+    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, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+    method public static void setFirstBaselineToTopHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+    method public static void setLastBaselineToBottomHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+    method public static void setLineHeight(android.widget.TextView, @Px @IntRange(from=0) int);
+    method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
+    method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
+    method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
+    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 interface TintableCompoundButton {
+    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 interface TintableCompoundDrawablesView {
+    method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+    method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+    method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+    method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+  }
+
+}
+
diff --git a/core/api/res-1.1.0-alpha06.txt b/core/api/res-1.1.0-alpha06.txt
new file mode 100644
index 0000000..e52dd8c
--- /dev/null
+++ b/core/api/res-1.1.0-alpha06.txt
@@ -0,0 +1,17 @@
+style TextAppearance_Compat_Notification
+style TextAppearance_Compat_Notification_Info
+style TextAppearance_Compat_Notification_Line2
+style TextAppearance_Compat_Notification_Time
+style TextAppearance_Compat_Notification_Title
+attr alpha
+attr font
+attr fontProviderAuthority
+attr fontProviderCerts
+attr fontProviderFetchStrategy
+attr fontProviderFetchTimeout
+attr fontProviderPackage
+attr fontProviderQuery
+attr fontStyle
+attr fontVariationSettings
+attr fontWeight
+attr ttcIndex
diff --git a/core/api/restricted_1.1.0-alpha06.ignore b/core/api/restricted_1.1.0-alpha06.ignore
new file mode 100644
index 0000000..bae79eb
--- /dev/null
+++ b/core/api/restricted_1.1.0-alpha06.ignore
@@ -0,0 +1,105 @@
+// Baseline format: 1.0
+AddedAbstractMethod: androidx.core.internal.view.SupportMenuItem#requiresActionButton():
+    Added method androidx.core.internal.view.SupportMenuItem.requiresActionButton()
+AddedAbstractMethod: androidx.core.internal.view.SupportMenuItem#requiresOverflow():
+    Added method androidx.core.internal.view.SupportMenuItem.requiresOverflow()
+
+
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getCancelLabel():
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getCancelLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getConfirmLabel():
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getConfirmLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#getInProgressLabel():
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.getInProgressLabel(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setCancelLabel(CharSequence):
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setCancelLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setConfirmLabel(CharSequence):
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setConfirmLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.Action.WearableExtender#setInProgressLabel(CharSequence):
+    Method androidx.core.app.NotificationCompat.Action.WearableExtender.setInProgressLabel(CharSequence): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getContentIcon():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getContentIcon(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getContentIconGravity():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getContentIconGravity(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getCustomContentHeight():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getCustomContentHeight(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getCustomSizePreset():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getCustomSizePreset(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getGravity():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getGravity(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintAvoidBackgroundClipping():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintAvoidBackgroundClipping(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintHideIcon():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintHideIcon(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintScreenTimeout():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintScreenTimeout(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#getHintShowBackgroundOnly():
+    Method androidx.core.app.NotificationCompat.WearableExtender.getHintShowBackgroundOnly(): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setContentIcon(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setContentIcon(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setContentIconGravity(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setContentIconGravity(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setCustomContentHeight(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setCustomContentHeight(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setCustomSizePreset(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setCustomSizePreset(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setGravity(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setGravity(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintAvoidBackgroundClipping(boolean):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintAvoidBackgroundClipping(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintHideIcon(boolean):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintHideIcon(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintScreenTimeout(int):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintScreenTimeout(int): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.core.app.NotificationCompat.WearableExtender#setHintShowBackgroundOnly(boolean):
+    Method androidx.core.app.NotificationCompat.WearableExtender.setHintShowBackgroundOnly(boolean): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+
+
+InvalidNullConversion: androidx.core.graphics.TypefaceCompatApi28Impl#createFromFontFamilyFilesResourceEntry(android.content.Context, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry, android.content.res.Resources, int):
+    Attempted to remove @Nullable annotation from method androidx.core.graphics.TypefaceCompatApi28Impl.createFromFontFamilyFilesResourceEntry(android.content.Context,androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry,android.content.res.Resources,int)
+
+
+RemovedClass: androidx.core.graphics.PathParser:
+    Removed class androidx.core.graphics.PathParser
+RemovedClass: androidx.core.graphics.drawable.IconCompatParcelizer:
+    Removed class androidx.core.graphics.drawable.IconCompatParcelizer
+
+
+RemovedInterface: androidx.core.widget.NestedScrollView:
+    Class androidx.core.widget.NestedScrollView no longer implements androidx.core.view.NestedScrollingChild2
+
+
+RemovedMethod: androidx.core.app.ComponentActivity#getLifecycle():
+    Removed method androidx.core.app.ComponentActivity.getLifecycle()
+RemovedMethod: androidx.core.util.Preconditions#checkArgumentFinite(float, String):
+    Removed method androidx.core.util.Preconditions.checkArgumentFinite(float,String)
+RemovedMethod: androidx.core.util.Preconditions#checkArgumentInRange(float, float, float, String):
+    Removed method androidx.core.util.Preconditions.checkArgumentInRange(float,float,float,String)
+RemovedMethod: androidx.core.util.Preconditions#checkArgumentInRange(long, long, long, String):
+    Removed method androidx.core.util.Preconditions.checkArgumentInRange(long,long,long,String)
+RemovedMethod: androidx.core.util.Preconditions#checkArgumentNonnegative(long):
+    Removed method androidx.core.util.Preconditions.checkArgumentNonnegative(long)
+RemovedMethod: androidx.core.util.Preconditions#checkArgumentNonnegative(long, String):
+    Removed method androidx.core.util.Preconditions.checkArgumentNonnegative(long,String)
+RemovedMethod: androidx.core.util.Preconditions#checkArgumentPositive(int, String):
+    Removed method androidx.core.util.Preconditions.checkArgumentPositive(int,String)
+RemovedMethod: androidx.core.util.Preconditions#checkArrayElementsInRange(float[], float, float, String):
+    Removed method androidx.core.util.Preconditions.checkArrayElementsInRange(float[],float,float,String)
+RemovedMethod: androidx.core.util.Preconditions#checkArrayElementsNotNull(T[], String):
+    Removed method androidx.core.util.Preconditions.checkArrayElementsNotNull(T[],String)
+RemovedMethod: androidx.core.util.Preconditions#checkCollectionElementsNotNull(C, String):
+    Removed method androidx.core.util.Preconditions.checkCollectionElementsNotNull(C,String)
+RemovedMethod: androidx.core.util.Preconditions#checkCollectionNotEmpty(java.util.Collection<T>, String):
+    Removed method androidx.core.util.Preconditions.checkCollectionNotEmpty(java.util.Collection<T>,String)
+RemovedMethod: androidx.core.util.Preconditions#checkFlagsArgument(int, int):
+    Removed method androidx.core.util.Preconditions.checkFlagsArgument(int,int)
+RemovedMethod: androidx.core.util.Preconditions#checkStringNotEmpty(T):
+    Removed method androidx.core.util.Preconditions.checkStringNotEmpty(T)
+RemovedMethod: androidx.core.util.Preconditions#checkStringNotEmpty(T, Object):
+    Removed method androidx.core.util.Preconditions.checkStringNotEmpty(T,Object)
+
+
+RemovedPackage: android.support.v4.graphics.drawable:
+    Removed package android.support.v4.graphics.drawable
+
+
diff --git a/core/api/restricted_1.1.0-alpha06.txt b/core/api/restricted_1.1.0-alpha06.txt
new file mode 100644
index 0000000..5baf105
--- /dev/null
+++ b/core/api/restricted_1.1.0-alpha06.txt
@@ -0,0 +1,562 @@
+// Signature format: 3.0
+package android.support.v4.os {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ResultReceiver implements android.os.Parcelable {
+    ctor public ResultReceiver(android.os.Handler!);
+    method public int describeContents();
+    method protected void onReceiveResult(int, android.os.Bundle!);
+    method public void send(int, android.os.Bundle!);
+    method public void writeToParcel(android.os.Parcel!, int);
+    field public static final android.os.Parcelable.Creator<android.support.v4.os.ResultReceiver>! CREATOR;
+  }
+
+}
+
+package androidx.core.app {
+
+  public class ActivityCompat extends androidx.core.content.ContextCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.ActivityCompat.PermissionCompatDelegate! getPermissionCompatDelegate();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActivityCompat.RequestPermissionsRequestCodeValidator {
+    method public void validateRequestPermissionsRequestCode(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ComponentActivity extends android.app.Activity implements androidx.core.view.KeyEventDispatcher.Component {
+    ctor public ComponentActivity();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T extends androidx.core.app.ComponentActivity.ExtraData> T! getExtraData(Class<T>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void putExtraData(androidx.core.app.ComponentActivity.ExtraData!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean superDispatchKeyEvent(android.view.KeyEvent!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class ComponentActivity.ExtraData {
+    ctor public ComponentActivity.ExtraData();
+  }
+
+  @RequiresApi(api=28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CoreComponentFactory extends android.app.AppComponentFactory {
+    ctor public CoreComponentFactory();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface CoreComponentFactory.CompatWrapped {
+    method public Object! getWrapper();
+  }
+
+  @IntDef(flag=true, value={androidx.core.app.FrameMetricsAggregator.TOTAL_DURATION, androidx.core.app.FrameMetricsAggregator.INPUT_DURATION, androidx.core.app.FrameMetricsAggregator.LAYOUT_MEASURE_DURATION, androidx.core.app.FrameMetricsAggregator.DRAW_DURATION, androidx.core.app.FrameMetricsAggregator.SYNC_DURATION, androidx.core.app.FrameMetricsAggregator.COMMAND_DURATION, androidx.core.app.FrameMetricsAggregator.SWAP_DURATION, androidx.core.app.FrameMetricsAggregator.DELAY_DURATION, androidx.core.app.FrameMetricsAggregator.ANIMATION_DURATION, androidx.core.app.FrameMetricsAggregator.EVERY_DURATION}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FrameMetricsAggregator.MetricType {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface NotificationBuilderWithBuilderAccessor {
+    method public android.app.Notification.Builder! getBuilder();
+  }
+
+  @IntDef({androidx.core.app.NotificationCompat.BADGE_ICON_NONE, androidx.core.app.NotificationCompat.BADGE_ICON_SMALL, androidx.core.app.NotificationCompat.BADGE_ICON_LARGE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.BadgeIconType {
+  }
+
+  public static class NotificationCompat.Builder {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getBigContentView();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getColor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getContentView();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getHeadsUpContentView();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getPriority();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public long getWhenIfShowing();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.NotificationCompat.Action>! mActions;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.Context! mContext;
+  }
+
+  @IntDef({androidx.core.app.NotificationCompat.GROUP_ALERT_ALL, androidx.core.app.NotificationCompat.GROUP_ALERT_SUMMARY, androidx.core.app.NotificationCompat.GROUP_ALERT_CHILDREN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.GroupAlertBehavior {
+  }
+
+  @IntDef({androidx.core.app.NotificationCompat.VISIBILITY_PUBLIC, androidx.core.app.NotificationCompat.VISIBILITY_PRIVATE, androidx.core.app.NotificationCompat.VISIBILITY_SECRET}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.NotificationVisibility {
+  }
+
+  @IntDef({android.media.AudioManager.STREAM_VOICE_CALL, android.media.AudioManager.STREAM_SYSTEM, android.media.AudioManager.STREAM_RING, android.media.AudioManager.STREAM_MUSIC, android.media.AudioManager.STREAM_ALARM, android.media.AudioManager.STREAM_NOTIFICATION, android.media.AudioManager.STREAM_DTMF, android.media.AudioManager.STREAM_ACCESSIBILITY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.StreamType {
+  }
+
+  public abstract static class NotificationCompat.Style {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addCompatExtras(android.os.Bundle!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void apply(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! applyStandardTemplate(boolean, int, boolean);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void buildIntoRemoteViews(android.widget.RemoteViews!, android.widget.RemoteViews!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap! createColoredBitmap(int, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeBigContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeHeadsUpContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void restoreFromCompatExtras(android.os.Bundle!);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected androidx.core.app.NotificationCompat.Builder! mBuilder;
+  }
+
+  public class Person {
+    method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromAndroidPerson(android.app.Person);
+    method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromPersistableBundle(android.os.PersistableBundle);
+    method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.app.Person toAndroidPerson();
+    method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.PersistableBundle toPersistableBundle();
+  }
+
+  @IntDef({androidx.core.app.RemoteInput.SOURCE_FREE_FORM_INPUT, androidx.core.app.RemoteInput.SOURCE_CHOICE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.Source {
+  }
+
+  @IntDef(flag=true, value={androidx.core.app.ServiceCompat.STOP_FOREGROUND_REMOVE, androidx.core.app.ServiceCompat.STOP_FOREGROUND_DETACH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ServiceCompat.StopForegroundFlags {
+  }
+
+}
+
+package androidx.core.content {
+
+  @IntDef({androidx.core.content.PermissionChecker.PERMISSION_GRANTED, androidx.core.content.PermissionChecker.PERMISSION_DENIED, androidx.core.content.PermissionChecker.PERMISSION_DENIED_APP_OP}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PermissionChecker.PermissionResult {
+  }
+
+}
+
+package androidx.core.content.pm {
+
+
+
+  public class ShortcutInfoCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.graphics.drawable.IconCompat! getIcon();
+  }
+
+  public static class ShortcutInfoCompat.Builder {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(androidx.core.content.pm.ShortcutInfoCompat);
+    ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ShortcutInfoCompatSaver {
+    ctor public ShortcutInfoCompatSaver();
+    method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void>! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat>!);
+    method @WorkerThread public java.util.List<androidx.core.content.pm.ShortcutInfoCompat>! getShortcuts() throws java.lang.Exception;
+    method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void>! removeAllShortcuts();
+    method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void>! removeShortcuts(java.util.List<java.lang.String>!);
+  }
+
+}
+
+package androidx.core.content.res {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ColorStateListInflaterCompat {
+    method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static android.content.res.ColorStateList 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 static android.content.res.ColorStateList? inflate(android.content.res.Resources, @XmlRes int, android.content.res.Resources.Theme?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ComplexColorCompat {
+    method @ColorInt public int getColor();
+    method public android.graphics.Shader? getShader();
+    method public static androidx.core.content.res.ComplexColorCompat? inflate(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?);
+    method public boolean isGradient();
+    method public boolean isStateful();
+    method public boolean onStateChanged(int[]!);
+    method public void setColor(@ColorInt int);
+    method public boolean willDraw();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FontResourcesParserCompat {
+    method public static androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry? parse(org.xmlpull.v1.XmlPullParser!, android.content.res.Resources!) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static java.util.List<java.util.List<byte[]>>! readCerts(android.content.res.Resources!, @ArrayRes int);
+    field public static final int FETCH_STRATEGY_ASYNC = 1; // 0x1
+    field public static final int FETCH_STRATEGY_BLOCKING = 0; // 0x0
+    field public static final int INFINITE_TIMEOUT_VALUE = -1; // 0xffffffff
+  }
+
+  public static interface FontResourcesParserCompat.FamilyResourceEntry {
+  }
+
+  @IntDef({androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_BLOCKING, androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_ASYNC}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontResourcesParserCompat.FetchStrategy {
+  }
+
+  public static final class FontResourcesParserCompat.FontFamilyFilesResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
+    ctor public FontResourcesParserCompat.FontFamilyFilesResourceEntry(androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry[]);
+    method public androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry[] getEntries();
+  }
+
+  public static final class FontResourcesParserCompat.FontFileResourceEntry {
+    ctor public FontResourcesParserCompat.FontFileResourceEntry(String, int, boolean, String?, int, int);
+    method public String getFileName();
+    method public int getResourceId();
+    method public int getTtcIndex();
+    method public String? getVariationSettings();
+    method public int getWeight();
+    method public boolean isItalic();
+  }
+
+  public static final class FontResourcesParserCompat.ProviderResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
+    ctor public FontResourcesParserCompat.ProviderResourceEntry(androidx.core.provider.FontRequest, @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy int, int);
+    method @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy public int getFetchStrategy();
+    method public androidx.core.provider.FontRequest getRequest();
+    method public int getTimeout();
+  }
+
+  public final class ResourcesCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface! getFont(android.content.Context, @FontRes int, android.util.TypedValue!, int, androidx.core.content.res.ResourcesCompat.FontCallback?) throws android.content.res.Resources.NotFoundException;
+  }
+
+  public abstract static class ResourcesCompat.FontCallback {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackFailAsync(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int, android.os.Handler?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackSuccessAsync(android.graphics.Typeface!, android.os.Handler?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypedArrayUtils {
+    method public static int getAttr(android.content.Context, int, int);
+    method public static boolean getBoolean(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, boolean);
+    method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+    method public static int getInt(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, int);
+    method public static boolean getNamedBoolean(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, boolean);
+    method @ColorInt public static int getNamedColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @ColorInt int);
+    method public static android.content.res.ColorStateList? getNamedColorStateList(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int);
+    method public static androidx.core.content.res.ComplexColorCompat! getNamedComplexColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int, @ColorInt int);
+    method public static float getNamedFloat(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, float);
+    method public static int getNamedInt(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, int);
+    method @AnyRes public static int getNamedResourceId(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @AnyRes int);
+    method public static String? getNamedString(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int);
+    method @AnyRes public static int getResourceId(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, @AnyRes int);
+    method public static String? getString(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+    method public static CharSequence? getText(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+    method public static CharSequence[]? getTextArray(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
+    method public static boolean hasAttribute(org.xmlpull.v1.XmlPullParser, String);
+    method public static android.content.res.TypedArray obtainAttributes(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet, int[]);
+    method public static android.util.TypedValue? peekNamedValue(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, int);
+  }
+
+}
+
+package androidx.core.graphics {
+
+  public class TypefaceCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromFontInfo(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo[], int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFamilyXml(android.content.Context, androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry, android.content.res.Resources, int, int, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFontFile(android.content.Context, android.content.res.Resources, int, String!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? findFromCache(android.content.res.Resources, int, int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @RequiresApi(26) public class TypefaceCompatApi26Impl {
+    ctor public TypefaceCompatApi26Impl();
+    method protected android.graphics.Typeface? createFromFamiliesWithDefault(Object!);
+    method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
+    method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo[], int);
+    method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
+    method protected java.lang.reflect.Method! obtainAbortCreationMethod(Class!) throws java.lang.NoSuchMethodException;
+    method protected java.lang.reflect.Method! obtainAddFontFromAssetManagerMethod(Class!) throws java.lang.NoSuchMethodException;
+    method protected java.lang.reflect.Method! obtainAddFontFromBufferMethod(Class!) throws java.lang.NoSuchMethodException;
+    method protected java.lang.reflect.Method! obtainCreateFromFamiliesWithDefaultMethod(Class!) throws java.lang.NoSuchMethodException;
+    method protected Class! obtainFontFamily() throws java.lang.ClassNotFoundException;
+    method protected java.lang.reflect.Constructor! obtainFontFamilyCtor(Class!) throws java.lang.NoSuchMethodException;
+    method protected java.lang.reflect.Method! obtainFreezeMethod(Class!) throws java.lang.NoSuchMethodException;
+    field protected final java.lang.reflect.Method! mAbortCreation;
+    field protected final java.lang.reflect.Method! mAddFontFromAssetManager;
+    field protected final java.lang.reflect.Method! mAddFontFromBuffer;
+    field protected final java.lang.reflect.Method! mCreateFromFamiliesWithDefault;
+    field protected final Class! mFontFamily;
+    field protected final java.lang.reflect.Constructor! mFontFamilyCtor;
+    field protected final java.lang.reflect.Method! mFreeze;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @RequiresApi(28) public class TypefaceCompatApi28Impl extends androidx.core.graphics.TypefaceCompatApi26Impl {
+    ctor public TypefaceCompatApi28Impl();
+    method public android.graphics.Typeface! createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
+    method public android.graphics.Typeface! createFromFontInfo(android.content.Context!, android.os.CancellationSignal!, androidx.core.provider.FontsContractCompat.FontInfo[], int);
+    method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatUtil {
+    method public static void closeQuietly(java.io.Closeable!);
+    method @RequiresApi(19) public static java.nio.ByteBuffer? copyToDirectBuffer(android.content.Context!, android.content.res.Resources!, int);
+    method public static boolean copyToFile(java.io.File!, java.io.InputStream!);
+    method public static boolean copyToFile(java.io.File!, android.content.res.Resources!, int);
+    method public static java.io.File? getTempFile(android.content.Context!);
+    method @RequiresApi(19) public static java.nio.ByteBuffer? mmap(android.content.Context!, android.os.CancellationSignal!, android.net.Uri!);
+  }
+
+}
+
+package androidx.core.graphics.drawable {
+
+  public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addToShortcutIntent(android.content.Intent, android.graphics.drawable.Drawable?, android.content.Context);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void checkResource(android.content.Context!);
+    method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.graphics.drawable.Icon);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat! createWithResource(android.content.res.Resources!, String!, @DrawableRes int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap? getBitmap();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int mType;
+  }
+
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintAwareDrawable {
+    method public void setTint(@ColorInt int);
+    method public void setTintList(android.content.res.ColorStateList!);
+    method public void setTintMode(android.graphics.PorterDuff.Mode!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WrappedDrawable {
+    method public android.graphics.drawable.Drawable! getWrappedDrawable();
+    method public void setWrappedDrawable(android.graphics.drawable.Drawable!);
+  }
+
+}
+
+package androidx.core.internal.view {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenu extends android.view.Menu {
+    method public void setGroupDividerEnabled(boolean);
+    field public static final int CATEGORY_MASK = -65536; // 0xffff0000
+    field public static final int CATEGORY_SHIFT = 16; // 0x10
+    field public static final int FLAG_KEEP_OPEN_ON_SUBMENU_OPENED = 4; // 0x4
+    field public static final int SUPPORTED_MODIFIERS_MASK = 69647; // 0x1100f
+    field public static final int USER_MASK = 65535; // 0xffff
+    field public static final int USER_SHIFT = 0; // 0x0
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenuItem extends android.view.MenuItem {
+    method public int getAlphabeticModifiers();
+    method public CharSequence! getContentDescription();
+    method public android.content.res.ColorStateList! getIconTintList();
+    method public android.graphics.PorterDuff.Mode! getIconTintMode();
+    method public int getNumericModifiers();
+    method public androidx.core.view.ActionProvider! getSupportActionProvider();
+    method public CharSequence! getTooltipText();
+    method public boolean requiresActionButton();
+    method public boolean requiresOverflow();
+    method public android.view.MenuItem! setAlphabeticShortcut(char, int);
+    method public androidx.core.internal.view.SupportMenuItem! setContentDescription(CharSequence!);
+    method public android.view.MenuItem! setIconTintList(android.content.res.ColorStateList!);
+    method public android.view.MenuItem! setIconTintMode(android.graphics.PorterDuff.Mode!);
+    method public android.view.MenuItem! setNumericShortcut(char, int);
+    method public android.view.MenuItem! setShortcut(char, char, int, int);
+    method public androidx.core.internal.view.SupportMenuItem! setSupportActionProvider(androidx.core.view.ActionProvider!);
+    method public androidx.core.internal.view.SupportMenuItem! setTooltipText(CharSequence!);
+    field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+    field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+    field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+    field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+    field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportSubMenu extends androidx.core.internal.view.SupportMenu android.view.SubMenu {
+  }
+
+}
+
+package androidx.core.net {
+
+  @IntDef({androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_DISABLED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_WHITELISTED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ConnectivityManagerCompat.RestrictBackgroundStatus {
+  }
+
+}
+
+package androidx.core.provider {
+
+  public final class FontRequest {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getIdentifier();
+  }
+
+  public class FontsContractCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface! getFontSync(android.content.Context!, androidx.core.provider.FontRequest!, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean, int, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static android.content.pm.ProviderInfo? getProvider(android.content.pm.PackageManager, androidx.core.provider.FontRequest, android.content.res.Resources?) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @RequiresApi(19) public static java.util.Map<android.net.Uri,java.nio.ByteBuffer>! prepareFontData(android.content.Context!, androidx.core.provider.FontsContractCompat.FontInfo[]!, android.os.CancellationSignal!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void resetCache();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String PARCEL_FONT_RESULTS = "font_results";
+  }
+
+  public static class FontsContractCompat.FontFamilyResult {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontFamilyResult(int, androidx.core.provider.FontsContractCompat.FontInfo[]?);
+  }
+
+  public static class FontsContractCompat.FontInfo {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontInfo(android.net.Uri, @IntRange(from=0) int, @IntRange(from=1, to=1000) int, boolean, int);
+  }
+
+  public static class FontsContractCompat.FontRequestCallback {
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int RESULT_OK = 0; // 0x0
+  }
+
+  @IntDef({androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_PROVIDER_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_UNAVAILABLE, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_MALFORMED_QUERY, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_WRONG_CERTIFICATES, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_SECURITY_VIOLATION, androidx.core.provider.FontsContractCompat.FontRequestCallback.RESULT_OK}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontsContractCompat.FontRequestCallback.FontRequestFailReason {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SelfDestructiveThread {
+    ctor public SelfDestructiveThread(String!, int, int);
+    method @VisibleForTesting public int getGeneration();
+    method @VisibleForTesting public boolean isRunning();
+    method public <T> void postAndReply(java.util.concurrent.Callable<T>!, androidx.core.provider.SelfDestructiveThread.ReplyCallback<T>!);
+    method public <T> T! postAndWait(java.util.concurrent.Callable<T>!, int) throws java.lang.InterruptedException;
+  }
+
+  public static interface SelfDestructiveThread.ReplyCallback<T> {
+    method public void onReply(T!);
+  }
+
+}
+
+package androidx.core.text {
+
+  public class PrecomputedTextCompat implements android.text.Spannable {
+    method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.text.PrecomputedText? getPrecomputedText();
+  }
+
+  public static final class PrecomputedTextCompat.Params {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean equalsWithoutTextDirection(androidx.core.text.PrecomputedTextCompat.Params);
+  }
+
+}
+
+package androidx.core.text.util {
+
+  @IntDef(flag=true, value={android.text.util.Linkify.WEB_URLS, android.text.util.Linkify.EMAIL_ADDRESSES, android.text.util.Linkify.PHONE_NUMBERS, android.text.util.Linkify.MAP_ADDRESSES, android.text.util.Linkify.ALL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinkifyCompat.LinkifyMask {
+  }
+
+}
+
+package androidx.core.util {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DebugUtils {
+    method public static void buildShortClassTag(Object!, StringBuilder!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class LogWriter extends java.io.Writer {
+    ctor public LogWriter(String!);
+    method public void close();
+    method public void flush();
+    method public void write(char[]!, int, int);
+  }
+
+  public final class PatternsCompat {
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern! AUTOLINK_EMAIL_ADDRESS;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern! AUTOLINK_WEB_URL;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Preconditions {
+    method public static void checkArgument(boolean);
+    method public static void checkArgument(boolean, Object);
+    method public static int checkArgumentInRange(int, int, int, String);
+    method @IntRange(from=0) public static int checkArgumentNonnegative(int, String?);
+    method @IntRange(from=0) public static int checkArgumentNonnegative(int);
+    method public static <T> T checkNotNull(T?);
+    method public static <T> T checkNotNull(T?, Object);
+    method public static void checkState(boolean, String?);
+    method public static void checkState(boolean);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TimeUtils {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, StringBuilder!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!, int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, long, java.io.PrintWriter!);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int HUNDRED_DAY_FIELD_LEN = 19; // 0x13
+  }
+
+}
+
+package androidx.core.view {
+
+  public class AccessibilityDelegateCompat {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityDelegateCompat(android.view.View.AccessibilityDelegate!);
+  }
+
+  public abstract class ActionProvider {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void reset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSubUiVisibilityListener(androidx.core.view.ActionProvider.SubUiVisibilityListener!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void subUiVisibilityChanged(boolean);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActionProvider.SubUiVisibilityListener {
+    method public void onSubUiVisibilityChanged(boolean);
+  }
+
+  public final class DragAndDropPermissionsCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.view.DragAndDropPermissionsCompat? request(android.app.Activity!, android.view.DragEvent!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class KeyEventDispatcher {
+    method public static boolean dispatchBeforeHierarchy(android.view.View, android.view.KeyEvent);
+    method public static boolean dispatchKeyEvent(androidx.core.view.KeyEventDispatcher.Component, android.view.View?, android.view.Window.Callback?, android.view.KeyEvent);
+  }
+
+  public static interface KeyEventDispatcher.Component {
+    method public boolean superDispatchKeyEvent(android.view.KeyEvent!);
+  }
+
+  public final class PointerIconCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public Object! getPointerIcon();
+  }
+
+  @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN, android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusDirection {
+  }
+
+  @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRealDirection {
+  }
+
+  @IntDef({android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRelativeDirection {
+  }
+
+  @IntDef({androidx.core.view.ViewCompat.TYPE_TOUCH, androidx.core.view.ViewCompat.TYPE_NON_TOUCH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.NestedScrollType {
+  }
+
+  @IntDef(value={androidx.core.view.ViewCompat.SCROLL_AXIS_NONE, androidx.core.view.ViewCompat.SCROLL_AXIS_HORIZONTAL, androidx.core.view.ViewCompat.SCROLL_AXIS_VERTICAL}, flag=true) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollAxis {
+  }
+
+  @IntDef(flag=true, value={androidx.core.view.ViewCompat.SCROLL_INDICATOR_TOP, androidx.core.view.ViewCompat.SCROLL_INDICATOR_BOTTOM, androidx.core.view.ViewCompat.SCROLL_INDICATOR_LEFT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_RIGHT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_START, androidx.core.view.ViewCompat.SCROLL_INDICATOR_END}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollIndicators {
+  }
+
+}
+
+package androidx.core.view.accessibility {
+
+  public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityClickableSpanCompat(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat!, int);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String SPAN_ID = "ACCESSIBILITY_CLICKABLE_SPAN_ID";
+  }
+
+  public class AccessibilityNodeInfoCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addSpansToExtras(CharSequence!, android.view.View!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.text.style.ClickableSpan[]! getClickableSpans(CharSequence!);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int mParentVirtualDescendantId;
+  }
+
+  public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! createReplacementAction(CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean perform(android.view.View!, android.os.Bundle!);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected final androidx.core.view.accessibility.AccessibilityViewCommand! mCommand;
+  }
+
+  public abstract static class AccessibilityViewCommand.CommandArguments {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setBundle(android.os.Bundle!);
+  }
+
+}
+
+package androidx.core.widget {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface AutoSizeableTextView {
+    method public int getAutoSizeMaxTextSize();
+    method public int getAutoSizeMinTextSize();
+    method public int getAutoSizeStepGranularity();
+    method public int[]! getAutoSizeTextAvailableSizes();
+    method @androidx.core.widget.TextViewCompat.AutoSizeTextType public int getAutoSizeTextType();
+    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 setAutoSizeTextTypeWithDefaults(@androidx.core.widget.TextViewCompat.AutoSizeTextType int);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final boolean PLATFORM_SUPPORTS_AUTOSIZE;
+  }
+
+  public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
+  }
+
+  public final class TextViewCompat {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback wrapCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
+  }
+
+  @IntDef({androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE, androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface TextViewCompat.AutoSizeTextType {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableImageSourceView {
+    method public android.content.res.ColorStateList? getSupportImageTintList();
+    method public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+    method public void setSupportImageTintList(android.content.res.ColorStateList?);
+    method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
+  }
+
+}
+
diff --git a/core/ktx/api/1.1.0-alpha06.txt b/core/ktx/api/1.1.0-alpha06.txt
new file mode 100644
index 0000000..63739d2
--- /dev/null
+++ b/core/ktx/api/1.1.0-alpha06.txt
@@ -0,0 +1,642 @@
+// Signature format: 3.0
+package androidx.core.animation {
+
+  public final class AnimatorKt {
+    ctor public AnimatorKt();
+    method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd = {}, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart = {}, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel = {}, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat = {});
+    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume = {}, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause = {});
+    method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+    method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+    method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+    method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+    method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
+  }
+
+}
+
+package androidx.core.content {
+
+  public final class ContentValuesKt {
+    ctor public ContentValuesKt();
+    method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class ContextKt {
+    ctor public ContextKt();
+    method public static inline <reified T> T! getSystemService(android.content.Context);
+    method public static inline void withStyledAttributes(android.content.Context, android.util.AttributeSet? set = null, int[] attrs, @AttrRes int defStyleAttr = 0, @StyleRes int defStyleRes = 0, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+    method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
+  }
+
+  public final class SharedPreferencesKt {
+    ctor public SharedPreferencesKt();
+    method public static inline void edit(android.content.SharedPreferences, boolean commit = false, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
+  }
+
+}
+
+package androidx.core.content.res {
+
+  public final class TypedArrayKt {
+    ctor public TypedArrayKt();
+    method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static CharSequence[] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
+    method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
+  }
+
+}
+
+package androidx.core.database {
+
+  public final class CursorKt {
+    ctor public CursorKt();
+    method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
+    method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
+    method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
+    method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
+    method public static inline Long? getLongOrNull(android.database.Cursor, int index);
+    method public static inline Short? getShortOrNull(android.database.Cursor, int index);
+    method public static inline String? getStringOrNull(android.database.Cursor, int index);
+  }
+
+}
+
+package androidx.core.database.sqlite {
+
+  public final class SQLiteDatabaseKt {
+    ctor public SQLiteDatabaseKt();
+    method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, boolean exclusive = true, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
+  }
+
+}
+
+package androidx.core.graphics {
+
+  public final class BitmapKt {
+    ctor public BitmapKt();
+    method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
+    method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
+    method public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+    method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888, boolean hasAlpha = true, android.graphics.ColorSpace colorSpace = ColorSpace.get(ColorSpace.Named.SRGB));
+    method public static inline operator int get(android.graphics.Bitmap, int x, int y);
+    method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, boolean filter = true);
+    method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withMatrix(android.graphics.Canvas, android.graphics.Matrix matrix = android.graphics.Matrix(), kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withRotation(android.graphics.Canvas, float degrees = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withScale(android.graphics.Canvas, float x = 1.0f, float y = 1.0f, float pivotX = 0.0f, float pivotY = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withSkew(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+    method public static inline void withTranslation(android.graphics.Canvas, float x = 0.0f, float y = 0.0f, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+  }
+
+  public final class ColorKt {
+    ctor public ColorKt();
+    method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
+    method public static inline operator int component1(int);
+    method @RequiresApi(26) public static inline operator float component1(long);
+    method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
+    method public static inline operator int component2(int);
+    method @RequiresApi(26) public static inline operator float component2(long);
+    method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
+    method public static inline operator int component3(int);
+    method @RequiresApi(26) public static inline operator float component3(long);
+    method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
+    method public static inline operator int component4(int);
+    method @RequiresApi(26) public static inline operator float component4(long);
+    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(int, android.graphics.ColorSpace.Named colorSpace);
+    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(int, android.graphics.ColorSpace colorSpace);
+    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(long, android.graphics.ColorSpace.Named colorSpace);
+    method @ColorLong @RequiresApi(26) public static inline infix long convertTo(long, android.graphics.ColorSpace colorSpace);
+    method @RequiresApi(26) public static inline infix android.graphics.Color! convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
+    method @RequiresApi(26) public static inline infix android.graphics.Color! convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
+    method public static inline int getAlpha(int);
+    method @RequiresApi(26) public static inline float getAlpha(long);
+    method public static inline int getBlue(int);
+    method @RequiresApi(26) public static inline float getBlue(long);
+    method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(long);
+    method public static inline int getGreen(int);
+    method @RequiresApi(26) public static inline float getGreen(long);
+    method @RequiresApi(26) public static inline float getLuminance(int);
+    method @RequiresApi(26) public static inline float getLuminance(long);
+    method public static inline int getRed(int);
+    method @RequiresApi(26) public static inline float getRed(long);
+    method @RequiresApi(26) public static inline boolean isSrgb(long);
+    method @RequiresApi(26) public static inline boolean isWideGamut(long);
+    method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
+    method @RequiresApi(26) public static inline android.graphics.Color toColor(int);
+    method @RequiresApi(26) public static inline android.graphics.Color toColor(long);
+    method @ColorInt @RequiresApi(26) public static inline int toColorInt(long);
+    method @ColorInt public static inline int toColorInt(String);
+    method @ColorLong @RequiresApi(26) public static inline long toColorLong(int);
+  }
+
+  public final class ImageDecoderKt {
+    ctor public ImageDecoderKt();
+    method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+    method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
+  }
+
+  public final class MatrixKt {
+    ctor public MatrixKt();
+    method public static android.graphics.Matrix rotationMatrix(float degrees, float px = 0.0f, float py = 0.0f);
+    method public static android.graphics.Matrix scaleMatrix(float sx = 1.0f, float sy = 1.0f);
+    method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
+    method public static android.graphics.Matrix translationMatrix(float tx = 0.0f, float ty = 0.0f);
+    method public static inline float[] values(android.graphics.Matrix);
+  }
+
+  public final class PathKt {
+    ctor public PathKt();
+    method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
+    method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, float error = 0.5f);
+    method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
+    method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
+    method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
+    method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
+  }
+
+  public final class PictureKt {
+    ctor public PictureKt();
+    method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
+  }
+
+  public final class PointKt {
+    ctor public PointKt();
+    method public static inline operator int component1(android.graphics.Point);
+    method public static inline operator float component1(android.graphics.PointF);
+    method public static inline operator int component2(android.graphics.Point);
+    method public static inline operator float component2(android.graphics.PointF);
+    method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
+    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
+    method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
+    method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
+    method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
+    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
+    method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
+    method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
+    method public static inline android.graphics.Point toPoint(android.graphics.PointF);
+    method public static inline android.graphics.PointF toPointF(android.graphics.Point);
+    method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
+    method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
+  }
+
+  public final class PorterDuffKt {
+    ctor public PorterDuffKt();
+    method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
+    method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
+  }
+
+  public final class RectKt {
+    ctor public RectKt();
+    method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
+    method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
+    method public static inline operator int component1(android.graphics.Rect);
+    method public static inline operator float component1(android.graphics.RectF);
+    method public static inline operator int component2(android.graphics.Rect);
+    method public static inline operator float component2(android.graphics.RectF);
+    method public static inline operator int component3(android.graphics.Rect);
+    method public static inline operator float component3(android.graphics.RectF);
+    method public static inline operator int component4(android.graphics.Rect);
+    method public static inline operator float component4(android.graphics.RectF);
+    method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
+    method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
+    method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
+    method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
+    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
+    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
+    method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
+    method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
+    method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
+    method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
+    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
+    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
+    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
+    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
+    method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
+    method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
+    method public static inline android.graphics.Rect toRect(android.graphics.RectF);
+    method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
+    method public static inline android.graphics.Region toRegion(android.graphics.Rect);
+    method public static inline android.graphics.Region toRegion(android.graphics.RectF);
+    method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
+    method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
+    method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
+  }
+
+  public final class RegionKt {
+    ctor public RegionKt();
+    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
+    method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
+    method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
+    method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
+    method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
+    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
+    method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
+    method public static inline operator android.graphics.Region not(android.graphics.Region);
+    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
+    method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
+    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
+    method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
+    method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
+    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
+    method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
+  }
+
+}
+
+package androidx.core.graphics.drawable {
+
+  public final class BitmapDrawableKt {
+    ctor public BitmapDrawableKt();
+    method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
+  }
+
+  public final class ColorDrawableKt {
+    ctor public ColorDrawableKt();
+    method public static inline android.graphics.drawable.ColorDrawable toDrawable(int);
+    method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
+  }
+
+  public final class DrawableKt {
+    ctor public DrawableKt();
+    method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, @Px int width = intrinsicWidth, @Px int height = intrinsicHeight, android.graphics.Bitmap.Config? config = null);
+    method public static void updateBounds(android.graphics.drawable.Drawable, @Px int left = android.graphics.Rect.left, @Px int top = android.graphics.Rect.top, @Px int right = android.graphics.Rect.right, @Px int bottom = android.graphics.Rect.bottom);
+  }
+
+  public final class IconKt {
+    ctor public IconKt();
+    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
+    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
+    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
+    method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
+  }
+
+}
+
+package androidx.core.location {
+
+  public final class LocationKt {
+    ctor public LocationKt();
+    method public static inline operator double component1(android.location.Location);
+    method public static inline operator double component2(android.location.Location);
+  }
+
+}
+
+package androidx.core.net {
+
+  public final class UriKt {
+    ctor public UriKt();
+    method public static java.io.File toFile(android.net.Uri);
+    method public static inline android.net.Uri toUri(String);
+    method public static inline android.net.Uri toUri(java.io.File);
+  }
+
+}
+
+package androidx.core.os {
+
+  public final class BundleKt {
+    ctor public BundleKt();
+    method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class HandlerKt {
+    ctor public HandlerKt();
+    method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+    method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, Object? token = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+  }
+
+  public final class PersistableBundleKt {
+    ctor public PersistableBundleKt();
+    method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class TraceKt {
+    ctor public TraceKt();
+    method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+}
+
+package androidx.core.text {
+
+  public final class CharSequenceKt {
+    ctor public CharSequenceKt();
+    method public static inline boolean isDigitsOnly(CharSequence);
+    method public static inline int trimmedLength(CharSequence);
+  }
+
+  public final class HtmlKt {
+    ctor public HtmlKt();
+    method public static inline android.text.Spanned parseAsHtml(String, int flags = 0, android.text.Html.ImageGetter? imageGetter = null, android.text.Html.TagHandler? tagHandler = null);
+    method public static inline String toHtml(android.text.Spanned, int option = 0);
+  }
+
+  public final class LocaleKt {
+    ctor public LocaleKt();
+    method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
+  }
+
+  public final class SpannableStringBuilderKt {
+    ctor public SpannableStringBuilderKt();
+    method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object[] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+    method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
+  }
+
+  public final class SpannableStringKt {
+    ctor public SpannableStringKt();
+    method public static inline void clearSpans(android.text.Spannable);
+    method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
+    method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
+    method public static inline android.text.Spannable toSpannable(CharSequence);
+  }
+
+  public final class SpannedStringKt {
+    ctor public SpannedStringKt();
+    method public static inline <reified T> T[]! getSpans(android.text.Spanned, int start = 0, int end = length);
+    method public static inline android.text.Spanned toSpanned(CharSequence);
+  }
+
+  public final class StringKt {
+    ctor public StringKt();
+    method public static inline String htmlEncode(String);
+  }
+
+}
+
+package androidx.core.transition {
+
+  public final class TransitionKt {
+    ctor public TransitionKt();
+    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd = {}, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart = {}, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel = {}, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume = {}, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause = {});
+    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+    method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
+  }
+
+}
+
+package androidx.core.util {
+
+  public final class AtomicFileKt {
+    ctor public AtomicFileKt();
+    method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
+    method @RequiresApi(17) public static String readText(android.util.AtomicFile, java.nio.charset.Charset charset = Charsets.UTF_8);
+    method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
+    method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
+    method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, java.nio.charset.Charset charset = Charsets.UTF_8);
+  }
+
+  public final class HalfKt {
+    ctor public HalfKt();
+    method @RequiresApi(26) public static inline android.util.Half toHalf(short);
+    method @RequiresApi(26) public static inline android.util.Half toHalf(float);
+    method @RequiresApi(26) public static inline android.util.Half toHalf(double);
+    method @RequiresApi(26) public static inline android.util.Half toHalf(String);
+  }
+
+  public final class LongSparseArrayKt {
+    ctor public LongSparseArrayKt();
+    method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
+    method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
+    method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T! value);
+    method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+    method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T! defaultValue);
+    method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
+    method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
+    method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
+    method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
+    method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+    method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
+    method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T! value);
+    method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T! value);
+    method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
+  }
+
+  public final class LruCacheKt {
+    ctor public LruCacheKt();
+    method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf = { _, _ -> 1 }, kotlin.jvm.functions.Function1<? super K,? extends V> create = { (V)null }, kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved = { _, _, _, _ ->  });
+  }
+
+  public final class PairKt {
+    ctor public PairKt();
+    method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
+    method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
+    method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
+    method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
+  }
+
+  public final class RangeKt {
+    ctor public RangeKt();
+    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
+    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
+    method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
+    method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
+    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
+    method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
+  }
+
+  public final class SizeKt {
+    ctor public SizeKt();
+    method @RequiresApi(21) public static inline operator int component1(android.util.Size);
+    method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
+    method @RequiresApi(21) public static inline operator int component2(android.util.Size);
+    method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
+  }
+
+  public final class SparseArrayKt {
+    ctor public SparseArrayKt();
+    method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
+    method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
+    method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T! value);
+    method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+    method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T! defaultValue);
+    method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static inline <T> int getSize(android.util.SparseArray<T>);
+    method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
+    method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
+    method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
+    method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+    method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
+    method public static <T> boolean remove(android.util.SparseArray<T>, int key, T! value);
+    method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T! value);
+    method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
+  }
+
+  public final class SparseBooleanArrayKt {
+    ctor public SparseBooleanArrayKt();
+    method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
+    method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
+    method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
+    method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
+    method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
+    method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
+    method public static inline int getSize(android.util.SparseBooleanArray);
+    method public static inline boolean isEmpty(android.util.SparseBooleanArray);
+    method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
+    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
+    method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+    method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
+    method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
+    method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
+    method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
+  }
+
+  public final class SparseIntArrayKt {
+    ctor public SparseIntArrayKt();
+    method public static inline operator boolean contains(android.util.SparseIntArray, int key);
+    method public static inline boolean containsKey(android.util.SparseIntArray, int key);
+    method public static inline boolean containsValue(android.util.SparseIntArray, int value);
+    method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+    method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
+    method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
+    method public static inline int getSize(android.util.SparseIntArray);
+    method public static inline boolean isEmpty(android.util.SparseIntArray);
+    method public static inline boolean isNotEmpty(android.util.SparseIntArray);
+    method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
+    method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
+    method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
+    method public static boolean remove(android.util.SparseIntArray, int key, int value);
+    method public static inline operator void set(android.util.SparseIntArray, int key, int value);
+    method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
+  }
+
+  public final class SparseLongArrayKt {
+    ctor public SparseLongArrayKt();
+    method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
+    method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
+    method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
+    method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
+    method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
+    method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
+    method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
+    method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
+    method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
+    method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
+    method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
+    method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
+    method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
+    method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
+    method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
+  }
+
+}
+
+package androidx.core.view {
+
+  public final class MenuKt {
+    ctor public MenuKt();
+    method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
+    method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
+    method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
+    method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
+    method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
+    method public static inline int getSize(android.view.Menu);
+    method public static inline boolean isEmpty(android.view.Menu);
+    method public static inline boolean isNotEmpty(android.view.Menu);
+    method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
+    method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
+  }
+
+  public final class ViewGroupKt {
+    ctor public ViewGroupKt();
+    method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
+    method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+    method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
+    method public static operator android.view.View get(android.view.ViewGroup, int index);
+    method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
+    method public static inline int getSize(android.view.ViewGroup);
+    method public static inline boolean isEmpty(android.view.ViewGroup);
+    method public static inline boolean isNotEmpty(android.view.ViewGroup);
+    method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
+    method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
+    method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
+    method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
+    method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, @Px int left = android.view.ViewGroup.MarginLayoutParams.leftMargin, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int right = android.view.ViewGroup.MarginLayoutParams.rightMargin, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+    method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, @Px int start = marginStart, @Px int top = android.view.ViewGroup.MarginLayoutParams.topMargin, @Px int end = marginEnd, @Px int bottom = android.view.ViewGroup.MarginLayoutParams.bottomMargin);
+  }
+
+  public final class ViewKt {
+    ctor public ViewKt();
+    method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+    method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+    method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
+    method public static android.graphics.Bitmap drawToBitmap(android.view.View, android.graphics.Bitmap.Config config = android.graphics.Bitmap.Config.ARGB_8888);
+    method public static inline int getMarginBottom(android.view.View);
+    method public static inline int getMarginEnd(android.view.View);
+    method public static inline int getMarginLeft(android.view.View);
+    method public static inline int getMarginRight(android.view.View);
+    method public static inline int getMarginStart(android.view.View);
+    method public static inline int getMarginTop(android.view.View);
+    method public static inline boolean isGone(android.view.View);
+    method public static inline boolean isInvisible(android.view.View);
+    method public static inline boolean isVisible(android.view.View);
+    method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+    method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+    method public static inline void setGone(android.view.View, boolean value);
+    method public static inline void setInvisible(android.view.View, boolean value);
+    method public static inline void setPadding(android.view.View, @Px int size);
+    method public static inline void setVisible(android.view.View, boolean value);
+    method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
+    method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParamsTyped(android.view.View, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>! block);
+    method public static inline void updatePadding(android.view.View, @Px int left = paddingLeft, @Px int top = paddingTop, @Px int right = paddingRight, @Px int bottom = paddingBottom);
+    method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, @Px int start = paddingStart, @Px int top = paddingTop, @Px int end = paddingEnd, @Px int bottom = paddingBottom);
+  }
+
+}
+
+package androidx.core.widget {
+
+  public final class TextViewKt {
+    ctor public TextViewKt();
+    method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged = { _, _, _, _ ->  }, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged = { _, _, _, _ ->  }, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged = {});
+    method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
+    method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+    method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
+  }
+
+}
+
diff --git a/core/ktx/api/res-1.1.0-alpha06.txt b/core/ktx/api/res-1.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/ktx/api/res-1.1.0-alpha06.txt
diff --git a/core/ktx/api/restricted_1.1.0-alpha06.txt b/core/ktx/api/restricted_1.1.0-alpha06.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/core/ktx/api/restricted_1.1.0-alpha06.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/core/src/main/java/androidx/core/app/NotificationCompat.java b/core/src/main/java/androidx/core/app/NotificationCompat.java
index ac680c8..17053d9 100644
--- a/core/src/main/java/androidx/core/app/NotificationCompat.java
+++ b/core/src/main/java/androidx/core/app/NotificationCompat.java
@@ -3553,6 +3553,8 @@
              *
              * @param label the label to display while the action is being prepared to execute
              * @return this object for method chaining
+             *
+             * @deprecated This method has no effect starting with Wear 2.0.
              */
             @Deprecated
             public WearableExtender setInProgressLabel(CharSequence label) {
@@ -3565,6 +3567,8 @@
              * the action. This is usually a 'ing' verb ending in ellipsis like "Sending..."
              *
              * @return the label to display while the action is being prepared to execute
+             *
+             * @deprecated This method has no effect starting with Wear 2.0.
              */
             @Deprecated
             public CharSequence getInProgressLabel() {
@@ -3577,6 +3581,8 @@
              *
              * @param label the label to confirm the action should be executed
              * @return this object for method chaining
+             *
+             * @deprecated This method has no effect starting with Wear 2.0.
              */
             @Deprecated
             public WearableExtender setConfirmLabel(CharSequence label) {
@@ -3589,6 +3595,8 @@
              * This is usually an imperative verb like "Send".
              *
              * @return the label to confirm the action should be executed
+             *
+             * @deprecated This method has no effect starting with Wear 2.0.
              */
             @Deprecated
             public CharSequence getConfirmLabel() {
@@ -3601,6 +3609,8 @@
              *
              * @param label the label to display to cancel the action
              * @return this object for method chaining
+             *
+             * @deprecated This method has no effect starting with Wear 2.0.
              */
             @Deprecated
             public WearableExtender setCancelLabel(CharSequence label) {
@@ -3613,6 +3623,8 @@
              * This is usually an imperative verb like "Cancel".
              *
              * @return the label to display to cancel the action
+             *
+             * @deprecated This method has no effect starting with Wear 2.0.
              */
             @Deprecated
             public CharSequence getCancelLabel() {
@@ -4248,6 +4260,8 @@
 
         /**
          * Set an icon that goes with the content of this notification.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setContentIcon(int icon) {
@@ -4257,6 +4271,8 @@
 
         /**
          * Get an icon that goes with the content of this notification.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public int getContentIcon() {
@@ -4268,6 +4284,8 @@
          * Supported values include {@link android.view.Gravity#START} and
          * {@link android.view.Gravity#END}. The default value is {@link android.view.Gravity#END}.
          * @see #setContentIcon
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setContentIconGravity(int contentIconGravity) {
@@ -4280,6 +4298,8 @@
          * Supported values include {@link android.view.Gravity#START} and
          * {@link android.view.Gravity#END}. The default value is {@link android.view.Gravity#END}.
          * @see #getContentIcon
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public int getContentIconGravity() {
@@ -4319,6 +4339,8 @@
          * Supported values include {@link android.view.Gravity#TOP},
          * {@link android.view.Gravity#CENTER_VERTICAL} and {@link android.view.Gravity#BOTTOM}.
          * The default value is {@link android.view.Gravity#BOTTOM}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setGravity(int gravity) {
@@ -4331,6 +4353,8 @@
          * Supported values include {@link android.view.Gravity#TOP},
          * {@link android.view.Gravity#CENTER_VERTICAL} and {@link android.view.Gravity#BOTTOM}.
          * The default value is {@link android.view.Gravity#BOTTOM}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public int getGravity() {
@@ -4345,6 +4369,8 @@
          * using {@link NotificationCompat.WearableExtender#setDisplayIntent}. Check the
          * documentation for the preset in question. See also
          * {@link #setCustomContentHeight} and {@link #getCustomSizePreset}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setCustomSizePreset(int sizePreset) {
@@ -4359,6 +4385,8 @@
          * <p>Some custom size presets are only applicable for custom display notifications created
          * using {@link #setDisplayIntent}. Check the documentation for the preset in question.
          * See also {@link #setCustomContentHeight} and {@link #setCustomSizePreset}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public int getCustomSizePreset() {
@@ -4371,6 +4399,8 @@
          * using {@link NotificationCompat.WearableExtender#setDisplayIntent}. See also
          * {@link NotificationCompat.WearableExtender#setCustomSizePreset} and
          * {@link #getCustomContentHeight}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setCustomContentHeight(int height) {
@@ -4383,6 +4413,8 @@
          * <p>This option is only available for custom display notifications created
          * using {@link #setDisplayIntent}. See also {@link #setCustomSizePreset} and
          * {@link #setCustomContentHeight}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public int getCustomContentHeight() {
@@ -4434,6 +4466,8 @@
          * Set a hint that this notification's icon should not be displayed.
          * @param hintHideIcon {@code true} to hide the icon, {@code false} otherwise.
          * @return this object for method chaining
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setHintHideIcon(boolean hintHideIcon) {
@@ -4445,6 +4479,8 @@
          * Get a hint that this notification's icon should not be displayed.
          * @return {@code true} if this icon should not be displayed, false otherwise.
          * The default value is {@code false} if this was never set.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public boolean getHintHideIcon() {
@@ -4455,6 +4491,8 @@
          * Set a visual hint that only the background image of this notification should be
          * displayed, and other semantic content should be hidden. This hint is only applicable
          * to sub-pages added using {@link #addPage}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setHintShowBackgroundOnly(boolean hintShowBackgroundOnly) {
@@ -4466,6 +4504,8 @@
          * Get a visual hint that only the background image of this notification should be
          * displayed, and other semantic content should be hidden. This hint is only applicable
          * to sub-pages added using {@link NotificationCompat.WearableExtender#addPage}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public boolean getHintShowBackgroundOnly() {
@@ -4478,6 +4518,8 @@
          * ratio of the image. This can be useful for images like barcodes or qr codes.
          * @param hintAvoidBackgroundClipping {@code true} to avoid clipping if possible.
          * @return this object for method chaining
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public WearableExtender setHintAvoidBackgroundClipping(
@@ -4492,6 +4534,8 @@
          * ratio of the image. This can be useful for images like barcodes or qr codes.
          * @return {@code true} if it's ok if the background is clipped on the screen, false
          * otherwise. The default value is {@code false} if this was never set.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public boolean getHintAvoidBackgroundClipping() {
@@ -4504,6 +4548,8 @@
          * @param timeout The requested screen timeout in milliseconds. Can also be either
          *     {@link #SCREEN_TIMEOUT_SHORT} or {@link #SCREEN_TIMEOUT_LONG}.
          * @return this object for method chaining
+         *
+         * @deprecated This method has no effect.
          */
         @Deprecated
         public WearableExtender setHintScreenTimeout(int timeout) {
@@ -4516,6 +4562,8 @@
          * when this notification is displayed.
          * @return the duration in milliseconds if > 0, or either one of the sentinel values
          *     {@link #SCREEN_TIMEOUT_SHORT} or {@link #SCREEN_TIMEOUT_LONG}.
+         *
+         * @deprecated This method has no effect starting with Wear 2.0.
          */
         @Deprecated
         public int getHintScreenTimeout() {
diff --git a/dynamic-animation/api/1.1.0-alpha01.txt b/dynamic-animation/api/1.1.0-alpha01.txt
index 9a947b0..bfc7230 100644
--- a/dynamic-animation/api/1.1.0-alpha01.txt
+++ b/dynamic-animation/api/1.1.0-alpha01.txt
@@ -63,7 +63,7 @@
     method public abstract void setValue(T!, float);
   }
 
-  public final class FloatValueHolder {
+  public class FloatValueHolder {
     ctor public FloatValueHolder();
     ctor public FloatValueHolder(float);
     method public float getValue();
@@ -72,6 +72,7 @@
 
   public final class SpringAnimation extends androidx.dynamicanimation.animation.DynamicAnimation<androidx.dynamicanimation.animation.SpringAnimation> {
     ctor public SpringAnimation(androidx.dynamicanimation.animation.FloatValueHolder!);
+    ctor public SpringAnimation(androidx.dynamicanimation.animation.FloatValueHolder!, float);
     ctor public SpringAnimation(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K>!);
     ctor public SpringAnimation(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K>!, float);
     method public void animateToFinalPosition(float);
diff --git a/dynamic-animation/api/current.txt b/dynamic-animation/api/current.txt
index 9a947b0..bfc7230 100644
--- a/dynamic-animation/api/current.txt
+++ b/dynamic-animation/api/current.txt
@@ -63,7 +63,7 @@
     method public abstract void setValue(T!, float);
   }
 
-  public final class FloatValueHolder {
+  public class FloatValueHolder {
     ctor public FloatValueHolder();
     ctor public FloatValueHolder(float);
     method public float getValue();
@@ -72,6 +72,7 @@
 
   public final class SpringAnimation extends androidx.dynamicanimation.animation.DynamicAnimation<androidx.dynamicanimation.animation.SpringAnimation> {
     ctor public SpringAnimation(androidx.dynamicanimation.animation.FloatValueHolder!);
+    ctor public SpringAnimation(androidx.dynamicanimation.animation.FloatValueHolder!, float);
     ctor public SpringAnimation(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K>!);
     ctor public SpringAnimation(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K>!, float);
     method public void animateToFinalPosition(float);
diff --git a/dynamic-animation/ktx/api/1.0.0-alpha02.txt b/dynamic-animation/ktx/api/1.0.0-alpha02.txt
index cda5dad..e250ffe 100644
--- a/dynamic-animation/ktx/api/1.0.0-alpha02.txt
+++ b/dynamic-animation/ktx/api/1.0.0-alpha02.txt
@@ -3,8 +3,8 @@
 
   public final class DynamicAnimationKt {
     ctor public DynamicAnimationKt();
-    method public static inline <K> androidx.dynamicanimation.animation.FlingAnimation flingAnimationOf(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K> property);
-    method public static inline <K> androidx.dynamicanimation.animation.SpringAnimation springAnimationOf(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K> property, float finalPosition = Float.NaN);
+    method public static androidx.dynamicanimation.animation.FlingAnimation flingAnimationOf(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> setter, kotlin.jvm.functions.Function0<java.lang.Float> getter);
+    method public static androidx.dynamicanimation.animation.SpringAnimation springAnimationOf(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> setter, kotlin.jvm.functions.Function0<java.lang.Float> getter, float finalPosition = Float.NaN);
     method public static inline androidx.dynamicanimation.animation.SpringAnimation withSpringForceProperties(androidx.dynamicanimation.animation.SpringAnimation, kotlin.jvm.functions.Function1<? super androidx.dynamicanimation.animation.SpringForce,kotlin.Unit> func);
   }
 
diff --git a/dynamic-animation/ktx/api/current.txt b/dynamic-animation/ktx/api/current.txt
index cda5dad..e250ffe 100644
--- a/dynamic-animation/ktx/api/current.txt
+++ b/dynamic-animation/ktx/api/current.txt
@@ -3,8 +3,8 @@
 
   public final class DynamicAnimationKt {
     ctor public DynamicAnimationKt();
-    method public static inline <K> androidx.dynamicanimation.animation.FlingAnimation flingAnimationOf(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K> property);
-    method public static inline <K> androidx.dynamicanimation.animation.SpringAnimation springAnimationOf(K!, androidx.dynamicanimation.animation.FloatPropertyCompat<K> property, float finalPosition = Float.NaN);
+    method public static androidx.dynamicanimation.animation.FlingAnimation flingAnimationOf(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> setter, kotlin.jvm.functions.Function0<java.lang.Float> getter);
+    method public static androidx.dynamicanimation.animation.SpringAnimation springAnimationOf(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> setter, kotlin.jvm.functions.Function0<java.lang.Float> getter, float finalPosition = Float.NaN);
     method public static inline androidx.dynamicanimation.animation.SpringAnimation withSpringForceProperties(androidx.dynamicanimation.animation.SpringAnimation, kotlin.jvm.functions.Function1<? super androidx.dynamicanimation.animation.SpringForce,kotlin.Unit> func);
   }
 
diff --git a/dynamic-animation/ktx/build.gradle b/dynamic-animation/ktx/build.gradle
index 2511749..b14cc2d 100644
--- a/dynamic-animation/ktx/build.gradle
+++ b/dynamic-animation/ktx/build.gradle
@@ -38,12 +38,14 @@
     api(KOTLIN_STDLIB)
     api(project(":dynamicanimation"))
 
-    androidTestImplementation(JUNIT)
     androidTestImplementation(TEST_EXT_JUNIT)
     androidTestImplementation(TEST_CORE)
     androidTestImplementation(TEST_RUNNER)
     androidTestImplementation(TEST_RULES)
-    androidTestImplementation(TRUTH)
+
+    androidTestImplementation(ESPRESSO_CORE, libs.exclude_for_espresso)
+    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
+    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
 }
 
 supportLibrary {
diff --git a/dynamic-animation/ktx/src/androidTest/AndroidManifest.xml b/dynamic-animation/ktx/src/androidTest/AndroidManifest.xml
new file mode 100755
index 0000000..8cc5dd5
--- /dev/null
+++ b/dynamic-animation/ktx/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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.dynamicanimation.ktx.test">
+    <uses-sdk android:targetSdkVersion="${target-sdk-version}"/>
+
+    <application android:supportsRtl="true">
+        <activity android:name="androidx.dynamicanimation.tests.AnimationActivity"/>
+    </application>
+</manifest>
diff --git a/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/animation/DynamicAnimationTest.kt b/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/animation/DynamicAnimationTest.kt
deleted file mode 100644
index 1cce0dd..0000000
--- a/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/animation/DynamicAnimationTest.kt
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * 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.dynamicanimation.animation
-
-import androidx.test.filters.SmallTest
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertNotNull
-import org.junit.Assert.assertNull
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Test
-
-@SmallTest
-class DynamicAnimationTest {
-
-    private val animObject = Any()
-    private lateinit var floatPropertyCompat: FloatPropertyCompat<Any>
-
-    /**
-     * Setup [FloatPropertyCompat] before test start
-     */
-    @Before fun setup() {
-        floatPropertyCompat = object : FloatPropertyCompat<Any>("") {
-
-            private var value = 0f
-
-            override fun getValue(`object`: Any?): Float {
-                return value
-            }
-
-            override fun setValue(`object`: Any?, value: Float) {
-                this.value = value
-            }
-        }
-    }
-
-    /**
-     * Test extension for creating [FlingAnimation]
-     */
-    @Test fun testCreateFlingAnimation() {
-        val flingAnimation = animObject.flingAnimationOf(floatPropertyCompat)
-        assertNotNull(flingAnimation)
-        assertEquals(flingAnimation.mTarget, animObject)
-        assertEquals(flingAnimation.mProperty, floatPropertyCompat)
-        assertTrue(flingAnimation.friction == 1f)
-        flingAnimation.friction = 1.5f
-        assertTrue(flingAnimation.friction == 1.5f)
-    }
-
-    /**
-     * Test extension for creating [SpringAnimation]
-     */
-    @Test fun testCreateSpringAnimation() {
-        val springAnimationWithoutFinalPosition = animObject.springAnimationOf(floatPropertyCompat)
-        assertNotNull(springAnimationWithoutFinalPosition)
-        assertEquals(springAnimationWithoutFinalPosition.mTarget, animObject)
-        assertEquals(springAnimationWithoutFinalPosition.mProperty, floatPropertyCompat)
-        assertNull(springAnimationWithoutFinalPosition.spring)
-        val springAnimationWithFinalPosition = animObject.springAnimationOf(floatPropertyCompat,
-            100f)
-        assertNotNull(springAnimationWithFinalPosition)
-        assertEquals(springAnimationWithFinalPosition.mTarget, animObject)
-        assertEquals(springAnimationWithFinalPosition.mProperty, floatPropertyCompat)
-        assertNotNull(springAnimationWithFinalPosition.spring)
-        assertEquals(springAnimationWithFinalPosition.spring.finalPosition, 100f)
-    }
-
-    /**
-     * Test extension for setting up [SpringForce]
-     */
-    @Test fun testSpringForce() {
-        val springAnimationWithoutFinalPosition = animObject
-            .springAnimationOf(floatPropertyCompat)
-            .withSpringForceProperties {
-                finalPosition = 100f
-                dampingRatio = SpringForce.DAMPING_RATIO_HIGH_BOUNCY
-                stiffness = SpringForce.STIFFNESS_HIGH
-            }
-        assertNotNull(springAnimationWithoutFinalPosition.spring)
-        assertEquals(springAnimationWithoutFinalPosition.spring.finalPosition, 100f)
-        assertEquals(springAnimationWithoutFinalPosition.spring.dampingRatio,
-            SpringForce.DAMPING_RATIO_HIGH_BOUNCY)
-        assertEquals(springAnimationWithoutFinalPosition.spring.stiffness,
-            SpringForce.STIFFNESS_HIGH)
-        val springAnimationWithFinalPosition = animObject
-            .springAnimationOf(floatPropertyCompat, 120f)
-            .withSpringForceProperties {
-                dampingRatio = SpringForce.DAMPING_RATIO_LOW_BOUNCY
-                stiffness = SpringForce.STIFFNESS_LOW
-            }
-        assertNotNull(springAnimationWithFinalPosition.spring)
-        assertEquals(springAnimationWithFinalPosition.spring.finalPosition, 120f)
-        assertEquals(springAnimationWithFinalPosition.spring.dampingRatio,
-            SpringForce.DAMPING_RATIO_LOW_BOUNCY)
-        assertEquals(springAnimationWithFinalPosition.spring.stiffness,
-            SpringForce.STIFFNESS_LOW)
-    }
-}
\ No newline at end of file
diff --git a/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/tests/AnimationActivity.java b/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/tests/AnimationActivity.java
new file mode 100644
index 0000000..5e0dd54
--- /dev/null
+++ b/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/tests/AnimationActivity.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dynamicanimation.tests;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.dynamicanimation.ktx.test.R;
+
+public class AnimationActivity extends Activity {
+    @Override
+    public void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+        setContentView(R.layout.anim_layout);
+    }
+}
diff --git a/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/tests/DynamicAnimationTest.kt b/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/tests/DynamicAnimationTest.kt
new file mode 100644
index 0000000..8cdf5ea
--- /dev/null
+++ b/dynamic-animation/ktx/src/androidTest/java/androidx/dynamicanimation/tests/DynamicAnimationTest.kt
@@ -0,0 +1,138 @@
+/*
+ * 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.dynamicanimation.tests
+
+import android.view.View
+
+import androidx.dynamicanimation.animation.DynamicAnimation
+import androidx.dynamicanimation.animation.SpringForce
+import androidx.dynamicanimation.animation.flingAnimationOf
+import androidx.dynamicanimation.animation.springAnimationOf
+import androidx.dynamicanimation.animation.withSpringForceProperties
+import androidx.dynamicanimation.ktx.test.R
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.rule.ActivityTestRule
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.timeout
+import org.mockito.Mockito.verify
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class DynamicAnimationTest {
+
+    @get:Rule val activityTestRule = ActivityTestRule<AnimationActivity>(
+        AnimationActivity::class.java)
+
+    private lateinit var view: View
+
+    @Before fun setup() {
+        view = activityTestRule.getActivity().findViewById(R.id.anim_view)
+    }
+
+    /**
+     * Test extension for creating [FlingAnimation]
+     */
+    @Test fun testCreateFlingAnimation() {
+        val flingAnimation = flingAnimationOf(view::setAlpha, view::getAlpha)
+        assertNotNull(flingAnimation)
+        assertTrue(flingAnimation.friction == 1f)
+        flingAnimation.friction = 1.5f
+        assertTrue(flingAnimation.friction == 1.5f)
+    }
+
+    /**
+     * Test extension for creating [SpringAnimation]
+     */
+    @Test fun testCreateSpringAnimation() {
+        val springAnimationWithoutFinalPosition =
+            springAnimationOf(view::setScaleX, view::getScaleX)
+        assertNotNull(springAnimationWithoutFinalPosition)
+        assertNull(springAnimationWithoutFinalPosition.spring)
+        val springAnimationWithFinalPosition =
+            springAnimationOf(view::setScaleX, view::getScaleX, 100f)
+        assertNotNull(springAnimationWithFinalPosition)
+        assertNotNull(springAnimationWithFinalPosition.spring)
+        assertEquals(springAnimationWithFinalPosition.spring.finalPosition, 100f)
+
+        val listener: DynamicAnimation.OnAnimationEndListener = mock(
+                DynamicAnimation.OnAnimationEndListener::class.java)
+        springAnimationWithFinalPosition.addEndListener(listener)
+        InstrumentationRegistry.getInstrumentation().runOnMainSync({
+                springAnimationWithFinalPosition.setStartValue(0f).start()
+        })
+        assertTrue(springAnimationWithFinalPosition.isRunning())
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync({
+                springAnimationWithFinalPosition.skipToEnd()
+        })
+
+        verify(listener, timeout(2000)).onAnimationEnd(springAnimationWithFinalPosition, false,
+            100f, 0f)
+
+        assertEquals(100f, view.getScaleX())
+    }
+
+    /**
+     * Test extension for setting up [SpringForce]
+     */
+    @Test fun testSpringForce() {
+        val springAnimationWithoutFinalPosition = springAnimationOf(
+            view::setTranslationX, view::getTranslationX)
+            .withSpringForceProperties {
+                finalPosition = 100f
+                dampingRatio = SpringForce.DAMPING_RATIO_HIGH_BOUNCY
+                stiffness = SpringForce.STIFFNESS_HIGH
+            }
+        assertNotNull(springAnimationWithoutFinalPosition.spring)
+        assertEquals(springAnimationWithoutFinalPosition.spring.finalPosition, 100f)
+        assertEquals(
+            springAnimationWithoutFinalPosition.spring.dampingRatio,
+            SpringForce.DAMPING_RATIO_HIGH_BOUNCY
+        )
+        assertEquals(
+            springAnimationWithoutFinalPosition.spring.stiffness,
+            SpringForce.STIFFNESS_HIGH
+        )
+        val springAnimationWithFinalPosition = springAnimationOf(
+            view::setTranslationX, view::getTranslationX, 120f)
+            .withSpringForceProperties {
+                dampingRatio = SpringForce.DAMPING_RATIO_LOW_BOUNCY
+                stiffness = SpringForce.STIFFNESS_LOW
+            }
+        assertNotNull(springAnimationWithFinalPosition.spring)
+        assertEquals(springAnimationWithFinalPosition.spring.finalPosition, 120f)
+        assertEquals(
+            springAnimationWithFinalPosition.spring.dampingRatio,
+            SpringForce.DAMPING_RATIO_LOW_BOUNCY
+        )
+        assertEquals(
+            springAnimationWithFinalPosition.spring.stiffness,
+            SpringForce.STIFFNESS_LOW
+        )
+    }
+}
diff --git a/dynamic-animation/ktx/src/androidTest/res/layout/anim_layout.xml b/dynamic-animation/ktx/src/androidTest/res/layout/anim_layout.xml
new file mode 100644
index 0000000..5db7936
--- /dev/null
+++ b/dynamic-animation/ktx/src/androidTest/res/layout/anim_layout.xml
@@ -0,0 +1,32 @@
+<?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.
+-->
+
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <View
+        android:id="@+id/anim_view"
+        android:layout_width="100dp"
+        android:layout_height="100dp"/>
+
+    <View
+        android:id="@+id/anim_another_view"
+        android:layout_width="100dp"
+        android:layout_height="100dp"/>
+
+</FrameLayout>
diff --git a/dynamic-animation/ktx/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.kt b/dynamic-animation/ktx/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.kt
index bf0eaef..068b162 100644
--- a/dynamic-animation/ktx/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.kt
+++ b/dynamic-animation/ktx/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.kt
@@ -17,32 +17,39 @@
 package androidx.dynamicanimation.animation
 
 /**
- * Creates [FlingAnimation] for object.
+ * Creates [FlingAnimation] for a property that can be accessed via the provided setter and getter.
+ * For example, the following sample code creates a [FlingAnimation] for the alpha property of a
+ * [View] object named `view`:
+ * `flingAnimationOf(view::setAlpha, view::getAlpha)`
  *
- * @param property object's property to be animated.
+ * @param setter The function that mutates the property being animated
+ * @param getter The function that returns the value of the property
  * @return [FlingAnimation]
  */
-inline fun <K> K.flingAnimationOf(property: FloatPropertyCompat<K>): FlingAnimation {
-    return FlingAnimation(this, property)
+fun flingAnimationOf(setter: (Float) -> Unit, getter: () -> Float): FlingAnimation {
+    return FlingAnimation(createFloatValueHolder(setter, getter))
 }
 
 /**
- * Creates [SpringAnimation] for object.
+ * Creates [SpringAnimation] for a property that can be accessed via the provided setter and getter.
  * If finalPosition is not [Float.NaN] then create [SpringAnimation] with
  * [SpringForce.mFinalPosition].
  *
- * @param property object's property to be animated.
+ * @param setter The function that mutates the property being animated
+ * @param getter The function that returns the value of the property
  * @param finalPosition [SpringForce.mFinalPosition] Final position of spring.
  * @return [SpringAnimation]
  */
-inline fun <K> K.springAnimationOf(
-    property: FloatPropertyCompat<K>,
+fun springAnimationOf(
+    setter: (Float) -> Unit,
+    getter: () -> Float,
     finalPosition: Float = Float.NaN
 ): SpringAnimation {
+    val valueHolder = createFloatValueHolder(setter, getter)
     return if (finalPosition.isNaN()) {
-        SpringAnimation(this, property)
+        SpringAnimation(valueHolder)
     } else {
-        SpringAnimation(this, property, finalPosition)
+        SpringAnimation(valueHolder, finalPosition)
     }
 }
 
@@ -64,4 +71,16 @@
     }
     spring.func()
     return this
+}
+
+private fun createFloatValueHolder(setter: (Float) -> Unit, getter: () -> Float): FloatValueHolder {
+    return object : FloatValueHolder() {
+        override fun getValue(): Float {
+            return getter.invoke()
+        }
+
+        override fun setValue(value: Float) {
+            setter.invoke(value)
+        }
+    }
 }
\ No newline at end of file
diff --git a/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/FloatValueHolder.java b/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/FloatValueHolder.java
index e85905d..bd25f7b 100644
--- a/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/FloatValueHolder.java
+++ b/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/FloatValueHolder.java
@@ -36,7 +36,7 @@
  * @see FlingAnimation#FlingAnimation(FloatValueHolder)
  */
 
-public final class FloatValueHolder {
+public class FloatValueHolder {
     private float mValue = 0.0f;
 
     /**
diff --git a/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/SpringAnimation.java b/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/SpringAnimation.java
index 0ff9ce0..2b75cc6 100644
--- a/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/SpringAnimation.java
+++ b/dynamic-animation/src/main/java/androidx/dynamicanimation/animation/SpringAnimation.java
@@ -79,6 +79,27 @@
     }
 
     /**
+     * <p>This creates a SpringAnimation that animates a {@link FloatValueHolder} instance. During
+     * the animation, the {@link FloatValueHolder} instance will be updated via
+     * {@link FloatValueHolder#setValue(float)} each frame. The caller can obtain the up-to-date
+     * animation value via {@link FloatValueHolder#getValue()}.
+     *
+     * A Spring will be created with the given final position and default stiffness and damping
+     * ratio. This spring can be accessed and reconfigured through {@link #setSpring(SpringForce)}.
+     *
+     * <p><strong>Note:</strong> changing the value in the {@link FloatValueHolder} via
+     * {@link FloatValueHolder#setValue(float)} outside of the animation during an
+     * animation run will not have any effect on the on-going animation.
+     *
+     * @param floatValueHolder the property to be animated
+     * @param finalPosition the final position of the spring to be created.
+     */
+    public SpringAnimation(FloatValueHolder floatValueHolder, float finalPosition) {
+        super(floatValueHolder);
+        mSpring = new SpringForce(finalPosition);
+    }
+
+    /**
      * This creates a SpringAnimation that animates the property of the given object.
      * Note, a spring will need to setup through {@link #setSpring(SpringForce)} before
      * the animation starts.
diff --git a/enterprise/feedback/build.gradle b/enterprise/feedback/build.gradle
index 01318c7..aa8ad4c 100644
--- a/enterprise/feedback/build.gradle
+++ b/enterprise/feedback/build.gradle
@@ -6,8 +6,8 @@
     id("SupportAndroidLibraryPlugin")
 }
 dependencies {
-    api("androidx.core:core:1.0.0")
-    implementation(AUTO_VALUE_ANNOTATIONS)
+    api("androidx.annotation:annotation:1.0.1")
+    api(AUTO_VALUE_ANNOTATIONS)
     annotationProcessor(AUTO_VALUE)
     testImplementation(TEST_CORE)
     testImplementation(JUNIT)
diff --git a/enterprise/feedback/src/main/java/androidx/enterprise/feedback/BufferedServiceConnection.java b/enterprise/feedback/src/main/java/androidx/enterprise/feedback/BufferedServiceConnection.java
index fb3a361..6b657a0 100644
--- a/enterprise/feedback/src/main/java/androidx/enterprise/feedback/BufferedServiceConnection.java
+++ b/enterprise/feedback/src/main/java/androidx/enterprise/feedback/BufferedServiceConnection.java
@@ -18,7 +18,6 @@
 
 import static androidx.enterprise.feedback.KeyedAppStatesReporter.canPackageReceiveAppStates;
 
-import android.annotation.SuppressLint;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -96,8 +95,6 @@
      *
      * <p>This can only be called once per instance.
      */
-    @SuppressLint("UntrackedBindService")
-    // Not dependent on GMS
     void bindService() {
         if (mHasBound) {
             throw new IllegalStateException(
diff --git a/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesReporter.java b/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesReporter.java
index 2a40b1c..0fb7aa5 100644
--- a/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesReporter.java
+++ b/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesReporter.java
@@ -374,7 +374,7 @@
     private static Message createStateMessage(Bundle appStatesBundle, boolean immediate) {
         Message message = Message.obtain();
         message.what = immediate ? WHAT_IMMEDIATE_STATE : WHAT_STATE;
-        message.setData(appStatesBundle);
+        message.obj = appStatesBundle;
         return message;
     }
 }
diff --git a/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesService.java b/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesService.java
index 52d8151..e10a5aa 100644
--- a/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesService.java
+++ b/enterprise/feedback/src/main/java/androidx/enterprise/feedback/KeyedAppStatesService.java
@@ -135,7 +135,14 @@
 
         private static Collection<ReceivedKeyedAppState> extractReceivedKeyedAppStates(
                 Message message, String packageName, long timestamp) {
-            Bundle bundle = message.getData();
+            Bundle bundle;
+
+            try {
+                bundle = (Bundle) message.obj;
+            } catch (ClassCastException e) {
+                Log.e(LOG_TAG, "Could not extract state bundles from message");
+                return Collections.emptyList();
+            }
 
             if (bundle == null) {
                 Log.e(LOG_TAG, "Could not extract state bundles from message");
@@ -158,7 +165,7 @@
                 states.add(ReceivedKeyedAppState.fromBundle(stateBundle, packageName, timestamp));
             }
 
-            return states;
+            return Collections.unmodifiableCollection(states);
         }
 
         private static Collection<ReceivedKeyedAppState> deduplicateStates(
diff --git a/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesReporterTest.java b/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesReporterTest.java
index 56a8441..d094c16 100644
--- a/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesReporterTest.java
+++ b/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesReporterTest.java
@@ -148,7 +148,7 @@
         reporter.set(singletonList(mState));
 
         Bundle appStatesBundle = buildStatesBundle(singleton(mState));
-        assertAppStateBundlesEqual(appStatesBundle, mTestHandler.latestMessage().getData());
+        assertAppStateBundlesEqual(appStatesBundle, (Bundle) mTestHandler.latestMessage().obj);
     }
 
     private static Bundle buildStatesBundle(Collection<KeyedAppState> keyedAppStates) {
diff --git a/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesServiceTest.java b/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesServiceTest.java
index bfe4dba..d0043dd 100644
--- a/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesServiceTest.java
+++ b/enterprise/feedback/src/test/java/androidx/enterprise/feedback/KeyedAppStatesServiceTest.java
@@ -240,9 +240,9 @@
 
     @Test
     @SmallTest
-    public void send_messageWithNullData_doesNotCallback() throws RemoteException {
+    public void send_messageWithIncorrectObj_doesNotCallback() throws RemoteException {
         Message message = createStateMessage(null);
-        message.setData(null);
+        message.obj = "";
 
         mMessenger.send(message);
 
@@ -325,7 +325,7 @@
     private static Message createStateMessage(Bundle appStatesBundle, boolean immediate) {
         Message message = Message.obtain();
         message.what = immediate ? WHAT_IMMEDIATE_STATE : WHAT_STATE;
-        message.setData(appStatesBundle);
+        message.obj = appStatesBundle;
         return message;
     }
 
diff --git a/exifinterface/api/1.1.0-alpha01.txt b/exifinterface/api/1.1.0-alpha01.txt
index 75772d7..b714925 100644
--- a/exifinterface/api/1.1.0-alpha01.txt
+++ b/exifinterface/api/1.1.0-alpha01.txt
@@ -10,8 +10,10 @@
     method public void flipVertically();
     method public double getAltitude(double);
     method public String? getAttribute(String);
+    method public byte[]? getAttributeBytes(String);
     method public double getAttributeDouble(String, double);
     method public int getAttributeInt(String, int);
+    method public long[]? getAttributeRange(String);
     method @Deprecated public boolean getLatLong(float[]!);
     method public double[]? getLatLong();
     method public int getRotationDegrees();
@@ -19,6 +21,7 @@
     method public android.graphics.Bitmap? getThumbnailBitmap();
     method public byte[]? getThumbnailBytes();
     method public long[]? getThumbnailRange();
+    method public boolean hasAttribute(String);
     method public boolean hasThumbnail();
     method public boolean isFlipped();
     method public boolean isThumbnailCompressed();
diff --git a/exifinterface/api/1.1.0-alpha02.txt b/exifinterface/api/1.1.0-alpha02.txt
new file mode 100644
index 0000000..b714925
--- /dev/null
+++ b/exifinterface/api/1.1.0-alpha02.txt
@@ -0,0 +1,339 @@
+// Signature format: 3.0
+package androidx.exifinterface.media {
+
+  public class ExifInterface {
+    ctor public ExifInterface(java.io.File) throws java.io.IOException;
+    ctor public ExifInterface(String) throws java.io.IOException;
+    ctor public ExifInterface(java.io.FileDescriptor) 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 String? getAttribute(String);
+    method public byte[]? getAttributeBytes(String);
+    method public double getAttributeDouble(String, double);
+    method public int getAttributeInt(String, int);
+    method public long[]? getAttributeRange(String);
+    method @Deprecated public 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 hasAttribute(String);
+    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(String, 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 String GPS_DIRECTION_MAGNETIC = "M";
+    field public static final String GPS_DIRECTION_TRUE = "T";
+    field public static final String GPS_DISTANCE_KILOMETERS = "K";
+    field public static final String GPS_DISTANCE_MILES = "M";
+    field public static final String GPS_DISTANCE_NAUTICAL_MILES = "N";
+    field public static final String GPS_MEASUREMENT_2D = "2";
+    field public static final String GPS_MEASUREMENT_3D = "3";
+    field public static final short GPS_MEASUREMENT_DIFFERENTIAL_CORRECTED = 1; // 0x1
+    field public static final String GPS_MEASUREMENT_INTERRUPTED = "V";
+    field public static final String GPS_MEASUREMENT_IN_PROGRESS = "A";
+    field public static final short GPS_MEASUREMENT_NO_DIFFERENTIAL = 0; // 0x0
+    field public static final String GPS_SPEED_KILOMETERS_PER_HOUR = "K";
+    field public static final String GPS_SPEED_KNOTS = "N";
+    field public static final String GPS_SPEED_MILES_PER_HOUR = "M";
+    field public static final String LATITUDE_NORTH = "N";
+    field public static final 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 String LONGITUDE_EAST = "E";
+    field public static final 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 String TAG_APERTURE_VALUE = "ApertureValue";
+    field public static final String TAG_ARTIST = "Artist";
+    field public static final String TAG_BITS_PER_SAMPLE = "BitsPerSample";
+    field public static final String TAG_BODY_SERIAL_NUMBER = "BodySerialNumber";
+    field public static final String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
+    field @Deprecated public static final String TAG_CAMARA_OWNER_NAME = "CameraOwnerName";
+    field public static final String TAG_CAMERA_OWNER_NAME = "CameraOwnerName";
+    field public static final String TAG_CFA_PATTERN = "CFAPattern";
+    field public static final String TAG_COLOR_SPACE = "ColorSpace";
+    field public static final String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
+    field public static final String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
+    field public static final String TAG_COMPRESSION = "Compression";
+    field public static final String TAG_CONTRAST = "Contrast";
+    field public static final String TAG_COPYRIGHT = "Copyright";
+    field public static final String TAG_CUSTOM_RENDERED = "CustomRendered";
+    field public static final String TAG_DATETIME = "DateTime";
+    field public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
+    field public static final String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
+    field public static final String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
+    field public static final String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
+    field public static final String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
+    field public static final String TAG_DNG_VERSION = "DNGVersion";
+    field public static final String TAG_EXIF_VERSION = "ExifVersion";
+    field public static final String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
+    field public static final String TAG_EXPOSURE_INDEX = "ExposureIndex";
+    field public static final String TAG_EXPOSURE_MODE = "ExposureMode";
+    field public static final String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
+    field public static final String TAG_EXPOSURE_TIME = "ExposureTime";
+    field public static final String TAG_FILE_SOURCE = "FileSource";
+    field public static final String TAG_FLASH = "Flash";
+    field public static final String TAG_FLASHPIX_VERSION = "FlashpixVersion";
+    field public static final String TAG_FLASH_ENERGY = "FlashEnergy";
+    field public static final String TAG_FOCAL_LENGTH = "FocalLength";
+    field public static final String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
+    field public static final String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
+    field public static final String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
+    field public static final String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
+    field public static final String TAG_F_NUMBER = "FNumber";
+    field public static final String TAG_GAIN_CONTROL = "GainControl";
+    field public static final String TAG_GAMMA = "Gamma";
+    field public static final String TAG_GPS_ALTITUDE = "GPSAltitude";
+    field public static final String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
+    field public static final String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
+    field public static final String TAG_GPS_DATESTAMP = "GPSDateStamp";
+    field public static final String TAG_GPS_DEST_BEARING = "GPSDestBearing";
+    field public static final String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
+    field public static final String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
+    field public static final String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
+    field public static final String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
+    field public static final String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
+    field public static final String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
+    field public static final String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
+    field public static final String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
+    field public static final String TAG_GPS_DOP = "GPSDOP";
+    field public static final String TAG_GPS_H_POSITIONING_ERROR = "GPSHPositioningError";
+    field public static final String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
+    field public static final String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
+    field public static final String TAG_GPS_LATITUDE = "GPSLatitude";
+    field public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
+    field public static final String TAG_GPS_LONGITUDE = "GPSLongitude";
+    field public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
+    field public static final String TAG_GPS_MAP_DATUM = "GPSMapDatum";
+    field public static final String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
+    field public static final String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
+    field public static final String TAG_GPS_SATELLITES = "GPSSatellites";
+    field public static final String TAG_GPS_SPEED = "GPSSpeed";
+    field public static final String TAG_GPS_SPEED_REF = "GPSSpeedRef";
+    field public static final String TAG_GPS_STATUS = "GPSStatus";
+    field public static final String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
+    field public static final String TAG_GPS_TRACK = "GPSTrack";
+    field public static final String TAG_GPS_TRACK_REF = "GPSTrackRef";
+    field public static final String TAG_GPS_VERSION_ID = "GPSVersionID";
+    field public static final String TAG_IMAGE_DESCRIPTION = "ImageDescription";
+    field public static final String TAG_IMAGE_LENGTH = "ImageLength";
+    field public static final String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
+    field public static final String TAG_IMAGE_WIDTH = "ImageWidth";
+    field public static final String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
+    field public static final String TAG_ISO_SPEED = "ISOSpeed";
+    field public static final String TAG_ISO_SPEED_LATITUDE_YYY = "ISOSpeedLatitudeyyy";
+    field public static final String TAG_ISO_SPEED_LATITUDE_ZZZ = "ISOSpeedLatitudezzz";
+    field @Deprecated public static final String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
+    field public static final String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
+    field public static final String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
+    field public static final String TAG_LENS_MAKE = "LensMake";
+    field public static final String TAG_LENS_MODEL = "LensModel";
+    field public static final String TAG_LENS_SERIAL_NUMBER = "LensSerialNumber";
+    field public static final String TAG_LENS_SPECIFICATION = "LensSpecification";
+    field public static final String TAG_LIGHT_SOURCE = "LightSource";
+    field public static final String TAG_MAKE = "Make";
+    field public static final String TAG_MAKER_NOTE = "MakerNote";
+    field public static final String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
+    field public static final String TAG_METERING_MODE = "MeteringMode";
+    field public static final String TAG_MODEL = "Model";
+    field public static final String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
+    field public static final String TAG_OECF = "OECF";
+    field public static final String TAG_ORF_ASPECT_FRAME = "AspectFrame";
+    field public static final String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
+    field public static final String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
+    field public static final String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
+    field public static final String TAG_ORIENTATION = "Orientation";
+    field public static final String TAG_PHOTOGRAPHIC_SENSITIVITY = "PhotographicSensitivity";
+    field public static final String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
+    field public static final String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
+    field public static final String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
+    field public static final String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
+    field public static final String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
+    field public static final String TAG_RECOMMENDED_EXPOSURE_INDEX = "RecommendedExposureIndex";
+    field public static final String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
+    field public static final String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
+    field public static final String TAG_RESOLUTION_UNIT = "ResolutionUnit";
+    field public static final String TAG_ROWS_PER_STRIP = "RowsPerStrip";
+    field public static final String TAG_RW2_ISO = "ISO";
+    field public static final String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+    field public static final String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
+    field public static final String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
+    field public static final String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
+    field public static final String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
+    field public static final String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
+    field public static final String TAG_SATURATION = "Saturation";
+    field public static final String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
+    field public static final String TAG_SCENE_TYPE = "SceneType";
+    field public static final String TAG_SENSING_METHOD = "SensingMethod";
+    field public static final String TAG_SENSITIVITY_TYPE = "SensitivityType";
+    field public static final String TAG_SHARPNESS = "Sharpness";
+    field public static final String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
+    field public static final String TAG_SOFTWARE = "Software";
+    field public static final String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
+    field public static final String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
+    field public static final String TAG_STANDARD_OUTPUT_SENSITIVITY = "StandardOutputSensitivity";
+    field public static final String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
+    field public static final String TAG_STRIP_OFFSETS = "StripOffsets";
+    field public static final String TAG_SUBFILE_TYPE = "SubfileType";
+    field public static final String TAG_SUBJECT_AREA = "SubjectArea";
+    field public static final String TAG_SUBJECT_DISTANCE = "SubjectDistance";
+    field public static final String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
+    field public static final String TAG_SUBJECT_LOCATION = "SubjectLocation";
+    field public static final String TAG_SUBSEC_TIME = "SubSecTime";
+    field public static final String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
+    field public static final String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
+    field public static final String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
+    field public static final String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
+    field public static final String TAG_TRANSFER_FUNCTION = "TransferFunction";
+    field public static final String TAG_USER_COMMENT = "UserComment";
+    field public static final String TAG_WHITE_BALANCE = "WhiteBalance";
+    field public static final String TAG_WHITE_POINT = "WhitePoint";
+    field public static final String TAG_X_RESOLUTION = "XResolution";
+    field public static final String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
+    field public static final String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
+    field public static final String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
+    field public static final String TAG_Y_RESOLUTION = "YResolution";
+    field @Deprecated public static final int WHITEBALANCE_AUTO = 0; // 0x0
+    field @Deprecated public static final 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/exifinterface/api/current.txt b/exifinterface/api/current.txt
index 75772d7..b714925 100644
--- a/exifinterface/api/current.txt
+++ b/exifinterface/api/current.txt
@@ -10,8 +10,10 @@
     method public void flipVertically();
     method public double getAltitude(double);
     method public String? getAttribute(String);
+    method public byte[]? getAttributeBytes(String);
     method public double getAttributeDouble(String, double);
     method public int getAttributeInt(String, int);
+    method public long[]? getAttributeRange(String);
     method @Deprecated public boolean getLatLong(float[]!);
     method public double[]? getLatLong();
     method public int getRotationDegrees();
@@ -19,6 +21,7 @@
     method public android.graphics.Bitmap? getThumbnailBitmap();
     method public byte[]? getThumbnailBytes();
     method public long[]? getThumbnailRange();
+    method public boolean hasAttribute(String);
     method public boolean hasThumbnail();
     method public boolean isFlipped();
     method public boolean isThumbnailCompressed();
diff --git a/exifinterface/api/res-1.1.0-alpha02.txt b/exifinterface/api/res-1.1.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/exifinterface/api/res-1.1.0-alpha02.txt
diff --git a/exifinterface/api/restricted_1.1.0-alpha02.txt b/exifinterface/api/restricted_1.1.0-alpha02.txt
new file mode 100644
index 0000000..1cdbaf4
--- /dev/null
+++ b/exifinterface/api/restricted_1.1.0-alpha02.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.exifinterface.media {
+
+  public class ExifInterface {
+  }
+
+
+}
+
diff --git a/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java b/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java
index 906eebd..c962b03 100644
--- a/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java
+++ b/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java
@@ -19,8 +19,10 @@
 import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import android.content.res.TypedArray;
@@ -228,10 +230,15 @@
         public final boolean hasThumbnail;
         public final int thumbnailWidth;
         public final int thumbnailHeight;
+        public final boolean isThumbnailCompressed;
+        public final int thumbnailOffset;
+        public final int thumbnailLength;
 
         // GPS information.
         public final boolean hasLatLong;
         public final float latitude;
+        public final int latitudeOffset;
+        public final int latitudeLength;
         public final float longitude;
         public final float altitude;
 
@@ -267,39 +274,46 @@
         }
 
         ExpectedValue(TypedArray typedArray) {
+            int index = 0;
+
             // Reads thumbnail information.
-            hasThumbnail = typedArray.getBoolean(0, false);
-            thumbnailWidth = typedArray.getInt(1, 0);
-            thumbnailHeight = typedArray.getInt(2, 0);
+            hasThumbnail = typedArray.getBoolean(index++, false);
+            thumbnailOffset = typedArray.getInt(index++, -1);
+            thumbnailLength = typedArray.getInt(index++, -1);
+            thumbnailWidth = typedArray.getInt(index++, 0);
+            thumbnailHeight = typedArray.getInt(index++, 0);
+            isThumbnailCompressed = typedArray.getBoolean(index++, false);
 
             // Reads GPS information.
-            hasLatLong = typedArray.getBoolean(3, false);
-            latitude = typedArray.getFloat(4, 0f);
-            longitude = typedArray.getFloat(5, 0f);
-            altitude = typedArray.getFloat(6, 0f);
+            hasLatLong = typedArray.getBoolean(index++, false);
+            latitudeOffset = typedArray.getInt(index++, -1);
+            latitudeLength = typedArray.getInt(index++, -1);
+            latitude = typedArray.getFloat(index++, 0f);
+            longitude = typedArray.getFloat(index++, 0f);
+            altitude = typedArray.getFloat(index++, 0f);
 
             // Reads values.
-            make = getString(typedArray, 7);
-            model = getString(typedArray, 8);
-            aperture = typedArray.getFloat(9, 0f);
-            dateTimeOriginal = getString(typedArray, 10);
-            exposureTime = typedArray.getFloat(11, 0f);
-            flash = typedArray.getFloat(12, 0f);
-            focalLength = getString(typedArray, 13);
-            gpsAltitude = getString(typedArray, 14);
-            gpsAltitudeRef = getString(typedArray, 15);
-            gpsDatestamp = getString(typedArray, 16);
-            gpsLatitude = getString(typedArray, 17);
-            gpsLatitudeRef = getString(typedArray, 18);
-            gpsLongitude = getString(typedArray, 19);
-            gpsLongitudeRef = getString(typedArray, 20);
-            gpsProcessingMethod = getString(typedArray, 21);
-            gpsTimestamp = getString(typedArray, 22);
-            imageLength = typedArray.getInt(23, 0);
-            imageWidth = typedArray.getInt(24, 0);
-            iso = getString(typedArray, 25);
-            orientation = typedArray.getInt(26, 0);
-            whiteBalance = typedArray.getInt(27, 0);
+            make = getString(typedArray, index++);
+            model = getString(typedArray, index++);
+            aperture = typedArray.getFloat(index++, 0f);
+            dateTimeOriginal = getString(typedArray, index++);
+            exposureTime = typedArray.getFloat(index++, 0f);
+            flash = typedArray.getFloat(index++, 0f);
+            focalLength = getString(typedArray, index++);
+            gpsAltitude = getString(typedArray, index++);
+            gpsAltitudeRef = getString(typedArray, index++);
+            gpsDatestamp = getString(typedArray, index++);
+            gpsLatitude = getString(typedArray, index++);
+            gpsLatitudeRef = getString(typedArray, index++);
+            gpsLongitude = getString(typedArray, index++);
+            gpsLongitudeRef = getString(typedArray, index++);
+            gpsProcessingMethod = getString(typedArray, index++);
+            gpsTimestamp = getString(typedArray, index++);
+            imageLength = typedArray.getInt(index++, 0);
+            imageWidth = typedArray.getInt(index++, 0);
+            iso = getString(typedArray, index++);
+            orientation = typedArray.getInt(index++, 0);
+            whiteBalance = typedArray.getInt(index++, 0);
 
             typedArray.recycle();
         }
@@ -719,19 +733,26 @@
     }
 
     private void compareWithExpectedValue(ExifInterface exifInterface,
-            ExpectedValue expectedValue, String verboseTag) {
+            ExpectedValue expectedValue, String verboseTag, boolean assertRanges) {
         if (VERBOSE) {
             printExifTagsAndValues(verboseTag, exifInterface);
         }
         // Checks a thumbnail image.
         assertEquals(expectedValue.hasThumbnail, exifInterface.hasThumbnail());
         if (expectedValue.hasThumbnail) {
+            if (assertRanges) {
+                final long[] thumbnailRange = exifInterface.getThumbnailRange();
+                assertEquals(expectedValue.thumbnailOffset, thumbnailRange[0]);
+                assertEquals(expectedValue.thumbnailLength, thumbnailRange[1]);
+            }
             byte[] thumbnailBytes = exifInterface.getThumbnailBytes();
             assertNotNull(thumbnailBytes);
             Bitmap thumbnailBitmap = exifInterface.getThumbnailBitmap();
             assertNotNull(thumbnailBitmap);
             assertEquals(expectedValue.thumbnailWidth, thumbnailBitmap.getWidth());
             assertEquals(expectedValue.thumbnailHeight, thumbnailBitmap.getHeight());
+            assertEquals(expectedValue.isThumbnailCompressed,
+                    exifInterface.isThumbnailCompressed());
         } else {
             assertNull(exifInterface.getThumbnail());
         }
@@ -740,8 +761,19 @@
         double[] latLong = exifInterface.getLatLong();
         assertEquals(expectedValue.hasLatLong, latLong != null);
         if (expectedValue.hasLatLong) {
+            if (assertRanges) {
+                final long[] latitudeRange = exifInterface
+                        .getAttributeRange(ExifInterface.TAG_GPS_LATITUDE);
+                assertEquals(expectedValue.latitudeOffset, latitudeRange[0]);
+                assertEquals(expectedValue.latitudeLength, latitudeRange[1]);
+            }
             assertEquals(expectedValue.latitude, latLong[0], DIFFERENCE_TOLERANCE);
             assertEquals(expectedValue.longitude, latLong[1], DIFFERENCE_TOLERANCE);
+            assertTrue(exifInterface.hasAttribute(ExifInterface.TAG_GPS_LATITUDE));
+            assertTrue(exifInterface.hasAttribute(ExifInterface.TAG_GPS_LONGITUDE));
+        } else {
+            assertFalse(exifInterface.hasAttribute(ExifInterface.TAG_GPS_LATITUDE));
+            assertFalse(exifInterface.hasAttribute(ExifInterface.TAG_GPS_LONGITUDE));
         }
         assertEquals(expectedValue.altitude, exifInterface.getAltitude(.0), DIFFERENCE_TOLERANCE);
 
@@ -783,20 +815,20 @@
         // Creates via file.
         ExifInterface exifInterface = new ExifInterface(imageFile);
         assertNotNull(exifInterface);
-        compareWithExpectedValue(exifInterface, expectedValue, verboseTag);
+        compareWithExpectedValue(exifInterface, expectedValue, verboseTag, true);
 
 
         // Creates via path.
         exifInterface = new ExifInterface(imageFile.getAbsolutePath());
         assertNotNull(exifInterface);
-        compareWithExpectedValue(exifInterface, expectedValue, verboseTag);
+        compareWithExpectedValue(exifInterface, expectedValue, verboseTag, true);
 
         InputStream in = null;
         // Creates via InputStream.
         try {
             in = new BufferedInputStream(new FileInputStream(imageFile.getAbsolutePath()));
             exifInterface = new ExifInterface(in);
-            compareWithExpectedValue(exifInterface, expectedValue, verboseTag);
+            compareWithExpectedValue(exifInterface, expectedValue, verboseTag, true);
         } finally {
             closeQuietly(in);
         }
@@ -808,7 +840,7 @@
                 fd = Os.open(imageFile.getAbsolutePath(), OsConstants.O_RDONLY,
                         OsConstants.S_IRWXU);
                 exifInterface = new ExifInterface(fd);
-                compareWithExpectedValue(exifInterface, expectedValue, verboseTag);
+                compareWithExpectedValue(exifInterface, expectedValue, verboseTag, true);
             } catch (Exception e) {
                 throw new IOException("Failed to open file descriptor", e);
             } finally {
@@ -825,7 +857,7 @@
         ExifInterface exifInterface = new ExifInterface(imageFile.getAbsolutePath());
         exifInterface.saveAttributes();
         exifInterface = new ExifInterface(imageFile.getAbsolutePath());
-        compareWithExpectedValue(exifInterface, expectedValue, verboseTag);
+        compareWithExpectedValue(exifInterface, expectedValue, verboseTag, false);
 
         // Test for modifying one attribute.
         String backupValue = exifInterface.getAttribute(ExifInterface.TAG_MAKE);
@@ -837,7 +869,7 @@
         exifInterface.setAttribute(ExifInterface.TAG_MAKE, backupValue);
         exifInterface.saveAttributes();
         exifInterface = new ExifInterface(imageFile.getAbsolutePath());
-        compareWithExpectedValue(exifInterface, expectedValue, verboseTag);
+        compareWithExpectedValue(exifInterface, expectedValue, verboseTag, false);
     }
 
     private void testExifInterfaceForJpeg(String fileName, int typedArrayResourceId)
diff --git a/exifinterface/src/androidTest/res/values/arrays.xml b/exifinterface/src/androidTest/res/values/arrays.xml
index d7b645a..da34c1a 100644
--- a/exifinterface/src/androidTest/res/values/arrays.xml
+++ b/exifinterface/src/androidTest/res/values/arrays.xml
@@ -17,9 +17,14 @@
 <resources>
     <array name="exifbyteorderii_jpg">
         <item>true</item>
+        <item>3500</item>
+        <item>6265</item>
         <item>512</item>
         <item>288</item>
+        <item>true</item>
         <item>false</item>
+        <item>0</item>
+        <item>0</item>
         <item>0.0</item>
         <item>0.0</item>
         <item>0.0</item>
@@ -49,7 +54,12 @@
         <item>false</item>
         <item>0</item>
         <item>0</item>
+        <item>0</item>
+        <item>0</item>
+        <item>false</item>
         <item>true</item>
+        <item>572</item>
+        <item>24</item>
         <item>0.0</item>
         <item>0.0</item>
         <item>0.0</item>
@@ -77,9 +87,14 @@
     </array>
     <array name="lg_g4_iso_800_dng">
         <item>true</item>
+        <item>0</item>
+        <item>15179</item>
         <item>256</item>
         <item>144</item>
         <item>true</item>
+        <item>true</item>
+        <item>12486</item>
+        <item>24</item>
         <item>53.834507</item>
         <item>10.69585</item>
         <item>0.0</item>
diff --git a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
index c8bdf798..7fb7f25 100644
--- a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
+++ b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
@@ -2962,14 +2962,23 @@
 
     // A class for indicating EXIF attribute.
     private static class ExifAttribute {
+        public static final long BYTES_OFFSET_UNKNOWN = -1;
+
         public final int format;
         public final int numberOfComponents;
+        public final long bytesOffset;
         public final byte[] bytes;
 
         @SuppressWarnings("WeakerAccess") /* synthetic access */
         ExifAttribute(int format, int numberOfComponents, byte[] bytes) {
+            this(format, numberOfComponents, BYTES_OFFSET_UNKNOWN, bytes);
+        }
+
+        @SuppressWarnings("WeakerAccess") /* synthetic access */
+        ExifAttribute(int format, int numberOfComponents, long bytesOffset, byte[] bytes) {
             this.format = format;
             this.numberOfComponents = numberOfComponents;
+            this.bytesOffset = bytesOffset;
             this.bytes = bytes;
         }
 
@@ -3733,6 +3742,7 @@
     private int mOrfThumbnailLength;
     private int mRw2JpgFromRawOffset;
     private boolean mIsSupportedFile;
+    private boolean mModified;
 
     // Pattern to check non zero timestamp
     private static final Pattern sNonZeroTimePattern = Pattern.compile(".*[1-9].*");
@@ -3754,6 +3764,9 @@
      * Reads Exif tags from the specified image file.
      */
     public ExifInterface(@NonNull String filename) throws IOException {
+        if (filename == null) {
+            throw new NullPointerException("filename cannot be null");
+        }
         initForFilename(filename);
     }
 
@@ -3823,6 +3836,9 @@
      */
     @Nullable
     private ExifAttribute getExifAttribute(@NonNull String tag) {
+        if (tag == null) {
+            throw new NullPointerException("tag shouldn't be null");
+        }
         if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
             if (DEBUG) {
                 Log.d(TAG, "getExifAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
@@ -3849,6 +3865,9 @@
      */
     @Nullable
     public String getAttribute(@NonNull String tag) {
+        if (tag == null) {
+            throw new NullPointerException("tag shouldn't be null");
+        }
         ExifAttribute attribute = getExifAttribute(tag);
         if (attribute != null) {
             if (!sTagSetForCompatibility.contains(tag)) {
@@ -3889,6 +3908,9 @@
      * @param defaultValue the value to return if the tag is not available.
      */
     public int getAttributeInt(@NonNull String tag, int defaultValue) {
+        if (tag == null) {
+            throw new NullPointerException("tag shouldn't be null");
+        }
         ExifAttribute exifAttribute = getExifAttribute(tag);
         if (exifAttribute == null) {
             return defaultValue;
@@ -3910,6 +3932,9 @@
      * @param defaultValue the value to return if the tag is not available.
      */
     public double getAttributeDouble(@NonNull String tag, double defaultValue) {
+        if (tag == null) {
+            throw new NullPointerException("tag shouldn't be null");
+        }
         ExifAttribute exifAttribute = getExifAttribute(tag);
         if (exifAttribute == null) {
             return defaultValue;
@@ -3929,6 +3954,9 @@
      * @param value the value of the tag.
      */
     public void setAttribute(@NonNull String tag, @Nullable String value) {
+        if (tag == null) {
+            throw new NullPointerException("tag shouldn't be null");
+        }
         if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
             if (DEBUG) {
                 Log.d(TAG, "setAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
@@ -4269,6 +4297,9 @@
      * determine whether the image data format is JPEG or not.
      */
     private void loadAttributes(@NonNull InputStream in) throws IOException {
+        if (in == null) {
+            throw new NullPointerException("inputstream shouldn't be null");
+        }
         try {
             // Initialize mAttributes.
             for (int i = 0; i < EXIF_TAGS.length; ++i) {
@@ -4370,6 +4401,11 @@
      * and make a single call rather than multiple calls for each attribute.
      * <p>
      * This method is only supported for JPEG files.
+     * <p class="note">
+     * Note: after calling this method, any attempts to obtain range information
+     * from {@link #getAttributeRange(String)} or {@link #getThumbnailRange()}
+     * will throw {@link IllegalStateException}, since the offsets may have
+     * changed in the newly written file.
      * </p>
      */
     public void saveAttributes() throws IOException {
@@ -4381,6 +4417,10 @@
                     "ExifInterface does not support saving attributes for the current input.");
         }
 
+        // Remember the fact that we've changed the file on disk from what was
+        // originally parsed, meaning we can't answer range questions
+        mModified = true;
+
         // Keep the thumbnail in memory
         mThumbnailBytes = getThumbnail();
 
@@ -4441,6 +4481,15 @@
     }
 
     /**
+     * Returns true if the image file has the given attribute defined.
+     *
+     * @param tag the name of the tag.
+     */
+    public boolean hasAttribute(@NonNull String tag) {
+        return getExifAttribute(tag) != null;
+    }
+
+    /**
      * Returns the JPEG compressed thumbnail inside the image file, or {@code null} if there is no
      * JPEG compressed thumbnail.
      * The returned data can be decoded using
@@ -4548,7 +4597,13 @@
      * not exist or thumbnail image is uncompressed.
      */
     public boolean isThumbnailCompressed() {
-        return mThumbnailCompression == DATA_JPEG || mThumbnailCompression == DATA_JPEG_COMPRESSED;
+        if (!mHasThumbnail) {
+            return false;
+        }
+        if (mThumbnailCompression == DATA_JPEG || mThumbnailCompression == DATA_JPEG_COMPRESSED) {
+            return true;
+        }
+        return false;
     }
 
     /**
@@ -4557,18 +4612,70 @@
      *
      * @return two-element array, the offset in the first value, and length in
      *         the second, or {@code null} if no thumbnail was found.
+     * @throws IllegalStateException if {@link #saveAttributes()} has been
+     *             called since the underlying file was initially parsed, since
+     *             that means offsets may have changed.
      */
     @Nullable
     public long[] getThumbnailRange() {
-        if (!mHasThumbnail) {
-            return null;
+        if (mModified) {
+            throw new IllegalStateException(
+                    "The underlying file has been modified since being parsed");
         }
 
-        long[] range = new long[2];
-        range[0] = mThumbnailOffset;
-        range[1] = mThumbnailLength;
+        if (mHasThumbnail) {
+            return new long[] { mThumbnailOffset, mThumbnailLength };
+        } else {
+            return null;
+        }
+    }
 
-        return range;
+    /**
+     * Returns the offset and length of the requested tag inside the image file,
+     * or {@code null} if the tag is not contained.
+     *
+     * @return two-element array, the offset in the first value, and length in
+     *         the second, or {@code null} if no tag was found.
+     * @throws IllegalStateException if {@link #saveAttributes()} has been
+     *             called since the underlying file was initially parsed, since
+     *             that means offsets may have changed.
+     */
+    @Nullable
+    public long[] getAttributeRange(@NonNull String tag) {
+        if (tag == null) {
+            throw new NullPointerException("tag shouldn't be null");
+        }
+        if (mModified) {
+            throw new IllegalStateException(
+                    "The underlying file has been modified since being parsed");
+        }
+
+        final ExifAttribute attribute = getExifAttribute(tag);
+        if (attribute != null) {
+            return new long[] { attribute.bytesOffset, attribute.bytes.length };
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Returns the raw bytes for the value of the requested tag inside the image
+     * file, or {@code null} if the tag is not contained.
+     *
+     * @return raw bytes for the value of the requested tag, or {@code null} if
+     *         no tag was found.
+     */
+    @Nullable
+    public byte[] getAttributeBytes(@NonNull String tag) {
+        if (tag == null) {
+            throw new NullPointerException("tag shouldn't be null");
+        }
+        final ExifAttribute attribute = getExifAttribute(tag);
+        if (attribute != null) {
+            return attribute.bytes;
+        } else {
+            return null;
+        }
     }
 
     /**
@@ -4702,13 +4809,45 @@
     }
 
     /**
-     * Returns number of milliseconds since Jan. 1, 1970, midnight local time.
-     * Returns -1 if the date time information if not available.
+     * Returns parsed {@link ExifInterface#TAG_DATETIME} value as number of milliseconds since
+     * Jan. 1, 1970, midnight local time.
+     * Returns -1 if date time information is unavailable or invalid.
+     *
      * @hide
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public long getDateTime() {
-        String dateTimeString = getAttribute(TAG_DATETIME);
+        return parseDateTime(getAttribute(TAG_DATETIME),
+                getAttribute(TAG_SUBSEC_TIME));
+    }
+
+    /**
+     * Returns parsed {@link ExifInterface#TAG_DATETIME_DIGITIZED} value as number of
+     * milliseconds since Jan. 1, 1970, midnight local time.
+     * Returns -1 if digitized date time information is unavailable or invalid.
+     *
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public long getDateTimeDigitized() {
+        return parseDateTime(getAttribute(TAG_DATETIME_DIGITIZED),
+                getAttribute(TAG_SUBSEC_TIME_DIGITIZED));
+    }
+
+    /**
+     * Returns parsed {@link ExifInterface#TAG_DATETIME_ORIGINAL} value as number of
+     * milliseconds since Jan. 1, 1970, midnight local time.
+     * Returns -1 if original date time information is unavailable or invalid.
+     *
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public long getDateTimeOriginal() {
+        return parseDateTime(getAttribute(TAG_DATETIME_ORIGINAL),
+                getAttribute(TAG_SUBSEC_TIME_ORIGINAL));
+    }
+
+    private static long parseDateTime(@Nullable String dateTimeString, @Nullable String subSecs) {
         if (dateTimeString == null
                 || !sNonZeroTimePattern.matcher(dateTimeString).matches()) return -1;
 
@@ -4720,7 +4859,6 @@
             if (datetime == null) return -1;
             long msecs = datetime.getTime();
 
-            String subSecs = getAttribute(TAG_SUBSEC_TIME);
             if (subSecs != null) {
                 try {
                     long sub = Long.parseLong(subSecs);
@@ -5856,9 +5994,11 @@
                 continue;
             }
 
-            byte[] bytes = new byte[(int) byteCount];
+            final int bytesOffset = dataInputStream.peek();
+            final byte[] bytes = new byte[(int) byteCount];
             dataInputStream.readFully(bytes);
-            ExifAttribute attribute = new ExifAttribute(dataFormat, numberOfComponents, bytes);
+            ExifAttribute attribute = new ExifAttribute(dataFormat, numberOfComponents,
+                    bytesOffset, bytes);
             mAttributes[ifdType].put(tag.name, attribute);
 
             // DNG files have a DNG Version tag specifying the version of specifications that the
diff --git a/fragment/api/1.1.0-alpha06.txt b/fragment/api/1.1.0-alpha06.txt
new file mode 100644
index 0000000..e586a2f
--- /dev/null
+++ b/fragment/api/1.1.0-alpha06.txt
@@ -0,0 +1,402 @@
+// Signature format: 3.0
+package androidx.fragment.app {
+
+  public class DialogFragment extends androidx.fragment.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 @StyleRes 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 final android.app.Dialog requireDialog();
+    method public void setCancelable(boolean);
+    method public void setShowsDialog(boolean);
+    method public void setStyle(int, @StyleRes int);
+    method public void show(androidx.fragment.app.FragmentManager, String?);
+    method public int show(androidx.fragment.app.FragmentTransaction, String?);
+    method public void showNow(androidx.fragment.app.FragmentManager, 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 androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
+    ctor public Fragment();
+    method public void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String[]?);
+    method public final boolean equals(Object?);
+    method public final androidx.fragment.app.FragmentActivity? getActivity();
+    method public boolean getAllowEnterTransitionOverlap();
+    method public boolean getAllowReturnTransitionOverlap();
+    method public final android.os.Bundle? getArguments();
+    method public final androidx.fragment.app.FragmentManager getChildFragmentManager();
+    method public android.content.Context? getContext();
+    method public Object? getEnterTransition();
+    method public Object? getExitTransition();
+    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method public final Object? getHost();
+    method public final int getId();
+    method public final android.view.LayoutInflater getLayoutInflater();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
+    method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public Object? getReenterTransition();
+    method public final android.content.res.Resources getResources();
+    method public final boolean getRetainInstance();
+    method public Object? getReturnTransition();
+    method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+    method public Object? getSharedElementEnterTransition();
+    method public Object? getSharedElementReturnTransition();
+    method public final String getString(@StringRes int);
+    method public final String getString(@StringRes int, java.lang.Object...?);
+    method public final String? getTag();
+    method public final androidx.fragment.app.Fragment? getTargetFragment();
+    method public final int getTargetRequestCode();
+    method public final CharSequence getText(@StringRes int);
+    method public boolean getUserVisibleHint();
+    method public android.view.View? getView();
+    method @MainThread public androidx.lifecycle.LifecycleOwner getViewLifecycleOwner();
+    method public androidx.lifecycle.LiveData<androidx.lifecycle.LifecycleOwner> getViewLifecycleOwnerLiveData();
+    method public androidx.lifecycle.ViewModelStore getViewModelStore();
+    method public final int hashCode();
+    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, String);
+    method @Deprecated public static androidx.fragment.app.Fragment instantiate(android.content.Context, 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 @CallSuper public void onActivityCreated(android.os.Bundle?);
+    method public void onActivityResult(int, int, android.content.Intent?);
+    method @CallSuper public void onAttach(android.content.Context);
+    method @Deprecated @CallSuper public void onAttach(android.app.Activity);
+    method public void onAttachFragment(androidx.fragment.app.Fragment);
+    method @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
+    method public boolean onContextItemSelected(android.view.MenuItem);
+    method @CallSuper 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 @CallSuper public void onDestroy();
+    method public void onDestroyOptionsMenu();
+    method @CallSuper public void onDestroyView();
+    method @CallSuper public void onDetach();
+    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle?);
+    method public void onHiddenChanged(boolean);
+    method @CallSuper public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle?);
+    method @Deprecated @CallSuper public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle?);
+    method @CallSuper public void onLowMemory();
+    method public void onMultiWindowModeChanged(boolean);
+    method public boolean onOptionsItemSelected(android.view.MenuItem);
+    method public void onOptionsMenuClosed(android.view.Menu);
+    method @CallSuper public void onPause();
+    method public void onPictureInPictureModeChanged(boolean);
+    method public void onPrepareOptionsMenu(android.view.Menu);
+    method public void onRequestPermissionsResult(int, String[], int[]);
+    method @CallSuper public void onResume();
+    method public void onSaveInstanceState(android.os.Bundle);
+    method @CallSuper public void onStart();
+    method @CallSuper public void onStop();
+    method public void onViewCreated(android.view.View, android.os.Bundle?);
+    method @CallSuper public void onViewStateRestored(android.os.Bundle?);
+    method public void postponeEnterTransition();
+    method public void registerForContextMenu(android.view.View);
+    method public final void requestPermissions(String[], int);
+    method public final androidx.fragment.app.FragmentActivity requireActivity();
+    method public final android.os.Bundle requireArguments();
+    method public final android.content.Context requireContext();
+    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method public final Object requireHost();
+    method public final androidx.fragment.app.Fragment requireParentFragment();
+    method public final android.view.View requireView();
+    method public void setAllowEnterTransitionOverlap(boolean);
+    method public void setAllowReturnTransitionOverlap(boolean);
+    method public void setArguments(android.os.Bundle?);
+    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void setEnterTransition(Object?);
+    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void setExitTransition(Object?);
+    method public void setHasOptionsMenu(boolean);
+    method public void setInitialSavedState(androidx.fragment.app.Fragment.SavedState?);
+    method public void setMenuVisibility(boolean);
+    method public void setReenterTransition(Object?);
+    method public void setRetainInstance(boolean);
+    method public void setReturnTransition(Object?);
+    method public void setSharedElementEnterTransition(Object?);
+    method public void setSharedElementReturnTransition(Object?);
+    method public void setTargetFragment(androidx.fragment.app.Fragment?, int);
+    method public void setUserVisibleHint(boolean);
+    method public boolean shouldShowRequestPermissionRationale(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(String, 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<androidx.fragment.app.Fragment.SavedState> CREATOR;
+  }
+
+  public class FragmentActivity extends androidx.activity.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator {
+    ctor public FragmentActivity();
+    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
+    method @Deprecated public androidx.loader.app.LoaderManager getSupportLoaderManager();
+    method public android.content.Context getThemedContext();
+    method public void onAttachFragment(androidx.fragment.app.Fragment);
+    method @CallSuper public void onMultiWindowModeChanged(boolean);
+    method @CallSuper public void onPictureInPictureModeChanged(boolean);
+    method protected void onResumeFragments();
+    method public void setEnterSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void setExitSharedElementCallback(androidx.core.app.SharedElementCallback?);
+    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
+    method public void startActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
+    method public void startIntentSenderFromFragment(androidx.fragment.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 @Deprecated public void supportInvalidateOptionsMenu();
+    method public void supportPostponeEnterTransition();
+    method public void supportStartPostponedEnterTransition();
+    method public final void validateRequestPermissionsRequestCode(int);
+  }
+
+  public abstract class FragmentContainer {
+    ctor public FragmentContainer();
+    method @Deprecated public androidx.fragment.app.Fragment instantiate(android.content.Context, String, android.os.Bundle?);
+    method public abstract android.view.View? onFindViewById(@IdRes int);
+    method public abstract boolean onHasView();
+  }
+
+  public class FragmentController {
+    method public void attachHost(androidx.fragment.app.Fragment?);
+    method public static androidx.fragment.app.FragmentController createController(androidx.fragment.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 @Deprecated public void dispatchReallyStop();
+    method public void dispatchResume();
+    method public void dispatchStart();
+    method public void dispatchStop();
+    method @Deprecated public void doLoaderDestroy();
+    method @Deprecated public void doLoaderRetain();
+    method @Deprecated public void doLoaderStart();
+    method @Deprecated public void doLoaderStop(boolean);
+    method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor?, java.io.PrintWriter, String[]?);
+    method public boolean execPendingActions();
+    method public androidx.fragment.app.Fragment? findFragmentByWho(String);
+    method public java.util.List<androidx.fragment.app.Fragment> getActiveFragments(java.util.List<androidx.fragment.app.Fragment>!);
+    method public int getActiveFragmentsCount();
+    method public androidx.fragment.app.FragmentManager getSupportFragmentManager();
+    method @Deprecated public androidx.loader.app.LoaderManager! getSupportLoaderManager();
+    method public void noteStateNotSaved();
+    method public android.view.View? onCreateView(android.view.View?, String, android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void reportLoaderStart();
+    method @Deprecated public void restoreAllState(android.os.Parcelable?, java.util.List<androidx.fragment.app.Fragment>?);
+    method @Deprecated public void restoreAllState(android.os.Parcelable?, androidx.fragment.app.FragmentManagerNonConfig?);
+    method @Deprecated public void restoreLoaderNonConfig(androidx.collection.SimpleArrayMap<java.lang.String,androidx.loader.app.LoaderManager>!);
+    method public void restoreSaveState(android.os.Parcelable?);
+    method @Deprecated public androidx.collection.SimpleArrayMap<java.lang.String,androidx.loader.app.LoaderManager>? retainLoaderNonConfig();
+    method @Deprecated public androidx.fragment.app.FragmentManagerNonConfig? retainNestedNonConfig();
+    method @Deprecated public java.util.List<androidx.fragment.app.Fragment>? retainNonConfig();
+    method public android.os.Parcelable? saveAllState();
+  }
+
+  public class FragmentFactory {
+    ctor public FragmentFactory();
+    method public androidx.fragment.app.Fragment instantiate(ClassLoader, String, android.os.Bundle?);
+    method public static Class<? extends androidx.fragment.app.Fragment> loadFragmentClass(ClassLoader, String);
+  }
+
+  public abstract class FragmentHostCallback<E> extends androidx.fragment.app.FragmentContainer {
+    ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method public void onDump(String, java.io.FileDescriptor?, java.io.PrintWriter, 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(androidx.fragment.app.Fragment, String[], int);
+    method public boolean onShouldSaveFragmentState(androidx.fragment.app.Fragment);
+    method public boolean onShouldShowRequestPermissionRationale(String);
+    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int);
+    method public void onStartActivityFromFragment(androidx.fragment.app.Fragment, android.content.Intent!, int, android.os.Bundle?);
+    method public void onStartIntentSenderFromFragment(androidx.fragment.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(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
+    method public abstract androidx.fragment.app.FragmentTransaction beginTransaction();
+    method public abstract void dump(String, java.io.FileDescriptor?, java.io.PrintWriter, String[]?);
+    method public static void enableDebugLogging(boolean);
+    method public abstract boolean executePendingTransactions();
+    method public abstract androidx.fragment.app.Fragment? findFragmentById(@IdRes int);
+    method public abstract androidx.fragment.app.Fragment? findFragmentByTag(String?);
+    method public abstract androidx.fragment.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+    method public abstract int getBackStackEntryCount();
+    method public abstract androidx.fragment.app.Fragment? getFragment(android.os.Bundle, String);
+    method public androidx.fragment.app.FragmentFactory getFragmentFactory();
+    method public abstract java.util.List<androidx.fragment.app.Fragment> getFragments();
+    method public abstract androidx.fragment.app.Fragment? getPrimaryNavigationFragment();
+    method public abstract boolean isDestroyed();
+    method public abstract boolean isStateSaved();
+    method public abstract void popBackStack();
+    method public abstract void popBackStack(String?, int);
+    method public abstract void popBackStack(int, int);
+    method public abstract boolean popBackStackImmediate();
+    method public abstract boolean popBackStackImmediate(String?, int);
+    method public abstract boolean popBackStackImmediate(int, int);
+    method public abstract void putFragment(android.os.Bundle, String, androidx.fragment.app.Fragment);
+    method public abstract void registerFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+    method public abstract void removeOnBackStackChangedListener(androidx.fragment.app.FragmentManager.OnBackStackChangedListener);
+    method public abstract androidx.fragment.app.Fragment.SavedState? saveFragmentInstanceState(androidx.fragment.app.Fragment);
+    method public void setFragmentFactory(androidx.fragment.app.FragmentFactory);
+    method public abstract void unregisterFragmentLifecycleCallbacks(androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks);
+    field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+  }
+
+  public static interface FragmentManager.BackStackEntry {
+    method public CharSequence? getBreadCrumbShortTitle();
+    method @StringRes public int getBreadCrumbShortTitleRes();
+    method public CharSequence? getBreadCrumbTitle();
+    method @StringRes public int getBreadCrumbTitleRes();
+    method public int getId();
+    method public String? getName();
+  }
+
+  public abstract static class FragmentManager.FragmentLifecycleCallbacks {
+    ctor public FragmentManager.FragmentLifecycleCallbacks();
+    method public void onFragmentActivityCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
+    method public void onFragmentAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
+    method public void onFragmentCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
+    method public void onFragmentDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentDetached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentPaused(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentPreAttached(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.content.Context);
+    method public void onFragmentPreCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle?);
+    method public void onFragmentResumed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentSaveInstanceState(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.os.Bundle);
+    method public void onFragmentStarted(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentStopped(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+    method public void onFragmentViewCreated(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment, android.view.View, android.os.Bundle?);
+    method public void onFragmentViewDestroyed(androidx.fragment.app.FragmentManager, androidx.fragment.app.Fragment);
+  }
+
+  public static interface FragmentManager.OnBackStackChangedListener {
+    method public void onBackStackChanged();
+  }
+
+  @Deprecated public class FragmentManagerNonConfig {
+  }
+
+  public abstract class FragmentPagerAdapter extends androidx.viewpager.widget.PagerAdapter {
+    ctor public FragmentPagerAdapter(androidx.fragment.app.FragmentManager);
+    method public abstract androidx.fragment.app.Fragment getItem(int);
+    method public long getItemId(int);
+    method public boolean isViewFromObject(android.view.View, Object);
+  }
+
+  public abstract class FragmentStatePagerAdapter extends androidx.viewpager.widget.PagerAdapter {
+    ctor public FragmentStatePagerAdapter(androidx.fragment.app.FragmentManager);
+    method public abstract androidx.fragment.app.Fragment getItem(int);
+    method public boolean isViewFromObject(android.view.View, 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, Class<?>, android.os.Bundle?);
+    method public void onTabChanged(String?);
+    method @Deprecated public void setup();
+    method public void setup(android.content.Context, androidx.fragment.app.FragmentManager);
+    method public void setup(android.content.Context, androidx.fragment.app.FragmentManager, int);
+  }
+
+  public abstract class FragmentTransaction {
+    ctor public FragmentTransaction();
+    method public abstract androidx.fragment.app.FragmentTransaction add(androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction add(@IdRes int, androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction addSharedElement(android.view.View, String);
+    method public abstract androidx.fragment.app.FragmentTransaction addToBackStack(String?);
+    method public abstract androidx.fragment.app.FragmentTransaction attach(androidx.fragment.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 androidx.fragment.app.FragmentTransaction detach(androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction disallowAddToBackStack();
+    method public abstract androidx.fragment.app.FragmentTransaction hide(androidx.fragment.app.Fragment);
+    method public abstract boolean isAddToBackStackAllowed();
+    method public abstract boolean isEmpty();
+    method public abstract androidx.fragment.app.FragmentTransaction remove(androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment);
+    method public abstract androidx.fragment.app.FragmentTransaction replace(@IdRes int, androidx.fragment.app.Fragment, String?);
+    method public abstract androidx.fragment.app.FragmentTransaction runOnCommit(Runnable);
+    method @Deprecated public abstract androidx.fragment.app.FragmentTransaction setAllowOptimization(boolean);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence?);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setBreadCrumbTitle(CharSequence?);
+    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int, @AnimatorRes @AnimRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction setPrimaryNavigationFragment(androidx.fragment.app.Fragment?);
+    method public abstract androidx.fragment.app.FragmentTransaction setReorderingAllowed(boolean);
+    method public abstract androidx.fragment.app.FragmentTransaction setTransition(int);
+    method public abstract androidx.fragment.app.FragmentTransaction setTransitionStyle(@StyleRes int);
+    method public abstract androidx.fragment.app.FragmentTransaction show(androidx.fragment.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 androidx.fragment.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 final android.widget.ListAdapter requireListAdapter();
+    method public void setEmptyText(CharSequence?);
+    method public void setListAdapter(android.widget.ListAdapter?);
+    method public void setListShown(boolean);
+    method public void setListShownNoAnimation(boolean);
+    method public void setSelection(int);
+  }
+
+}
+
diff --git a/fragment/api/res-1.1.0-alpha06.txt b/fragment/api/res-1.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/api/res-1.1.0-alpha06.txt
diff --git a/fragment/api/restricted_1.1.0-alpha06.txt b/fragment/api/restricted_1.1.0-alpha06.txt
new file mode 100644
index 0000000..59d618c
--- /dev/null
+++ b/fragment/api/restricted_1.1.0-alpha06.txt
@@ -0,0 +1,47 @@
+// Signature format: 3.0
+package androidx.fragment.app {
+
+  public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setupDialog(android.app.Dialog, int);
+  }
+
+  public class Fragment implements android.content.ComponentCallbacks androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner android.view.View.OnCreateContextMenuListener androidx.lifecycle.ViewModelStoreOwner {
+    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.view.LayoutInflater getLayoutInflater(android.os.Bundle?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final boolean hasOptionsMenu();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final boolean isMenuVisible();
+  }
+
+  public class FragmentActivity extends androidx.activity.ComponentActivity implements androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback androidx.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator {
+    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected boolean onPrepareOptionsPanel(android.view.View?, android.view.Menu);
+    method public final void validateRequestPermissionsRequestCode(int);
+  }
+
+  public abstract class FragmentManager {
+    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.fragment.app.FragmentTransaction openTransaction();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class FragmentTransitionImpl {
+    ctor public FragmentTransitionImpl();
+    method public abstract void addTarget(Object!, android.view.View!);
+    method public abstract void addTargets(Object!, java.util.ArrayList<android.view.View>!);
+    method public abstract void beginDelayedTransition(android.view.ViewGroup!, Object!);
+    method protected static void bfsAddViewChildren(java.util.List<android.view.View>!, android.view.View!);
+    method public abstract boolean canHandle(Object!);
+    method public abstract Object! cloneTransition(Object!);
+    method protected void getBoundsOnScreen(android.view.View!, android.graphics.Rect!);
+    method protected static boolean isNullOrEmpty(java.util.List!);
+    method public abstract Object! mergeTransitionsInSequence(Object!, Object!, Object!);
+    method public abstract Object! mergeTransitionsTogether(Object!, Object!, Object!);
+    method public abstract void removeTarget(Object!, android.view.View!);
+    method public abstract void replaceTargets(Object!, java.util.ArrayList<android.view.View>!, java.util.ArrayList<android.view.View>!);
+    method public abstract void scheduleHideFragmentView(Object!, android.view.View!, java.util.ArrayList<android.view.View>!);
+    method public abstract void scheduleRemoveTargets(Object!, Object!, java.util.ArrayList<android.view.View>!, Object!, java.util.ArrayList<android.view.View>!, Object!, java.util.ArrayList<android.view.View>!);
+    method public abstract void setEpicenter(Object!, android.view.View!);
+    method public abstract void setEpicenter(Object!, android.graphics.Rect!);
+    method public abstract void setSharedElementTargets(Object!, android.view.View!, java.util.ArrayList<android.view.View>!);
+    method public abstract void swapSharedElementTargets(Object!, java.util.ArrayList<android.view.View>!, java.util.ArrayList<android.view.View>!);
+    method public abstract Object! wrapTransitionInSet(Object!);
+  }
+
+}
+
diff --git a/fragment/ktx/api/1.1.0-alpha06.txt b/fragment/ktx/api/1.1.0-alpha06.txt
new file mode 100644
index 0000000..54ffec7
--- /dev/null
+++ b/fragment/ktx/api/1.1.0-alpha06.txt
@@ -0,0 +1,19 @@
+// Signature format: 3.0
+package androidx.fragment.app {
+
+  public final class FragmentManagerKt {
+    ctor public FragmentManagerKt();
+    method public static inline void commit(androidx.fragment.app.FragmentManager, boolean allowStateLoss = false, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
+    method public static inline void commitNow(androidx.fragment.app.FragmentManager, boolean allowStateLoss = false, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
+    method @Deprecated public static inline void transaction(androidx.fragment.app.FragmentManager, boolean now = false, boolean allowStateLoss = false, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
+  }
+
+  public final class FragmentViewModelLazyKt {
+    ctor public FragmentViewModelLazyKt();
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM>! activityViewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>! factoryProducer = null);
+    method @MainThread public static <VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM> createViewModelLazy(androidx.fragment.app.Fragment, kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer = null);
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<VM>! viewModels(androidx.fragment.app.Fragment, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner>! ownerProducer = { this }, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>! factoryProducer = null);
+  }
+
+}
+
diff --git a/fragment/ktx/api/res-1.1.0-alpha06.txt b/fragment/ktx/api/res-1.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/ktx/api/res-1.1.0-alpha06.txt
diff --git a/fragment/ktx/api/restricted_1.1.0-alpha06.txt b/fragment/ktx/api/restricted_1.1.0-alpha06.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/fragment/ktx/api/restricted_1.1.0-alpha06.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerNonConfigTest.java b/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerNonConfigTest.java
deleted file mode 100644
index b65b191..0000000
--- a/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerNonConfigTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.fragment.app;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-import android.os.Build;
-
-import androidx.fragment.app.test.NonConfigOnStopActivity;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.MediumTest;
-import androidx.test.filters.SdkSuppress;
-import androidx.test.rule.ActivityTestRule;
-import androidx.testutils.FragmentActivityUtils;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@MediumTest
-@RunWith(AndroidJUnit4.class)
-public class FragmentManagerNonConfigTest {
-
-    @Rule
-    public ActivityTestRule<NonConfigOnStopActivity> mActivityRule =
-            new ActivityTestRule<>(NonConfigOnStopActivity.class);
-
-    /**
-     * When a fragment is added during onStop(), it shouldn't show up in non-config
-     * state when restored before P, because OnSaveInstanceState was already called.
-     */
-    @Test
-    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.O_MR1)
-    public void nonConfigStop() throws Throwable {
-        FragmentActivity activity = FragmentActivityUtils.recreateActivity(mActivityRule,
-                mActivityRule.getActivity());
-
-        // A fragment was added in onStop(), but we shouldn't see it here...
-        assertTrue(activity.getSupportFragmentManager().getFragments().isEmpty());
-    }
-
-    /**
-     * When a fragment is added during onStop(), it shouldn't show up in non-config
-     * state when restored after (>=) P, because OnSaveInstanceState isn't yet called.
-     */
-    @Test
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
-    public void nonConfigStopSavingFragment() throws Throwable {
-        FragmentActivity activity = FragmentActivityUtils.recreateActivity(mActivityRule,
-                mActivityRule.getActivity());
-
-        assertThat(activity.getSupportFragmentManager().getFragments().size(), is(1));
-    }
-}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerNonConfigTest.kt b/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerNonConfigTest.kt
new file mode 100644
index 0000000..6d47436
--- /dev/null
+++ b/fragment/src/androidTest/java/androidx/fragment/app/FragmentManagerNonConfigTest.kt
@@ -0,0 +1,68 @@
+/*
+ * 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.fragment.app
+
+import android.os.Build
+import androidx.fragment.app.test.NonConfigOnStopActivity
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.rule.ActivityTestRule
+import androidx.testutils.FragmentActivityUtils
+import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class FragmentManagerNonConfigTest {
+
+    @get:Rule
+    var activityRule = ActivityTestRule(NonConfigOnStopActivity::class.java)
+
+    /**
+     * When a fragment is added during onStop(), it shouldn't show up in non-config
+     * state when restored before P, because OnSaveInstanceState was already called.
+     */
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.O_MR1)
+    fun nonConfigStop() {
+        val activity = FragmentActivityUtils.recreateActivity(
+            activityRule,
+            activityRule.activity
+        )
+
+        // A fragment was added in onStop(), but we shouldn't see it here...
+        assertThat(activity.supportFragmentManager.fragments.isEmpty()).isTrue()
+    }
+
+    /**
+     * When a fragment is added during onStop(), it shouldn't show up in non-config
+     * state when restored after (>=) P, because OnSaveInstanceState isn't yet called.
+     */
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.P)
+    fun nonConfigStopSavingFragment() {
+        val activity = FragmentActivityUtils.recreateActivity(
+            activityRule,
+            activityRule.activity
+        )
+
+        assertThat(activity.supportFragmentManager.fragments.size).isEqualTo(1)
+    }
+}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/LoaderTest.java b/fragment/src/androidTest/java/androidx/fragment/app/LoaderTest.java
deleted file mode 100644
index 4b681c1..0000000
--- a/fragment/src/androidTest/java/androidx/fragment/app/LoaderTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * 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.fragment.app;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import android.content.Context;
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.test.LoaderActivity;
-import androidx.fragment.test.R;
-import androidx.loader.app.LoaderManager;
-import androidx.loader.content.Loader;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.MediumTest;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.rule.ActivityTestRule;
-import androidx.testutils.FragmentActivityUtils;
-import androidx.testutils.RecreatedActivity;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.lang.ref.WeakReference;
-
-@RunWith(AndroidJUnit4.class)
-@MediumTest
-public class LoaderTest {
-    @Rule
-    public ActivityTestRule<LoaderActivity> mActivityRule =
-            new ActivityTestRule<>(LoaderActivity.class);
-
-    /**
-     * Test to ensure that there is no Activity leak due to Loader
-     */
-    @Test
-    public void testLeak() throws Throwable {
-        // Restart the activity because mActivityRule keeps a strong reference to the
-        // old activity.
-        LoaderActivity activity = FragmentActivityUtils.recreateActivity(mActivityRule,
-                mActivityRule.getActivity());
-
-        LoaderFragment fragment = new LoaderFragment();
-        FragmentManager fm = activity.getSupportFragmentManager();
-
-        fm.beginTransaction()
-                .add(fragment, "1")
-                .commit();
-
-        FragmentTestUtil.executePendingTransactions(mActivityRule, fm);
-
-        fm.beginTransaction()
-                .remove(fragment)
-                .addToBackStack(null)
-                .commit();
-
-        FragmentTestUtil.executePendingTransactions(mActivityRule, fm);
-        fm = null; // clear it so that it can be released
-
-        WeakReference<RecreatedActivity> weakActivity =
-                new WeakReference<>(LoaderActivity.sActivity);
-
-        activity = FragmentActivityUtils.recreateActivity(mActivityRule, activity);
-
-        // Wait for everything to settle. We have to make sure that the old Activity
-        // is ready to be collected.
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-        FragmentTestUtil.waitForExecution(mActivityRule);
-
-        // Force a garbage collection.
-        FragmentTestUtil.forceGC();
-        assertNull(weakActivity.get());
-    }
-
-    /**
-     * When a LoaderManager is reused, it should notify in onResume
-     */
-    @Test
-    public void startWhenReused() throws Throwable {
-        LoaderActivity activity = mActivityRule.getActivity();
-
-        assertEquals("Loaded!", activity.textView.getText().toString());
-
-        activity = FragmentActivityUtils.recreateActivity(mActivityRule, activity);
-
-        FragmentTestUtil.waitForExecution(mActivityRule);
-
-        // After orientation change, the text should still be loaded properly
-        assertEquals("Loaded!", activity.textView.getText().toString());
-    }
-
-    @Test
-    public void testRedeliverWhenReattached() throws Throwable {
-        LoaderActivity activity = mActivityRule.getActivity();
-
-        FragmentManager fm = activity.getSupportFragmentManager();
-
-        LoaderActivity.TextLoaderFragment fragment =
-                (LoaderActivity.TextLoaderFragment) fm.findFragmentById(R.id.fragmentContainer);
-
-        assertNotNull(fragment);
-        assertEquals("Loaded!", fragment.textView.getText().toString());
-
-        fm.beginTransaction()
-                .detach(fragment)
-                .commit();
-
-        FragmentTestUtil.executePendingTransactions(mActivityRule, fm);
-
-        fm.beginTransaction()
-                .attach(fragment)
-                .commit();
-
-        FragmentTestUtil.executePendingTransactions(mActivityRule, fm);
-
-        assertEquals("Loaded!", fragment.textView.getText().toString());
-    }
-
-    public static class LoaderFragment extends Fragment implements
-            LoaderManager.LoaderCallbacks<Boolean> {
-        private static final int LOADER_ID = 1;
-
-        @Override
-        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
-            super.onActivityCreated(savedInstanceState);
-
-            LoaderManager.getInstance(this).initLoader(LOADER_ID, null, this);
-        }
-
-        @NonNull
-        @Override
-        public Loader<Boolean> onCreateLoader(int id, @Nullable Bundle args) {
-            return new SimpleLoader(requireContext());
-        }
-
-        @Override
-        public void onLoadFinished(@NonNull Loader<Boolean> loader, Boolean data) {
-        }
-
-        @Override
-        public void onLoaderReset(@NonNull Loader<Boolean> loader) {
-        }
-
-        static class SimpleLoader extends Loader<Boolean> {
-
-            SimpleLoader(@NonNull Context context) {
-                super(context);
-            }
-
-            @Override
-            protected void onStartLoading() {
-                deliverResult(true);
-            }
-        }
-    }
-}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/LoaderTest.kt b/fragment/src/androidTest/java/androidx/fragment/app/LoaderTest.kt
new file mode 100644
index 0000000..7c17551
--- /dev/null
+++ b/fragment/src/androidTest/java/androidx/fragment/app/LoaderTest.kt
@@ -0,0 +1,148 @@
+/*
+ * 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.fragment.app
+
+import android.content.Context
+import android.os.Bundle
+import androidx.fragment.app.test.LoaderActivity
+import androidx.fragment.test.R
+import androidx.loader.app.LoaderManager
+import androidx.loader.content.Loader
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.rule.ActivityTestRule
+import androidx.testutils.FragmentActivityUtils
+import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.lang.ref.WeakReference
+
+@RunWith(AndroidJUnit4::class)
+@MediumTest
+class LoaderTest {
+    @get:Rule
+    val activityRule = ActivityTestRule(LoaderActivity::class.java)
+
+    /**
+     * Test to ensure that there is no Activity leak due to Loader
+     */
+    @Test
+    fun testLeak() {
+        // Restart the activity because activityRule keeps a strong reference to the
+        // old activity.
+        val activity = FragmentActivityUtils.recreateActivity(activityRule, activityRule.activity)
+
+        val fragment = LoaderFragment()
+        val fm: FragmentManager = activity.supportFragmentManager
+
+        fm.beginTransaction()
+            .add(fragment, "1")
+            .commit()
+
+        FragmentTestUtil.executePendingTransactions(activityRule, fm)
+
+        fm.beginTransaction()
+            .remove(fragment)
+            .addToBackStack(null)
+            .commit()
+
+        FragmentTestUtil.executePendingTransactions(activityRule, fm)
+
+        val weakActivity = WeakReference(LoaderActivity.sActivity)
+
+        // Wait for everything to settle. We have to make sure that the old Activity
+        // is ready to be collected.
+        InstrumentationRegistry.getInstrumentation().waitForIdleSync()
+        FragmentTestUtil.waitForExecution(activityRule)
+
+        // Force a garbage collection.
+        FragmentTestUtil.forceGC()
+        assertThat(weakActivity.get()).isNull()
+    }
+
+    /**
+     * When a LoaderManager is reused, it should notify in onResume
+     */
+    @Test
+    fun startWhenReused() {
+        var activity = activityRule.activity
+
+        assertThat(activity.textView.text).isEqualTo("Loaded!")
+
+        activity = FragmentActivityUtils.recreateActivity(activityRule, activity)
+
+        FragmentTestUtil.waitForExecution(activityRule)
+
+        // After orientation change, the text should still be loaded properly
+        assertThat(activity.textView.text).isEqualTo("Loaded!")
+    }
+
+    @Test
+    fun testRedeliverWhenReattached() {
+        val activity = activityRule.activity
+
+        val fm = activity.supportFragmentManager
+
+        val fragment =
+            fm.findFragmentById(R.id.fragmentContainer) as LoaderActivity.TextLoaderFragment
+
+        assertThat(fragment).isNotNull()
+        assertThat(fragment.textView.text).isEqualTo("Loaded!")
+
+        fm.beginTransaction()
+            .detach(fragment)
+            .commit()
+
+        FragmentTestUtil.executePendingTransactions(activityRule, fm)
+
+        fm.beginTransaction()
+            .attach(fragment)
+            .commit()
+
+        FragmentTestUtil.executePendingTransactions(activityRule, fm)
+
+        assertThat(fragment.textView.text).isEqualTo("Loaded!")
+    }
+
+    class LoaderFragment : Fragment(), LoaderManager.LoaderCallbacks<Boolean> {
+
+        override fun onActivityCreated(savedInstanceState: Bundle?) {
+            super.onActivityCreated(savedInstanceState)
+
+            LoaderManager.getInstance(this).initLoader(LOADER_ID, null, this)
+        }
+
+        override fun onCreateLoader(id: Int, args: Bundle?):
+                Loader<Boolean> = SimpleLoader(requireContext())
+
+        override fun onLoadFinished(loader: Loader<Boolean>, data: Boolean?) {}
+
+        override fun onLoaderReset(loader: Loader<Boolean>) {}
+
+        internal class SimpleLoader(context: Context) : Loader<Boolean>(context) {
+            override fun onStartLoading() {
+                deliverResult(true)
+            }
+        }
+
+        companion object {
+            private const val LOADER_ID = 1
+        }
+    }
+}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentRestoreTest.java b/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentRestoreTest.java
deleted file mode 100644
index 05b3858..0000000
--- a/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentRestoreTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.fragment.app;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
-
-import android.content.Context;
-
-import androidx.fragment.app.test.FragmentTestActivity;
-import androidx.fragment.app.test.FragmentTestActivity.ChildFragment;
-import androidx.fragment.app.test.FragmentTestActivity.ChildFragment.OnAttachListener;
-import androidx.fragment.app.test.FragmentTestActivity.ParentFragment;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.MediumTest;
-import androidx.test.rule.ActivityTestRule;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-@RunWith(AndroidJUnit4.class)
-public class NestedFragmentRestoreTest {
-
-    @Rule
-    public ActivityTestRule<FragmentTestActivity> mActivityRule = new ActivityTestRule<>(
-            FragmentTestActivity.class);
-
-    public NestedFragmentRestoreTest() {
-    }
-
-    @Test
-    @MediumTest
-    public void recreateActivity() throws Throwable {
-        final FragmentTestActivity activity = mActivityRule.getActivity();
-        mActivityRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                FragmentTestActivity.ParentFragment parent = new ParentFragment();
-                parent.setRetainChildInstance(true);
-
-                activity.getSupportFragmentManager().beginTransaction()
-                        .add(parent, "parent")
-                        .commitNow();
-            }
-        });
-
-        FragmentManager fm = activity.getSupportFragmentManager();
-        ParentFragment parent = (ParentFragment) fm.findFragmentByTag("parent");
-        ChildFragment child = parent.getChildFragment();
-
-        final Context[] attachedTo = new Context[1];
-        final CountDownLatch latch = new CountDownLatch(1);
-        child.setOnAttachListener(new OnAttachListener() {
-            @Override
-            public void onAttach(Context activity, ChildFragment fragment) {
-                attachedTo[0] = activity;
-                latch.countDown();
-            }
-        });
-
-        mActivityRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                activity.recreate();
-            }
-        });
-
-        assertTrue("timeout waiting for recreate", latch.await(10, TimeUnit.SECONDS));
-
-        assertNotNull("attached as part of recreate", attachedTo[0]);
-        assertNotSame("attached to new context", activity, attachedTo[0]);
-        assertNotSame("attached to new parent fragment", parent, child);
-    }
-}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentRestoreTest.kt b/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentRestoreTest.kt
new file mode 100644
index 0000000..7000783
--- /dev/null
+++ b/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentRestoreTest.kt
@@ -0,0 +1,76 @@
+/*
+ * 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.fragment.app
+
+import android.content.Context
+import androidx.fragment.app.test.FragmentTestActivity
+import androidx.fragment.app.test.FragmentTestActivity.ParentFragment
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import androidx.test.rule.ActivityTestRule
+import com.google.common.truth.Truth.assertWithMessage
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+
+@RunWith(AndroidJUnit4::class)
+class NestedFragmentRestoreTest {
+
+    @get:Rule
+    val activityRule = ActivityTestRule(FragmentTestActivity::class.java)
+
+    @Test
+    @MediumTest
+    fun recreateActivity() {
+        val activity = activityRule.activity
+        activityRule.runOnUiThread {
+            val parent = ParentFragment()
+            parent.setRetainChildInstance(true)
+
+            activity.supportFragmentManager.beginTransaction()
+                .add(parent, "parent")
+                .commitNow()
+        }
+
+        val fm = activity.supportFragmentManager
+        val parent = fm.findFragmentByTag("parent") as ParentFragment
+        val child = parent.childFragment
+
+        var attachedTo: Context? = null
+        val latch = CountDownLatch(1)
+        child.setOnAttachListener { context, _ ->
+            attachedTo = context
+            latch.countDown()
+        }
+
+        activityRule.runOnUiThread { activity.recreate() }
+
+        assertWithMessage("timeout waiting for recreate")
+            .that(latch.await(10, TimeUnit.SECONDS))
+            .isTrue()
+
+        assertWithMessage("attached as part of recreate").that(attachedTo).isNotNull()
+        assertWithMessage("attached to new context")
+            .that(attachedTo)
+            .isNotSameAs(activity)
+        assertWithMessage("attached to new parent fragment")
+            .that(child)
+            .isNotSameAs(parent)
+    }
+}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.java b/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.java
deleted file mode 100644
index cab44cc..0000000
--- a/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * 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.fragment.app;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.app.Activity;
-import android.app.Instrumentation;
-import android.content.Intent;
-import android.content.IntentFilter;
-
-import androidx.fragment.app.test.FragmentTestActivity;
-import androidx.fragment.app.test.FragmentTestActivity.ChildFragment;
-import androidx.fragment.app.test.FragmentTestActivity.ParentFragment;
-import androidx.test.annotation.UiThreadTest;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.LargeTest;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.rule.ActivityTestRule;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-@RunWith(AndroidJUnit4.class)
-@LargeTest
-public class NestedFragmentTest {
-    @Rule
-    public ActivityTestRule<FragmentTestActivity> mActivityRule =
-            new ActivityTestRule<FragmentTestActivity>(FragmentTestActivity.class);
-
-    private Instrumentation mInstrumentation;
-    private ParentFragment mParentFragment;
-
-    @Before
-    public void setup() throws Throwable {
-        mInstrumentation = InstrumentationRegistry.getInstrumentation();
-        final FragmentManager fragmentManager =
-                mActivityRule.getActivity().getSupportFragmentManager();
-        mParentFragment = new ParentFragment();
-        fragmentManager.beginTransaction().add(mParentFragment, "parent").commit();
-        final CountDownLatch latch = new CountDownLatch(1);
-        mActivityRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                fragmentManager.executePendingTransactions();
-                latch.countDown();
-            }
-        });
-        assertTrue(latch.await(1, TimeUnit.SECONDS));
-    }
-
-    @UiThreadTest
-    @Test(expected = IllegalArgumentException.class)
-    public void testThrowsWhenUsingReservedRequestCode() {
-        mParentFragment.getChildFragment().startActivityForResult(
-                new Intent(Intent.ACTION_CALL), 16777216 /* requestCode */);
-    }
-
-    @Test
-    public void testNestedFragmentStartActivityForResult() throws Throwable {
-        Instrumentation.ActivityResult activityResult = new Instrumentation.ActivityResult(
-                Activity.RESULT_OK, new Intent());
-
-        Instrumentation.ActivityMonitor activityMonitor =
-                mInstrumentation.addMonitor(
-                        new IntentFilter(Intent.ACTION_CALL), activityResult, true /* block */);
-
-        // Sanity check that onActivityResult hasn't been called yet.
-        assertFalse(mParentFragment.getChildFragment().onActivityResultCalled);
-
-        final CountDownLatch latch = new CountDownLatch(1);
-        mActivityRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mParentFragment.getChildFragment().startActivityForResult(
-                        new Intent(Intent.ACTION_CALL),
-                        5 /* requestCode */);
-                latch.countDown();
-            }
-        });
-        assertTrue(latch.await(1, TimeUnit.SECONDS));
-
-        assertTrue(mInstrumentation.checkMonitorHit(activityMonitor, 1));
-
-        final ChildFragment childFragment = mParentFragment.getChildFragment();
-        assertTrue(childFragment.onActivityResultCalled);
-        assertEquals(5, childFragment.onActivityResultRequestCode);
-        assertEquals(Activity.RESULT_OK, childFragment.onActivityResultResultCode);
-    }
-}
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.kt b/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.kt
new file mode 100644
index 0000000..dba95bc
--- /dev/null
+++ b/fragment/src/androidTest/java/androidx/fragment/app/NestedFragmentTest.kt
@@ -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.fragment.app
+
+import android.app.Activity
+import android.app.Instrumentation
+import android.content.Intent
+import android.content.IntentFilter
+import androidx.fragment.app.test.FragmentTestActivity
+import androidx.fragment.app.test.FragmentTestActivity.ParentFragment
+import androidx.test.annotation.UiThreadTest
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.rule.ActivityTestRule
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+
+@RunWith(AndroidJUnit4::class)
+@LargeTest
+class NestedFragmentTest {
+    @get:Rule
+    val activityRule = ActivityTestRule(FragmentTestActivity::class.java)
+
+    private lateinit var instrumentation: Instrumentation
+    private lateinit var parentFragment: ParentFragment
+
+    @Before
+    fun setup() {
+        instrumentation = InstrumentationRegistry.getInstrumentation()
+        val fragmentManager = activityRule.activity.supportFragmentManager
+        parentFragment = ParentFragment()
+        fragmentManager.beginTransaction().add(parentFragment, "parent").commit()
+        val latch = CountDownLatch(1)
+        activityRule.runOnUiThread {
+            fragmentManager.executePendingTransactions()
+            latch.countDown()
+        }
+        assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue()
+    }
+
+    @UiThreadTest
+    @Test(expected = IllegalArgumentException::class)
+    fun testThrowsWhenUsingReservedRequestCode() {
+        parentFragment.childFragment.startActivityForResult(
+            Intent(Intent.ACTION_CALL), 16777216 /* requestCode */
+        )
+    }
+
+    @Test
+    fun testNestedFragmentStartActivityForResult() {
+        val activityResult = Instrumentation.ActivityResult(Activity.RESULT_OK, Intent())
+
+        val activityMonitor = instrumentation.addMonitor(
+            IntentFilter(Intent.ACTION_CALL), activityResult, true /* block */
+        )
+
+        // Sanity check that onActivityResult hasn't been called yet.
+        assertThat(parentFragment.childFragment.onActivityResultCalled).isFalse()
+
+        val latch = CountDownLatch(1)
+        activityRule.runOnUiThread {
+            parentFragment.childFragment.startActivityForResult(
+                Intent(Intent.ACTION_CALL),
+                5 /* requestCode */
+            )
+            latch.countDown()
+        }
+        assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue()
+
+        assertThat(instrumentation.checkMonitorHit(activityMonitor, 1)).isTrue()
+
+        val childFragment = parentFragment.childFragment
+        assertThat(childFragment.onActivityResultCalled).isTrue()
+        assertThat(childFragment.onActivityResultRequestCode).isEqualTo(5)
+        assertThat(childFragment.onActivityResultResultCode).isEqualTo(Activity.RESULT_OK)
+    }
+}
diff --git a/fragment/testing/api/1.1.0-alpha06.txt b/fragment/testing/api/1.1.0-alpha06.txt
new file mode 100644
index 0000000..6374c9f
--- /dev/null
+++ b/fragment/testing/api/1.1.0-alpha06.txt
@@ -0,0 +1,31 @@
+// Signature format: 3.0
+package androidx.fragment.app.testing {
+
+  public final class FragmentScenario<F extends androidx.fragment.app.Fragment> {
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F>);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F>, android.os.Bundle?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F>, android.os.Bundle?, androidx.fragment.app.FragmentFactory?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F>, android.os.Bundle?, int, androidx.fragment.app.FragmentFactory?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F>);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F>, android.os.Bundle?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F>, android.os.Bundle?, androidx.fragment.app.FragmentFactory?);
+    method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F>, android.os.Bundle?, int, androidx.fragment.app.FragmentFactory?);
+    method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State);
+    method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F>);
+    method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
+  }
+
+  public static interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
+    method public void perform(F);
+  }
+
+  public final class FragmentScenarioKt {
+    ctor public FragmentScenarioKt();
+    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(android.os.Bundle! fragmentArgs = null, int themeResId = R.style.FragmentScenarioEmptyFragmentActivityTheme, androidx.fragment.app.FragmentFactory! factory = null);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(android.os.Bundle! fragmentArgs = null, int themeResId = R.style.FragmentScenarioEmptyFragmentActivityTheme, kotlin.jvm.functions.Function1<? super android.os.Bundle,? extends F>! instantiate);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(android.os.Bundle! fragmentArgs = null, int themeResId = R.style.FragmentScenarioEmptyFragmentActivityTheme, androidx.fragment.app.FragmentFactory! factory = null);
+    method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(android.os.Bundle! fragmentArgs = null, int themeResId = R.style.FragmentScenarioEmptyFragmentActivityTheme, kotlin.jvm.functions.Function1<? super android.os.Bundle,? extends F>! instantiate);
+  }
+
+}
+
diff --git a/fragment/testing/api/res-1.1.0-alpha06.txt b/fragment/testing/api/res-1.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/testing/api/res-1.1.0-alpha06.txt
diff --git a/fragment/testing/api/restricted_1.1.0-alpha06.txt b/fragment/testing/api/restricted_1.1.0-alpha06.txt
new file mode 100644
index 0000000..6415760
--- /dev/null
+++ b/fragment/testing/api/restricted_1.1.0-alpha06.txt
@@ -0,0 +1,7 @@
+// Signature format: 3.0
+package androidx.fragment.app.testing {
+
+
+
+}
+
diff --git a/jetifier/jetifier/migration.config b/jetifier/jetifier/migration.config
index 7721e33..78126a0 100644
--- a/jetifier/jetifier/migration.config
+++ b/jetifier/jetifier/migration.config
@@ -196,10 +196,6 @@
       "to": "androidx/recyclerview/widget/{0}"
     },
     {
-      "from": "android/support/wear/(.*)",
-      "to": "androidx/wear/{0}"
-    },
-    {
       "from": "android/support/v7/preference/(.*)",
       "to": "androidx/preference/{0}"
     },
@@ -726,6 +722,10 @@
       "to": "ignore"
     },
     {
+      "from": "androidx/wear/(.*)",
+      "to": "ignore"
+    },
+    {
       "from": "androidx/swiperefreshlayout/widget/CircleImageView(.*)",
       "to": "ignore"
     },
@@ -1100,7 +1100,7 @@
       "to": "androidx/drawerlayout"
     },
     {
-      "from": "android/support/wear",
+      "from": "androidx/wear",
       "to": "androidx/wear"
     },
     {
@@ -1225,7 +1225,7 @@
     }
   ],
   "pomRules": [
-    {
+     {
       "from": {
         "groupId": "androidx.viewpager2",
         "artifactId": "viewpager2",
@@ -1695,9 +1695,9 @@
     },
     {
       "from": {
-        "groupId": "com.android.support",
+        "groupId": "androidx.wear",
         "artifactId": "wear",
-        "version": "{oldSlVersion}"
+        "version": "{newSlVersion}"
       },
       "to": {
         "groupId": "androidx.wear",
@@ -4442,49 +4442,7 @@
       "android/support/v7/widget/helper/ItemTouchHelper": "androidx/recyclerview/widget/ItemTouchHelper",
       "android/support/v7/widget/helper/ItemTouchUIUtil": "androidx/recyclerview/widget/ItemTouchUIUtil",
       "android/support/v7/widget/helper/ItemTouchUIUtilImpl": "androidx/recyclerview/widget/ItemTouchUIUtilImpl",
-      "android/support/v7/widget/util/SortedListAdapterCallback": "androidx/recyclerview/widget/SortedListAdapterCallback",
-      "android/support/wear/R": "androidx/wear/R",
-      "android/support/wear/activity/ConfirmationActivity": "androidx/wear/activity/ConfirmationActivity",
-      "android/support/wear/ambient/AmbientDelegate": "androidx/wear/ambient/AmbientDelegate",
-      "android/support/wear/ambient/AmbientMode": "androidx/wear/ambient/AmbientMode",
-      "android/support/wear/ambient/AmbientModeSupport": "androidx/wear/ambient/AmbientModeSupport",
-      "android/support/wear/ambient/SharedLibraryVersion": "androidx/wear/ambient/SharedLibraryVersion",
-      "android/support/wear/ambient/WearableControllerProvider": "androidx/wear/ambient/WearableControllerProvider",
-      "android/support/wear/internal/widget/ResourcesUtil": "androidx/wear/internal/widget/ResourcesUtil",
-      "android/support/wear/internal/widget/drawer/MultiPagePresenter": "androidx/wear/internal/widget/drawer/MultiPagePresenter",
-      "android/support/wear/internal/widget/drawer/MultiPageUi": "androidx/wear/internal/widget/drawer/MultiPageUi",
-      "android/support/wear/internal/widget/drawer/SinglePagePresenter": "androidx/wear/internal/widget/drawer/SinglePagePresenter",
-      "android/support/wear/internal/widget/drawer/SinglePageUi": "androidx/wear/internal/widget/drawer/SinglePageUi",
-      "android/support/wear/internal/widget/drawer/WearableNavigationDrawerPresenter": "androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter",
-      "android/support/wear/utils/MetadataConstants": "androidx/wear/utils/MetadataConstants",
-      "android/support/wear/widget/BezierSCurveInterpolator": "androidx/wear/widget/BezierSCurveInterpolator",
-      "android/support/wear/widget/BoxInsetLayout": "androidx/wear/widget/BoxInsetLayout",
-      "android/support/wear/widget/CircledImageView": "androidx/wear/widget/CircledImageView",
-      "android/support/wear/widget/CircularProgressLayout": "androidx/wear/widget/CircularProgressLayout",
-      "android/support/wear/widget/CircularProgressLayoutController": "androidx/wear/widget/CircularProgressLayoutController",
-      "android/support/wear/widget/ConfirmationOverlay": "androidx/wear/widget/ConfirmationOverlay",
-      "android/support/wear/widget/CurvingLayoutCallback": "androidx/wear/widget/CurvingLayoutCallback",
-      "android/support/wear/widget/ProgressDrawable": "androidx/wear/widget/ProgressDrawable",
-      "android/support/wear/widget/ResourcesUtil": "androidx/wear/widget/ResourcesUtil",
-      "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": "androidx/wear/widget/SwipeDismissFrameLayout",
-      "android/support/wear/widget/SwipeDismissLayout": "androidx/wear/widget/SwipeDismissLayout",
-      "android/support/wear/widget/WearableLinearLayoutManager": "androidx/wear/widget/WearableLinearLayoutManager",
-      "android/support/wear/widget/WearableRecyclerView": "androidx/wear/widget/WearableRecyclerView",
-      "android/support/wear/widget/drawer/AbsListViewFlingWatcher": "androidx/wear/widget/drawer/AbsListViewFlingWatcher",
-      "android/support/wear/widget/drawer/FlingWatcherFactory": "androidx/wear/widget/drawer/FlingWatcherFactory",
-      "android/support/wear/widget/drawer/NestedScrollViewFlingWatcher": "androidx/wear/widget/drawer/NestedScrollViewFlingWatcher",
-      "android/support/wear/widget/drawer/PageIndicatorView": "androidx/wear/widget/drawer/PageIndicatorView",
-      "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/WearableActionDrawerMenu": "androidx/wear/widget/drawer/WearableActionDrawerMenu",
-      "android/support/wear/widget/drawer/WearableActionDrawerView": "androidx/wear/widget/drawer/WearableActionDrawerView",
-      "android/support/wear/widget/drawer/WearableDrawerController": "androidx/wear/widget/drawer/WearableDrawerController",
-      "android/support/wear/widget/drawer/WearableDrawerLayout": "androidx/wear/widget/drawer/WearableDrawerLayout",
-      "android/support/wear/widget/drawer/WearableDrawerView": "androidx/wear/widget/drawer/WearableDrawerView",
-      "android/support/wear/widget/drawer/WearableNavigationDrawerView": "androidx/wear/widget/drawer/WearableNavigationDrawerView"
+      "android/support/v7/widget/util/SortedListAdapterCallback": "androidx/recyclerview/widget/SortedListAdapterCallback"
     }
   },
   "proGuardMap": {
diff --git a/lifecycle/common-java8/api/2.1.0-alpha04.txt b/lifecycle/common-java8/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..498d3a9
--- /dev/null
+++ b/lifecycle/common-java8/api/2.1.0-alpha04.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public interface DefaultLifecycleObserver extends androidx.lifecycle.LifecycleObserver androidx.lifecycle.LifecycleObserver {
+    method public default void onCreate(androidx.lifecycle.LifecycleOwner);
+    method public default void onDestroy(androidx.lifecycle.LifecycleOwner);
+    method public default void onPause(androidx.lifecycle.LifecycleOwner);
+    method public default void onResume(androidx.lifecycle.LifecycleOwner);
+    method public default void onStart(androidx.lifecycle.LifecycleOwner);
+    method public default void onStop(androidx.lifecycle.LifecycleOwner);
+  }
+
+}
+
diff --git a/lifecycle/common-java8/api/restricted_2.1.0-alpha04.txt b/lifecycle/common-java8/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/common-java8/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/common/api/2.1.0-alpha04.txt b/lifecycle/common/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..f23b5eb
--- /dev/null
+++ b/lifecycle/common/api/2.1.0-alpha04.txt
@@ -0,0 +1,46 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public abstract class Lifecycle {
+    ctor public Lifecycle();
+    method @MainThread public abstract void addObserver(androidx.lifecycle.LifecycleObserver);
+    method @MainThread public abstract androidx.lifecycle.Lifecycle.State getCurrentState();
+    method @MainThread public abstract void removeObserver(androidx.lifecycle.LifecycleObserver);
+  }
+
+  public enum Lifecycle.Event {
+    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_ANY;
+    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_CREATE;
+    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_DESTROY;
+    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_PAUSE;
+    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_RESUME;
+    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_START;
+    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_STOP;
+  }
+
+  public enum Lifecycle.State {
+    method public boolean isAtLeast(androidx.lifecycle.Lifecycle.State);
+    enum_constant public static final androidx.lifecycle.Lifecycle.State CREATED;
+    enum_constant public static final androidx.lifecycle.Lifecycle.State DESTROYED;
+    enum_constant public static final androidx.lifecycle.Lifecycle.State INITIALIZED;
+    enum_constant public static final androidx.lifecycle.Lifecycle.State RESUMED;
+    enum_constant public static final androidx.lifecycle.Lifecycle.State STARTED;
+  }
+
+  public interface LifecycleEventObserver extends androidx.lifecycle.LifecycleObserver {
+    method public void onStateChanged(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event);
+  }
+
+  public interface LifecycleObserver {
+  }
+
+  public interface LifecycleOwner {
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface OnLifecycleEvent {
+    method public abstract androidx.lifecycle.Lifecycle.Event value();
+  }
+
+}
+
diff --git a/lifecycle/common/api/restricted_2.1.0-alpha04.ignore b/lifecycle/common/api/restricted_2.1.0-alpha04.ignore
new file mode 100644
index 0000000..0a4fad1
--- /dev/null
+++ b/lifecycle/common/api/restricted_2.1.0-alpha04.ignore
@@ -0,0 +1,11 @@
+// Baseline format: 1.0
+ChangedSuperclass: androidx.lifecycle.GenericLifecycleObserver:
+    Class androidx.lifecycle.GenericLifecycleObserver superclass changed from androidx.lifecycle.LifecycleObserver to androidx.lifecycle.LifecycleEventObserver
+
+
+RemovedClass: androidx.lifecycle.CompositeGeneratedAdaptersObserver:
+    Removed class androidx.lifecycle.CompositeGeneratedAdaptersObserver
+RemovedClass: androidx.lifecycle.SingleGeneratedAdapterObserver:
+    Removed class androidx.lifecycle.SingleGeneratedAdapterObserver
+
+
diff --git a/lifecycle/common/api/restricted_2.1.0-alpha04.txt b/lifecycle/common/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..7aa1c38
--- /dev/null
+++ b/lifecycle/common/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface GeneratedAdapter {
+    method public void callMethods(androidx.lifecycle.LifecycleOwner!, androidx.lifecycle.Lifecycle.Event!, boolean, androidx.lifecycle.MethodCallsLogger!);
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface GenericLifecycleObserver extends androidx.lifecycle.LifecycleEventObserver {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Lifecycling {
+    method public static String! getAdapterName(String!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MethodCallsLogger {
+    ctor public MethodCallsLogger();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean approveCall(String!, int);
+  }
+
+}
+
diff --git a/lifecycle/common/eap/api/1.0.0-alpha01.txt b/lifecycle/common/eap/api/1.0.0-alpha01.txt
new file mode 100644
index 0000000..ac09a5a
--- /dev/null
+++ b/lifecycle/common/eap/api/1.0.0-alpha01.txt
@@ -0,0 +1,15 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public final class LifecycleKt {
+    ctor public LifecycleKt();
+    method public static kotlinx.coroutines.CoroutineScope getCoroutineScope(androidx.lifecycle.Lifecycle);
+  }
+
+  public final class LifecycleOwnerKt {
+    ctor public LifecycleOwnerKt();
+    method public static kotlinx.coroutines.CoroutineScope getLifecycleScope(androidx.lifecycle.LifecycleOwner);
+  }
+
+}
+
diff --git a/lifecycle/common/eap/api/current.txt b/lifecycle/common/eap/api/current.txt
new file mode 100644
index 0000000..ac09a5a
--- /dev/null
+++ b/lifecycle/common/eap/api/current.txt
@@ -0,0 +1,15 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public final class LifecycleKt {
+    ctor public LifecycleKt();
+    method public static kotlinx.coroutines.CoroutineScope getCoroutineScope(androidx.lifecycle.Lifecycle);
+  }
+
+  public final class LifecycleOwnerKt {
+    ctor public LifecycleOwnerKt();
+    method public static kotlinx.coroutines.CoroutineScope getLifecycleScope(androidx.lifecycle.LifecycleOwner);
+  }
+
+}
+
diff --git a/lifecycle/common/eap/api/restricted_1.0.0-alpha01.txt b/lifecycle/common/eap/api/restricted_1.0.0-alpha01.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/common/eap/api/restricted_1.0.0-alpha01.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/common/eap/api/restricted_current.txt b/lifecycle/common/eap/api/restricted_current.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/common/eap/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/common/eap/build.gradle b/lifecycle/common/eap/build.gradle
new file mode 100644
index 0000000..a9d1653
--- /dev/null
+++ b/lifecycle/common/eap/build.gradle
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+import static androidx.build.dependencies.DependenciesKt.*
+import androidx.build.LibraryGroups
+import androidx.build.LibraryVersions
+
+plugins {
+    id("SupportKotlinLibraryPlugin")
+}
+
+dependencies {
+    api(project(":lifecycle:lifecycle-common"))
+    api(KOTLIN_STDLIB)
+    api(KOTLIN_COROUTINES_CORE)
+    // tests are in lifecycle kotlin test app to be able to test with a proper lifecycle
+    // implementation while keeping this project pure kotlin.
+}
+
+supportLibrary {
+    name = "Lifecycle Kotlin Extensions"
+    publish = false
+    mavenVersion = LibraryVersions.LIFECYCLES_COROUTINES
+    mavenGroup = LibraryGroups.LIFECYCLE
+    inceptionYear = "2018"
+    description = "Kotlin extensions for 'lifecycle' artifact"
+    useMetalava = true
+}
diff --git a/lifecycle/common/eap/src/main/java/androidx/lifecycle/Lifecycle.kt b/lifecycle/common/eap/src/main/java/androidx/lifecycle/Lifecycle.kt
new file mode 100644
index 0000000..9b0bf10
--- /dev/null
+++ b/lifecycle/common/eap/src/main/java/androidx/lifecycle/Lifecycle.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle
+
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.SupervisorJob
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.launch
+import kotlin.coroutines.CoroutineContext
+
+/**
+ * [CoroutineScope] tied to this [Lifecycle].
+ *
+ * This scope will be canceled when the [Lifecycle] is destroyed.
+ *
+ * This scope is bound to  [Dispatchers.Main]
+ */
+val Lifecycle.coroutineScope: CoroutineScope
+    get() {
+        while (true) {
+            val existing = mInternalScopeRef.get() as LifecycleCoroutineScope?
+            if (existing != null) {
+                return existing
+            }
+            val newScope = LifecycleCoroutineScope(
+                this,
+                SupervisorJob() + Dispatchers.Main
+            )
+            if (mInternalScopeRef.compareAndSet(null, newScope)) {
+                newScope.register()
+                return newScope
+            }
+        }
+    }
+
+internal class LifecycleCoroutineScope(
+    private val lifecycle: Lifecycle,
+    override val coroutineContext: CoroutineContext
+) : CoroutineScope, LifecycleEventObserver {
+    init {
+        // in case we are initialized on a non-main thread, make a best effort check before
+        // we return the scope. This is not sync but if developer is launching on a non-main
+        // dispatcher, they cannot be 100% sure anyways.
+        if (lifecycle.currentState == Lifecycle.State.DESTROYED) {
+            coroutineContext.cancel()
+        }
+    }
+
+    fun register() {
+        // TODO use Main.Immediate once it is graduated out of experimental.
+        launch(Dispatchers.Main) {
+            if (lifecycle.currentState >= Lifecycle.State.INITIALIZED) {
+                lifecycle.addObserver(this@LifecycleCoroutineScope)
+            } else {
+                coroutineContext.cancel()
+            }
+        }
+    }
+
+    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
+        if (lifecycle.currentState <= Lifecycle.State.DESTROYED) {
+            lifecycle.removeObserver(this)
+            coroutineContext.cancel()
+        }
+    }
+}
\ No newline at end of file
diff --git a/lifecycle/common/eap/src/main/java/androidx/lifecycle/LifecycleOwner.kt b/lifecycle/common/eap/src/main/java/androidx/lifecycle/LifecycleOwner.kt
new file mode 100644
index 0000000..6789c98
--- /dev/null
+++ b/lifecycle/common/eap/src/main/java/androidx/lifecycle/LifecycleOwner.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle
+
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+
+/**
+ * [CoroutineScope] tied to this [LifecycleOwner]'s [Lifecycle].
+ *
+ * This scope will be cancelled when the [Lifecycle] is destroyed.
+ *
+ * This scope is bound to [Dispatchers.Main].
+ */
+val LifecycleOwner.lifecycleScope: CoroutineScope
+    get() = lifecycle.coroutineScope
diff --git a/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycle.java b/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycle.java
index 9b6a5dc..6fd66bd8 100644
--- a/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycle.java
+++ b/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycle.java
@@ -18,6 +18,9 @@
 
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Defines an object that has an Android Lifecycle. {@link androidx.fragment.app.Fragment Fragment}
@@ -73,6 +76,16 @@
  * and events without tracking them manually.
  */
 public abstract class Lifecycle {
+
+    /**
+     * Lifecycle coroutines extensions stashes the CoroutineScope into this field.
+     *
+     * @hide used by lifecycle-common-ktx
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    @NonNull
+    AtomicReference<Object> mInternalScopeRef = new AtomicReference<>();
+
     /**
      * Adds a LifecycleObserver that will be notified when the LifecycleOwner changes
      * state.
diff --git a/lifecycle/extensions/api/2.1.0-alpha04.txt b/lifecycle/extensions/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..c85f1ab
--- /dev/null
+++ b/lifecycle/extensions/api/2.1.0-alpha04.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public class ViewModelProviders {
+    ctor @Deprecated public ViewModelProviders();
+    method @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment);
+    method @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity);
+    method @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.Fragment, androidx.lifecycle.ViewModelProvider.Factory?);
+    method @MainThread public static androidx.lifecycle.ViewModelProvider of(androidx.fragment.app.FragmentActivity, androidx.lifecycle.ViewModelProvider.Factory?);
+  }
+
+  @Deprecated public static class ViewModelProviders.DefaultFactory extends androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory {
+    ctor @Deprecated public ViewModelProviders.DefaultFactory(android.app.Application);
+  }
+
+  @Deprecated public class ViewModelStores {
+    method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.FragmentActivity);
+    method @Deprecated @MainThread public static androidx.lifecycle.ViewModelStore of(androidx.fragment.app.Fragment);
+  }
+
+}
+
diff --git a/lifecycle/extensions/api/res-2.1.0-alpha04.txt b/lifecycle/extensions/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/extensions/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/extensions/api/restricted_2.1.0-alpha04.txt b/lifecycle/extensions/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/extensions/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/integration-tests/kotlintestapp/.gitignore b/lifecycle/integration-tests/kotlintestapp/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/lifecycle/integration-tests/kotlintestapp/build.gradle b/lifecycle/integration-tests/kotlintestapp/build.gradle
new file mode 100644
index 0000000..84c2c0e
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/build.gradle
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// TO debug processor, run:
+//./gradlew :r:in:k:clean :r:in:k:cC --no-daemon
+// -Dorg.gradle.debug=true
+// -Dkotlin.compiler.execution.strategy="in-process"
+import static androidx.build.dependencies.DependenciesKt.*
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.application")
+    id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+    implementation(project(":lifecycle:lifecycle-common-eap"))
+    implementation(project(":activity"))
+
+    testImplementation(JUNIT)
+    testImplementation(TEST_RUNNER)
+    testImplementation(TRUTH)
+    testImplementation(KOTLIN_COROUTINES)
+    testImplementation(KOTLIN_COROUTINES_TEST)
+
+    androidTestImplementation(KOTLIN_COROUTINES)
+    androidTestImplementation(TEST_EXT_KTX)
+    androidTestImplementation(TRUTH)
+    androidTestImplementation(TEST_RUNNER)
+    androidTestImplementation(ESPRESSO_CORE)
+}
+
+android {
+    kotlinOptions {
+        jvmTarget = '1.8' // necessary to use espresso kotlin extensions
+    }
+    sourceSets {
+        test.java.srcDirs += 'src/test-common/java'
+        androidTest.java.srcDirs += 'src/test-common/java'
+    }
+}
+
+tasks['check'].dependsOn(tasks['connectedCheck'])
+
+uploadArchives.enabled = false
diff --git a/lifecycle/integration-tests/kotlintestapp/src/androidTest/java/androidx/lifecycle/LifecycleCoroutineScopeAndroidTest.kt b/lifecycle/integration-tests/kotlintestapp/src/androidTest/java/androidx/lifecycle/LifecycleCoroutineScopeAndroidTest.kt
new file mode 100644
index 0000000..0fc0157
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/src/androidTest/java/androidx/lifecycle/LifecycleCoroutineScopeAndroidTest.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import org.junit.runner.RunWith
+
+/**
+ * To ensure consistent behavior, we run these tests both on androidTest and test
+ */
+@ExperimentalCoroutinesApi
+@RunWith(AndroidJUnit4::class)
+class LifecycleCoroutineScopeAndroidTest : LifecycleCoroutineScopeTestBase()
\ No newline at end of file
diff --git a/lifecycle/integration-tests/kotlintestapp/src/androidTest/java/androidx/lifecycle/LifecycleScopeIntegrationTest.kt b/lifecycle/integration-tests/kotlintestapp/src/androidTest/java/androidx/lifecycle/LifecycleScopeIntegrationTest.kt
new file mode 100644
index 0000000..b130056
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/src/androidTest/java/androidx/lifecycle/LifecycleScopeIntegrationTest.kt
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle
+
+import androidx.lifecycle.Lifecycle.State.CREATED
+import androidx.lifecycle.Lifecycle.State.DESTROYED
+import androidx.lifecycle.Lifecycle.State.RESUMED
+import androidx.lifecycle.Lifecycle.State.STARTED
+import androidx.lifecycle.kotlintestapp.TestActivity
+import androidx.test.ext.junit.rules.activityScenarioRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.async
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.sync.Mutex
+import kotlinx.coroutines.withContext
+import org.junit.After
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@ExperimentalCoroutinesApi
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class LifecycleScopeIntegrationTest {
+    private val testScope = CoroutineScope(Job() + Dispatchers.Default)
+
+    @JvmField
+    @Rule
+    val rule = activityScenarioRule<TestActivity>()
+
+    @After
+    fun cancelScope() {
+        testScope.cancel()
+    }
+
+    @Test
+    fun alreadyResumed() = runBlocking {
+        rule.scenario.moveToState(RESUMED)
+        assertThat(owner().lifecycleScope.async {
+            true
+        }.await()).isTrue()
+    }
+
+    @Test
+    fun createdState() = runBlocking {
+        rule.scenario.moveToState(CREATED)
+        assertThat(owner().lifecycleScope.async {
+            true
+        }.await()).isTrue()
+    }
+
+    @Test
+    fun startOnMainThread() = runBlocking {
+        rule.scenario.moveToState(RESUMED)
+        val owner = owner()
+        assertThat(
+            testScope.async(Dispatchers.Main) {
+                withContext(owner.lifecycleScope.coroutineContext) {
+                    true
+                }
+            }.await()
+        ).isTrue()
+    }
+
+    @Test
+    fun alreadyDestroyed() = runBlocking {
+        val owner = owner() // grab it before destroying
+        rule.scenario.moveToState(DESTROYED)
+        val action = owner.lifecycleScope.async {
+            true
+        }
+        action.join()
+        assertThat(action.isCancelled).isTrue()
+    }
+
+    @Test
+    fun destroyedWhileRunning() = runBlocking {
+        val owner = owner() // grab it before destroying
+        rule.scenario.moveToState(STARTED)
+        val runningMutex = Mutex(true)
+        val action = owner.lifecycleScope.async {
+            runningMutex.unlock()
+            delay(10_000)
+        }
+        runningMutex.lock()
+        assertThat(action.isActive).isTrue()
+        rule.scenario.moveToState(DESTROYED)
+        action.join()
+        assertThat(action.isCancelled).isTrue()
+    }
+
+    private fun owner(): LifecycleOwner {
+        lateinit var owner: LifecycleOwner
+        rule.scenario.onActivity {
+            owner = it
+        }
+        return owner
+    }
+}
\ No newline at end of file
diff --git a/lifecycle/integration-tests/kotlintestapp/src/main/AndroidManifest.xml b/lifecycle/integration-tests/kotlintestapp/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..d662e79
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/src/main/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<!--
+  ~ Copyright (C) 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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.lifecycle.kotlintestapp">
+    <application>
+        <activity android:name="androidx.lifecycle.kotlintestapp.TestActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/lifecycle/integration-tests/kotlintestapp/src/main/java/androidx/lifecycle/kotlintestapp/TestActivity.kt b/lifecycle/integration-tests/kotlintestapp/src/main/java/androidx/lifecycle/kotlintestapp/TestActivity.kt
new file mode 100644
index 0000000..f0a2e6c
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/src/main/java/androidx/lifecycle/kotlintestapp/TestActivity.kt
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle.kotlintestapp
+
+class TestActivity : androidx.activity.ComponentActivity()
\ No newline at end of file
diff --git a/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/FakeLifecycleOwner.kt b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/FakeLifecycleOwner.kt
new file mode 100644
index 0000000..cd93f87
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/FakeLifecycleOwner.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle
+
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.withContext
+import kotlinx.coroutines.withTimeoutOrNull
+
+class FakeLifecycleOwner(initialState: Lifecycle.State? = null) : LifecycleOwner {
+    private val registry: LifecycleRegistry = LifecycleRegistry(this)
+
+    init {
+        initialState?.let {
+            setState(it)
+        }
+    }
+
+    override fun getLifecycle(): Lifecycle = registry
+
+    fun setState(state: Lifecycle.State) {
+        registry.markState(state)
+    }
+
+    suspend fun awaitExactObserverCount(count: Int, timeout: Long = 1000L): Boolean =
+    // just give job some time to start
+        withTimeoutOrNull(timeout) {
+            while (getObserverCount(count) != count) {
+                delay(50)
+            }
+            true
+        } ?: false
+
+    private suspend fun getObserverCount(count: Int): Int {
+        return withContext(Dispatchers.Main) {
+            registry.observerCount
+        }
+    }
+}
\ No newline at end of file
diff --git a/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
new file mode 100644
index 0000000..2c907ec
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/src/test-common/java/androidx.lifecycle/LifecycleCoroutineScopeTestBase.kt
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle
+
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.async
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.sync.Mutex
+import kotlinx.coroutines.withContext
+import org.junit.Test
+import java.util.concurrent.CancellationException
+
+@SmallTest
+@ExperimentalCoroutinesApi
+abstract class LifecycleCoroutineScopeTestBase {
+    @Test
+    fun initialization() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.INITIALIZED)
+        val scope = owner.lifecycleScope
+        assertThat(owner.lifecycle.mInternalScopeRef.get()).isSameAs(scope)
+        val scope2 = owner.lifecycleScope
+        assertThat(scope).isSameAs(scope2)
+        runBlocking(Dispatchers.Main) {
+            assertThat((owner.lifecycle as LifecycleRegistry).observerCount).isEqualTo(1)
+        }
+    }
+
+    @Test
+    fun simpleLaunch() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.INITIALIZED)
+        assertThat(
+            runBlocking {
+                owner.lifecycleScope.async {
+                    // do nothing
+                    true
+                }.await()
+            }
+        ).isTrue()
+    }
+
+    @Test
+    fun launchAfterDestroy() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.DESTROYED)
+        runBlocking {
+            owner.lifecycleScope.launch {
+                // do nothing
+                throw AssertionError("should not run")
+            }.join()
+        }
+    }
+
+    @Test
+    fun launchOnMain() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.STARTED)
+        assertThat(
+            runBlocking(Dispatchers.Main) {
+                owner.lifecycleScope.async {
+                    true
+                }.await()
+            }
+        ).isTrue()
+    }
+
+    @Test
+    fun launchOnIO() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.STARTED)
+        assertThat(
+            runBlocking(Dispatchers.IO) {
+                owner.lifecycleScope.async {
+                    true
+                }.await()
+            }
+        ).isTrue()
+    }
+
+    @Test
+    fun destroyWhileRunning() {
+        val startMutex = Mutex(locked = true)
+        val alwaysLocked = Mutex(locked = true)
+        val owner = FakeLifecycleOwner(Lifecycle.State.STARTED)
+        val actionWasActive = owner.lifecycleScope.async(Dispatchers.IO) {
+            startMutex.unlock()
+            alwaysLocked.lock() // wait 4ever
+        }
+        runBlocking(Dispatchers.Main) {
+            startMutex.lock() // wait until it starts
+            owner.setState(Lifecycle.State.DESTROYED)
+            actionWasActive.join()
+            assertThat(actionWasActive.isCancelled).isTrue()
+        }
+    }
+
+    @Test
+    fun throwException() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.STARTED)
+        runBlocking {
+            val action = owner.lifecycleScope.async {
+                throw RuntimeException("foo")
+            }
+            action.join()
+            assertThat(action.getCompletionExceptionOrNull()).hasMessageThat().isSameAs("foo")
+        }
+    }
+
+    @Test
+    fun throwException_onStart() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.CREATED)
+        runBlocking {
+            // TODO guarantee later execution
+            val action = owner.lifecycleScope.async {
+                throw RuntimeException("foo")
+            }
+            withContext(Dispatchers.Main) {
+                owner.setState(Lifecycle.State.STARTED)
+            }
+            action.join()
+            assertThat(action.getCompletionExceptionOrNull()).hasMessageThat().isSameAs("foo")
+        }
+    }
+
+    @Test
+    fun runAnotherAfterCancellation_cancelOutside() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.STARTED)
+        runBlocking {
+            val action = owner.lifecycleScope.async {
+                delay(20000)
+            }
+            action.cancel()
+            action.join()
+        }
+        assertThat(runBlocking {
+            owner.lifecycleScope.async {
+                true
+            }.await()
+        }).isTrue()
+    }
+
+    @Test
+    fun runAnotherAfterCancellation_cancelInside() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.STARTED)
+        runBlocking {
+            val action = owner.lifecycleScope.async {
+                throw CancellationException("")
+            }
+            action.join()
+        }
+        assertThat(runBlocking {
+            owner.lifecycleScope.async {
+                true
+            }.await()
+        }).isTrue()
+    }
+
+    @Test
+    fun runAnotherAfterFailure() {
+        val owner = FakeLifecycleOwner(Lifecycle.State.STARTED)
+        runBlocking {
+            val action = owner.lifecycleScope.async {
+                throw IllegalArgumentException("why not ?")
+            }
+            val result = kotlin.runCatching {
+                action.await()
+            }
+            assertThat(result.exceptionOrNull())
+                .isInstanceOf(IllegalArgumentException::class.java)
+        }
+        assertThat(runBlocking {
+            owner.lifecycleScope.async {
+                true
+            }.await()
+        }).isTrue()
+    }
+}
diff --git a/lifecycle/integration-tests/kotlintestapp/src/test/java/androidx/lifecycle/LifecycleCoroutineScopeTest.kt b/lifecycle/integration-tests/kotlintestapp/src/test/java/androidx/lifecycle/LifecycleCoroutineScopeTest.kt
new file mode 100644
index 0000000..fbf948e
--- /dev/null
+++ b/lifecycle/integration-tests/kotlintestapp/src/test/java/androidx/lifecycle/LifecycleCoroutineScopeTest.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.lifecycle
+
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.test.resetMain
+import kotlinx.coroutines.test.setMain
+import org.junit.After
+import org.junit.Before
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+
+/**
+ * To ensure consistent behavior, we run these tests both on androidTest and test
+ */
+@ExperimentalCoroutinesApi
+@RunWith(JUnit4::class)
+class LifecycleCoroutineScopeTest : LifecycleCoroutineScopeTestBase() {
+    private val mainExecutor = Executors.newSingleThreadExecutor()
+
+    @Before
+    fun setMainDispatcher() {
+        Dispatchers.setMain(mainExecutor.asCoroutineDispatcher())
+    }
+
+    @After
+    fun clearMainDispatcher() {
+        mainExecutor.shutdownNow()
+        mainExecutor.awaitTermination(10, TimeUnit.SECONDS)
+        Dispatchers.resetMain()
+    }
+}
diff --git a/lifecycle/livedata-core/api/2.1.0-alpha04.txt b/lifecycle/livedata-core/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..f0db7db
--- /dev/null
+++ b/lifecycle/livedata-core/api/2.1.0-alpha04.txt
@@ -0,0 +1,32 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public abstract class LiveData<T> {
+    ctor public LiveData(T!);
+    ctor public LiveData();
+    method public T? getValue();
+    method public boolean hasActiveObservers();
+    method public boolean hasObservers();
+    method @MainThread public void observe(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Observer<? super T>);
+    method @MainThread public void observeForever(androidx.lifecycle.Observer<? super T>);
+    method protected void onActive();
+    method protected void onInactive();
+    method protected void postValue(T!);
+    method @MainThread public void removeObserver(androidx.lifecycle.Observer<? super T>);
+    method @MainThread public void removeObservers(androidx.lifecycle.LifecycleOwner);
+    method @MainThread protected void setValue(T!);
+  }
+
+  public class MutableLiveData<T> extends androidx.lifecycle.LiveData<T> {
+    ctor public MutableLiveData(T!);
+    ctor public MutableLiveData();
+    method public void postValue(T!);
+    method public void setValue(T!);
+  }
+
+  public interface Observer<T> {
+    method public void onChanged(T!);
+  }
+
+}
+
diff --git a/lifecycle/livedata-core/api/res-2.1.0-alpha04.txt b/lifecycle/livedata-core/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata-core/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/livedata-core/api/restricted_2.1.0-alpha04.txt b/lifecycle/livedata-core/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/livedata-core/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/livedata-core/ktx/api/2.1.0-alpha04.txt b/lifecycle/livedata-core/ktx/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..861a341
--- /dev/null
+++ b/lifecycle/livedata-core/ktx/api/2.1.0-alpha04.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public final class LiveDataKt {
+    ctor public LiveDataKt();
+    method @MainThread public static inline <T> androidx.lifecycle.Observer<T> observe(androidx.lifecycle.LiveData<T>, androidx.lifecycle.LifecycleOwner owner, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> onChanged);
+  }
+
+}
+
diff --git a/lifecycle/livedata-core/ktx/api/res-2.1.0-alpha04.txt b/lifecycle/livedata-core/ktx/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata-core/ktx/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/livedata-core/ktx/api/restricted_2.1.0-alpha04.txt b/lifecycle/livedata-core/ktx/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/livedata-core/ktx/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/livedata/api/2.1.0-alpha04.txt b/lifecycle/livedata/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..2f5616b
--- /dev/null
+++ b/lifecycle/livedata/api/2.1.0-alpha04.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public class MediatorLiveData<T> extends androidx.lifecycle.MutableLiveData<T> {
+    ctor public MediatorLiveData();
+    method @MainThread public <S> void addSource(androidx.lifecycle.LiveData<S>, androidx.lifecycle.Observer<? super S>);
+    method @MainThread public <S> void removeSource(androidx.lifecycle.LiveData<S>);
+  }
+
+  public class Transformations {
+    method @MainThread public static <X> androidx.lifecycle.LiveData<X> distinctUntilChanged(androidx.lifecycle.LiveData<X>);
+    method @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,Y>);
+    method @MainThread public static <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, androidx.arch.core.util.Function<X,androidx.lifecycle.LiveData<Y>>);
+  }
+
+}
+
diff --git a/lifecycle/livedata/api/res-2.1.0-alpha04.txt b/lifecycle/livedata/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/livedata/api/restricted_2.1.0-alpha04.txt b/lifecycle/livedata/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..c4aa36c
--- /dev/null
+++ b/lifecycle/livedata/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1,13 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ComputableLiveData<T> {
+    ctor public ComputableLiveData();
+    ctor public ComputableLiveData(java.util.concurrent.Executor);
+    method @WorkerThread protected abstract T! compute();
+    method public androidx.lifecycle.LiveData<T> getLiveData();
+    method public void invalidate();
+  }
+
+}
+
diff --git a/lifecycle/livedata/ktx/api/2.1.0-alpha04.txt b/lifecycle/livedata/ktx/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..a21c943
--- /dev/null
+++ b/lifecycle/livedata/ktx/api/2.1.0-alpha04.txt
@@ -0,0 +1,12 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public final class TransformationsKt {
+    ctor public TransformationsKt();
+    method public static inline <X> androidx.lifecycle.LiveData<X> distinctUntilChanged(androidx.lifecycle.LiveData<X>);
+    method public static inline <X, Y> androidx.lifecycle.LiveData<Y> map(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<? super X,? extends Y> transform);
+    method public static inline <X, Y> androidx.lifecycle.LiveData<Y> switchMap(androidx.lifecycle.LiveData<X>, kotlin.jvm.functions.Function1<? super X,? extends androidx.lifecycle.LiveData<Y>> transform);
+  }
+
+}
+
diff --git a/lifecycle/livedata/ktx/api/res-2.1.0-alpha04.txt b/lifecycle/livedata/ktx/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata/ktx/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/livedata/ktx/api/restricted_2.1.0-alpha04.txt b/lifecycle/livedata/ktx/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/livedata/ktx/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/process/api/2.1.0-alpha04.txt b/lifecycle/process/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..beea619
--- /dev/null
+++ b/lifecycle/process/api/2.1.0-alpha04.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public class ProcessLifecycleOwner implements androidx.lifecycle.LifecycleOwner {
+    method public static androidx.lifecycle.LifecycleOwner get();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+  }
+
+}
+
diff --git a/lifecycle/process/api/res-2.1.0-alpha04.txt b/lifecycle/process/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/process/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/process/api/restricted_2.1.0-alpha04.txt b/lifecycle/process/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..eab2976
--- /dev/null
+++ b/lifecycle/process/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1,15 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ProcessLifecycleOwnerInitializer extends android.content.ContentProvider {
+    ctor public ProcessLifecycleOwnerInitializer();
+    method public int delete(android.net.Uri, String!, String[]!);
+    method public String? getType(android.net.Uri);
+    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, String[]!, String!, String[]!, String!);
+    method public int update(android.net.Uri, android.content.ContentValues!, String!, String[]!);
+  }
+
+}
+
diff --git a/lifecycle/reactivestreams/api/2.1.0-alpha04.txt b/lifecycle/reactivestreams/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..f3d107a
--- /dev/null
+++ b/lifecycle/reactivestreams/api/2.1.0-alpha04.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public final class LiveDataReactiveStreams {
+    method public static <T> androidx.lifecycle.LiveData<T> fromPublisher(org.reactivestreams.Publisher<T>);
+    method public static <T> org.reactivestreams.Publisher<T> toPublisher(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.LiveData<T>);
+  }
+
+}
+
diff --git a/lifecycle/reactivestreams/api/res-2.1.0-alpha04.txt b/lifecycle/reactivestreams/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/reactivestreams/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/reactivestreams/api/restricted_2.1.0-alpha04.txt b/lifecycle/reactivestreams/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/reactivestreams/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/reactivestreams/ktx/api/2.1.0-alpha04.txt b/lifecycle/reactivestreams/ktx/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..659d07d
--- /dev/null
+++ b/lifecycle/reactivestreams/ktx/api/2.1.0-alpha04.txt
@@ -0,0 +1,11 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public final class LiveDataReactiveSteamsKt {
+    ctor public LiveDataReactiveSteamsKt();
+    method public static inline <T> androidx.lifecycle.LiveData<T> toLiveData(org.reactivestreams.Publisher<T>);
+    method public static inline <T> org.reactivestreams.Publisher<T> toPublisher(androidx.lifecycle.LiveData<T>, androidx.lifecycle.LifecycleOwner lifecycle);
+  }
+
+}
+
diff --git a/lifecycle/reactivestreams/ktx/api/res-2.1.0-alpha04.txt b/lifecycle/reactivestreams/ktx/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/reactivestreams/ktx/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/reactivestreams/ktx/api/restricted_2.1.0-alpha04.txt b/lifecycle/reactivestreams/ktx/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/reactivestreams/ktx/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/runtime/api/2.1.0-alpha04.txt b/lifecycle/runtime/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..0a652c0
--- /dev/null
+++ b/lifecycle/runtime/api/2.1.0-alpha04.txt
@@ -0,0 +1,20 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public class LifecycleRegistry extends androidx.lifecycle.Lifecycle {
+    ctor public LifecycleRegistry(androidx.lifecycle.LifecycleOwner);
+    method public void addObserver(androidx.lifecycle.LifecycleObserver);
+    method public androidx.lifecycle.Lifecycle.State getCurrentState();
+    method public int getObserverCount();
+    method public void handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event);
+    method @Deprecated @MainThread public void markState(androidx.lifecycle.Lifecycle.State);
+    method public void removeObserver(androidx.lifecycle.LifecycleObserver);
+    method @MainThread public void setCurrentState(androidx.lifecycle.Lifecycle.State);
+  }
+
+  @Deprecated public interface LifecycleRegistryOwner extends androidx.lifecycle.LifecycleOwner {
+    method @Deprecated public androidx.lifecycle.LifecycleRegistry getLifecycle();
+  }
+
+}
+
diff --git a/lifecycle/runtime/api/res-2.1.0-alpha04.txt b/lifecycle/runtime/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/runtime/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/runtime/api/restricted_2.1.0-alpha04.txt b/lifecycle/runtime/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..c79f82d
--- /dev/null
+++ b/lifecycle/runtime/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ReportFragment extends android.app.Fragment {
+    ctor public ReportFragment();
+    method public static void injectIfNeededIn(android.app.Activity!);
+  }
+
+}
+
diff --git a/lifecycle/service/api/2.1.0-alpha04.txt b/lifecycle/service/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..a12d86e
--- /dev/null
+++ b/lifecycle/service/api/2.1.0-alpha04.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public class LifecycleService extends android.app.Service implements androidx.lifecycle.LifecycleOwner {
+    ctor public LifecycleService();
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method @CallSuper public android.os.IBinder? onBind(android.content.Intent);
+    method @CallSuper public void onStart(android.content.Intent, int);
+  }
+
+  public class ServiceLifecycleDispatcher {
+    ctor public ServiceLifecycleDispatcher(androidx.lifecycle.LifecycleOwner);
+    method public androidx.lifecycle.Lifecycle getLifecycle();
+    method public void onServicePreSuperOnBind();
+    method public void onServicePreSuperOnCreate();
+    method public void onServicePreSuperOnDestroy();
+    method public void onServicePreSuperOnStart();
+  }
+
+}
+
diff --git a/lifecycle/service/api/res-2.1.0-alpha04.txt b/lifecycle/service/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/service/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/service/api/restricted_2.1.0-alpha04.txt b/lifecycle/service/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/service/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java
index 3dabc13..e5beb04 100644
--- a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java
+++ b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java
@@ -29,7 +29,7 @@
  * implement {@link #create(String, Class, SavedStateHandle)} to actually instantiate
  * {@code ViewModels}.
  */
-public abstract class AbstractSavedStateVMFactory implements ViewModelProvider.KeyedFactory {
+public abstract class AbstractSavedStateVMFactory extends ViewModelProvider.KeyedFactory {
     static final String TAG_SAVED_STATE_HANDLE_CONTROLLER = "androidx.lifecycle.savedstate.vm.tag";
 
     private final SavedStateRegistry mSavedStateRegistry;
@@ -66,6 +66,19 @@
         return viewmodel;
     }
 
+    @NonNull
+    @Override
+    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
+        // ViewModelProvider calls correct create that support same modelClass with different keys
+        // If a developer manually calls this method, there is no "key" in picture, so factory
+        // simply uses classname internally as as key.
+        String canonicalName = modelClass.getCanonicalName();
+        if (canonicalName == null) {
+            throw new IllegalArgumentException("Local and anonymous classes can not be ViewModels");
+        }
+        return create(canonicalName, modelClass);
+    }
+
     /**
      * Creates a new instance of the given {@code Class}.
      * <p>
diff --git a/lifecycle/viewmodel/api/2.1.0-alpha03.txt b/lifecycle/viewmodel/api/2.1.0-alpha03.txt
index 0a6e010..d30b55f 100644
--- a/lifecycle/viewmodel/api/2.1.0-alpha03.txt
+++ b/lifecycle/viewmodel/api/2.1.0-alpha03.txt
@@ -14,8 +14,6 @@
   public class ViewModelProvider {
     ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.Factory);
     ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.Factory);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.KeyedFactory);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.KeyedFactory);
     method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(Class<T>);
     method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(String, Class<T>);
   }
@@ -29,10 +27,6 @@
     method public <T extends androidx.lifecycle.ViewModel> T create(Class<T>);
   }
 
-  public static interface ViewModelProvider.KeyedFactory {
-    method public <T extends androidx.lifecycle.ViewModel> T create(String, Class<T>);
-  }
-
   public static class ViewModelProvider.NewInstanceFactory implements androidx.lifecycle.ViewModelProvider.Factory {
     ctor public ViewModelProvider.NewInstanceFactory();
     method public <T extends androidx.lifecycle.ViewModel> T create(Class<T>);
diff --git a/lifecycle/viewmodel/api/2.1.0-alpha04.txt b/lifecycle/viewmodel/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..d30b55f
--- /dev/null
+++ b/lifecycle/viewmodel/api/2.1.0-alpha04.txt
@@ -0,0 +1,45 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public class AndroidViewModel extends androidx.lifecycle.ViewModel {
+    ctor public AndroidViewModel(android.app.Application);
+    method public <T extends android.app.Application> T getApplication();
+  }
+
+  public abstract class ViewModel {
+    ctor public ViewModel();
+    method protected void onCleared();
+  }
+
+  public class ViewModelProvider {
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.Factory);
+    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.Factory);
+    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(Class<T>);
+    method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(String, Class<T>);
+  }
+
+  public static class ViewModelProvider.AndroidViewModelFactory extends androidx.lifecycle.ViewModelProvider.NewInstanceFactory {
+    ctor public ViewModelProvider.AndroidViewModelFactory(android.app.Application);
+    method public static androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory getInstance(android.app.Application);
+  }
+
+  public static interface ViewModelProvider.Factory {
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T>);
+  }
+
+  public static class ViewModelProvider.NewInstanceFactory implements androidx.lifecycle.ViewModelProvider.Factory {
+    ctor public ViewModelProvider.NewInstanceFactory();
+    method public <T extends androidx.lifecycle.ViewModel> T create(Class<T>);
+  }
+
+  public class ViewModelStore {
+    ctor public ViewModelStore();
+    method public final void clear();
+  }
+
+  public interface ViewModelStoreOwner {
+    method public androidx.lifecycle.ViewModelStore getViewModelStore();
+  }
+
+}
+
diff --git a/lifecycle/viewmodel/api/current.txt b/lifecycle/viewmodel/api/current.txt
index 0a6e010..d30b55f 100644
--- a/lifecycle/viewmodel/api/current.txt
+++ b/lifecycle/viewmodel/api/current.txt
@@ -14,8 +14,6 @@
   public class ViewModelProvider {
     ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.Factory);
     ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.Factory);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStoreOwner, androidx.lifecycle.ViewModelProvider.KeyedFactory);
-    ctor public ViewModelProvider(androidx.lifecycle.ViewModelStore, androidx.lifecycle.ViewModelProvider.KeyedFactory);
     method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(Class<T>);
     method @MainThread public <T extends androidx.lifecycle.ViewModel> T get(String, Class<T>);
   }
@@ -29,10 +27,6 @@
     method public <T extends androidx.lifecycle.ViewModel> T create(Class<T>);
   }
 
-  public static interface ViewModelProvider.KeyedFactory {
-    method public <T extends androidx.lifecycle.ViewModel> T create(String, Class<T>);
-  }
-
   public static class ViewModelProvider.NewInstanceFactory implements androidx.lifecycle.ViewModelProvider.Factory {
     ctor public ViewModelProvider.NewInstanceFactory();
     method public <T extends androidx.lifecycle.ViewModel> T create(Class<T>);
diff --git a/lifecycle/viewmodel/api/res-2.1.0-alpha04.txt b/lifecycle/viewmodel/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/viewmodel/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/viewmodel/api/restricted_2.1.0-alpha04.txt b/lifecycle/viewmodel/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/viewmodel/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/viewmodel/ktx/api/2.1.0-alpha04.txt b/lifecycle/viewmodel/ktx/api/2.1.0-alpha04.txt
new file mode 100644
index 0000000..2c78583
--- /dev/null
+++ b/lifecycle/viewmodel/ktx/api/2.1.0-alpha04.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.lifecycle {
+
+  public final class ViewModelKt {
+    ctor public ViewModelKt();
+    method public static kotlinx.coroutines.CoroutineScope getViewModelScope(androidx.lifecycle.ViewModel);
+  }
+
+  public final class ViewModelLazy<VM extends androidx.lifecycle.ViewModel> implements kotlin.Lazy<VM> {
+    ctor public ViewModelLazy(kotlin.reflect.KClass<VM> viewModelClass, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelStoreOwner> ownerProducer, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory> factoryProducer);
+    method public VM getValue();
+    method public boolean isInitialized();
+    property public VM value;
+  }
+
+  public final class ViewModelProviderKt {
+    ctor public ViewModelProviderKt();
+    method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! get(androidx.lifecycle.ViewModelProvider);
+  }
+
+}
+
diff --git a/lifecycle/viewmodel/ktx/api/res-2.1.0-alpha04.txt b/lifecycle/viewmodel/ktx/api/res-2.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/viewmodel/ktx/api/res-2.1.0-alpha04.txt
diff --git a/lifecycle/viewmodel/ktx/api/restricted_2.1.0-alpha04.txt b/lifecycle/viewmodel/ktx/api/restricted_2.1.0-alpha04.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/lifecycle/viewmodel/ktx/api/restricted_2.1.0-alpha04.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java
index 121e191d6..fa2efb9 100644
--- a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java
+++ b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java
@@ -57,7 +57,7 @@
      * This is more advanced version of {@link Factory} that receives a key specified for requested
      * {@link ViewModel}.
      */
-    public interface KeyedFactory {
+    abstract static class KeyedFactory implements Factory {
         /**
          * Creates a new instance of the given {@code Class}.
          *
@@ -67,10 +67,18 @@
          * @return a newly created ViewModel
          */
         @NonNull
-        <T extends ViewModel> T create(@NonNull String key, @NonNull Class<T> modelClass);
+        public abstract <T extends ViewModel> T create(@NonNull String key,
+                @NonNull Class<T> modelClass);
+
+        @NonNull
+        @Override
+        public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
+            throw new UnsupportedOperationException("create(String, Class<?>) must be called on "
+                    + "implementaions of KeyedFactory");
+        }
     }
 
-    private final KeyedFactory mFactory;
+    private final Factory mFactory;
     private final ViewModelStore mViewModelStore;
 
     /**
@@ -95,31 +103,6 @@
      *                new {@code ViewModels}
      */
     public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
-        this(store, new FactoryWrapper(factory));
-    }
-
-    /**
-`     * Creates {@code ViewModelProvider}, which will create {@code ViewModels} via the given
-     * {@code Factory} and retain them in a store of the given {@code ViewModelStoreOwner}.
-     *
-     * @param owner   a {@code ViewModelStoreOwner} whose {@link ViewModelStore} will be used to
-     *                retain {@code ViewModels}
-     * @param factory a {@code KeyedFactory} which will be used to instantiate
-     *                new {@code ViewModels}
-     */
-    public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull KeyedFactory factory) {
-        this(owner.getViewModelStore(), factory);
-    }
-
-    /**
-     * Creates {@code ViewModelProvider}, which will create {@code ViewModels} via the given
-     * {@code Factory} and retain them in the given {@code store}.
-     *
-     * @param store   {@code ViewModelStore} where ViewModels will be stored.
-     * @param factory factory a {@code Factory} which will be used to instantiate
-     *                new {@code ViewModels}
-     */
-    public ViewModelProvider(@NonNull ViewModelStore store, @NonNull KeyedFactory factory) {
         mFactory = factory;
         mViewModelStore = store;
     }
@@ -175,8 +158,11 @@
                 // TODO: log a warning.
             }
         }
-
-        viewModel = mFactory.create(key, modelClass);
+        if (mFactory instanceof KeyedFactory) {
+            viewModel = ((KeyedFactory) (mFactory)).create(key, modelClass);
+        } else {
+            viewModel = (mFactory).create(modelClass);
+        }
         mViewModelStore.put(key, viewModel);
         //noinspection unchecked
         return (T) viewModel;
@@ -255,17 +241,4 @@
             return super.create(modelClass);
         }
     }
-
-    private static class FactoryWrapper implements KeyedFactory {
-        private final Factory mFactory;
-
-        FactoryWrapper(Factory factory) {
-            mFactory = factory;
-        }
-
-        @Override
-        public <T extends ViewModel> T create(String key, Class<T> modelClass) {
-            return mFactory.create(modelClass);
-        }
-    }
 }
diff --git a/loader/api/1.1.0-beta02.ignore b/loader/api/1.1.0-beta02.ignore
new file mode 100644
index 0000000..4376069
--- /dev/null
+++ b/loader/api/1.1.0-beta02.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+DeprecationMismatch: androidx.loader.content.AsyncTaskLoader#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]):
+    Method androidx.loader.content.AsyncTaskLoader.dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.loader.content.CursorLoader#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]):
+    Method androidx.loader.content.CursorLoader.dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+
+
diff --git a/loader/api/1.1.0-beta02.txt b/loader/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..8b3df8a
--- /dev/null
+++ b/loader/api/1.1.0-beta02.txt
@@ -0,0 +1,102 @@
+// Signature format: 3.0
+package androidx.loader.app {
+
+  public abstract class LoaderManager {
+    ctor public LoaderManager();
+    method @MainThread public abstract void destroyLoader(int);
+    method @Deprecated public abstract void dump(String!, java.io.FileDescriptor!, java.io.PrintWriter!, String[]!);
+    method public static void enableDebugLogging(boolean);
+    method public static <T extends androidx.lifecycle.LifecycleOwner & androidx.lifecycle.ViewModelStoreOwner> androidx.loader.app.LoaderManager getInstance(T);
+    method public abstract <D> androidx.loader.content.Loader<D>? getLoader(int);
+    method public boolean hasRunningLoaders();
+    method @MainThread public abstract <D> androidx.loader.content.Loader<D> initLoader(int, android.os.Bundle?, androidx.loader.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract void markForRedelivery();
+    method @MainThread public abstract <D> androidx.loader.content.Loader<D> restartLoader(int, android.os.Bundle?, androidx.loader.app.LoaderManager.LoaderCallbacks<D>);
+  }
+
+  public static interface LoaderManager.LoaderCallbacks<D> {
+    method @MainThread public androidx.loader.content.Loader<D> onCreateLoader(int, android.os.Bundle?);
+    method @MainThread public void onLoadFinished(androidx.loader.content.Loader<D>, D!);
+    method @MainThread public void onLoaderReset(androidx.loader.content.Loader<D>);
+  }
+
+}
+
+package androidx.loader.content {
+
+  public abstract class AsyncTaskLoader<D> extends androidx.loader.content.Loader<D> {
+    ctor public AsyncTaskLoader(android.content.Context);
+    method public void cancelLoadInBackground();
+    method protected java.util.concurrent.Executor getExecutor();
+    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 androidx.loader.content.AsyncTaskLoader<android.database.Cursor> {
+    ctor public CursorLoader(android.content.Context);
+    ctor public CursorLoader(android.content.Context, android.net.Uri, String[]?, String?, String[]?, String?);
+    method public void deliverResult(android.database.Cursor!);
+    method public String[]? getProjection();
+    method public String? getSelection();
+    method public String[]? getSelectionArgs();
+    method public 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(String[]?);
+    method public void setSelection(String?);
+    method public void setSelectionArgs(String[]?);
+    method public void setSortOrder(String?);
+    method public void setUri(android.net.Uri);
+  }
+
+  public class Loader<D> {
+    ctor public Loader(android.content.Context);
+    method @MainThread public void abandon();
+    method @MainThread public boolean cancelLoad();
+    method public void commitContentChanged();
+    method public String dataToString(D?);
+    method @MainThread public void deliverCancellation();
+    method @MainThread public void deliverResult(D?);
+    method @Deprecated public void dump(String!, java.io.FileDescriptor!, java.io.PrintWriter!, String[]!);
+    method @MainThread 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 @MainThread protected void onAbandon();
+    method @MainThread protected boolean onCancelLoad();
+    method @MainThread public void onContentChanged();
+    method @MainThread protected void onForceLoad();
+    method @MainThread protected void onReset();
+    method @MainThread protected void onStartLoading();
+    method @MainThread protected void onStopLoading();
+    method @MainThread public void registerListener(int, androidx.loader.content.Loader.OnLoadCompleteListener<D>);
+    method @MainThread public void registerOnLoadCanceledListener(androidx.loader.content.Loader.OnLoadCanceledListener<D>);
+    method @MainThread public void reset();
+    method public void rollbackContentChanged();
+    method @MainThread public final void startLoading();
+    method @MainThread public void stopLoading();
+    method public boolean takeContentChanged();
+    method @MainThread public void unregisterListener(androidx.loader.content.Loader.OnLoadCompleteListener<D>);
+    method @MainThread public void unregisterOnLoadCanceledListener(androidx.loader.content.Loader.OnLoadCanceledListener<D>);
+  }
+
+  public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+    ctor public Loader.ForceLoadContentObserver();
+  }
+
+  public static interface Loader.OnLoadCanceledListener<D> {
+    method public void onLoadCanceled(androidx.loader.content.Loader<D>);
+  }
+
+  public static interface Loader.OnLoadCompleteListener<D> {
+    method public void onLoadComplete(androidx.loader.content.Loader<D>, D?);
+  }
+
+}
+
diff --git a/loader/api/res-1.1.0-beta02.txt b/loader/api/res-1.1.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/loader/api/res-1.1.0-beta02.txt
diff --git a/loader/api/restricted_1.1.0-beta02.ignore b/loader/api/restricted_1.1.0-beta02.ignore
new file mode 100644
index 0000000..4376069
--- /dev/null
+++ b/loader/api/restricted_1.1.0-beta02.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+DeprecationMismatch: androidx.loader.content.AsyncTaskLoader#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]):
+    Method androidx.loader.content.AsyncTaskLoader.dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+DeprecationMismatch: androidx.loader.content.CursorLoader#dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]):
+    Method androidx.loader.content.CursorLoader.dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]): @Deprecated annotation (present) and @deprecated doc tag (not present) do not match
+
+
diff --git a/loader/api/restricted_1.1.0-beta02.txt b/loader/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/loader/api/restricted_1.1.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/media/api/1.1.0-alpha03.txt b/media/api/1.1.0-alpha03.txt
new file mode 100644
index 0000000..c4e14c0
--- /dev/null
+++ b/media/api/1.1.0-alpha03.txt
@@ -0,0 +1,702 @@
+// Signature format: 3.0
+package android.support.v4.media {
+
+  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(String, android.support.v4.media.MediaBrowserCompat.ItemCallback);
+    method public 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(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.SearchCallback);
+    method public void sendCustomAction(String, android.os.Bundle!, android.support.v4.media.MediaBrowserCompat.CustomActionCallback?);
+    method public void subscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+    method public void subscribe(String, android.os.Bundle, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+    method public void unsubscribe(String);
+    method public void unsubscribe(String, android.support.v4.media.MediaBrowserCompat.SubscriptionCallback);
+    field public static final String CUSTOM_ACTION_DOWNLOAD = "android.support.v4.media.action.DOWNLOAD";
+    field public static final String CUSTOM_ACTION_REMOVE_DOWNLOADED_FILE = "android.support.v4.media.action.REMOVE_DOWNLOADED_FILE";
+    field public static final String EXTRA_DOWNLOAD_PROGRESS = "android.media.browse.extra.DOWNLOAD_PROGRESS";
+    field public static final String EXTRA_MEDIA_ID = "android.media.browse.extra.MEDIA_ID";
+    field public static final String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+    field public static final 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 abstract static class MediaBrowserCompat.CustomActionCallback {
+    ctor public MediaBrowserCompat.CustomActionCallback();
+    method public void onError(String!, android.os.Bundle!, android.os.Bundle!);
+    method public void onProgressUpdate(String!, android.os.Bundle!, android.os.Bundle!);
+    method public void onResult(String!, android.os.Bundle!, android.os.Bundle!);
+  }
+
+  public abstract static class MediaBrowserCompat.ItemCallback {
+    ctor public MediaBrowserCompat.ItemCallback();
+    method public void onError(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(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 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 abstract static class MediaBrowserCompat.SearchCallback {
+    ctor public MediaBrowserCompat.SearchCallback();
+    method public void onError(String, android.os.Bundle!);
+    method public void onSearchResult(String, android.os.Bundle!, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+  }
+
+  public abstract static class MediaBrowserCompat.SubscriptionCallback {
+    ctor public MediaBrowserCompat.SubscriptionCallback();
+    method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+    method public void onChildrenLoaded(String, java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>, android.os.Bundle);
+    method public void onError(String);
+    method public void onError(String, android.os.Bundle);
+  }
+
+  public final class MediaDescriptionCompat implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.support.v4.media.MediaDescriptionCompat! fromMediaDescription(Object!);
+    method public CharSequence? getDescription();
+    method public android.os.Bundle? getExtras();
+    method public android.graphics.Bitmap? getIconBitmap();
+    method public android.net.Uri? getIconUri();
+    method public Object! getMediaDescription();
+    method public String? getMediaId();
+    method public android.net.Uri? getMediaUri();
+    method public CharSequence? getSubtitle();
+    method public 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 String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+    field public static final 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(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(String?);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder! setMediaUri(android.net.Uri?);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder! setSubtitle(CharSequence?);
+    method public android.support.v4.media.MediaDescriptionCompat.Builder! setTitle(CharSequence?);
+  }
+
+  public final class MediaMetadataCompat implements android.os.Parcelable {
+    method public boolean containsKey(String!);
+    method public int describeContents();
+    method public static android.support.v4.media.MediaMetadataCompat! fromMediaMetadata(Object!);
+    method public android.graphics.Bitmap! getBitmap(String!);
+    method public android.os.Bundle! getBundle();
+    method public android.support.v4.media.MediaDescriptionCompat! getDescription();
+    method public long getLong(String!);
+    method public Object! getMediaMetadata();
+    method public android.support.v4.media.RatingCompat! getRating(String!);
+    method public String! getString(String!);
+    method public CharSequence! getText(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 String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
+    field public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+    field public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+    field public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+    field public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+    field public static final String METADATA_KEY_ART = "android.media.metadata.ART";
+    field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+    field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+    field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+    field public static final String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+    field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+    field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+    field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
+    field public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+    field public static final String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+    field public static final String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+    field public static final String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+    field public static final String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+    field public static final String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+    field public static final String METADATA_KEY_DOWNLOAD_STATUS = "android.media.metadata.DOWNLOAD_STATUS";
+    field public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+    field public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+    field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+    field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+    field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+    field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
+    field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+    field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+    field public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+    field public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+    field public static final 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(String!, android.graphics.Bitmap!);
+    method public android.support.v4.media.MediaMetadataCompat.Builder! putLong(String!, long);
+    method public android.support.v4.media.MediaMetadataCompat.Builder! putRating(String!, android.support.v4.media.RatingCompat!);
+    method public android.support.v4.media.MediaMetadataCompat.Builder! putString(String!, String!);
+    method public android.support.v4.media.MediaMetadataCompat.Builder! putText(String!, CharSequence!);
+  }
+
+  public final class RatingCompat implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.support.v4.media.RatingCompat! fromRating(Object!);
+    method public float getPercentRating();
+    method public 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
+  }
+
+}
+
+package android.support.v4.media.session {
+
+  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 Object! getMediaController();
+    method public android.support.v4.media.MediaMetadataCompat! getMetadata();
+    method public 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 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 @Deprecated public void removeQueueItemAt(int);
+    method public void sendCommand(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 abstract static 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(CharSequence!);
+    method public void onRepeatModeChanged(int);
+    method public void onSessionDestroyed();
+    method public void onSessionEvent(String!, android.os.Bundle!);
+    method public void onSessionReady();
+    method public void onShuffleModeChanged(int);
+  }
+
+  public static final class MediaControllerCompat.PlaybackInfo {
+    method public androidx.media.AudioAttributesCompat getAudioAttributes();
+    method @Deprecated 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 abstract static class MediaControllerCompat.TransportControls {
+    method public abstract void fastForward();
+    method public abstract void pause();
+    method public abstract void play();
+    method public abstract void playFromMediaId(String!, android.os.Bundle!);
+    method public abstract void playFromSearch(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(String!, android.os.Bundle!);
+    method public abstract void prepareFromSearch(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(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 String EXTRA_LEGACY_STREAM_TYPE = "android.media.session.extra.LEGACY_STREAM_TYPE";
+  }
+
+  public class MediaSessionCompat {
+    ctor public MediaSessionCompat(android.content.Context!, String!);
+    ctor public MediaSessionCompat(android.content.Context!, 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!, Object!);
+    method public android.support.v4.media.session.MediaControllerCompat! getController();
+    method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentControllerInfo();
+    method public Object! getMediaSession();
+    method public 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(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(androidx.media.VolumeProviderCompat!);
+    method public void setQueue(java.util.List<android.support.v4.media.session.MediaSessionCompat.QueueItem>!);
+    method public void setQueueTitle(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 String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE";
+    field public static final String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW";
+    field public static final String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD";
+    field public static final String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW";
+    field public static final String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE";
+    field public static final String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE";
+    field @Deprecated public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+    field public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; // 0x4
+    field @Deprecated 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 abstract static 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(String!, android.os.Bundle!, android.os.ResultReceiver!);
+    method public void onCustomAction(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(String!, android.os.Bundle!);
+    method public void onPlayFromSearch(String!, android.os.Bundle!);
+    method public void onPlayFromUri(android.net.Uri!, android.os.Bundle!);
+    method public void onPrepare();
+    method public void onPrepareFromMediaId(String!, android.os.Bundle!);
+    method public void onPrepareFromSearch(String!, android.os.Bundle!);
+    method public void onPrepareFromUri(android.net.Uri!, android.os.Bundle!);
+    method public void onRemoveQueueItem(android.support.v4.media.MediaDescriptionCompat!);
+    method @Deprecated public 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 interface MediaSessionCompat.OnActiveChangeListener {
+    method public 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(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 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(Object!);
+    method public 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(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 CharSequence! getErrorMessage();
+    method public android.os.Bundle? getExtras();
+    method public long getLastPositionUpdateTime();
+    method public float getPlaybackSpeed();
+    method public 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 @Deprecated public static final 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(String!, 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 @Deprecated public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(CharSequence!);
+    method public android.support.v4.media.session.PlaybackStateCompat.Builder! setErrorMessage(int, 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(Object!);
+    method public String! getAction();
+    method public Object! getCustomAction();
+    method public android.os.Bundle! getExtras();
+    method public int getIcon();
+    method public 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(String!, 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!);
+  }
+
+}
+
+package androidx.media {
+
+  public class AudioAttributesCompat implements androidx.versionedparcelable.VersionedParcelable {
+    method public int getContentType();
+    method public int getFlags();
+    method public int getLegacyStreamType();
+    method public int getUsage();
+    method public int getVolumeControlStream();
+    method public Object? unwrap();
+    method public static androidx.media.AudioAttributesCompat? wrap(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(androidx.media.AudioAttributesCompat!);
+    method public androidx.media.AudioAttributesCompat! build();
+    method public androidx.media.AudioAttributesCompat.Builder! setContentType(int);
+    method public androidx.media.AudioAttributesCompat.Builder! setFlags(int);
+    method public androidx.media.AudioAttributesCompat.Builder! setLegacyStreamType(int);
+    method public androidx.media.AudioAttributesCompat.Builder! setUsage(int);
+  }
+
+  public class AudioFocusRequestCompat {
+    method public androidx.media.AudioAttributesCompat getAudioAttributesCompat();
+    method public android.os.Handler getFocusChangeHandler();
+    method public int getFocusGain();
+    method public android.media.AudioManager.OnAudioFocusChangeListener getOnAudioFocusChangeListener();
+    method public boolean willPauseWhenDucked();
+  }
+
+  public static final class AudioFocusRequestCompat.Builder {
+    ctor public AudioFocusRequestCompat.Builder(int);
+    ctor public AudioFocusRequestCompat.Builder(androidx.media.AudioFocusRequestCompat);
+    method public androidx.media.AudioFocusRequestCompat! build();
+    method public androidx.media.AudioFocusRequestCompat.Builder setAudioAttributes(androidx.media.AudioAttributesCompat);
+    method public androidx.media.AudioFocusRequestCompat.Builder setFocusGain(int);
+    method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener);
+    method public androidx.media.AudioFocusRequestCompat.Builder setOnAudioFocusChangeListener(android.media.AudioManager.OnAudioFocusChangeListener, android.os.Handler);
+    method public androidx.media.AudioFocusRequestCompat.Builder setWillPauseWhenDucked(boolean);
+  }
+
+  public final class AudioManagerCompat {
+    method public static int abandonAudioFocusRequest(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+    method public static int requestAudioFocus(android.media.AudioManager, androidx.media.AudioFocusRequestCompat);
+    field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE = 4; // 0x4
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK = 3; // 0x3
+  }
+
+  public abstract class MediaBrowserServiceCompat extends android.app.Service {
+    ctor public MediaBrowserServiceCompat();
+    method public void dump(java.io.FileDescriptor!, java.io.PrintWriter!, String[]!);
+    method public final android.os.Bundle! getBrowserRootHints();
+    method public final androidx.media.MediaSessionManager.RemoteUserInfo getCurrentBrowserInfo();
+    method public android.support.v4.media.session.MediaSessionCompat.Token? getSessionToken();
+    method public void notifyChildrenChanged(String);
+    method public void notifyChildrenChanged(String, android.os.Bundle);
+    method public android.os.IBinder! onBind(android.content.Intent!);
+    method public void onCustomAction(String, android.os.Bundle!, androidx.media.MediaBrowserServiceCompat.Result<android.os.Bundle>);
+    method public abstract androidx.media.MediaBrowserServiceCompat.BrowserRoot? onGetRoot(String, int, android.os.Bundle?);
+    method public abstract void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>);
+    method public void onLoadChildren(String, androidx.media.MediaBrowserServiceCompat.Result<java.util.List<android.support.v4.media.MediaBrowserCompat.MediaItem>>, android.os.Bundle);
+    method public void onLoadItem(String!, androidx.media.MediaBrowserServiceCompat.Result<android.support.v4.media.MediaBrowserCompat.MediaItem>);
+    method public void onSearch(String, android.os.Bundle!, androidx.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 String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+  }
+
+  public static final class MediaBrowserServiceCompat.BrowserRoot {
+    ctor public MediaBrowserServiceCompat.BrowserRoot(String, android.os.Bundle?);
+    method public android.os.Bundle! getExtras();
+    method public String! getRootId();
+    field public static final String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+    field public static final String EXTRA_RECENT = "android.service.media.extra.RECENT";
+    field public static final String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+    field @Deprecated public static final 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 MediaSessionManager {
+    method public static androidx.media.MediaSessionManager getSessionManager(android.content.Context);
+    method public boolean isTrustedForMediaControl(androidx.media.MediaSessionManager.RemoteUserInfo);
+  }
+
+  public static final class MediaSessionManager.RemoteUserInfo {
+    ctor public MediaSessionManager.RemoteUserInfo(String, int, int);
+    method public String getPackageName();
+    method public int getPid();
+    method public int getUid();
+    field public static final String LEGACY_CONTROLLER = "android.media.session.MediaController";
+  }
+
+  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 Object! getVolumeProvider();
+    method public void onAdjustVolume(int);
+    method public void onSetVolumeTo(int);
+    method public void setCallback(androidx.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 abstract static class VolumeProviderCompat.Callback {
+    ctor public VolumeProviderCompat.Callback();
+    method public abstract void onVolumeChanged(androidx.media.VolumeProviderCompat!);
+  }
+
+}
+
+package androidx.media.app {
+
+  public class NotificationCompat {
+  }
+
+  public static class NotificationCompat.DecoratedMediaCustomViewStyle extends androidx.media.app.NotificationCompat.MediaStyle {
+    ctor public NotificationCompat.DecoratedMediaCustomViewStyle();
+  }
+
+  public static class NotificationCompat.MediaStyle extends androidx.core.app.NotificationCompat.Style {
+    ctor public NotificationCompat.MediaStyle();
+    ctor public NotificationCompat.MediaStyle(androidx.core.app.NotificationCompat.Builder!);
+    method public static android.support.v4.media.session.MediaSessionCompat.Token! getMediaSession(android.app.Notification!);
+    method public androidx.media.app.NotificationCompat.MediaStyle! setCancelButtonIntent(android.app.PendingIntent!);
+    method public androidx.media.app.NotificationCompat.MediaStyle! setMediaSession(android.support.v4.media.session.MediaSessionCompat.Token!);
+    method public androidx.media.app.NotificationCompat.MediaStyle! setShowActionsInCompactView(int...!);
+    method public androidx.media.app.NotificationCompat.MediaStyle! setShowCancelButton(boolean);
+  }
+
+}
+
+package androidx.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!);
+  }
+
+}
+
diff --git a/media/api/res-1.1.0-alpha03.txt b/media/api/res-1.1.0-alpha03.txt
new file mode 100644
index 0000000..7a1e44d
--- /dev/null
+++ b/media/api/res-1.1.0-alpha03.txt
@@ -0,0 +1,5 @@
+style TextAppearance_Compat_Notification_Info_Media
+style TextAppearance_Compat_Notification_Line2_Media
+style TextAppearance_Compat_Notification_Media
+style TextAppearance_Compat_Notification_Time_Media
+style TextAppearance_Compat_Notification_Title_Media
diff --git a/media/version-compat-tests/runtest.sh b/media/version-compat-tests/runtest.sh
index 184672f..f6321ea 100755
--- a/media/version-compat-tests/runtest.sh
+++ b/media/version-compat-tests/runtest.sh
@@ -28,6 +28,8 @@
 CLIENT_VERSION=""
 SERVICE_VERSION=""
 OPTION_TEST_TARGET=""
+VERSION_COMBINATION=""
+DEVICE_SERIAL=""
 
 function printRunTestUsage() {
   echo "Usage: ./runtest.sh <version_combination_number> [option]"
@@ -40,6 +42,7 @@
   echo ""
   echo "Option:"
   echo "    -t <class/method>: Only run the specific test class/method."
+  echo "    -s <serial>: Use device with the serial. Required if multiple devices are connected."
 }
 
 function runTest() {
@@ -53,11 +56,11 @@
   ./gradlew $SERVICE_MODULE_NAME:assembleDebugAndroidTest || { echo "Build failed. Aborting."; exit 1; }
 
   echo "Installing the test apks"
-  adb install -r "../../out/dist/$CLIENT_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
-  adb install -r "../../out/dist/$SERVICE_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
+  adb $DEVICE_SERIAL install -r "../../out/dist/$CLIENT_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
+  adb $DEVICE_SERIAL install -r "../../out/dist/$SERVICE_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
 
   echo "Running the tests"
-  local test_command="adb shell am instrument -w -e debug false -e client_version $CLIENT_VERSION -e service_version $SERVICE_VERSION"
+  local test_command="adb $DEVICE_SERIAL shell am instrument -w -e debug false -e client_version $CLIENT_VERSION -e service_version $SERVICE_VERSION"
   local client_test_runner="android.support.mediacompat.client.test/androidx.test.runner.AndroidJUnitRunner"
   local service_test_runner="android.support.mediacompat.service.test/androidx.test.runner.AndroidJUnitRunner"
 
@@ -85,23 +88,39 @@
   exit 1;
 fi
 
-if [[ $# -eq 0 || $1 -le 0 || $1 -gt 4 ]]
-then
-  printRunTestUsage
-  exit 1;
-fi
-
-if [[ ${2} == "-t" ]]; then
-  if [[ ${3} == *"client"* || ${3} == *"service"* ]]; then
-    OPTION_TEST_TARGET="-e class ${3}"
-  else
-    echo "Wrong test class/method name. Aborting."
-    echo "It should be in the form of \"<FULL_CLASS_NAME>[#METHOD_NAME]\"."
-    exit 1;
-  fi
-fi
-
 case ${1} in
+  1|2|3|4)
+    VERSION_COMBINATION=${1}
+    shift
+    ;;
+  *)
+    printRunTestUsage
+    exit 1;
+esac
+
+while (( "$#" )); do
+  case ${1} in
+    -t)
+      if [[ ${2} == *"client"* || ${2} == *"service"* ]]; then
+        OPTION_TEST_TARGET="-e class ${2}"
+      else
+        echo "Wrong test class/method name. Aborting."
+        echo "It should be in the form of \"<FULL_CLASS_NAME>[#METHOD_NAME]\"."
+        exit 1;
+      fi
+      shift 2
+      ;;
+    -s)
+      DEVICE_SERIAL="-s ${2}"
+      shift 2
+      ;;
+    *)
+      printRunTestUsage
+      exit 1;
+  esac
+done
+
+case ${VERSION_COMBINATION} in
   1)
      CLIENT_VERSION="tot"
      SERVICE_VERSION="tot"
diff --git a/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java b/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
index 853e0fd..4d3323b 100644
--- a/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
+++ b/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
@@ -26,6 +26,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.res.Resources;
+import android.graphics.drawable.ColorDrawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.util.AttributeSet;
@@ -636,6 +637,7 @@
                 R.dimen.mcv2_settings_offset);
         mSettingsWindow = new PopupWindow(mSettingsListView, mEmbeddedSettingsItemWidth,
                 LayoutParams.WRAP_CONTENT, true);
+        mSettingsWindow.setBackgroundDrawable(new ColorDrawable());
         mSettingsWindow.setOnDismissListener(mSettingsDismissListener);
 
         float titleBarHeight = mResources.getDimension(R.dimen.mcv2_title_bar_height);
diff --git a/media2/api/1.0.0-alpha05.txt b/media2/api/1.0.0-alpha05.txt
index 331fa20..ba118d1 100644
--- a/media2/api/1.0.0-alpha05.txt
+++ b/media2/api/1.0.0-alpha05.txt
@@ -339,11 +339,11 @@
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> selectTrack(int);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioSessionId(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAuxEffectSendLevel(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAuxEffectSendLevel(@FloatRange(from=0, to=1) float);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setMediaItem(androidx.media2.MediaItem);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackParams(androidx.media2.PlaybackParams);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlayerVolume(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(@FloatRange(from=0, to=1) float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlayerVolume(@FloatRange(from=0, to=1) float);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem>, androidx.media2.MediaMetadata?);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setRepeatMode(int);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setShuffleMode(int);
@@ -624,7 +624,7 @@
     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_NONE = 0; // 0x0
-    field public static final long UNKNOWN_TIME = -1L; // 0xffffffffffffffffL
+    field public static final long UNKNOWN_TIME = -9223372036854775808L; // 0x8000000000000000L
   }
 
   public abstract static class SessionPlayer.PlayerCallback {
diff --git a/media2/api/current.txt b/media2/api/current.txt
index 331fa20..ba118d1 100644
--- a/media2/api/current.txt
+++ b/media2/api/current.txt
@@ -339,11 +339,11 @@
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> selectTrack(int);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioAttributes(androidx.media.AudioAttributesCompat);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAudioSessionId(int);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAuxEffectSendLevel(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setAuxEffectSendLevel(@FloatRange(from=0, to=1) float);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setMediaItem(androidx.media2.MediaItem);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackParams(androidx.media2.PlaybackParams);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(float);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlayerVolume(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaybackSpeed(@FloatRange(from=0, to=1) float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlayerVolume(@FloatRange(from=0, to=1) float);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setPlaylist(java.util.List<androidx.media2.MediaItem>, androidx.media2.MediaMetadata?);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setRepeatMode(int);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.media2.SessionPlayer.PlayerResult> setShuffleMode(int);
@@ -624,7 +624,7 @@
     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_NONE = 0; // 0x0
-    field public static final long UNKNOWN_TIME = -1L; // 0xffffffffffffffffL
+    field public static final long UNKNOWN_TIME = -9223372036854775808L; // 0x8000000000000000L
   }
 
   public abstract static class SessionPlayer.PlayerCallback {
diff --git a/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java b/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java
index 8213785..f1b30da 100644
--- a/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java
+++ b/media2/src/androidTest/java/androidx/media2/MediaPlayerTest.java
@@ -825,7 +825,7 @@
         try {
             mPlayer.setMediaItem(null);
             fail();
-        } catch (IllegalArgumentException e) {
+        } catch (NullPointerException e) {
             // Expected exception
         }
     }
diff --git a/media2/src/androidTest/java/androidx/media2/TestUtils.java b/media2/src/androidTest/java/androidx/media2/TestUtils.java
index 16cae70..5f1e0b8 100644
--- a/media2/src/androidTest/java/androidx/media2/TestUtils.java
+++ b/media2/src/androidTest/java/androidx/media2/TestUtils.java
@@ -215,6 +215,7 @@
     public static void assertMediaItemListEquals(List<MediaItem> a, List<MediaItem> b) {
         if (a == null || b == null) {
             assertEquals(a, b);
+            return;
         }
         assertEquals(a.size(), b.size());
 
@@ -312,7 +313,7 @@
     }
 
     public static class Monitor {
-        private static final long MAX_TIME_OUT_MS = 20000;  // 20 seconds
+        private static final long DEFAULT_TIME_OUT_MS = 20000;  // 20 seconds
         private int mNumSignal;
 
         public synchronized void reset() {
@@ -329,19 +330,24 @@
         }
 
         public synchronized int waitForCountedSignals(int targetCount) throws InterruptedException {
-            return waitForCountedSignals(targetCount, MAX_TIME_OUT_MS * targetCount);
+            return waitForCountedSignals(targetCount, 0);
         }
 
         public synchronized boolean waitForSignal(long timeoutMs) throws InterruptedException {
             return waitForCountedSignals(1, timeoutMs) > 0;
         }
 
+        /**
+         * @param targetCount It should be greater than zero.
+         * @param timeoutMs It should be equals to or greater than zero. If this is zero,
+         *                  then internal default timeout will be used.
+         * @return The number of received signals within given timeoutMs.
+         * @throws InterruptedException
+         */
         public synchronized int waitForCountedSignals(int targetCount, long timeoutMs)
                 throws InterruptedException {
-            if (timeoutMs == 0) {
-                return waitForCountedSignals(targetCount);
-            }
-            long deadline = System.currentTimeMillis() + timeoutMs;
+            long internalTimeoutMs = timeoutMs > 0 ? timeoutMs : DEFAULT_TIME_OUT_MS * targetCount;
+            long deadline = System.currentTimeMillis() + internalTimeoutMs;
             while (mNumSignal < targetCount) {
                 long delay = deadline - System.currentTimeMillis();
                 if (delay <= 0) {
diff --git a/media2/src/main/java/androidx/media2/MediaController.java b/media2/src/main/java/androidx/media2/MediaController.java
index a1c4039..f63a57d 100644
--- a/media2/src/main/java/androidx/media2/MediaController.java
+++ b/media2/src/main/java/androidx/media2/MediaController.java
@@ -302,7 +302,15 @@
     }
 
     /**
-     * Requests that the player start or resume playback.
+     * Requests that the player starts or resumes playback.
+     * <p>
+     * If the player state is {@link SessionPlayer#PLAYER_STATE_IDLE}, the session would also call
+     * {@link SessionPlayer#prepare} and then {@link SessionPlayer#play} to start playback. If you
+     * want to have finer grained control of the playback start call {@link #prepare} manually
+     * before this. Calling {@link #prepare} in advance would help this method to start playback
+     * faster and also help to take audio focus at the last moment.
+     *
+     * @see #prepare
      */
     @NonNull
     public ListenableFuture<SessionResult> play() {
@@ -313,7 +321,10 @@
     }
 
     /**
-     * Requests that the player pause playback.
+     * Requests that the player pauses playback.
+     * <p>
+     * This would transfer the player state from {@link SessionPlayer#PLAYER_STATE_PLAYING} to
+     * {@link SessionPlayer#PLAYER_STATE_PAUSED}.
      */
     @NonNull
     public ListenableFuture<SessionResult> pause() {
@@ -324,11 +335,15 @@
     }
 
     /**
-     * Requests that the player prepare the media items for playback. In other words, other
-     * sessions can continue to play during the prepare of this session. This method can be used
-     * to speed up the start of the playback. Once the prepare is done, the player will change
-     * its playback state to {@link SessionPlayer#PLAYER_STATE_PAUSED}. Afterwards, {@link #play}
-     * can be called to start playback.
+     * Requests that the player prepares the media items for playback.
+     * <p>
+     * This would transfer the player state from {@link SessionPlayer#PLAYER_STATE_IDLE} to
+     * {@link SessionPlayer#PLAYER_STATE_PAUSED}.
+     * <p>
+     * Playback can be started without this. But this provides finer grained control of playback
+     * start. See {@link #play} for details.
+     *
+     * @see #play
      */
     @NonNull
     public ListenableFuture<SessionResult> prepare() {
diff --git a/media2/src/main/java/androidx/media2/MediaNotificationHandler.java b/media2/src/main/java/androidx/media2/MediaNotificationHandler.java
index b9f39d9..dbaabc6 100644
--- a/media2/src/main/java/androidx/media2/MediaNotificationHandler.java
+++ b/media2/src/main/java/androidx/media2/MediaNotificationHandler.java
@@ -77,13 +77,17 @@
         mNotificationChannelName = mServiceInstance.getResources().getString(
                 R.string.default_notification_channel_name);
 
-        mPlayAction = createNotificationAction(R.drawable.ic_play,
+        mPlayAction = createNotificationAction(
+                R.drawable.media_session_service_notification_ic_play,
                 R.string.play_button_content_description, ACTION_PLAY);
-        mPauseAction = createNotificationAction(R.drawable.ic_pause,
+        mPauseAction = createNotificationAction(
+                R.drawable.media_session_service_notification_ic_pause,
                 R.string.pause_button_content_description, ACTION_PAUSE);
-        mSkipToPrevAction = createNotificationAction(R.drawable.ic_skip_to_previous,
+        mSkipToPrevAction = createNotificationAction(
+                R.drawable.media_session_service_notification_ic_skip_to_previous,
                 R.string.skip_to_previous_item_button_content_description, ACTION_SKIP_TO_PREVIOUS);
-        mSkipToNextAction = createNotificationAction(R.drawable.ic_skip_to_next,
+        mSkipToNextAction = createNotificationAction(
+                R.drawable.media_session_service_notification_ic_skip_to_next,
                 R.string.skip_to_next_item_button_content_description, ACTION_SKIP_TO_NEXT);
     }
 
@@ -231,7 +235,7 @@
             return appIcon;
         } else {
             // App icon is not set.
-            return R.drawable.ic_music_note;
+            return R.drawable.media_session_service_notification_ic_music_note;
         }
     }
 
diff --git a/media2/src/main/java/androidx/media2/MediaPlayer.java b/media2/src/main/java/androidx/media2/MediaPlayer.java
index 5b2c128..39d48ac 100644
--- a/media2/src/main/java/androidx/media2/MediaPlayer.java
+++ b/media2/src/main/java/androidx/media2/MediaPlayer.java
@@ -28,6 +28,7 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.graphics.SurfaceTexture;
+import android.media.AudioManager;
 import android.media.DeniedByServerException;
 import android.media.MediaDrm;
 import android.media.MediaDrmException;
@@ -36,6 +37,7 @@
 import android.util.Log;
 import android.view.Surface;
 
+import androidx.annotation.FloatRange;
 import androidx.annotation.GuardedBy;
 import androidx.annotation.IntDef;
 import androidx.annotation.IntRange;
@@ -278,7 +280,7 @@
      * has already been played indicates that the next 30 percent of the
      * content to play has been buffered.
      *
-     * The {@code extra} parameter in {@link PlayerCallback#onInfo} is the
+     * <p>The {@code extra} parameter in {@link PlayerCallback#onInfo} is the
      * percentage (0-100) of the content that has been buffered or played thus far.
      * @see PlayerCallback#onInfo
      */
@@ -653,6 +655,11 @@
     @GuardedBy("mPlaylistLock")
     private boolean mSetMediaItemCalled;
 
+    /**
+     * Constructor to create a MediaPlayer instance.
+     *
+     * @param context A {@link Context} that will be used to resolve {@link UriMediaItem}.
+     */
     @SuppressLint("RestrictedApi")
     public MediaPlayer(@NonNull Context context) {
         mState = PLAYER_STATE_IDLE;
@@ -746,6 +753,11 @@
     /**
      * Prepares the media items for playback.
      *
+     * <p>
+     * After setting the media items and the display surface, you need to call this method.
+     * During this preparation, the player may allocate resources required to play, such as audio
+     * and video decoders.
+     *
      * @return a {@link ListenableFuture} which represents the pending completion of the command.
      * {@link PlayerResult} will be delivered when the command completes.
      */
@@ -799,7 +811,8 @@
     @Override
     @NonNull
     @SuppressLint("RestrictedApi")
-    public ListenableFuture<PlayerResult> setPlaybackSpeed(final float playbackSpeed) {
+    public ListenableFuture<PlayerResult> setPlaybackSpeed(
+            @FloatRange(from = 0, to = 1) final float playbackSpeed) {
         PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
@@ -844,7 +857,7 @@
     }
 
     @Override
-    public int getPlayerState() {
+    public @PlayerState int getPlayerState() {
         synchronized (mStateLock) {
             return mState;
         }
@@ -854,35 +867,47 @@
     @Override
     public long getCurrentPosition() {
         try {
-            return mPlayer.getCurrentPosition();
+            final long pos = mPlayer.getCurrentPosition();
+            if (pos >= 0) {
+                return pos;
+            }
         } catch (IllegalStateException e) {
-            return UNKNOWN_TIME;
+            // fall-through.
         }
+        return UNKNOWN_TIME;
     }
 
     @Override
     @SuppressLint("RestrictedApi")
     public long getDuration() {
         try {
-            return mPlayer.getDuration();
+            final long duration = mPlayer.getDuration();
+            if (duration >= 0) {
+                return duration;
+            }
         } catch (IllegalStateException e) {
-            return UNKNOWN_TIME;
+            // fall-through.
         }
+        return UNKNOWN_TIME;
     }
 
     @Override
     @SuppressLint("RestrictedApi")
     public long getBufferedPosition() {
         try {
-            return mPlayer.getBufferedPosition();
+            final long pos = mPlayer.getBufferedPosition();
+            if (pos >= 0) {
+                return pos;
+            }
         } catch (IllegalStateException e) {
-            return UNKNOWN_TIME;
+            // fall-through.
         }
+        return UNKNOWN_TIME;
     }
 
     @Override
     @SuppressLint("RestrictedApi")
-    public int getBufferingState() {
+    public @BuffState int getBufferingState() {
         Integer buffState;
         synchronized (mStateLock) {
             buffState = mMediaItemToBuffState.get(mPlayer.getCurrentMediaItem());
@@ -915,7 +940,7 @@
     @NonNull
     public ListenableFuture<PlayerResult> setMediaItem(@NonNull final MediaItem item) {
         if (item == null) {
-            throw new IllegalArgumentException("item shouldn't be null");
+            throw new NullPointerException("item shouldn't be null");
         }
         if (item instanceof FileMediaItem) {
             if (((FileMediaItem) item).isClosed()) {
@@ -945,8 +970,10 @@
     @Override
     public ListenableFuture<PlayerResult> setPlaylist(
             @NonNull final List<MediaItem> playlist, @Nullable final MediaMetadata metadata) {
-        if (playlist == null || playlist.isEmpty()) {
-            throw new IllegalArgumentException("playlist shouldn't be null or empty");
+        if (playlist == null) {
+            throw new NullPointerException("playlist shouldn't be null");
+        } else if (playlist.isEmpty()) {
+            throw new IllegalArgumentException("playlist shouldn't be empty");
         }
         String errorString = null;
         for (MediaItem item : playlist) {
@@ -1008,7 +1035,7 @@
     public ListenableFuture<PlayerResult> addPlaylistItem(
             final int index, @NonNull final MediaItem item) {
         if (item == null) {
-            throw new IllegalArgumentException("item shouldn't be null");
+            throw new NullPointerException("item shouldn't be null");
         }
         if (item instanceof FileMediaItem) {
             if (((FileMediaItem) item).isClosed()) {
@@ -1124,7 +1151,7 @@
     public ListenableFuture<PlayerResult> replacePlaylistItem(
             final int index, @NonNull final MediaItem item) {
         if (item == null) {
-            throw new IllegalArgumentException("item shouldn't be null");
+            throw new NullPointerException("item shouldn't be null");
         }
         if (item instanceof FileMediaItem) {
             if (((FileMediaItem) item).isClosed()) {
@@ -1508,10 +1535,11 @@
 
     /**
      * Sets the {@link Surface} to be used as the sink for the video portion of
-     * the media.  Setting a
-     * Surface will un-set any Surface or SurfaceHolder that was previously set.
+     * the media.
+     * <p>
+     * Setting a Surface will un-set any Surface or SurfaceHolder that was previously set.
      * A null surface will result in only the audio track being played.
-     *
+     * <p>
      * If the Surface sends frames to a {@link SurfaceTexture}, the timestamps
      * returned from {@link SurfaceTexture#getTimestamp()} will have an
      * unspecified zero point.  These timestamps cannot be directly compared
@@ -1548,17 +1576,22 @@
     /**
      * Sets the volume of the audio of the media to play, expressed as a linear multiplier
      * on the audio samples.
+     * <p>
      * Note that this volume is specific to the player, and is separate from stream volume
-     * used across the platform.<br>
+     * used across the platform.
+     * <p>
      * A value of 0.0f indicates muting, a value of 1.0f is the nominal unattenuated and unamplified
      * gain. See {@link #getMaxPlayerVolume()} for the volume range supported by this player.
+     * <p>
+     * The default player volume is 1.0f.
      *
      * @param volume a value between 0.0f and {@link #getMaxPlayerVolume()}.
      * @return a {@link ListenableFuture} which represents the pending completion of the command.
      * {@link PlayerResult} will be delivered when the command completes.
      */
     @NonNull
-    public ListenableFuture<PlayerResult> setPlayerVolume(final float volume) {
+    public ListenableFuture<PlayerResult> setPlayerVolume(
+            @FloatRange(from = 0, to = 1) final float volume) {
         PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
@@ -1619,12 +1652,13 @@
     }
 
     /**
-     * Sets playback rate using {@link PlaybackParams}. The player sets its internal
-     * PlaybackParams to the given input. This does not change the player state. For example,
-     * if this is called with the speed of 2.0f in {@link #PLAYER_STATE_PAUSED}, the player will
-     * just update internal property and stay paused. Once the client calls {@link #play()}
-     * afterwards, the player will start playback with the given speed. Calling this with zero
-     * speed is not allowed.
+     * Sets playback rate using {@link PlaybackParams}.
+     * <p>
+     * The player sets its internal PlaybackParams to the given input. This does not change the
+     * player state. For example, if this is called with the speed of 2.0f in
+     * {@link #PLAYER_STATE_PAUSED}, the player will just update internal property and stay paused.
+     * Once the client calls {@link #play()} afterwards, the player will start playback with the
+     * given speed. Calling this with zero speed is not allowed.
      *
      * @param params the playback params.
      * @return a {@link ListenableFuture} which represents the pending completion of the command.
@@ -1671,7 +1705,7 @@
      * that request is different from just-finished seekTo operation, i.e., the requested
      * position or mode is different.
      *
-     * @param msec the offset in milliseconds from the start to seek to.
+     * @param position the offset in milliseconds from the start to seek to.
      * When seeking to the given time position, there is no guarantee that the media item
      * has a frame located at the position. When this happens, a frame nearby will be rendered.
      * The value should be in the range of start and end positions defined in {@link MediaItem}.
@@ -1681,7 +1715,7 @@
      */
     @NonNull
     @SuppressLint("RestrictedApi")
-    public ListenableFuture<PlayerResult> seekTo(final long msec, @SeekMode final int mode) {
+    public ListenableFuture<PlayerResult> seekTo(final long position, @SeekMode final int mode) {
         PendingFuture<PlayerResult> pendingFuture =
                 new PendingFuture<PlayerResult>(mExecutor, true) {
             @Override
@@ -1691,7 +1725,7 @@
                 int mp2SeekMode = sSeekModeMap.containsKey(mode)
                         ? sSeekModeMap.get(mode) : MediaPlayer2.SEEK_NEXT_SYNC;
                 synchronized (mPendingCommands) {
-                    Object token = mPlayer.seekTo(msec, mp2SeekMode);
+                    Object token = mPlayer.seekTo(position, mp2SeekMode);
                     addPendingCommandLocked(MediaPlayer2.CALL_COMPLETED_SEEK_TO, future, token);
                 }
                 futures.add(future);
@@ -1742,6 +1776,8 @@
      * <p>This method must be called before {@link #setMediaItem} and {@link #setPlaylist} methods.
      * @return a {@link ListenableFuture} which represents the pending completion of the command.
      * {@link PlayerResult} will be delivered when the command completes.
+     *
+     * @see AudioManager#generateAudioSessionId
      */
     @NonNull
     @SuppressLint("RestrictedApi")
@@ -1768,8 +1804,8 @@
      * Returns the audio session ID.
      *
      * @return the audio session ID. {@see #setAudioSessionId(int)}
-     * Note that the audio session ID is 0 only if a problem occured when the MediaPlayer2 was
-     * contructed.
+     * Note that the audio session ID is 0 only if a problem occurred when the MediaPlayer2 was
+     * constructed.
      */
     @SuppressLint("RestrictedApi")
     public int getAudioSessionId() {
@@ -1829,7 +1865,8 @@
      */
     @NonNull
     @SuppressLint("RestrictedApi")
-    public ListenableFuture<PlayerResult> setAuxEffectSendLevel(final float level) {
+    public ListenableFuture<PlayerResult> setAuxEffectSendLevel(
+            @FloatRange(from = 0, to = 1) final float level) {
         PendingFuture<PlayerResult> pendingFuture = new PendingFuture<PlayerResult>(mExecutor) {
             @Override
             List<ResolvableFuture<PlayerResult>> onExecute() {
@@ -2111,6 +2148,7 @@
      * response is for an offline key request, a key-set identifier is returned that
      * can be used to later restore the keys to a new session with the method
      * {@link #restoreDrmKeys}.
+     * <p>
      * When the response is for a streaming or release request, null is returned.
      *
      * @param keySetId When the response is for a release request, keySetId identifies
@@ -2201,6 +2239,7 @@
     /**
      * Register a callback to be invoked for configuration of the DRM object before
      * the session is created.
+     * <p>
      * The callback will be invoked synchronously during the execution
      * of {@link #prepareDrm(UUID uuid)}.
      *
@@ -2682,7 +2721,7 @@
     public abstract static class PlayerCallback extends SessionPlayer.PlayerCallback {
         /**
          * Called to indicate the video size
-         *
+         * <p>
          * The video size (width and height) could be 0 if there was no video,
          * no display surface was set, or the value was not determined yet.
          *
@@ -2738,6 +2777,7 @@
 
         /**
          * Called when a discontinuity in the normal progression of the media time is detected.
+         * <p>
          * The "normal progression" of media time is defined as the expected increase of the
          * playback position when playing media, relative to the playback speed (for instance every
          * second, media time increases by two seconds when playing at 2x).<br>
@@ -2903,7 +2943,7 @@
      * is opened. This facilitates configuration of the properties, like
      * 'securityLevel', which has to be set after DRM scheme creation but
      * before the DRM session is opened.
-     *
+     * <p>
      * The only allowed DRM calls in this listener are {@link #getDrmPropertyString}
      * and {@link #setDrmPropertyString}.
      * @hide
diff --git a/media2/src/main/java/androidx/media2/MediaSession.java b/media2/src/main/java/androidx/media2/MediaSession.java
index ed4d99f..cca81ce 100644
--- a/media2/src/main/java/androidx/media2/MediaSession.java
+++ b/media2/src/main/java/androidx/media2/MediaSession.java
@@ -401,8 +401,9 @@
          * receives {@link MediaController.ControllerCallback#onDisconnected(MediaController)} and
          * cannot be used.
          * <p>
-         * The controller hasn't connected yet, so sending commands in this method to the controller
-         * will fail. For initial setup for the controller, use {@link #onPostConnect}.
+         * The controller hasn't connected yet in this method, so calls to the controller
+         * (e.g. {@link #sendCustomCommand}, {@link #setCustomLayout}) would be ignored. Override
+         * {@link #onPostConnect} for the custom initialization for the controller instead.
          *
          * @param session the session for this event
          * @param controller controller information.
@@ -420,6 +421,10 @@
         /**
          * Called immediately after a controller is connected. This is a convenient method to add
          * custom initialization between the session and a controller.
+         * <p>
+         * Note that calls to the controller (e.g. {@link #sendCustomCommand},
+         * {@link #setCustomLayout}) work here but don't work in {@link #onConnect} because the
+         * controller hasn't connected yet in {@link #onConnect}.
          *
          * @param session the session for this event
          * @param controller controller information.
diff --git a/media2/src/main/java/androidx/media2/MediaSessionImplBase.java b/media2/src/main/java/androidx/media2/MediaSessionImplBase.java
index dc26a9f..0dc3df6 100644
--- a/media2/src/main/java/androidx/media2/MediaSessionImplBase.java
+++ b/media2/src/main/java/androidx/media2/MediaSessionImplBase.java
@@ -178,28 +178,31 @@
                             MediaSessionService.SERVICE_INTERFACE);
                 }
                 sComponentNamesInitialized = true;
-                mbrComponent = sServiceComponentName;
             }
+            mbrComponent = sServiceComponentName;
         }
         if (mbrComponent == null) {
             // No service to revive playback after it's dead.
             // Create a PendingIntent that points to the runtime broadcast receiver.
-            mbrComponent = new ComponentName(context, context.getClass());
-            Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+            Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON, mSessionUri);
             intent.setPackage(context.getPackageName());
             mMediaButtonIntent = PendingIntent.getBroadcast(
                     context, 0 /* requestCode */, intent, 0 /* flags */);
 
+            // Creates a dummy ComponentName for MediaSessionCompat in pre-L.
+            // TODO: Replace this with the MediaButtonReceiver class.
+            mbrComponent = new ComponentName(context, context.getClass());
+
             // Create and register a BroadcastReceiver for receiving PendingIntent.
             // TODO: Introduce MediaButtonReceiver in AndroidManifest instead of this,
             //       or register only one receiver for all sessions.
             mBroadcastReceiver = new MediaButtonReceiver();
-            context.registerReceiver(mBroadcastReceiver,
-                    new IntentFilter(Intent.ACTION_MEDIA_BUTTON));
+            IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
+            filter.addDataScheme(mSessionUri.getScheme());
+            context.registerReceiver(mBroadcastReceiver, filter);
         } else {
             // Has MediaSessionService to revive playback after it's dead.
-            Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
-            intent.setData(mSessionUri);
+            Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON, mSessionUri);
             intent.setComponent(mbrComponent);
             if (Build.VERSION.SDK_INT >= 26) {
                 mMediaButtonIntent = PendingIntent.getForegroundService(mContext, 0, intent, 0);
diff --git a/media2/src/main/java/androidx/media2/SessionPlayer.java b/media2/src/main/java/androidx/media2/SessionPlayer.java
index 329278f..cfcff0f 100644
--- a/media2/src/main/java/androidx/media2/SessionPlayer.java
+++ b/media2/src/main/java/androidx/media2/SessionPlayer.java
@@ -274,7 +274,7 @@
      */
     public static final int SHUFFLE_MODE_GROUP = 2;
 
-    public static final long UNKNOWN_TIME = -1;
+    public static final long UNKNOWN_TIME = Long.MIN_VALUE;
 
     /**
      * Media item index is invalid. This value will be returned when the corresponding media item
@@ -288,17 +288,26 @@
 
     /**
      * Plays the playback.
+     * <p>
+     * This transfers the player state from {@link #PLAYER_STATE_PAUSED} to
+     * {@link #PLAYER_STATE_PLAYING}.
      */
     public abstract @NonNull ListenableFuture<PlayerResult> play();
 
     /**
      * Pauses playback.
+     * <p>
+     * This transfers the player state from {@link #PLAYER_STATE_PLAYING} to
+     * {@link #PLAYER_STATE_PAUSED}.
      */
     public abstract @NonNull ListenableFuture<PlayerResult> pause();
 
     /**
      * Prepares the media items for playback. During this time, the player may allocate resources
      * required to play, such as audio and video decoders.
+     * <p>
+     * This transfers the player state from {@link #PLAYER_STATE_IDLE} to
+     * {@link #PLAYER_STATE_PAUSED}.
      */
     public abstract @NonNull ListenableFuture<PlayerResult> prepare();
 
diff --git a/media2/src/main/res/drawable/ic_music_note.xml b/media2/src/main/res/drawable/media_session_service_notification_ic_music_note.xml
similarity index 100%
rename from media2/src/main/res/drawable/ic_music_note.xml
rename to media2/src/main/res/drawable/media_session_service_notification_ic_music_note.xml
diff --git a/media2/src/main/res/drawable/ic_pause.xml b/media2/src/main/res/drawable/media_session_service_notification_ic_pause.xml
similarity index 100%
rename from media2/src/main/res/drawable/ic_pause.xml
rename to media2/src/main/res/drawable/media_session_service_notification_ic_pause.xml
diff --git a/media2/src/main/res/drawable/ic_play.xml b/media2/src/main/res/drawable/media_session_service_notification_ic_play.xml
similarity index 100%
rename from media2/src/main/res/drawable/ic_play.xml
rename to media2/src/main/res/drawable/media_session_service_notification_ic_play.xml
diff --git a/media2/src/main/res/drawable/ic_skip_to_next.xml b/media2/src/main/res/drawable/media_session_service_notification_ic_skip_to_next.xml
similarity index 100%
rename from media2/src/main/res/drawable/ic_skip_to_next.xml
rename to media2/src/main/res/drawable/media_session_service_notification_ic_skip_to_next.xml
diff --git a/media2/src/main/res/drawable/ic_skip_to_previous.xml b/media2/src/main/res/drawable/media_session_service_notification_ic_skip_to_previous.xml
similarity index 100%
rename from media2/src/main/res/drawable/ic_skip_to_previous.xml
rename to media2/src/main/res/drawable/media_session_service_notification_ic_skip_to_previous.xml
diff --git a/media2/version-compat-tests/runtest.sh b/media2/version-compat-tests/runtest.sh
index a303057..b015445 100755
--- a/media2/version-compat-tests/runtest.sh
+++ b/media2/version-compat-tests/runtest.sh
@@ -28,6 +28,8 @@
 CLIENT_VERSION=""
 SERVICE_VERSION=""
 OPTION_TEST_TARGET=""
+VERSION_COMBINATION=""
+DEVICE_SERIAL=""
 
 function printRunTestUsage() {
   echo "Usage: ./runtest.sh <version_combination_number> [option]"
@@ -41,6 +43,7 @@
   echo ""
   echo "Option:"
   echo "    -t <class/method>: Only run the specific test class/method."
+  echo "    -s <serial>: Use device with the serial. Required if multiple devices are connected."
 }
 
 function runTest() {
@@ -54,11 +57,11 @@
   ./gradlew $SERVICE_MODULE_NAME:assembleDebugAndroidTest || { echo "Build failed. Aborting."; exit 1; }
 
   echo "Installing the test apks"
-  adb install -r "../../out/dist/$CLIENT_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
-  adb install -r "../../out/dist/$SERVICE_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
+  adb $DEVICE_SERIAL install -r "../../out/dist/$CLIENT_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
+  adb $DEVICE_SERIAL install -r "../../out/dist/$SERVICE_MODULE_NAME.apk" || { echo "Apk installation failed. Aborting."; exit 1; }
 
   echo "Running the tests"
-  local test_command="adb shell am instrument -w -e debug false -e client_version $CLIENT_VERSION -e service_version $SERVICE_VERSION"
+  local test_command="adb $DEVICE_SERIAL shell am instrument -w -e debug false -e client_version $CLIENT_VERSION -e service_version $SERVICE_VERSION"
   local client_test_runner="androidx.media2.test.client.test/androidx.test.runner.AndroidJUnitRunner"
   local service_test_runner="androidx.media2.test.service.test/androidx.test.runner.AndroidJUnitRunner"
 
@@ -86,24 +89,40 @@
   exit 1;
 fi
 
-if [[ $# -eq 0 || $1 -le 0 || $1 -gt 4 ]]
-then
-  printRunTestUsage
-  exit 1;
-fi
-
-if [[ ${2} == "-t" ]]; then
-  if [[ ${3} == *"client"* || ${3} == *"service"* ]]; then
-    OPTION_TEST_TARGET="-e class ${3}"
-  else
-    echo "Wrong test class/method name. Aborting."
-    echo "It should be in the form of \"<FULL_CLASS_NAME>[#METHOD_NAME]\"."
-    exit 1;
-  fi
-fi
-
 case ${1} in
   1)
+    VERSION_COMBINATION=${1}
+    shift
+    ;;
+  *)
+    printRunTestUsage
+    exit 1;
+esac
+
+while (( "$#" )); do
+  case ${1} in
+    -t)
+      if [[ ${2} == *"client"* || ${2} == *"service"* ]]; then
+        OPTION_TEST_TARGET="-e class ${2}"
+      else
+        echo "Wrong test class/method name. Aborting."
+        echo "It should be in the form of \"<FULL_CLASS_NAME>[#METHOD_NAME]\"."
+        exit 1;
+      fi
+      shift 2
+      ;;
+    -s)
+      DEVICE_SERIAL="-s ${2}"
+      shift 2
+      ;;
+    *)
+      printRunTestUsage
+      exit 1;
+  esac
+done
+
+case ${VERSION_COMBINATION} in
+  1)
      CLIENT_VERSION="tot"
      SERVICE_VERSION="tot"
      runTest
diff --git a/mediarouter/api/1.1.0-alpha03.txt b/mediarouter/api/1.1.0-alpha03.txt
new file mode 100644
index 0000000..f0c7243
--- /dev/null
+++ b/mediarouter/api/1.1.0-alpha03.txt
@@ -0,0 +1,522 @@
+// Signature format: 3.0
+package androidx.mediarouter.app {
+
+  public class MediaRouteActionProvider extends androidx.core.view.ActionProvider {
+    ctor public MediaRouteActionProvider(android.content.Context!);
+    method public void enableDynamicGroup();
+    method public androidx.mediarouter.app.MediaRouteDialogFactory getDialogFactory();
+    method public androidx.mediarouter.app.MediaRouteButton? getMediaRouteButton();
+    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
+    method public android.view.View! onCreateActionView();
+    method public androidx.mediarouter.app.MediaRouteButton! onCreateMediaRouteButton();
+    method public void setAlwaysVisible(boolean);
+    method public void setDialogFactory(androidx.mediarouter.app.MediaRouteDialogFactory);
+    method public void setRouteSelector(androidx.mediarouter.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 void enableDynamicGroup();
+    method public androidx.mediarouter.app.MediaRouteDialogFactory getDialogFactory();
+    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
+    method public void onAttachedToWindow();
+    method public void onDetachedFromWindow();
+    method public void setAlwaysVisible(boolean);
+    method public void setDialogFactory(androidx.mediarouter.app.MediaRouteDialogFactory);
+    method public void setRemoteIndicatorDrawable(android.graphics.drawable.Drawable!);
+    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector!);
+    method public boolean showDialog();
+  }
+
+  public class MediaRouteChooserDialog extends androidx.appcompat.app.AppCompatDialog {
+    ctor public MediaRouteChooserDialog(android.content.Context!);
+    ctor public MediaRouteChooserDialog(android.content.Context!, int);
+    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
+    method public boolean onFilterRoute(androidx.mediarouter.media.MediaRouter.RouteInfo);
+    method public void onFilterRoutes(java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo>);
+    method public void refreshRoutes();
+    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector);
+  }
+
+  public class MediaRouteChooserDialogFragment extends androidx.fragment.app.DialogFragment {
+    ctor public MediaRouteChooserDialogFragment();
+    method public androidx.mediarouter.media.MediaRouteSelector! getRouteSelector();
+    method public androidx.mediarouter.app.MediaRouteChooserDialog! onCreateChooserDialog(android.content.Context!, android.os.Bundle!);
+    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector!);
+  }
+
+  public class MediaRouteControllerDialog extends androidx.appcompat.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 androidx.mediarouter.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 androidx.fragment.app.DialogFragment {
+    ctor public MediaRouteControllerDialogFragment();
+    method public androidx.mediarouter.app.MediaRouteControllerDialog! onCreateControllerDialog(android.content.Context!, android.os.Bundle!);
+  }
+
+  public class MediaRouteDialogFactory {
+    ctor public MediaRouteDialogFactory();
+    method public static androidx.mediarouter.app.MediaRouteDialogFactory getDefault();
+    method public androidx.mediarouter.app.MediaRouteChooserDialogFragment onCreateChooserDialogFragment();
+    method public androidx.mediarouter.app.MediaRouteControllerDialogFragment onCreateControllerDialogFragment();
+  }
+
+  public class MediaRouteDiscoveryFragment extends androidx.fragment.app.Fragment {
+    ctor public MediaRouteDiscoveryFragment();
+    method public androidx.mediarouter.media.MediaRouter! getMediaRouter();
+    method public androidx.mediarouter.media.MediaRouteSelector! getRouteSelector();
+    method public androidx.mediarouter.media.MediaRouter.Callback! onCreateCallback();
+    method public int onPrepareCallbackFlags();
+    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector!);
+  }
+
+}
+
+package androidx.mediarouter.media {
+
+  public final class MediaControlIntent {
+    field public static final String ACTION_END_SESSION = "android.media.intent.action.END_SESSION";
+    field public static final String ACTION_ENQUEUE = "android.media.intent.action.ENQUEUE";
+    field public static final String ACTION_GET_SESSION_STATUS = "android.media.intent.action.GET_SESSION_STATUS";
+    field public static final String ACTION_GET_STATUS = "android.media.intent.action.GET_STATUS";
+    field public static final String ACTION_PAUSE = "android.media.intent.action.PAUSE";
+    field public static final String ACTION_PLAY = "android.media.intent.action.PLAY";
+    field public static final String ACTION_REMOVE = "android.media.intent.action.REMOVE";
+    field public static final String ACTION_RESUME = "android.media.intent.action.RESUME";
+    field public static final String ACTION_SEEK = "android.media.intent.action.SEEK";
+    field public static final String ACTION_SEND_MESSAGE = "android.media.intent.action.SEND_MESSAGE";
+    field public static final String ACTION_START_SESSION = "android.media.intent.action.START_SESSION";
+    field public static final String ACTION_STOP = "android.media.intent.action.STOP";
+    field public static final String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
+    field public static final String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
+    field public static final 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 String EXTRA_ERROR_CODE = "android.media.intent.extra.ERROR_CODE";
+    field public static final String EXTRA_ITEM_CONTENT_POSITION = "android.media.intent.extra.ITEM_POSITION";
+    field public static final String EXTRA_ITEM_HTTP_HEADERS = "android.media.intent.extra.HTTP_HEADERS";
+    field public static final String EXTRA_ITEM_ID = "android.media.intent.extra.ITEM_ID";
+    field public static final String EXTRA_ITEM_METADATA = "android.media.intent.extra.ITEM_METADATA";
+    field public static final String EXTRA_ITEM_STATUS = "android.media.intent.extra.ITEM_STATUS";
+    field public static final String EXTRA_ITEM_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.ITEM_STATUS_UPDATE_RECEIVER";
+    field public static final String EXTRA_MESSAGE = "android.media.intent.extra.MESSAGE";
+    field public static final String EXTRA_MESSAGE_RECEIVER = "android.media.intent.extra.MESSAGE_RECEIVER";
+    field public static final String EXTRA_SESSION_ID = "android.media.intent.extra.SESSION_ID";
+    field public static final String EXTRA_SESSION_STATUS = "android.media.intent.extra.SESSION_STATUS";
+    field public static final String EXTRA_SESSION_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.SESSION_STATUS_UPDATE_RECEIVER";
+  }
+
+  public final class MediaItemMetadata {
+    field public static final String KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+    field public static final String KEY_ALBUM_TITLE = "android.media.metadata.ALBUM_TITLE";
+    field public static final String KEY_ARTIST = "android.media.metadata.ARTIST";
+    field public static final String KEY_ARTWORK_URI = "android.media.metadata.ARTWORK_URI";
+    field public static final String KEY_AUTHOR = "android.media.metadata.AUTHOR";
+    field public static final String KEY_COMPOSER = "android.media.metadata.COMPOSER";
+    field public static final String KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+    field public static final String KEY_DURATION = "android.media.metadata.DURATION";
+    field public static final String KEY_TITLE = "android.media.metadata.TITLE";
+    field public static final String KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+    field public static final String KEY_YEAR = "android.media.metadata.YEAR";
+  }
+
+  public final class MediaItemStatus {
+    method public android.os.Bundle! asBundle();
+    method public static androidx.mediarouter.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 String EXTRA_HTTP_RESPONSE_HEADERS = "android.media.status.extra.HTTP_RESPONSE_HEADERS";
+    field public static final 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(androidx.mediarouter.media.MediaItemStatus!);
+    method public androidx.mediarouter.media.MediaItemStatus! build();
+    method public androidx.mediarouter.media.MediaItemStatus.Builder! setContentDuration(long);
+    method public androidx.mediarouter.media.MediaItemStatus.Builder! setContentPosition(long);
+    method public androidx.mediarouter.media.MediaItemStatus.Builder! setExtras(android.os.Bundle!);
+    method public androidx.mediarouter.media.MediaItemStatus.Builder! setPlaybackState(int);
+    method public androidx.mediarouter.media.MediaItemStatus.Builder! setTimestamp(long);
+  }
+
+  public final class MediaRouteDescriptor {
+    method public android.os.Bundle! asBundle();
+    method public boolean canDisconnectAndKeepPlaying();
+    method public static androidx.mediarouter.media.MediaRouteDescriptor! fromBundle(android.os.Bundle!);
+    method public int getConnectionState();
+    method public java.util.List<android.content.IntentFilter>! getControlFilters();
+    method public String! getDescription();
+    method public int getDeviceType();
+    method public android.os.Bundle! getExtras();
+    method public android.net.Uri! getIconUri();
+    method public String! getId();
+    method public 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 @Deprecated public boolean isConnecting();
+    method public boolean isDynamicGroupRoute();
+    method public boolean isEnabled();
+    method public boolean isValid();
+  }
+
+  public static final class MediaRouteDescriptor.Builder {
+    ctor public MediaRouteDescriptor.Builder(String!, String!);
+    ctor public MediaRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteDescriptor!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! addControlFilter(android.content.IntentFilter!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! addControlFilters(java.util.Collection<android.content.IntentFilter>!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor! build();
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setCanDisconnect(boolean);
+    method @Deprecated public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setConnecting(boolean);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setConnectionState(int);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setDescription(String!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setDeviceType(int);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setEnabled(boolean);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setExtras(android.os.Bundle!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setIconUri(android.net.Uri!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setId(String!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setIsDynamicGroupRoute(boolean);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setName(String!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setPlaybackStream(int);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setPlaybackType(int);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setPresentationDisplayId(int);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setSettingsActivity(android.content.IntentSender!);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setVolume(int);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setVolumeHandling(int);
+    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setVolumeMax(int);
+  }
+
+  public final class MediaRouteDiscoveryRequest {
+    ctor public MediaRouteDiscoveryRequest(androidx.mediarouter.media.MediaRouteSelector!, boolean);
+    method public android.os.Bundle! asBundle();
+    method public static androidx.mediarouter.media.MediaRouteDiscoveryRequest! fromBundle(android.os.Bundle!);
+    method public androidx.mediarouter.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 androidx.mediarouter.media.MediaRouteProviderDescriptor? getDescriptor();
+    method public final androidx.mediarouter.media.MediaRouteDiscoveryRequest? getDiscoveryRequest();
+    method public final android.os.Handler! getHandler();
+    method public final androidx.mediarouter.media.MediaRouteProvider.ProviderMetadata! getMetadata();
+    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController? onCreateDynamicGroupRouteController(String);
+    method public androidx.mediarouter.media.MediaRouteProvider.RouteController? onCreateRouteController(String);
+    method public void onDiscoveryRequestChanged(androidx.mediarouter.media.MediaRouteDiscoveryRequest?);
+    method public final void setCallback(androidx.mediarouter.media.MediaRouteProvider.Callback?);
+    method public final void setDescriptor(androidx.mediarouter.media.MediaRouteProviderDescriptor?);
+    method public final void setDiscoveryRequest(androidx.mediarouter.media.MediaRouteDiscoveryRequest!);
+  }
+
+  public abstract static class MediaRouteProvider.Callback {
+    ctor public MediaRouteProvider.Callback();
+    method public void onDescriptorChanged(androidx.mediarouter.media.MediaRouteProvider, androidx.mediarouter.media.MediaRouteProviderDescriptor?);
+  }
+
+  public abstract static class MediaRouteProvider.DynamicGroupRouteController extends androidx.mediarouter.media.MediaRouteProvider.RouteController {
+    ctor public MediaRouteProvider.DynamicGroupRouteController();
+    method public String? getGroupableSelectionTitle();
+    method public String? getTransferableSectionTitle();
+    method public abstract void onAddMemberRoute(String);
+    method public abstract void onRemoveMemberRoute(String!);
+    method public abstract void onUpdateMemberRoutes(java.util.List<java.lang.String>?);
+    method public abstract void setOnDynamicRoutesChangedListener(java.util.concurrent.Executor, androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.OnDynamicRoutesChangedListener);
+  }
+
+  public static final class MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor {
+    method public androidx.mediarouter.media.MediaRouteDescriptor getRouteDescriptor();
+    method public int getSelectionState();
+    method public boolean isGroupable();
+    method public boolean isTransferable();
+    method public boolean isUnselectable();
+    field public static final int SELECTED = 3; // 0x3
+    field public static final int SELECTING = 2; // 0x2
+    field public static final int UNSELECTED = 1; // 0x1
+    field public static final int UNSELECTING = 0; // 0x0
+  }
+
+  public static final class MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder {
+    ctor public MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteDescriptor!);
+    ctor public MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!);
+    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor! build();
+    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setIsGroupable(boolean);
+    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setIsTransferable(boolean);
+    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setIsUnselectable(boolean);
+    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setSelectionState(int);
+  }
+
+  public static interface MediaRouteProvider.DynamicGroupRouteController.OnDynamicRoutesChangedListener {
+    method public void onRoutesChanged(androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController!, java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor>!);
+  }
+
+  public static final class MediaRouteProvider.ProviderMetadata {
+    method public android.content.ComponentName! getComponentName();
+    method public String! getPackageName();
+  }
+
+  public abstract static class MediaRouteProvider.RouteController {
+    ctor public MediaRouteProvider.RouteController();
+    method public boolean onControlRequest(android.content.Intent!, androidx.mediarouter.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 androidx.mediarouter.media.MediaRouteProviderDescriptor! fromBundle(android.os.Bundle!);
+    method public java.util.List<androidx.mediarouter.media.MediaRouteDescriptor> getRoutes();
+    method public boolean isValid();
+    method public boolean supportsDynamicGroupRoute();
+  }
+
+  public static final class MediaRouteProviderDescriptor.Builder {
+    ctor public MediaRouteProviderDescriptor.Builder();
+    ctor public MediaRouteProviderDescriptor.Builder(androidx.mediarouter.media.MediaRouteProviderDescriptor!);
+    method public androidx.mediarouter.media.MediaRouteProviderDescriptor.Builder! addRoute(androidx.mediarouter.media.MediaRouteDescriptor!);
+    method public androidx.mediarouter.media.MediaRouteProviderDescriptor.Builder! addRoutes(java.util.Collection<androidx.mediarouter.media.MediaRouteDescriptor>!);
+    method public androidx.mediarouter.media.MediaRouteProviderDescriptor! build();
+    method public androidx.mediarouter.media.MediaRouteProviderDescriptor.Builder! setSupportsDynamicGroupRoute(boolean);
+  }
+
+  public abstract class MediaRouteProviderService extends android.app.Service {
+    ctor public MediaRouteProviderService();
+    method public androidx.mediarouter.media.MediaRouteProvider! getMediaRouteProvider();
+    method public android.os.IBinder! onBind(android.content.Intent!);
+    method public abstract androidx.mediarouter.media.MediaRouteProvider! onCreateMediaRouteProvider();
+    field public static final String SERVICE_INTERFACE = "android.media.MediaRouteProviderService";
+  }
+
+  public final class MediaRouteSelector {
+    method public android.os.Bundle! asBundle();
+    method public boolean contains(androidx.mediarouter.media.MediaRouteSelector!);
+    method public static androidx.mediarouter.media.MediaRouteSelector! fromBundle(android.os.Bundle?);
+    method public java.util.List<java.lang.String>! getControlCategories();
+    method public boolean hasControlCategory(String!);
+    method public boolean isEmpty();
+    method public boolean isValid();
+    method public boolean matchesControlFilters(java.util.List<android.content.IntentFilter>!);
+    field public static final androidx.mediarouter.media.MediaRouteSelector! EMPTY;
+  }
+
+  public static final class MediaRouteSelector.Builder {
+    ctor public MediaRouteSelector.Builder();
+    ctor public MediaRouteSelector.Builder(androidx.mediarouter.media.MediaRouteSelector);
+    method public androidx.mediarouter.media.MediaRouteSelector.Builder addControlCategories(java.util.Collection<java.lang.String>);
+    method public androidx.mediarouter.media.MediaRouteSelector.Builder addControlCategory(String);
+    method public androidx.mediarouter.media.MediaRouteSelector.Builder addSelector(androidx.mediarouter.media.MediaRouteSelector);
+    method public androidx.mediarouter.media.MediaRouteSelector build();
+  }
+
+  public final class MediaRouter {
+    method public void addCallback(androidx.mediarouter.media.MediaRouteSelector!, androidx.mediarouter.media.MediaRouter.Callback!);
+    method public void addCallback(androidx.mediarouter.media.MediaRouteSelector, androidx.mediarouter.media.MediaRouter.Callback, int);
+    method public void addProvider(androidx.mediarouter.media.MediaRouteProvider);
+    method public void addRemoteControlClient(Object);
+    method public androidx.mediarouter.media.MediaRouter.RouteInfo! getBluetoothRoute();
+    method public androidx.mediarouter.media.MediaRouter.RouteInfo getDefaultRoute();
+    method public static androidx.mediarouter.media.MediaRouter! getInstance(android.content.Context);
+    method public android.support.v4.media.session.MediaSessionCompat.Token! getMediaSessionToken();
+    method public java.util.List<androidx.mediarouter.media.MediaRouter.ProviderInfo>! getProviders();
+    method public java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo>! getRoutes();
+    method public androidx.mediarouter.media.MediaRouter.RouteInfo getSelectedRoute();
+    method public boolean isRouteAvailable(androidx.mediarouter.media.MediaRouteSelector, int);
+    method public void removeCallback(androidx.mediarouter.media.MediaRouter.Callback);
+    method public void removeProvider(androidx.mediarouter.media.MediaRouteProvider);
+    method public void removeRemoteControlClient(Object);
+    method public void selectRoute(androidx.mediarouter.media.MediaRouter.RouteInfo);
+    method public void setMediaSession(Object!);
+    method public void setMediaSessionCompat(android.support.v4.media.session.MediaSessionCompat!);
+    method public void unselect(int);
+    method public androidx.mediarouter.media.MediaRouter.RouteInfo updateSelectedRoute(androidx.mediarouter.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 abstract static class MediaRouter.Callback {
+    ctor public MediaRouter.Callback();
+    method public void onProviderAdded(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.ProviderInfo!);
+    method public void onProviderChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.ProviderInfo!);
+    method public void onProviderRemoved(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.ProviderInfo!);
+    method public void onRouteAdded(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method public void onRouteChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method public void onRoutePresentationDisplayChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method public void onRouteRemoved(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method public void onRouteSelected(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method public void onRouteUnselected(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method public void onRouteUnselected(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!, int);
+    method public void onRouteVolumeChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+  }
+
+  public abstract static class MediaRouter.ControlRequestCallback {
+    ctor public MediaRouter.ControlRequestCallback();
+    method public void onError(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 String! getPackageName();
+    method public androidx.mediarouter.media.MediaRouteProvider! getProviderInstance();
+    method public java.util.List<androidx.mediarouter.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 String? getDescription();
+    method public int getDeviceType();
+    method public android.os.Bundle? getExtras();
+    method public android.net.Uri! getIconUri();
+    method public String getId();
+    method public String! getName();
+    method public int getPlaybackStream();
+    method public int getPlaybackType();
+    method public android.view.Display? getPresentationDisplay();
+    method public androidx.mediarouter.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 @Deprecated public boolean isConnecting();
+    method public boolean isDefault();
+    method public boolean isDeviceSpeaker();
+    method public boolean isEnabled();
+    method public boolean isSelected();
+    method public boolean matchesSelector(androidx.mediarouter.media.MediaRouteSelector);
+    method public void requestSetVolume(int);
+    method public void requestUpdateVolume(int);
+    method public void select();
+    method public void sendControlRequest(android.content.Intent, androidx.mediarouter.media.MediaRouter.ControlRequestCallback?);
+    method public boolean supportsControlAction(String, String);
+    method public boolean supportsControlCategory(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 androidx.mediarouter.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(androidx.mediarouter.media.MediaSessionStatus!);
+    method public androidx.mediarouter.media.MediaSessionStatus! build();
+    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setExtras(android.os.Bundle!);
+    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setQueuePaused(boolean);
+    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setSessionState(int);
+    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setTimestamp(long);
+  }
+
+  public class RemotePlaybackClient {
+    ctor public RemotePlaybackClient(android.content.Context!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method public void endSession(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
+    method public void enqueue(android.net.Uri!, String!, android.os.Bundle!, long, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
+    method public String! getSessionId();
+    method public void getSessionStatus(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
+    method public void getStatus(String!, android.os.Bundle!, androidx.mediarouter.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!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
+    method public void play(android.net.Uri!, String!, android.os.Bundle!, long, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
+    method public void release();
+    method public void remove(String!, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
+    method public void resume(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
+    method public void seek(String!, long, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
+    method public void sendMessage(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
+    method public void setOnMessageReceivedListener(androidx.mediarouter.media.RemotePlaybackClient.OnMessageReceivedListener!);
+    method public void setSessionId(String!);
+    method public void setStatusCallback(androidx.mediarouter.media.RemotePlaybackClient.StatusCallback!);
+    method public void startSession(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
+    method public void stop(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
+  }
+
+  public abstract static class RemotePlaybackClient.ActionCallback {
+    ctor public RemotePlaybackClient.ActionCallback();
+    method public void onError(String!, int, android.os.Bundle!);
+  }
+
+  public abstract static class RemotePlaybackClient.ItemActionCallback extends androidx.mediarouter.media.RemotePlaybackClient.ActionCallback {
+    ctor public RemotePlaybackClient.ItemActionCallback();
+    method public void onResult(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!, String!, androidx.mediarouter.media.MediaItemStatus!);
+  }
+
+  public static interface RemotePlaybackClient.OnMessageReceivedListener {
+    method public void onMessageReceived(String!, android.os.Bundle!);
+  }
+
+  public abstract static class RemotePlaybackClient.SessionActionCallback extends androidx.mediarouter.media.RemotePlaybackClient.ActionCallback {
+    ctor public RemotePlaybackClient.SessionActionCallback();
+    method public void onResult(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!);
+  }
+
+  public abstract static class RemotePlaybackClient.StatusCallback {
+    ctor public RemotePlaybackClient.StatusCallback();
+    method public void onItemStatusChanged(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!, String!, androidx.mediarouter.media.MediaItemStatus!);
+    method public void onSessionChanged(String!);
+    method public void onSessionStatusChanged(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!);
+  }
+
+}
+
diff --git a/mediarouter/api/res-1.1.0-alpha03.txt b/mediarouter/api/res-1.1.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mediarouter/api/res-1.1.0-alpha03.txt
diff --git a/mediarouter/api/restricted_1.1.0-alpha03.txt b/mediarouter/api/restricted_1.1.0-alpha03.txt
new file mode 100644
index 0000000..fc748c3
--- /dev/null
+++ b/mediarouter/api/restricted_1.1.0-alpha03.txt
@@ -0,0 +1,82 @@
+// Signature format: 3.0
+package androidx.mediarouter.app {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MediaRouteCastDialog extends androidx.appcompat.app.AppCompatDialog {
+    ctor public MediaRouteCastDialog(android.content.Context!);
+    ctor public MediaRouteCastDialog(android.content.Context!, int);
+    method public android.support.v4.media.session.MediaSessionCompat.Token! getMediaSession();
+    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
+    method public boolean onFilterRoute(androidx.mediarouter.media.MediaRouter.RouteInfo);
+    method public void onFilterRoutes(java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo>);
+    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector);
+  }
+
+  public class MediaRouteChooserDialogFragment extends androidx.fragment.app.DialogFragment {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.app.MediaRouteDevicePickerDialog! onCreateDevicePickerDialog(android.content.Context!);
+  }
+
+  public class MediaRouteControllerDialogFragment extends androidx.fragment.app.DialogFragment {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteSelector! getRouteSelector();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.app.MediaRouteCastDialog! onCreateCastDialog(android.content.Context!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MediaRouteDevicePickerDialog extends androidx.appcompat.app.AppCompatDialog {
+    ctor public MediaRouteDevicePickerDialog(android.content.Context!);
+    ctor public MediaRouteDevicePickerDialog(android.content.Context!, int);
+    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
+    method public boolean onFilterRoute(androidx.mediarouter.media.MediaRouter.RouteInfo);
+    method public void onFilterRoutes(java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo>);
+    method public void refreshRoutes();
+    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector);
+  }
+
+}
+
+package androidx.mediarouter.media {
+
+  public final class MediaRouteDescriptor {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.List<java.lang.String>! getGroupMemberIds();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getMaxClientVersion();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getMinClientVersion();
+  }
+
+  public static final class MediaRouteDescriptor.Builder {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteDescriptor.Builder! addGroupMemberId(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteDescriptor.Builder! addGroupMemberIds(java.util.Collection<java.lang.String>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteDescriptor.Builder! removeGroupMemberId(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setMaxClientVersion(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setMinClientVersion(int);
+  }
+
+  public abstract class MediaRouteProvider {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteProvider.RouteController? onCreateRouteController(String, String);
+  }
+
+  @IntDef({androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.UNSELECTING, androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.UNSELECTED, androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.SELECTING, androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.SELECTED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.SelectionState {
+  }
+
+  public final class MediaRouter {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addMemberToSelectedRoute(androidx.mediarouter.media.MediaRouter.RouteInfo!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void removeMemberFromSelectedRoute(androidx.mediarouter.media.MediaRouter.RouteInfo!);
+  }
+
+  public static class MediaRouter.RouteInfo {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController? getDynamicGroupController();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo> getMemberRoutes();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getPresentationDisplayId();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.mediarouter.media.MediaRouteProvider! getProviderInstance();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getSelectionState();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isDefaultOrBluetooth();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isDynamicRoute();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isGroup();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isGroupable();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isTransferable();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isUnselectable();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int DEVICE_TYPE_BLUETOOTH = 3; // 0x3
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int PRESENTATION_DISPLAY_ID_NONE = -1; // 0xffffffff
+  }
+
+}
+
diff --git a/preference/api/1.1.0-alpha05.txt b/preference/api/1.1.0-alpha05.txt
new file mode 100644
index 0000000..0edd4f7b
--- /dev/null
+++ b/preference/api/1.1.0-alpha05.txt
@@ -0,0 +1,543 @@
+// Signature format: 3.0
+package androidx.preference {
+
+  public class CheckBoxPreference extends androidx.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 androidx.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 CharSequence! getDialogMessage();
+    method public CharSequence! getDialogTitle();
+    method public CharSequence! getNegativeButtonText();
+    method public CharSequence! getPositiveButtonText();
+    method public void setDialogIcon(android.graphics.drawable.Drawable!);
+    method public void setDialogIcon(int);
+    method public void setDialogLayoutResource(int);
+    method public void setDialogMessage(CharSequence!);
+    method public void setDialogMessage(int);
+    method public void setDialogTitle(CharSequence!);
+    method public void setDialogTitle(int);
+    method public void setNegativeButtonText(CharSequence!);
+    method public void setNegativeButtonText(int);
+    method public void setPositiveButtonText(CharSequence!);
+    method public void setPositiveButtonText(int);
+  }
+
+  public static interface DialogPreference.TargetFragment {
+    method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
+  }
+
+  public class DropDownPreference extends androidx.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 androidx.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 androidx.preference.EditTextPreference.OnBindEditTextListener? getOnBindEditTextListener();
+    method public String! getText();
+    method public void setOnBindEditTextListener(androidx.preference.EditTextPreference.OnBindEditTextListener?);
+    method public void setText(String!);
+  }
+
+  public static interface EditTextPreference.OnBindEditTextListener {
+    method public void onBindEditText(android.widget.EditText);
+  }
+
+  public static final class EditTextPreference.SimpleSummaryProvider implements androidx.preference.Preference.SummaryProvider<androidx.preference.EditTextPreference> {
+    method public static androidx.preference.EditTextPreference.SimpleSummaryProvider! getInstance();
+    method public CharSequence! provideSummary(androidx.preference.EditTextPreference!);
+  }
+
+  @Deprecated public class EditTextPreferenceDialogFragment extends androidx.preference.PreferenceDialogFragment {
+    ctor @Deprecated public EditTextPreferenceDialogFragment();
+    method @Deprecated public static androidx.preference.EditTextPreferenceDialogFragment! newInstance(String!);
+    method @Deprecated protected void onBindDialogView(android.view.View!);
+    method @Deprecated public void onDialogClosed(boolean);
+  }
+
+  public class EditTextPreferenceDialogFragmentCompat extends androidx.preference.PreferenceDialogFragmentCompat {
+    ctor public EditTextPreferenceDialogFragmentCompat();
+    method public static androidx.preference.EditTextPreferenceDialogFragmentCompat! newInstance(String!);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class ListPreference extends androidx.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(String!);
+    method public CharSequence[]! getEntries();
+    method public CharSequence! getEntry();
+    method public CharSequence[]! getEntryValues();
+    method public String! getValue();
+    method public void setEntries(CharSequence[]!);
+    method public void setEntries(@ArrayRes int);
+    method public void setEntryValues(CharSequence[]!);
+    method public void setEntryValues(@ArrayRes int);
+    method public void setValue(String!);
+    method public void setValueIndex(int);
+  }
+
+  public static final class ListPreference.SimpleSummaryProvider implements androidx.preference.Preference.SummaryProvider<androidx.preference.ListPreference> {
+    method public static androidx.preference.ListPreference.SimpleSummaryProvider! getInstance();
+    method public CharSequence! provideSummary(androidx.preference.ListPreference!);
+  }
+
+  @Deprecated public class ListPreferenceDialogFragment extends androidx.preference.PreferenceDialogFragment {
+    ctor @Deprecated public ListPreferenceDialogFragment();
+    method @Deprecated public static androidx.preference.ListPreferenceDialogFragment! newInstance(String!);
+    method @Deprecated public void onDialogClosed(boolean);
+    method @Deprecated protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder!);
+  }
+
+  public class ListPreferenceDialogFragmentCompat extends androidx.preference.PreferenceDialogFragmentCompat {
+    ctor public ListPreferenceDialogFragmentCompat();
+    method public static androidx.preference.ListPreferenceDialogFragmentCompat! newInstance(String!);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class MultiSelectListPreference extends androidx.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(String!);
+    method public CharSequence[]! getEntries();
+    method public CharSequence[]! getEntryValues();
+    method protected boolean[]! getSelectedItems();
+    method public java.util.Set<java.lang.String>! getValues();
+    method public void setEntries(CharSequence[]!);
+    method public void setEntries(@ArrayRes int);
+    method public void setEntryValues(CharSequence[]!);
+    method public void setEntryValues(@ArrayRes int);
+    method public void setValues(java.util.Set<java.lang.String>!);
+  }
+
+  @Deprecated public class MultiSelectListPreferenceDialogFragment extends androidx.preference.PreferenceDialogFragment {
+    ctor @Deprecated public MultiSelectListPreferenceDialogFragment();
+    method @Deprecated public static androidx.preference.MultiSelectListPreferenceDialogFragment! newInstance(String!);
+    method @Deprecated public void onDialogClosed(boolean);
+    method @Deprecated protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder!);
+  }
+
+  public class MultiSelectListPreferenceDialogFragmentCompat extends androidx.preference.PreferenceDialogFragmentCompat {
+    ctor public MultiSelectListPreferenceDialogFragmentCompat();
+    method public static androidx.preference.MultiSelectListPreferenceDialogFragmentCompat! newInstance(String!);
+    method public void onDialogClosed(boolean);
+  }
+
+  public class Preference implements java.lang.Comparable<androidx.preference.Preference> {
+    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(Object!);
+    method public int compareTo(androidx.preference.Preference);
+    method protected <T extends androidx.preference.Preference> T? findPreferenceInHierarchy(String);
+    method public android.content.Context! getContext();
+    method public String! getDependency();
+    method public android.os.Bundle! getExtras();
+    method public String! getFragment();
+    method public android.graphics.drawable.Drawable! getIcon();
+    method public android.content.Intent! getIntent();
+    method public String! getKey();
+    method public final int getLayoutResource();
+    method public androidx.preference.Preference.OnPreferenceChangeListener! getOnPreferenceChangeListener();
+    method public androidx.preference.Preference.OnPreferenceClickListener! getOnPreferenceClickListener();
+    method public int getOrder();
+    method public androidx.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 String! getPersistedString(String!);
+    method public java.util.Set<java.lang.String>! getPersistedStringSet(java.util.Set<java.lang.String>!);
+    method public androidx.preference.PreferenceDataStore? getPreferenceDataStore();
+    method public androidx.preference.PreferenceManager! getPreferenceManager();
+    method public android.content.SharedPreferences! getSharedPreferences();
+    method public boolean getShouldDisableView();
+    method public CharSequence! getSummary();
+    method public final androidx.preference.Preference.SummaryProvider? getSummaryProvider();
+    method public CharSequence! getTitle();
+    method public final int getWidgetLayoutResource();
+    method public boolean hasKey();
+    method public boolean isCopyingEnabled();
+    method public boolean isEnabled();
+    method public boolean isIconSpaceReserved();
+    method public boolean isPersistent();
+    method public boolean isSelectable();
+    method public final boolean isShown();
+    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(androidx.preference.PreferenceManager!);
+    method public void onBindViewHolder(androidx.preference.PreferenceViewHolder!);
+    method protected void onClick();
+    method public void onDependencyChanged(androidx.preference.Preference!, boolean);
+    method public void onDetached();
+    method protected Object! onGetDefaultValue(android.content.res.TypedArray!, int);
+    method @CallSuper public void onInitializeAccessibilityNodeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
+    method public void onParentChanged(androidx.preference.Preference!, boolean);
+    method protected void onPrepareForRemoval();
+    method protected void onRestoreInstanceState(android.os.Parcelable!);
+    method protected android.os.Parcelable! onSaveInstanceState();
+    method @Deprecated protected void onSetInitialValue(boolean, Object!);
+    method protected void onSetInitialValue(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(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 setCopyingEnabled(boolean);
+    method public void setDefaultValue(Object!);
+    method public void setDependency(String!);
+    method public void setEnabled(boolean);
+    method public void setFragment(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(String!);
+    method public void setLayoutResource(int);
+    method public void setOnPreferenceChangeListener(androidx.preference.Preference.OnPreferenceChangeListener!);
+    method public void setOnPreferenceClickListener(androidx.preference.Preference.OnPreferenceClickListener!);
+    method public void setOrder(int);
+    method public void setPersistent(boolean);
+    method public void setPreferenceDataStore(androidx.preference.PreferenceDataStore!);
+    method public void setSelectable(boolean);
+    method public void setShouldDisableView(boolean);
+    method public void setSingleLineTitle(boolean);
+    method public void setSummary(CharSequence!);
+    method public void setSummary(int);
+    method public final void setSummaryProvider(androidx.preference.Preference.SummaryProvider?);
+    method public void setTitle(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<androidx.preference.Preference.BaseSavedState>! CREATOR;
+  }
+
+  public static interface Preference.OnPreferenceChangeListener {
+    method public boolean onPreferenceChange(androidx.preference.Preference!, Object!);
+  }
+
+  public static interface Preference.OnPreferenceClickListener {
+    method public boolean onPreferenceClick(androidx.preference.Preference!);
+  }
+
+  public static interface Preference.SummaryProvider<T extends androidx.preference.Preference> {
+    method public CharSequence! provideSummary(T!);
+  }
+
+  public class PreferenceCategory extends androidx.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(String!, boolean);
+    method public float getFloat(String!, float);
+    method public int getInt(String!, int);
+    method public long getLong(String!, long);
+    method public String? getString(String!, String?);
+    method public java.util.Set<java.lang.String>? getStringSet(String!, java.util.Set<java.lang.String>?);
+    method public void putBoolean(String!, boolean);
+    method public void putFloat(String!, float);
+    method public void putInt(String!, int);
+    method public void putLong(String!, long);
+    method public void putString(String!, String?);
+    method public void putStringSet(String!, java.util.Set<java.lang.String>?);
+  }
+
+  @Deprecated public abstract class PreferenceDialogFragment extends android.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+    ctor @Deprecated public PreferenceDialogFragment();
+    method @Deprecated public androidx.preference.DialogPreference! getPreference();
+    method @Deprecated protected void onBindDialogView(android.view.View!);
+    method @Deprecated public void onClick(android.content.DialogInterface!, int);
+    method @Deprecated protected android.view.View! onCreateDialogView(android.content.Context!);
+    method @Deprecated public abstract void onDialogClosed(boolean);
+    method @Deprecated protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder!);
+    field @Deprecated protected static final String ARG_KEY = "key";
+  }
+
+  public abstract class PreferenceDialogFragmentCompat extends androidx.fragment.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+    ctor public PreferenceDialogFragmentCompat();
+    method public androidx.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(androidx.appcompat.app.AlertDialog.Builder!);
+    field protected static final String ARG_KEY = "key";
+  }
+
+  @Deprecated public abstract class PreferenceFragment extends android.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
+    ctor @Deprecated public PreferenceFragment();
+    method @Deprecated public void addPreferencesFromResource(@XmlRes int);
+    method @Deprecated public <T extends androidx.preference.Preference> T! findPreference(CharSequence!);
+    method @Deprecated public final androidx.recyclerview.widget.RecyclerView! getListView();
+    method @Deprecated public androidx.preference.PreferenceManager! getPreferenceManager();
+    method @Deprecated public androidx.preference.PreferenceScreen! getPreferenceScreen();
+    method @Deprecated protected androidx.recyclerview.widget.RecyclerView.Adapter! onCreateAdapter(androidx.preference.PreferenceScreen!);
+    method @Deprecated public androidx.recyclerview.widget.RecyclerView.LayoutManager! onCreateLayoutManager();
+    method @Deprecated public abstract void onCreatePreferences(android.os.Bundle!, String!);
+    method @Deprecated public androidx.recyclerview.widget.RecyclerView! onCreateRecyclerView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
+    method @Deprecated public void onDisplayPreferenceDialog(androidx.preference.Preference!);
+    method @Deprecated public void onNavigateToScreen(androidx.preference.PreferenceScreen!);
+    method @Deprecated public boolean onPreferenceTreeClick(androidx.preference.Preference!);
+    method @Deprecated public void scrollToPreference(String!);
+    method @Deprecated public void scrollToPreference(androidx.preference.Preference!);
+    method @Deprecated public void setDivider(android.graphics.drawable.Drawable!);
+    method @Deprecated public void setDividerHeight(int);
+    method @Deprecated public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
+    method @Deprecated public void setPreferencesFromResource(@XmlRes int, String?);
+    field @Deprecated public static final String ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+  }
+
+  @Deprecated public static interface PreferenceFragment.OnPreferenceDisplayDialogCallback {
+    method @Deprecated public boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragment, androidx.preference.Preference!);
+  }
+
+  @Deprecated public static interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+    method @Deprecated public boolean onPreferenceStartFragment(androidx.preference.PreferenceFragment!, androidx.preference.Preference!);
+  }
+
+  @Deprecated public static interface PreferenceFragment.OnPreferenceStartScreenCallback {
+    method @Deprecated public boolean onPreferenceStartScreen(androidx.preference.PreferenceFragment!, androidx.preference.PreferenceScreen!);
+  }
+
+  public abstract class PreferenceFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
+    ctor public PreferenceFragmentCompat();
+    method public void addPreferencesFromResource(@XmlRes int);
+    method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
+    method public final androidx.recyclerview.widget.RecyclerView! getListView();
+    method public androidx.preference.PreferenceManager! getPreferenceManager();
+    method public androidx.preference.PreferenceScreen! getPreferenceScreen();
+    method protected androidx.recyclerview.widget.RecyclerView.Adapter! onCreateAdapter(androidx.preference.PreferenceScreen!);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager! onCreateLayoutManager();
+    method public abstract void onCreatePreferences(android.os.Bundle!, String!);
+    method public androidx.recyclerview.widget.RecyclerView! onCreateRecyclerView(android.view.LayoutInflater!, android.view.ViewGroup!, android.os.Bundle!);
+    method public void onDisplayPreferenceDialog(androidx.preference.Preference!);
+    method public void onNavigateToScreen(androidx.preference.PreferenceScreen!);
+    method public boolean onPreferenceTreeClick(androidx.preference.Preference!);
+    method public void scrollToPreference(String!);
+    method public void scrollToPreference(androidx.preference.Preference!);
+    method public void setDivider(android.graphics.drawable.Drawable!);
+    method public void setDividerHeight(int);
+    method public void setPreferenceScreen(androidx.preference.PreferenceScreen!);
+    method public void setPreferencesFromResource(@XmlRes int, String?);
+    field public static final String ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT";
+  }
+
+  public static interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback {
+    method public boolean onPreferenceDisplayDialog(androidx.preference.PreferenceFragmentCompat, androidx.preference.Preference!);
+  }
+
+  public static interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
+    method public boolean onPreferenceStartFragment(androidx.preference.PreferenceFragmentCompat!, androidx.preference.Preference!);
+  }
+
+  public static interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
+    method public boolean onPreferenceStartScreen(androidx.preference.PreferenceFragmentCompat!, androidx.preference.PreferenceScreen!);
+  }
+
+  public abstract class PreferenceGroup extends androidx.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(androidx.preference.Preference!);
+    method public boolean addPreference(androidx.preference.Preference!);
+    method protected void dispatchRestoreInstanceState(android.os.Bundle!);
+    method protected void dispatchSaveInstanceState(android.os.Bundle!);
+    method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
+    method public int getInitialExpandedChildrenCount();
+    method public androidx.preference.Preference! getPreference(int);
+    method public int getPreferenceCount();
+    method protected boolean isOnSameScreenAsChildren();
+    method public boolean isOrderingAsAdded();
+    method protected boolean onPrepareAddPreference(androidx.preference.Preference!);
+    method public void removeAll();
+    method public boolean removePreference(androidx.preference.Preference!);
+    method public boolean removePreferenceRecursively(CharSequence);
+    method public void setInitialExpandedChildrenCount(int);
+    method public void setOrderingAsAdded(boolean);
+  }
+
+  public static interface PreferenceGroup.PreferencePositionCallback {
+    method public int getPreferenceAdapterPosition(String!);
+    method public int getPreferenceAdapterPosition(androidx.preference.Preference!);
+  }
+
+  public class PreferenceManager {
+    method public androidx.preference.PreferenceScreen! createPreferenceScreen(android.content.Context!);
+    method public <T extends androidx.preference.Preference> T? findPreference(CharSequence);
+    method public android.content.Context! getContext();
+    method public static android.content.SharedPreferences! getDefaultSharedPreferences(android.content.Context!);
+    method public androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener! getOnDisplayPreferenceDialogListener();
+    method public androidx.preference.PreferenceManager.OnNavigateToScreenListener! getOnNavigateToScreenListener();
+    method public androidx.preference.PreferenceManager.OnPreferenceTreeClickListener! getOnPreferenceTreeClickListener();
+    method public androidx.preference.PreferenceManager.PreferenceComparisonCallback! getPreferenceComparisonCallback();
+    method public androidx.preference.PreferenceDataStore? getPreferenceDataStore();
+    method public androidx.preference.PreferenceScreen! getPreferenceScreen();
+    method public android.content.SharedPreferences! getSharedPreferences();
+    method public int getSharedPreferencesMode();
+    method public 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!, String!, int, int, boolean);
+    method public void setOnDisplayPreferenceDialogListener(androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener!);
+    method public void setOnNavigateToScreenListener(androidx.preference.PreferenceManager.OnNavigateToScreenListener!);
+    method public void setOnPreferenceTreeClickListener(androidx.preference.PreferenceManager.OnPreferenceTreeClickListener!);
+    method public void setPreferenceComparisonCallback(androidx.preference.PreferenceManager.PreferenceComparisonCallback!);
+    method public void setPreferenceDataStore(androidx.preference.PreferenceDataStore!);
+    method public boolean setPreferences(androidx.preference.PreferenceScreen!);
+    method public void setSharedPreferencesMode(int);
+    method public void setSharedPreferencesName(String!);
+    method public void setStorageDefault();
+    method public void setStorageDeviceProtected();
+    method public void showDialog(androidx.preference.Preference!);
+    field public static final String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+  }
+
+  public static interface PreferenceManager.OnDisplayPreferenceDialogListener {
+    method public void onDisplayPreferenceDialog(androidx.preference.Preference!);
+  }
+
+  public static interface PreferenceManager.OnNavigateToScreenListener {
+    method public void onNavigateToScreen(androidx.preference.PreferenceScreen!);
+  }
+
+  public static interface PreferenceManager.OnPreferenceTreeClickListener {
+    method public boolean onPreferenceTreeClick(androidx.preference.Preference!);
+  }
+
+  public abstract static class PreferenceManager.PreferenceComparisonCallback {
+    ctor public PreferenceManager.PreferenceComparisonCallback();
+    method public abstract boolean arePreferenceContentsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
+    method public abstract boolean arePreferenceItemsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
+  }
+
+  public static class PreferenceManager.SimplePreferenceComparisonCallback extends androidx.preference.PreferenceManager.PreferenceComparisonCallback {
+    ctor public PreferenceManager.SimplePreferenceComparisonCallback();
+    method public boolean arePreferenceContentsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
+    method public boolean arePreferenceItemsTheSame(androidx.preference.Preference!, androidx.preference.Preference!);
+  }
+
+  public final class PreferenceScreen extends androidx.preference.PreferenceGroup {
+    method public void setShouldUseGeneratedIds(boolean);
+    method public boolean shouldUseGeneratedIds();
+  }
+
+  public class PreferenceViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder {
+    method public android.view.View! findViewById(@IdRes int);
+    method public boolean isDividerAllowedAbove();
+    method public boolean isDividerAllowedBelow();
+    method public void setDividerAllowedAbove(boolean);
+    method public void setDividerAllowedBelow(boolean);
+  }
+
+  public class SeekBarPreference extends androidx.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 boolean getShowSeekBarValue();
+    method public boolean getUpdatesContinuously();
+    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 setShowSeekBarValue(boolean);
+    method public void setUpdatesContinuously(boolean);
+    method public void setValue(int);
+  }
+
+  public class SwitchPreference extends androidx.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 CharSequence! getSwitchTextOff();
+    method public CharSequence! getSwitchTextOn();
+    method public void setSwitchTextOff(CharSequence!);
+    method public void setSwitchTextOff(int);
+    method public void setSwitchTextOn(CharSequence!);
+    method public void setSwitchTextOn(int);
+  }
+
+  public class SwitchPreferenceCompat extends androidx.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 CharSequence! getSwitchTextOff();
+    method public CharSequence! getSwitchTextOn();
+    method public void setSwitchTextOff(CharSequence!);
+    method public void setSwitchTextOff(int);
+    method public void setSwitchTextOn(CharSequence!);
+    method public void setSwitchTextOn(int);
+  }
+
+  public abstract class TwoStatePreference extends androidx.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 CharSequence! getSummaryOff();
+    method public CharSequence! getSummaryOn();
+    method public boolean isChecked();
+    method public void setChecked(boolean);
+    method public void setDisableDependentsState(boolean);
+    method public void setSummaryOff(CharSequence!);
+    method public void setSummaryOff(int);
+    method public void setSummaryOn(CharSequence!);
+    method public void setSummaryOn(int);
+    method protected void syncSummaryView(androidx.preference.PreferenceViewHolder!);
+    field protected boolean mChecked;
+  }
+
+}
+
diff --git a/preference/api/res-1.1.0-alpha05.txt b/preference/api/res-1.1.0-alpha05.txt
new file mode 100644
index 0000000..3afd07c
--- /dev/null
+++ b/preference/api/res-1.1.0-alpha05.txt
@@ -0,0 +1,69 @@
+style Preference
+style Preference_Category
+style Preference_CheckBoxPreference
+style Preference_DialogPreference
+style Preference_DialogPreference_EditTextPreference
+style Preference_DropDown
+style Preference_Information
+style Preference_PreferenceScreen
+style Preference_SeekBarPreference
+style Preference_SwitchPreferenceCompat
+style PreferenceFragment
+style PreferenceFragmentList
+style PreferenceThemeOverlay
+attr adjustable
+attr allowDividerAbove
+attr allowDividerAfterLastItem
+attr allowDividerBelow
+attr checkBoxPreferenceStyle
+attr defaultValue
+attr dependency
+attr dialogIcon
+attr dialogLayout
+attr dialogMessage
+attr dialogPreferenceStyle
+attr dialogTitle
+attr disableDependentsState
+attr dropdownPreferenceStyle
+attr editTextPreferenceStyle
+attr enabled
+attr entries
+attr entryValues
+attr fragment
+attr icon
+attr iconSpaceReserved
+attr key
+attr layout
+attr maxHeight
+attr maxWidth
+attr min
+attr negativeButtonText
+attr order
+attr orderingFromXml
+attr persistent
+attr positiveButtonText
+attr preferenceCategoryStyle
+attr preferenceCategoryTitleTextAppearance
+attr preferenceFragmentCompatStyle
+attr preferenceFragmentListStyle
+attr preferenceFragmentStyle
+attr preferenceInformationStyle
+attr preferenceScreenStyle
+attr preferenceStyle
+attr preferenceTheme
+attr seekBarIncrement
+attr seekBarPreferenceStyle
+attr selectable
+attr selectableItemBackground
+attr shouldDisableView
+attr showSeekBarValue
+attr singleLineTitle
+attr summary
+attr summaryOff
+attr summaryOn
+attr switchPreferenceCompatStyle
+attr switchPreferenceStyle
+attr switchTextOff
+attr switchTextOn
+attr title
+attr widgetLayout
diff --git a/preference/api/restricted_1.1.0-alpha05.ignore b/preference/api/restricted_1.1.0-alpha05.ignore
new file mode 100644
index 0000000..37595b8
--- /dev/null
+++ b/preference/api/restricted_1.1.0-alpha05.ignore
@@ -0,0 +1,21 @@
+// Baseline format: 1.0
+RemovedClass: androidx.preference.internal.AbstractMultiSelectListPreference:
+    Removed class androidx.preference.internal.AbstractMultiSelectListPreference
+
+
+RemovedField: androidx.preference.AndroidResources#ANDROID_R_EDITTEXT_PREFERENCE_STYLE:
+    Removed field androidx.preference.AndroidResources.ANDROID_R_EDITTEXT_PREFERENCE_STYLE
+RemovedField: androidx.preference.AndroidResources#ANDROID_R_LIST_CONTAINER:
+    Removed field androidx.preference.AndroidResources.ANDROID_R_LIST_CONTAINER
+RemovedField: androidx.preference.AndroidResources#ANDROID_R_PREFERENCE_FRAGMENT_STYLE:
+    Removed field androidx.preference.AndroidResources.ANDROID_R_PREFERENCE_FRAGMENT_STYLE
+RemovedField: androidx.preference.AndroidResources#ANDROID_R_SWITCH_WIDGET:
+    Removed field androidx.preference.AndroidResources.ANDROID_R_SWITCH_WIDGET
+
+
+RemovedMethod: androidx.preference.Preference#clearWasDetached():
+    Removed method androidx.preference.Preference.clearWasDetached()
+RemovedMethod: androidx.preference.Preference#wasDetached():
+    Removed method androidx.preference.Preference.wasDetached()
+
+
diff --git a/preference/api/restricted_1.1.0-alpha05.txt b/preference/api/restricted_1.1.0-alpha05.txt
new file mode 100644
index 0000000..d8a2d7c
--- /dev/null
+++ b/preference/api/restricted_1.1.0-alpha05.txt
@@ -0,0 +1,75 @@
+// Signature format: 3.0
+package androidx.preference {
+
+
+  public class Preference implements java.lang.Comparable<androidx.preference.Preference> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void onAttachedToHierarchy(androidx.preference.PreferenceManager!, long);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void performClick(android.view.View!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void performClick();
+  }
+
+  @Deprecated public abstract class PreferenceDialogFragment extends android.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+  }
+
+  public abstract class PreferenceDialogFragmentCompat extends androidx.fragment.app.DialogFragment implements android.content.DialogInterface.OnClickListener {
+  }
+
+  @Deprecated public abstract class PreferenceFragment extends android.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
+  }
+
+  public abstract class PreferenceFragmentCompat extends androidx.fragment.app.Fragment implements androidx.preference.DialogPreference.TargetFragment androidx.preference.PreferenceManager.OnDisplayPreferenceDialogListener androidx.preference.PreferenceManager.OnNavigateToScreenListener androidx.preference.PreferenceManager.OnPreferenceTreeClickListener {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.fragment.app.Fragment! getCallbackFragment();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void onBindPreferences();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void onUnbindPreferences();
+  }
+
+  public abstract class PreferenceGroup extends androidx.preference.Preference {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.preference.PreferenceGroup.OnExpandButtonClickListener? getOnExpandButtonClickListener();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setOnExpandButtonClickListener(androidx.preference.PreferenceGroup.OnExpandButtonClickListener?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface PreferenceGroup.OnExpandButtonClickListener {
+    method public void onExpandButtonClick();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class PreferenceGroupAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.preference.PreferenceViewHolder> implements androidx.preference.PreferenceGroup.PreferencePositionCallback {
+    ctor public PreferenceGroupAdapter(androidx.preference.PreferenceGroup!);
+    method public androidx.preference.Preference! getItem(int);
+    method public int getItemCount();
+    method public int getPreferenceAdapterPosition(String!);
+    method public int getPreferenceAdapterPosition(androidx.preference.Preference!);
+    method public void onBindViewHolder(androidx.preference.PreferenceViewHolder, int);
+    method public androidx.preference.PreferenceViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+    method public void onPreferenceChange(androidx.preference.Preference!);
+    method public void onPreferenceHierarchyChange(androidx.preference.Preference!);
+    method public void onPreferenceVisibilityChange(androidx.preference.Preference!);
+  }
+
+  public class PreferenceManager {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public PreferenceManager(android.content.Context!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.preference.PreferenceScreen! inflateFromResource(android.content.Context!, int, androidx.preference.PreferenceScreen!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class PreferenceRecyclerViewAccessibilityDelegate extends androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate {
+    ctor public PreferenceRecyclerViewAccessibilityDelegate(androidx.recyclerview.widget.RecyclerView!);
+  }
+
+  public final class PreferenceScreen extends androidx.preference.PreferenceGroup {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public PreferenceScreen(android.content.Context!, android.util.AttributeSet!);
+  }
+
+  public class PreferenceViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.TESTS) public static androidx.preference.PreferenceViewHolder! createInstanceForTests(android.view.View!);
+  }
+
+  public abstract class TwoStatePreference extends androidx.preference.Preference {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class UnPressableLinearLayout extends android.widget.LinearLayout {
+    ctor public UnPressableLinearLayout(android.content.Context!);
+    ctor public UnPressableLinearLayout(android.content.Context!, android.util.AttributeSet!);
+  }
+
+}
+
+
diff --git a/preference/ktx/api/1.1.0-alpha05.txt b/preference/ktx/api/1.1.0-alpha05.txt
new file mode 100644
index 0000000..236569e
--- /dev/null
+++ b/preference/ktx/api/1.1.0-alpha05.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.preference {
+
+  public final class PreferenceGroupKt {
+    ctor public PreferenceGroupKt();
+    method public static operator boolean contains(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
+    method public static inline void forEach(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function1<? super androidx.preference.Preference,kotlin.Unit> action);
+    method public static inline void forEachIndexed(androidx.preference.PreferenceGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super androidx.preference.Preference,kotlin.Unit> action);
+    method public static inline operator <T extends androidx.preference.Preference> T? get(androidx.preference.PreferenceGroup, CharSequence key);
+    method public static operator androidx.preference.Preference get(androidx.preference.PreferenceGroup, int index);
+    method public static kotlin.sequences.Sequence<androidx.preference.Preference> getChildren(androidx.preference.PreferenceGroup);
+    method public static inline int getSize(androidx.preference.PreferenceGroup);
+    method public static inline boolean isEmpty(androidx.preference.PreferenceGroup);
+    method public static inline boolean isNotEmpty(androidx.preference.PreferenceGroup);
+    method public static operator java.util.Iterator<androidx.preference.Preference> iterator(androidx.preference.PreferenceGroup);
+    method public static inline operator void minusAssign(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
+    method public static inline operator void plusAssign(androidx.preference.PreferenceGroup, androidx.preference.Preference preference);
+  }
+
+}
+
diff --git a/preference/ktx/api/res-1.1.0-alpha05.txt b/preference/ktx/api/res-1.1.0-alpha05.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/preference/ktx/api/res-1.1.0-alpha05.txt
diff --git a/preference/ktx/api/restricted_1.1.0-alpha05.txt b/preference/ktx/api/restricted_1.1.0-alpha05.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/preference/ktx/api/restricted_1.1.0-alpha05.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/preference/src/main/java/androidx/preference/Preference.java b/preference/src/main/java/androidx/preference/Preference.java
index 9530747..4254dd9 100644
--- a/preference/src/main/java/androidx/preference/Preference.java
+++ b/preference/src/main/java/androidx/preference/Preference.java
@@ -572,6 +572,7 @@
             mOnCopyListener = new OnPreferenceCopyListener(this);
         }
         holder.itemView.setOnCreateContextMenuListener(isCopyingEnabled() ? mOnCopyListener : null);
+        holder.itemView.setLongClickable(isCopyingEnabled());
     }
 
     /**
diff --git a/recyclerview/recyclerview/api/1.1.0-alpha04.txt b/recyclerview/recyclerview/api/1.1.0-alpha04.txt
new file mode 100644
index 0000000..5d61aaf
--- /dev/null
+++ b/recyclerview/recyclerview/api/1.1.0-alpha04.txt
@@ -0,0 +1,1033 @@
+// Signature format: 3.0
+package androidx.recyclerview.widget {
+
+  public final class AdapterListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
+    ctor public AdapterListUpdateCallback(androidx.recyclerview.widget.RecyclerView.Adapter);
+    method public void onChanged(int, int, Object!);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
+  }
+
+  public final class AsyncDifferConfig<T> {
+    method public java.util.concurrent.Executor getBackgroundThreadExecutor();
+    method public androidx.recyclerview.widget.DiffUtil.ItemCallback<T> getDiffCallback();
+  }
+
+  public static final class AsyncDifferConfig.Builder<T> {
+    ctor public AsyncDifferConfig.Builder(androidx.recyclerview.widget.DiffUtil.ItemCallback<T>);
+    method public androidx.recyclerview.widget.AsyncDifferConfig<T> build();
+    method public androidx.recyclerview.widget.AsyncDifferConfig.Builder<T> setBackgroundThreadExecutor(java.util.concurrent.Executor!);
+  }
+
+  public class AsyncListDiffer<T> {
+    ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T>);
+    ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T>);
+    method public void addListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T>);
+    method public java.util.List<T> getCurrentList();
+    method public void removeListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T>);
+    method public void submitList(java.util.List<T>?);
+    method public void submitList(java.util.List<T>?, Runnable?);
+  }
+
+  public static interface AsyncListDiffer.ListListener<T> {
+    method public void onCurrentListChanged(java.util.List<T>, java.util.List<T>);
+  }
+
+  public class AsyncListUtil<T> {
+    ctor public AsyncListUtil(Class<T>, int, androidx.recyclerview.widget.AsyncListUtil.DataCallback<T>, androidx.recyclerview.widget.AsyncListUtil.ViewCallback);
+    method public T? getItem(int);
+    method public int getItemCount();
+    method public void onRangeChanged();
+    method public void refresh();
+  }
+
+  public abstract static class AsyncListUtil.DataCallback<T> {
+    ctor public AsyncListUtil.DataCallback();
+    method @WorkerThread public abstract void fillData(T[], int, int);
+    method @WorkerThread public int getMaxCachedTiles();
+    method @WorkerThread public void recycleData(T[], int);
+    method @WorkerThread public abstract int refreshData();
+  }
+
+  public abstract static class AsyncListUtil.ViewCallback {
+    ctor public AsyncListUtil.ViewCallback();
+    method @UiThread public void extendRangeInto(int[], int[], int);
+    method @UiThread public abstract void getItemRangeInto(int[]);
+    method @UiThread public abstract void onDataRefresh();
+    method @UiThread 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 androidx.recyclerview.widget.ListUpdateCallback {
+    ctor public BatchingListUpdateCallback(androidx.recyclerview.widget.ListUpdateCallback);
+    method public void dispatchLastEvent();
+    method public void onChanged(int, int, Object!);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
+  }
+
+  public class DefaultItemAnimator extends androidx.recyclerview.widget.SimpleItemAnimator {
+    ctor public DefaultItemAnimator();
+    method public boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+    method public boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+    method public boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void endAnimations();
+    method public boolean isRunning();
+    method public void runPendingAnimations();
+  }
+
+  public class DiffUtil {
+    method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback);
+    method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback, boolean);
+  }
+
+  public abstract static class DiffUtil.Callback {
+    ctor public DiffUtil.Callback();
+    method public abstract boolean areContentsTheSame(int, int);
+    method public abstract boolean areItemsTheSame(int, int);
+    method public Object? getChangePayload(int, int);
+    method public abstract int getNewListSize();
+    method public abstract int getOldListSize();
+  }
+
+  public static class DiffUtil.DiffResult {
+    method public int convertNewPositionToOld(@IntRange(from=0) int);
+    method public int convertOldPositionToNew(@IntRange(from=0) int);
+    method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
+    method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
+    field public static final int NO_POSITION = -1; // 0xffffffff
+  }
+
+  public abstract static class DiffUtil.ItemCallback<T> {
+    ctor public DiffUtil.ItemCallback();
+    method public abstract boolean areContentsTheSame(T, T);
+    method public abstract boolean areItemsTheSame(T, T);
+    method public Object? getChangePayload(T, T);
+  }
+
+  public class DividerItemDecoration extends androidx.recyclerview.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 androidx.recyclerview.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 androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup! getSpanSizeLookup();
+    method public boolean isUsingSpansToEstimateScrollbarDimensions();
+    method public void setSpanCount(int);
+    method public void setSpanSizeLookup(androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup!);
+    method public void setUsingSpansToEstimateScrollbarDimensions(boolean);
+    field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+  }
+
+  public static final class GridLayoutManager.DefaultSpanSizeLookup extends androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup {
+    ctor public GridLayoutManager.DefaultSpanSizeLookup();
+    method public int getSpanSize(int);
+  }
+
+  public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.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(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+    method public int getSpanIndex();
+    method public int getSpanSize();
+    field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+  }
+
+  public abstract static 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 invalidateSpanGroupIndexCache();
+    method public void invalidateSpanIndexCache();
+    method public boolean isSpanGroupIndexCacheEnabled();
+    method public boolean isSpanIndexCacheEnabled();
+    method public void setSpanGroupIndexCacheEnabled(boolean);
+    method public void setSpanIndexCacheEnabled(boolean);
+  }
+
+  public class ItemTouchHelper extends androidx.recyclerview.widget.RecyclerView.ItemDecoration implements androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener {
+    ctor public ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper.Callback);
+    method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?);
+    method public void onChildViewAttachedToWindow(android.view.View);
+    method public void onChildViewDetachedFromWindow(android.view.View);
+    method public void startDrag(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public void startSwipe(androidx.recyclerview.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 abstract static class ItemTouchHelper.Callback {
+    ctor public ItemTouchHelper.Callback();
+    method public boolean canDropOver(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder! chooseDropTarget(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder>, int, int);
+    method public void clearView(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public int convertToAbsoluteDirection(int, int);
+    method public static int convertToRelativeDirection(int, int);
+    method public long getAnimationDuration(androidx.recyclerview.widget.RecyclerView, int, float, float);
+    method public int getBoundingBoxMargin();
+    method public static androidx.recyclerview.widget.ItemTouchUIUtil getDefaultUIUtil();
+    method public float getMoveThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public abstract int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public float getSwipeEscapeVelocity(float);
+    method public float getSwipeThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public float getSwipeVelocityThreshold(float);
+    method public int interpolateOutOfBoundsScroll(androidx.recyclerview.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, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+    method public void onChildDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder!, float, float, int, boolean);
+    method public abstract boolean onMove(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public void onMoved(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int);
+    method public void onSelectedChanged(androidx.recyclerview.widget.RecyclerView.ViewHolder?, int);
+    method public abstract void onSwiped(androidx.recyclerview.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 abstract static class ItemTouchHelper.SimpleCallback extends androidx.recyclerview.widget.ItemTouchHelper.Callback {
+    ctor public ItemTouchHelper.SimpleCallback(int, int);
+    method public int getDragDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public int getSwipeDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public void setDefaultDragDirs(int);
+    method public void setDefaultSwipeDirs(int);
+  }
+
+  public static interface ItemTouchHelper.ViewDropHandler {
+    method public void prepareForDrop(android.view.View, android.view.View, int, int);
+  }
+
+  public interface ItemTouchUIUtil {
+    method public void clearView(android.view.View!);
+    method public void onDraw(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+    method public void onDrawOver(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+    method public void onSelected(android.view.View!);
+  }
+
+  public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.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 androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+    method protected int getExtraLayoutSpace(androidx.recyclerview.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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) 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 androidx.recyclerview.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 protected int getHorizontalSnapPreference();
+    method protected int getVerticalSnapPreference();
+    method protected void onSeekTargetStep(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+    method protected void onStart();
+    method protected void onStop();
+    method protected void onTargetFound(android.view.View!, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+    method protected void updateActionForInterimTarget(androidx.recyclerview.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 androidx.recyclerview.widget.SnapHelper {
+    ctor public LinearSnapHelper();
+    method public int[]! calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+    method public android.view.View! findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+  }
+
+  public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+    ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T>);
+    ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T>);
+    method public java.util.List<T> getCurrentList();
+    method protected T! getItem(int);
+    method public int getItemCount();
+    method public void onCurrentListChanged(java.util.List<T>, java.util.List<T>);
+    method public void submitList(java.util.List<T>?);
+    method public void submitList(java.util.List<T>?, Runnable?);
+  }
+
+  public interface ListUpdateCallback {
+    method public void onChanged(int, int, Object?);
+    method public void onInserted(int, int);
+    method public void onMoved(int, int);
+    method public void onRemoved(int, int);
+  }
+
+  public abstract class OrientationHelper {
+    method public static androidx.recyclerview.widget.OrientationHelper! createHorizontalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public static androidx.recyclerview.widget.OrientationHelper! createOrientationHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int);
+    method public static androidx.recyclerview.widget.OrientationHelper! createVerticalHelper(androidx.recyclerview.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 androidx.recyclerview.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 androidx.recyclerview.widget.RecyclerView.LayoutManager! mLayoutManager;
+  }
+
+  public class PagerSnapHelper extends androidx.recyclerview.widget.SnapHelper {
+    ctor public PagerSnapHelper();
+    method public int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+    method protected androidx.recyclerview.widget.LinearSmoothScroller! createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+  }
+
+  public class RecyclerView extends android.view.ViewGroup implements androidx.core.view.NestedScrollingChild2 androidx.core.view.NestedScrollingChild3 androidx.core.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(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
+    method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+    method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+    method public void addOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+    method public void addOnScrollListener(androidx.recyclerview.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 final void dispatchNestedScroll(int, 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 androidx.recyclerview.widget.RecyclerView.ViewHolder? findContainingViewHolder(android.view.View);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForAdapterPosition(int);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder! findViewHolderForItemId(long);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForLayoutPosition(int);
+    method @Deprecated public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForPosition(int);
+    method public boolean fling(int, int);
+    method public androidx.recyclerview.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 @Deprecated public int getChildPosition(android.view.View);
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder! getChildViewHolder(android.view.View);
+    method public androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate? getCompatAccessibilityDelegate();
+    method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+    method public androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory getEdgeEffectFactory();
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator? getItemAnimator();
+    method public androidx.recyclerview.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+    method public int getItemDecorationCount();
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+    method public int getMaxFlingVelocity();
+    method public int getMinFlingVelocity();
+    method public androidx.recyclerview.widget.RecyclerView.OnFlingListener? getOnFlingListener();
+    method public boolean getPreserveFocusAfterLayout();
+    method public androidx.recyclerview.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 @Deprecated public boolean isLayoutFrozen();
+    method public final boolean isLayoutSuppressed();
+    method public void offsetChildrenHorizontal(@Px int);
+    method public void offsetChildrenVertical(@Px 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(@Px int, @Px int);
+    method public void removeItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+    method public void removeItemDecorationAt(int);
+    method public void removeOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+    method public void removeOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+    method public void removeOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+    method public void scrollToPosition(int);
+    method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
+    method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+    method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
+    method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
+    method public void setHasFixedSize(boolean);
+    method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
+    method public void setItemViewCacheSize(int);
+    method @Deprecated public void setLayoutFrozen(boolean);
+    method public void setLayoutManager(androidx.recyclerview.widget.RecyclerView.LayoutManager?);
+    method @Deprecated public void setLayoutTransition(android.animation.LayoutTransition!);
+    method public void setOnFlingListener(androidx.recyclerview.widget.RecyclerView.OnFlingListener?);
+    method @Deprecated public void setOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener?);
+    method public void setPreserveFocusAfterLayout(boolean);
+    method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
+    method public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
+    method public void setScrollingTouchSlop(int);
+    method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
+    method public void smoothScrollBy(@Px int, @Px int);
+    method public void smoothScrollBy(@Px int, @Px 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 final void suppressLayout(boolean);
+    method public void swapAdapter(androidx.recyclerview.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 abstract static class RecyclerView.Adapter<VH extends androidx.recyclerview.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, 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, 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(androidx.recyclerview.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(androidx.recyclerview.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(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+    method public void setHasStableIds(boolean);
+    method public void unregisterAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+  }
+
+  public abstract static class RecyclerView.AdapterDataObserver {
+    ctor public RecyclerView.AdapterDataObserver();
+    method public void onChanged();
+    method public void onItemRangeChanged(int, int);
+    method public void onItemRangeChanged(int, int, Object?);
+    method public void onItemRangeInserted(int, int);
+    method public void onItemRangeMoved(int, int, int);
+    method public void onItemRangeRemoved(int, int);
+  }
+
+  public static interface RecyclerView.ChildDrawingOrderCallback {
+    method public int onGetChildDrawingOrder(int, int);
+  }
+
+  public static class RecyclerView.EdgeEffectFactory {
+    ctor public RecyclerView.EdgeEffectFactory();
+    method protected android.widget.EdgeEffect createEdgeEffect(androidx.recyclerview.widget.RecyclerView, @androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.EdgeDirection 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
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_LEFT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_TOP, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_RIGHT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_BOTTOM}) public static @interface RecyclerView.EdgeEffectFactory.EdgeDirection {
+  }
+
+  public abstract static class RecyclerView.ItemAnimator {
+    ctor public RecyclerView.ItemAnimator();
+    method public abstract boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+    method public abstract boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object>);
+    method public final void dispatchAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public final void dispatchAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public final void dispatchAnimationsFinished();
+    method public abstract void endAnimation(androidx.recyclerview.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(androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener?);
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+    method public void onAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public void onAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges 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
+  }
+
+  @IntDef(flag=true, value={androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_CHANGED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_REMOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_MOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_INVALIDATED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_APPEARED_IN_PRE_LAYOUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.ItemAnimator.AdapterChanges {
+  }
+
+  public static interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+    method public void onAnimationsFinished();
+  }
+
+  public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+    ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+    method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int);
+    field public int bottom;
+    field @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges public int changeFlags;
+    field public int left;
+    field public int right;
+    field public int top;
+  }
+
+  public abstract static class RecyclerView.ItemDecoration {
+    ctor public RecyclerView.ItemDecoration();
+    method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
+    method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+    method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+    method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+    method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+    method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+  }
+
+  public abstract static 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(String!);
+    method public void assertNotInLayoutOrScroll(String!);
+    method public void attachView(android.view.View, int, androidx.recyclerview.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(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+    method public static int chooseSize(int, int, int);
+    method public void collectAdjacentPrefetchPositions(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+    method public void collectInitialPrefetchPositions(int, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+    method public int computeHorizontalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+    method public int computeHorizontalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+    method public int computeHorizontalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+    method public int computeVerticalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+    method public int computeVerticalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+    method public int computeVerticalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+    method public void detachAndScrapAttachedViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+    method public void detachAndScrapView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+    method public void detachAndScrapViewAt(int, androidx.recyclerview.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 androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+    method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+    method public androidx.recyclerview.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 @Deprecated public static int getChildMeasureSpec(int, int, int, boolean);
+    method public static int getChildMeasureSpec(int, int, int, int, boolean);
+    method public boolean getClipToPadding();
+    method public int getColumnCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.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 @Px 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 @Px public int getMinimumHeight();
+    method @Px public int getMinimumWidth();
+    method @Px public int getPaddingBottom();
+    method @Px public int getPaddingEnd();
+    method @Px public int getPaddingLeft();
+    method @Px public int getPaddingRight();
+    method @Px public int getPaddingStart();
+    method @Px public int getPaddingTop();
+    method public int getPosition(android.view.View);
+    method public static androidx.recyclerview.widget.RecyclerView.LayoutManager.Properties! getProperties(android.content.Context, android.util.AttributeSet?, int, int);
+    method public int getRightDecorationWidth(android.view.View);
+    method public int getRowCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+    method public int getSelectionModeForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+    method public int getTopDecorationHeight(android.view.View);
+    method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+    method @Px 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(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.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(@Px int);
+    method public void offsetChildrenVertical(@Px int);
+    method public void onAdapterChanged(androidx.recyclerview.widget.RecyclerView.Adapter?, androidx.recyclerview.widget.RecyclerView.Adapter?);
+    method public boolean onAddFocusables(androidx.recyclerview.widget.RecyclerView, java.util.ArrayList<android.view.View>, int, int);
+    method @CallSuper public void onAttachedToWindow(androidx.recyclerview.widget.RecyclerView!);
+    method @Deprecated public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!);
+    method @CallSuper public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.Recycler!);
+    method public android.view.View? onFocusSearchFailed(android.view.View, int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+    method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityEvent(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityNodeInfo(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+    method public void onInitializeAccessibilityNodeInfoForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+    method public android.view.View? onInterceptFocusSearch(android.view.View, int);
+    method public void onItemsAdded(androidx.recyclerview.widget.RecyclerView, int, int);
+    method public void onItemsChanged(androidx.recyclerview.widget.RecyclerView);
+    method public void onItemsMoved(androidx.recyclerview.widget.RecyclerView, int, int, int);
+    method public void onItemsRemoved(androidx.recyclerview.widget.RecyclerView, int, int);
+    method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int);
+    method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int, Object?);
+    method public void onLayoutChildren(androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+    method public void onLayoutCompleted(androidx.recyclerview.widget.RecyclerView.State!);
+    method public void onMeasure(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, int);
+    method @Deprecated public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, android.view.View, android.view.View?);
+    method public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.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(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, android.os.Bundle?);
+    method public boolean performAccessibilityActionForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, int, android.os.Bundle?);
+    method public void postOnAnimation(Runnable!);
+    method public void removeAllViews();
+    method public void removeAndRecycleAllViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+    method public void removeAndRecycleView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+    method public void removeAndRecycleViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
+    method public boolean removeCallbacks(Runnable!);
+    method public void removeDetachedView(android.view.View);
+    method public void removeView(android.view.View!);
+    method public void removeViewAt(int);
+    method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+    method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
+    method public void requestLayout();
+    method public void requestSimpleAnimationsInNextLayout();
+    method public int scrollHorizontallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+    method public void scrollToPosition(int);
+    method public int scrollVerticallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+    method @Deprecated public 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(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.State!, int);
+    method public void startSmoothScroll(androidx.recyclerview.widget.RecyclerView.SmoothScroller!);
+    method public void stopIgnoringView(android.view.View);
+    method public boolean supportsPredictiveItemAnimations();
+  }
+
+  public static interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+    method public 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(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+    method public int getViewAdapterPosition();
+    method public int getViewLayoutPosition();
+    method @Deprecated public int getViewPosition();
+    method public boolean isItemChanged();
+    method public boolean isItemRemoved();
+    method public boolean isViewInvalid();
+    method public boolean viewNeedsUpdate();
+  }
+
+  public static interface RecyclerView.OnChildAttachStateChangeListener {
+    method public void onChildViewAttachedToWindow(android.view.View);
+    method public void onChildViewDetachedFromWindow(android.view.View);
+  }
+
+  public abstract static class RecyclerView.OnFlingListener {
+    ctor public RecyclerView.OnFlingListener();
+    method public abstract boolean onFling(int, int);
+  }
+
+  public static interface RecyclerView.OnItemTouchListener {
+    method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+    method public void onRequestDisallowInterceptTouchEvent(boolean);
+    method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+  }
+
+  public abstract static class RecyclerView.OnScrollListener {
+    ctor public RecyclerView.OnScrollListener();
+    method public void onScrollStateChanged(androidx.recyclerview.widget.RecyclerView, int);
+    method public void onScrolled(androidx.recyclerview.widget.RecyclerView, int, int);
+  }
+
+  public static class RecyclerView.RecycledViewPool {
+    ctor public RecyclerView.RecycledViewPool();
+    method public void clear();
+    method public androidx.recyclerview.widget.RecyclerView.ViewHolder? getRecycledView(int);
+    method public int getRecycledViewCount(int);
+    method public void putRecycledView(androidx.recyclerview.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<androidx.recyclerview.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 interface RecyclerView.RecyclerListener {
+    method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+  }
+
+  public static class RecyclerView.SimpleOnItemTouchListener implements androidx.recyclerview.widget.RecyclerView.OnItemTouchListener {
+    ctor public RecyclerView.SimpleOnItemTouchListener();
+    method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+    method public void onRequestDisallowInterceptTouchEvent(boolean);
+    method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+  }
+
+  public abstract static class RecyclerView.SmoothScroller {
+    ctor public RecyclerView.SmoothScroller();
+    method public android.graphics.PointF? computeScrollVectorForPosition(int);
+    method public android.view.View! findViewByPosition(int);
+    method public int getChildCount();
+    method public int getChildPosition(android.view.View!);
+    method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+    method public int getTargetPosition();
+    method @Deprecated public 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(@Px int, @Px int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+    method protected abstract void onStart();
+    method protected abstract void onStop();
+    method protected abstract void onTargetFound(android.view.View, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.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(@Px int, @Px int);
+    ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int);
+    ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int, android.view.animation.Interpolator?);
+    method public int getDuration();
+    method @Px public int getDx();
+    method @Px public int getDy();
+    method public android.view.animation.Interpolator? getInterpolator();
+    method public void jumpTo(int);
+    method public void setDuration(int);
+    method public void setDx(@Px int);
+    method public void setDy(@Px int);
+    method public void setInterpolator(android.view.animation.Interpolator?);
+    method public void update(@Px int, @Px int, int, android.view.animation.Interpolator?);
+    field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+  }
+
+  public static interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+    method public 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, Object!);
+    method public void remove(int);
+    method public boolean willRunPredictiveAnimations();
+    method public boolean willRunSimpleAnimations();
+  }
+
+  public abstract static class RecyclerView.ViewCacheExtension {
+    ctor public RecyclerView.ViewCacheExtension();
+    method public abstract android.view.View? getViewForPositionAndType(androidx.recyclerview.widget.RecyclerView.Recycler, int, int);
+  }
+
+  public abstract static 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 @Deprecated public final int getPosition();
+    method public final boolean isRecyclable();
+    method public final void setIsRecyclable(boolean);
+    field public final android.view.View itemView;
+  }
+
+  public class RecyclerViewAccessibilityDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+    ctor public RecyclerViewAccessibilityDelegate(androidx.recyclerview.widget.RecyclerView);
+    method public androidx.core.view.AccessibilityDelegateCompat getItemDelegate();
+  }
+
+  public static class RecyclerViewAccessibilityDelegate.ItemDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+    ctor public RecyclerViewAccessibilityDelegate.ItemDelegate(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate);
+  }
+
+  public abstract class SimpleItemAnimator extends androidx.recyclerview.widget.RecyclerView.ItemAnimator {
+    ctor public SimpleItemAnimator();
+    method public abstract boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+    method public boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+    method public abstract boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+    method public boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+    method public abstract boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public final void dispatchChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public final void dispatchMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public final void dispatchRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public boolean getSupportsChangeAnimations();
+    method public void onAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public void onChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+    method public void onMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void onRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+    method public void setSupportsChangeAnimations(boolean);
+  }
+
+  public abstract class SnapHelper extends androidx.recyclerview.widget.RecyclerView.OnFlingListener {
+    ctor public SnapHelper();
+    method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?) throws java.lang.IllegalStateException;
+    method public abstract int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+    method public int[]! calculateScrollDistance(int, int);
+    method protected androidx.recyclerview.widget.RecyclerView.SmoothScroller? createScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method @Deprecated protected androidx.recyclerview.widget.LinearSmoothScroller? createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public abstract android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+    method public abstract int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+    method public boolean onFling(int, int);
+  }
+
+  public class SortedList<T> {
+    ctor public SortedList(Class<T>, androidx.recyclerview.widget.SortedList.Callback<T>);
+    ctor public SortedList(Class<T>, androidx.recyclerview.widget.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 androidx.recyclerview.widget.SortedList.Callback<T2> {
+    ctor public SortedList.BatchedCallback(androidx.recyclerview.widget.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 abstract static class SortedList.Callback<T2> implements java.util.Comparator<T2> androidx.recyclerview.widget.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 Object? getChangePayload(T2!, T2!);
+    method public abstract void onChanged(int, int);
+    method public void onChanged(int, int, Object!);
+  }
+
+  public abstract class SortedListAdapterCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+    ctor public SortedListAdapterCallback(androidx.recyclerview.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);
+  }
+
+  public class StaggeredGridLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.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 androidx.recyclerview.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 @Deprecated public static final 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 androidx.recyclerview.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(androidx.recyclerview.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
+  }
+
+}
+
diff --git a/recyclerview/recyclerview/api/res-1.1.0-alpha04.txt b/recyclerview/recyclerview/api/res-1.1.0-alpha04.txt
new file mode 100644
index 0000000..475bfc43
--- /dev/null
+++ b/recyclerview/recyclerview/api/res-1.1.0-alpha04.txt
@@ -0,0 +1,9 @@
+attr fastScrollEnabled
+attr fastScrollHorizontalThumbDrawable
+attr fastScrollHorizontalTrackDrawable
+attr fastScrollVerticalThumbDrawable
+attr fastScrollVerticalTrackDrawable
+attr layoutManager
+attr reverseLayout
+attr spanCount
+attr stackFromEnd
diff --git a/recyclerview/recyclerview/api/restricted_1.1.0-alpha04.ignore b/recyclerview/recyclerview/api/restricted_1.1.0-alpha04.ignore
new file mode 100644
index 0000000..7be19d9
--- /dev/null
+++ b/recyclerview/recyclerview/api/restricted_1.1.0-alpha04.ignore
@@ -0,0 +1,5 @@
+// Baseline format: 1.0
+InvalidNullConversion: androidx.recyclerview.widget.AsyncDifferConfig#getMainThreadExecutor():
+    Attempted to change method return from @NonNull to @Nullable: incompatible change for method androidx.recyclerview.widget.AsyncDifferConfig.getMainThreadExecutor()
+
+
diff --git a/recyclerview/recyclerview/api/restricted_1.1.0-alpha04.txt b/recyclerview/recyclerview/api/restricted_1.1.0-alpha04.txt
new file mode 100644
index 0000000..c379bc1
--- /dev/null
+++ b/recyclerview/recyclerview/api/restricted_1.1.0-alpha04.txt
@@ -0,0 +1,40 @@
+// Signature format: 3.0
+package androidx.recyclerview.widget {
+
+  public final class AsyncDifferConfig<T> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.concurrent.Executor? getMainThreadExecutor();
+  }
+
+  public static final class AsyncDifferConfig.Builder<T> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.recyclerview.widget.AsyncDifferConfig.Builder<T> setMainThreadExecutor(java.util.concurrent.Executor!);
+  }
+
+  public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void prepareForDrop(android.view.View, android.view.View, int, int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class LinearLayoutManager.SavedState implements android.os.Parcelable {
+    ctor public LinearLayoutManager.SavedState();
+    ctor public LinearLayoutManager.SavedState(androidx.recyclerview.widget.LinearLayoutManager.SavedState!);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel!, int);
+    field public static final android.os.Parcelable.Creator<androidx.recyclerview.widget.LinearLayoutManager.SavedState>! CREATOR;
+  }
+
+  @IntDef({androidx.recyclerview.widget.RecyclerView.HORIZONTAL, androidx.recyclerview.widget.RecyclerView.VERTICAL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.Orientation {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class RecyclerView.SavedState extends androidx.customview.view.AbsSavedState {
+    field public static final android.os.Parcelable.Creator<androidx.recyclerview.widget.RecyclerView.SavedState>! CREATOR;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class StaggeredGridLayoutManager.SavedState implements android.os.Parcelable {
+    ctor public StaggeredGridLayoutManager.SavedState();
+    ctor public StaggeredGridLayoutManager.SavedState(androidx.recyclerview.widget.StaggeredGridLayoutManager.SavedState!);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel!, int);
+    field public static final android.os.Parcelable.Creator<androidx.recyclerview.widget.StaggeredGridLayoutManager.SavedState>! CREATOR;
+  }
+
+}
+
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
index 0e5bda8..043eb89 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
@@ -1529,7 +1529,7 @@
              * * OR we are laying out scrap children
              * * OR we are not doing pre-layout
              */
-            if (!layoutChunkResult.mIgnoreConsumed || mLayoutState.mScrapList != null
+            if (!layoutChunkResult.mIgnoreConsumed || layoutState.mScrapList != null
                     || !state.isPreLayout()) {
                 layoutState.mAvailable -= layoutChunkResult.mConsumed;
                 // we keep a separate remaining space because mAvailable is important for recycling
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
index cca668c..1ff33d9 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
@@ -67,6 +67,7 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.core.os.TraceCompat;
 import androidx.core.util.Preconditions;
+import androidx.core.view.AccessibilityDelegateCompat;
 import androidx.core.view.InputDeviceCompat;
 import androidx.core.view.MotionEventCompat;
 import androidx.core.view.NestedScrollingChild2;
@@ -6185,7 +6186,10 @@
                     ViewCompat.setImportantForAccessibility(itemView,
                             ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
                 }
-                if (!ViewCompat.hasAccessibilityDelegate(itemView)) {
+                AccessibilityDelegateCompat delegate =
+                        ViewCompat.getAccessibilityDelegate(itemView);
+                if (delegate == null
+                        || delegate.getClass().equals(AccessibilityDelegateCompat.class)) {
                     holder.addFlags(ViewHolder.FLAG_SET_A11Y_ITEM_DELEGATE);
                     ViewCompat.setAccessibilityDelegate(itemView,
                             mAccessibilityDelegate.getItemDelegate());
diff --git a/recyclerview/selection/api/1.1.0-alpha04.txt b/recyclerview/selection/api/1.1.0-alpha04.txt
new file mode 100644
index 0000000..1b682ce
--- /dev/null
+++ b/recyclerview/selection/api/1.1.0-alpha04.txt
@@ -0,0 +1,158 @@
+// Signature format: 3.0
+package androidx.recyclerview.selection {
+
+  public abstract class BandPredicate {
+    ctor public BandPredicate();
+    method public abstract boolean canInitiate(android.view.MotionEvent!);
+  }
+
+  public static final class BandPredicate.EmptyArea extends androidx.recyclerview.selection.BandPredicate {
+    ctor public BandPredicate.EmptyArea(androidx.recyclerview.widget.RecyclerView);
+    method public boolean canInitiate(android.view.MotionEvent);
+  }
+
+  public static final class BandPredicate.NonDraggableArea extends androidx.recyclerview.selection.BandPredicate {
+    ctor public BandPredicate.NonDraggableArea(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.selection.ItemDetailsLookup);
+    method public boolean canInitiate(android.view.MotionEvent);
+  }
+
+  public abstract class FocusDelegate<K> {
+    ctor public FocusDelegate();
+    method public abstract void clearFocus();
+    method public abstract void focusItem(androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>);
+    method public abstract int getFocusedPosition();
+    method public abstract boolean hasFocusedItem();
+  }
+
+  public abstract class ItemDetailsLookup<K> {
+    ctor public ItemDetailsLookup();
+    method public abstract androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>? getItemDetails(android.view.MotionEvent);
+  }
+
+  public abstract static class ItemDetailsLookup.ItemDetails<K> {
+    ctor public ItemDetailsLookup.ItemDetails();
+    method public abstract int getPosition();
+    method public abstract K? getSelectionKey();
+    method public boolean hasSelectionKey();
+    method public boolean inDragRegion(android.view.MotionEvent);
+    method public boolean inSelectionHotspot(android.view.MotionEvent);
+  }
+
+  public abstract class ItemKeyProvider<K> {
+    ctor protected ItemKeyProvider(@androidx.recyclerview.selection.ItemKeyProvider.Scope int);
+    method public abstract K? getKey(int);
+    method public abstract int getPosition(K);
+    field public static final int SCOPE_CACHED = 1; // 0x1
+    field public static final int SCOPE_MAPPED = 0; // 0x0
+  }
+
+  @IntDef({androidx.recyclerview.selection.ItemKeyProvider.SCOPE_MAPPED, androidx.recyclerview.selection.ItemKeyProvider.SCOPE_CACHED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ItemKeyProvider.Scope {
+  }
+
+  public final class MutableSelection<K> extends androidx.recyclerview.selection.Selection<K> {
+    ctor public MutableSelection();
+    method public boolean add(K);
+    method public void clear();
+    method public void copyFrom(androidx.recyclerview.selection.Selection<K>);
+    method public boolean remove(K);
+  }
+
+  public interface OnContextClickListener {
+    method public boolean onContextClick(android.view.MotionEvent);
+  }
+
+  public interface OnDragInitiatedListener {
+    method public boolean onDragInitiated(android.view.MotionEvent);
+  }
+
+  public interface OnItemActivatedListener<K> {
+    method public boolean onItemActivated(androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails<K>, android.view.MotionEvent);
+  }
+
+  public final class OperationMonitor {
+    ctor public OperationMonitor();
+    method public void addListener(androidx.recyclerview.selection.OperationMonitor.OnChangeListener);
+    method public boolean isStarted();
+    method public void removeListener(androidx.recyclerview.selection.OperationMonitor.OnChangeListener);
+  }
+
+  public static interface OperationMonitor.OnChangeListener {
+    method public void onChanged();
+  }
+
+  public class Selection<K> implements java.lang.Iterable<K> {
+    method public boolean contains(K?);
+    method public boolean isEmpty();
+    method public java.util.Iterator<K>! iterator();
+    method public int size();
+  }
+
+  public final class SelectionPredicates {
+    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>! createSelectAnything();
+    method public static <K> androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>! createSelectSingleAnything();
+  }
+
+  public abstract class SelectionTracker<K> {
+    ctor public SelectionTracker();
+    method public abstract void addObserver(androidx.recyclerview.selection.SelectionTracker.SelectionObserver!);
+    method public abstract boolean clearSelection();
+    method public abstract void copySelection(androidx.recyclerview.selection.MutableSelection<K>);
+    method public abstract boolean deselect(K);
+    method public abstract androidx.recyclerview.selection.Selection<K>! getSelection();
+    method public abstract boolean hasSelection();
+    method public abstract boolean isSelected(K?);
+    method public abstract void onRestoreInstanceState(android.os.Bundle?);
+    method public abstract void onSaveInstanceState(android.os.Bundle);
+    method protected abstract void restoreSelection(androidx.recyclerview.selection.Selection<K>);
+    method public abstract boolean select(K);
+    method public abstract boolean setItemsSelected(Iterable<K>, boolean);
+    field public static final String SELECTION_CHANGED_MARKER = "Selection-Changed";
+  }
+
+  public static final class SelectionTracker.Builder<K> {
+    ctor public SelectionTracker.Builder(String, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.selection.ItemKeyProvider<K>, androidx.recyclerview.selection.ItemDetailsLookup<K>, androidx.recyclerview.selection.StorageStrategy<K>);
+    method public androidx.recyclerview.selection.SelectionTracker<K>! build();
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withBandOverlay(@DrawableRes int);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withBandPredicate(androidx.recyclerview.selection.BandPredicate);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withFocusDelegate(androidx.recyclerview.selection.FocusDelegate<K>);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withGestureTooltypes(int...!);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOnContextClickListener(androidx.recyclerview.selection.OnContextClickListener);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOnDragInitiatedListener(androidx.recyclerview.selection.OnDragInitiatedListener);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOnItemActivatedListener(androidx.recyclerview.selection.OnItemActivatedListener<K>);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withOperationMonitor(androidx.recyclerview.selection.OperationMonitor);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withPointerTooltypes(int...!);
+    method public androidx.recyclerview.selection.SelectionTracker.Builder<K>! withSelectionPredicate(androidx.recyclerview.selection.SelectionTracker.SelectionPredicate<K>);
+  }
+
+  public abstract static class SelectionTracker.SelectionObserver<K> {
+    ctor public SelectionTracker.SelectionObserver();
+    method public void onItemStateChanged(K, boolean);
+    method public void onSelectionChanged();
+    method public void onSelectionRefresh();
+    method public void onSelectionRestored();
+  }
+
+  public abstract static class SelectionTracker.SelectionPredicate<K> {
+    ctor public SelectionTracker.SelectionPredicate();
+    method public abstract boolean canSelectMultiple();
+    method public abstract boolean canSetStateAtPosition(int, boolean);
+    method public abstract boolean canSetStateForKey(K, boolean);
+  }
+
+  public final class StableIdKeyProvider extends androidx.recyclerview.selection.ItemKeyProvider<java.lang.Long> {
+    ctor public StableIdKeyProvider(androidx.recyclerview.widget.RecyclerView);
+    method public Long? getKey(int);
+    method public int getPosition(Long);
+  }
+
+  public abstract class StorageStrategy<K> {
+    ctor public StorageStrategy(Class<K>);
+    method public abstract android.os.Bundle asBundle(androidx.recyclerview.selection.Selection<K>);
+    method public abstract androidx.recyclerview.selection.Selection<K>? asSelection(android.os.Bundle);
+    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.Long>! createLongStorage();
+    method public static <K extends android.os.Parcelable> androidx.recyclerview.selection.StorageStrategy<K>! createParcelableStorage(Class<K>!);
+    method public static androidx.recyclerview.selection.StorageStrategy<java.lang.String>! createStringStorage();
+  }
+
+}
+
diff --git a/recyclerview/selection/api/res-1.1.0-alpha04.txt b/recyclerview/selection/api/res-1.1.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/recyclerview/selection/api/res-1.1.0-alpha04.txt
diff --git a/recyclerview/selection/api/restricted_1.1.0-alpha04.ignore b/recyclerview/selection/api/restricted_1.1.0-alpha04.ignore
new file mode 100644
index 0000000..d242801
--- /dev/null
+++ b/recyclerview/selection/api/restricted_1.1.0-alpha04.ignore
@@ -0,0 +1,5 @@
+// Baseline format: 1.0
+RemovedClass: androidx.recyclerview.selection.EventBridge:
+    Removed class androidx.recyclerview.selection.EventBridge
+
+
diff --git a/recyclerview/selection/api/restricted_1.1.0-alpha04.txt b/recyclerview/selection/api/restricted_1.1.0-alpha04.txt
new file mode 100644
index 0000000..3b7463f
--- /dev/null
+++ b/recyclerview/selection/api/restricted_1.1.0-alpha04.txt
@@ -0,0 +1,54 @@
+// Signature format: 3.0
+package androidx.recyclerview.selection {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class AutoScroller {
+    ctor public AutoScroller();
+    method public abstract void reset();
+    method public abstract void scroll(android.graphics.Point);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DefaultSelectionTracker<K> extends androidx.recyclerview.selection.SelectionTracker<K> {
+    ctor public DefaultSelectionTracker(String, androidx.recyclerview.selection.ItemKeyProvider, androidx.recyclerview.selection.SelectionTracker.SelectionPredicate, androidx.recyclerview.selection.StorageStrategy<K>);
+    method public void addObserver(androidx.recyclerview.selection.SelectionTracker.SelectionObserver);
+    method public void anchorRange(int);
+    method public void clearProvisionalSelection();
+    method public boolean clearSelection();
+    method public void copySelection(androidx.recyclerview.selection.MutableSelection);
+    method public boolean deselect(K);
+    method public void endRange();
+    method public void extendProvisionalRange(int);
+    method public void extendRange(int);
+    method protected androidx.recyclerview.widget.RecyclerView.AdapterDataObserver! getAdapterDataObserver();
+    method public androidx.recyclerview.selection.Selection! getSelection();
+    method public boolean hasSelection();
+    method public boolean isRangeActive();
+    method public boolean isSelected(K?);
+    method public void mergeProvisionalSelection();
+    method public final void onRestoreInstanceState(android.os.Bundle?);
+    method public final void onSaveInstanceState(android.os.Bundle);
+    method protected void restoreSelection(androidx.recyclerview.selection.Selection);
+    method public boolean select(K);
+    method public boolean setItemsSelected(Iterable<K>, boolean);
+    method public void setProvisionalSelection(java.util.Set<K>);
+    method public void startRange(int);
+  }
+
+  public abstract class ItemDetailsLookup<K> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected boolean overItemWithSelectionKey(android.view.MotionEvent);
+  }
+
+  public abstract class SelectionTracker<K> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract void anchorRange(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected abstract void clearProvisionalSelection();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract void endRange();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected abstract void extendProvisionalRange(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract void extendRange(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected abstract androidx.recyclerview.widget.RecyclerView.AdapterDataObserver! getAdapterDataObserver();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract boolean isRangeActive();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected abstract void mergeProvisionalSelection();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected abstract void setProvisionalSelection(java.util.Set<K>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract void startRange(int);
+  }
+
+}
+
diff --git a/room/common/api/2.1.0-alpha06.txt b/room/common/api/2.1.0-alpha06.txt
new file mode 100644
index 0000000..67cc6c6
--- /dev/null
+++ b/room/common/api/2.1.0-alpha06.txt
@@ -0,0 +1,185 @@
+// Signature format: 3.0
+package androidx.room {
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ColumnInfo {
+    method @androidx.room.ColumnInfo.Collate public abstract int collate() default androidx.room.ColumnInfo.UNSPECIFIED;
+    method public abstract boolean index() default false;
+    method public abstract String name() default androidx.room.ColumnInfo.INHERIT_FIELD_NAME;
+    method @androidx.room.ColumnInfo.SQLiteTypeAffinity public abstract int typeAffinity() default androidx.room.ColumnInfo.UNDEFINED;
+    field public static final int BINARY = 2; // 0x2
+    field public static final int BLOB = 5; // 0x5
+    field public static final String INHERIT_FIELD_NAME = "[field-name]";
+    field public static final int INTEGER = 3; // 0x3
+    field @RequiresApi(21) public static final int LOCALIZED = 5; // 0x5
+    field public static final int NOCASE = 3; // 0x3
+    field public static final int REAL = 4; // 0x4
+    field public static final int RTRIM = 4; // 0x4
+    field public static final int TEXT = 2; // 0x2
+    field public static final int UNDEFINED = 1; // 0x1
+    field @RequiresApi(21) public static final int UNICODE = 6; // 0x6
+    field public static final int UNSPECIFIED = 1; // 0x1
+  }
+
+  @IntDef({androidx.room.ColumnInfo.UNSPECIFIED, androidx.room.ColumnInfo.BINARY, androidx.room.ColumnInfo.NOCASE, androidx.room.ColumnInfo.RTRIM, androidx.room.ColumnInfo.LOCALIZED, androidx.room.ColumnInfo.UNICODE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface ColumnInfo.Collate {
+  }
+
+  @IntDef({androidx.room.ColumnInfo.UNDEFINED, androidx.room.ColumnInfo.TEXT, androidx.room.ColumnInfo.INTEGER, androidx.room.ColumnInfo.REAL, androidx.room.ColumnInfo.BLOB}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface ColumnInfo.SQLiteTypeAffinity {
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Dao {
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Database {
+    method public abstract Class[] entities();
+    method public abstract boolean exportSchema() default true;
+    method public abstract int version();
+    method public abstract Class[] views() default {};
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface DatabaseView {
+    method public abstract String value() default "";
+    method public abstract String viewName() default "";
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Delete {
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Embedded {
+    method public abstract String prefix() default "";
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Entity {
+    method public abstract androidx.room.ForeignKey[] foreignKeys() default {};
+    method public abstract String[] ignoredColumns() default {};
+    method public abstract androidx.room.Index[] indices() default {};
+    method public abstract boolean inheritSuperIndices() default false;
+    method public abstract String[] primaryKeys() default {};
+    method public abstract String tableName() default "";
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ForeignKey {
+    method public abstract String[] childColumns();
+    method public abstract boolean deferred() default false;
+    method public abstract Class entity();
+    method @androidx.room.ForeignKey.Action public abstract int onDelete() default androidx.room.ForeignKey.NO_ACTION;
+    method @androidx.room.ForeignKey.Action public abstract int onUpdate() default androidx.room.ForeignKey.NO_ACTION;
+    method public abstract String[] parentColumns();
+    field public static final int CASCADE = 5; // 0x5
+    field public static final int NO_ACTION = 1; // 0x1
+    field public static final int RESTRICT = 2; // 0x2
+    field public static final int SET_DEFAULT = 4; // 0x4
+    field public static final int SET_NULL = 3; // 0x3
+  }
+
+  @IntDef({androidx.room.ForeignKey.NO_ACTION, androidx.room.ForeignKey.RESTRICT, androidx.room.ForeignKey.SET_NULL, androidx.room.ForeignKey.SET_DEFAULT, androidx.room.ForeignKey.CASCADE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ForeignKey.Action {
+  }
+
+  @RequiresApi(16) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface Fts3 {
+    method public abstract String tokenizer() default androidx.room.FtsOptions.TOKENIZER_SIMPLE;
+    method public abstract String[] tokenizerArgs() default {};
+  }
+
+  @RequiresApi(16) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface Fts4 {
+    method public abstract Class contentEntity() default java.lang.Object.class;
+    method public abstract String languageId() default "";
+    method public abstract androidx.room.FtsOptions.MatchInfo matchInfo() default androidx.room.FtsOptions.MatchInfo.FTS4;
+    method public abstract String[] notIndexed() default {};
+    method public abstract androidx.room.FtsOptions.Order order() default androidx.room.FtsOptions.Order.ASC;
+    method public abstract int[] prefix() default {};
+    method public abstract String tokenizer() default androidx.room.FtsOptions.TOKENIZER_SIMPLE;
+    method public abstract String[] tokenizerArgs() default {};
+  }
+
+  public class FtsOptions {
+    field public static final String TOKENIZER_ICU = "icu";
+    field public static final String TOKENIZER_PORTER = "porter";
+    field public static final String TOKENIZER_SIMPLE = "simple";
+    field @RequiresApi(21) public static final String TOKENIZER_UNICODE61 = "unicode61";
+  }
+
+  public enum FtsOptions.MatchInfo {
+    enum_constant public static final androidx.room.FtsOptions.MatchInfo FTS3;
+    enum_constant public static final androidx.room.FtsOptions.MatchInfo FTS4;
+  }
+
+  public enum FtsOptions.Order {
+    enum_constant public static final androidx.room.FtsOptions.Order ASC;
+    enum_constant public static final androidx.room.FtsOptions.Order DESC;
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.CONSTRUCTOR}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Ignore {
+  }
+
+  @java.lang.annotation.Target({}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Index {
+    method public abstract String name() default "";
+    method public abstract boolean unique() default false;
+    method public abstract String[] value();
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Insert {
+    method @androidx.room.OnConflictStrategy public abstract int onConflict() default androidx.room.OnConflictStrategy.ABORT;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.room.OnConflictStrategy.REPLACE, androidx.room.OnConflictStrategy.ROLLBACK, androidx.room.OnConflictStrategy.ABORT, androidx.room.OnConflictStrategy.FAIL, androidx.room.OnConflictStrategy.IGNORE}) public @interface OnConflictStrategy {
+    field public static final int ABORT = 3; // 0x3
+    field @Deprecated public static final int FAIL = 4; // 0x4
+    field public static final int IGNORE = 5; // 0x5
+    field public static final int REPLACE = 1; // 0x1
+    field @Deprecated public static final int ROLLBACK = 2; // 0x2
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface PrimaryKey {
+    method public abstract boolean autoGenerate() default false;
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Query {
+    method public abstract String value();
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface RawQuery {
+    method public abstract Class[] observedEntities() default {};
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Relation {
+    method public abstract Class entity() default java.lang.Object.class;
+    method public abstract String entityColumn();
+    method public abstract String parentColumn();
+    method public abstract String[] projection() default {};
+  }
+
+  public class RoomWarnings {
+    ctor @Deprecated public RoomWarnings();
+    field public static final String CANNOT_CREATE_VERIFICATION_DATABASE = "ROOM_CANNOT_CREATE_VERIFICATION_DATABASE";
+    field public static final String CURSOR_MISMATCH = "ROOM_CURSOR_MISMATCH";
+    field public static final String DEFAULT_CONSTRUCTOR = "ROOM_DEFAULT_CONSTRUCTOR";
+    field public static final String INDEX_FROM_EMBEDDED_ENTITY_IS_DROPPED = "ROOM_EMBEDDED_ENTITY_INDEX_IS_DROPPED";
+    field public static final String INDEX_FROM_EMBEDDED_FIELD_IS_DROPPED = "ROOM_EMBEDDED_INDEX_IS_DROPPED";
+    field public static final String INDEX_FROM_PARENT_FIELD_IS_DROPPED = "ROOM_PARENT_FIELD_INDEX_IS_DROPPED";
+    field public static final String INDEX_FROM_PARENT_IS_DROPPED = "ROOM_PARENT_INDEX_IS_DROPPED";
+    field public static final String MISSING_INDEX_ON_FOREIGN_KEY_CHILD = "ROOM_MISSING_FOREIGN_KEY_CHILD_INDEX";
+    field public static final String MISSING_JAVA_TMP_DIR = "ROOM_MISSING_JAVA_TMP_DIR";
+    field public static final String MISSING_SCHEMA_LOCATION = "ROOM_MISSING_SCHEMA_LOCATION";
+    field public static final String PRIMARY_KEY_FROM_EMBEDDED_IS_DROPPED = "ROOM_EMBEDDED_PRIMARY_KEY_IS_DROPPED";
+    field public static final String RELATION_QUERY_WITHOUT_TRANSACTION = "ROOM_RELATION_QUERY_WITHOUT_TRANSACTION";
+    field public static final String RELATION_TYPE_MISMATCH = "ROOM_RELATION_TYPE_MISMATCH";
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface SkipQueryVerification {
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Transaction {
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface TypeConverter {
+  }
+
+  @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface TypeConverters {
+    method public abstract Class<?>[] value();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface Update {
+    method @androidx.room.OnConflictStrategy public abstract int onConflict() default androidx.room.OnConflictStrategy.ABORT;
+  }
+
+}
+
diff --git a/room/common/api/restricted_2.1.0-alpha06.txt b/room/common/api/restricted_2.1.0-alpha06.txt
new file mode 100644
index 0000000..648a72e
--- /dev/null
+++ b/room/common/api/restricted_2.1.0-alpha06.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.room {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RoomMasterTable {
+    method public static String! createInsertQuery(String!);
+    field public static final String CREATE_QUERY = "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)";
+    field public static final String DEFAULT_ID = "42";
+    field public static final String NAME = "room_master_table";
+    field public static final String READ_QUERY = "SELECT identity_hash FROM room_master_table WHERE id = 42 LIMIT 1";
+    field public static final String TABLE_NAME = "room_master_table";
+  }
+
+}
+
diff --git a/room/ktx/api/2.1.0-alpha06.txt b/room/ktx/api/2.1.0-alpha06.txt
new file mode 100644
index 0000000..f5dcd16
--- /dev/null
+++ b/room/ktx/api/2.1.0-alpha06.txt
@@ -0,0 +1,12 @@
+// Signature format: 3.0
+package androidx.room {
+
+  public final class RoomDatabaseKt {
+    ctor public RoomDatabaseKt();
+    method public static suspend Object? acquireTransactionThread(java.util.concurrent.Executor, kotlinx.coroutines.Job controlJob, kotlin.coroutines.experimental.Continuation<? super kotlin.coroutines.ContinuationInterceptor> p);
+    method public static suspend Object? createTransactionContext(androidx.room.RoomDatabase, kotlin.coroutines.experimental.Continuation<? super kotlin.coroutines.CoroutineContext> p);
+    method public static suspend <R> Object? withTransaction(androidx.room.RoomDatabase, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.experimental.Continuation<? super R>,?> block, kotlin.coroutines.experimental.Continuation<? super R> p);
+  }
+
+}
+
diff --git a/room/ktx/api/res-2.1.0-alpha06.txt b/room/ktx/api/res-2.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/room/ktx/api/res-2.1.0-alpha06.txt
diff --git a/room/ktx/api/restricted_2.1.0-alpha06.txt b/room/ktx/api/restricted_2.1.0-alpha06.txt
new file mode 100644
index 0000000..f31bf4d
--- /dev/null
+++ b/room/ktx/api/restricted_2.1.0-alpha06.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.room {
+
+  @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public final class CoroutinesRoom {
+    method public static suspend <R> Object? execute(androidx.room.RoomDatabase p, java.util.concurrent.Callable<R> db, kotlin.coroutines.experimental.Continuation<? super R> callable);
+    field public static final androidx.room.CoroutinesRoom.Companion! Companion;
+  }
+
+  public static final class CoroutinesRoom.Companion {
+    method public suspend <R> Object? execute(androidx.room.RoomDatabase db, java.util.concurrent.Callable<R> callable, kotlin.coroutines.experimental.Continuation<? super R> p);
+  }
+
+}
+
diff --git a/room/runtime/api/2.1.0-alpha06.txt b/room/runtime/api/2.1.0-alpha06.txt
new file mode 100644
index 0000000..00d448a
--- /dev/null
+++ b/room/runtime/api/2.1.0-alpha06.txt
@@ -0,0 +1,108 @@
+// Signature format: 3.0
+package androidx.room {
+
+  public class DatabaseConfiguration {
+    method public boolean isMigrationRequired(int, int);
+    method @Deprecated public boolean isMigrationRequiredFrom(int);
+    field public final boolean allowDestructiveMigrationOnDowngrade;
+    field public final boolean allowMainThreadQueries;
+    field public final java.util.List<androidx.room.RoomDatabase.Callback>? callbacks;
+    field public final android.content.Context context;
+    field public final androidx.room.RoomDatabase.JournalMode! journalMode;
+    field public final androidx.room.RoomDatabase.MigrationContainer migrationContainer;
+    field public final boolean multiInstanceInvalidation;
+    field public final String? name;
+    field public final java.util.concurrent.Executor queryExecutor;
+    field public final boolean requireMigration;
+    field public final androidx.sqlite.db.SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory;
+  }
+
+  public class InvalidationTracker {
+    method @WorkerThread public void addObserver(androidx.room.InvalidationTracker.Observer);
+    method public void refreshVersionsAsync();
+    method @WorkerThread public void removeObserver(androidx.room.InvalidationTracker.Observer);
+  }
+
+  public abstract static class InvalidationTracker.Observer {
+    ctor protected InvalidationTracker.Observer(String, java.lang.String...!);
+    ctor public InvalidationTracker.Observer(String[]);
+    method public abstract void onInvalidated(java.util.Set<java.lang.String>);
+  }
+
+  public class Room {
+    ctor @Deprecated public Room();
+    method public static <T extends androidx.room.RoomDatabase> androidx.room.RoomDatabase.Builder<T> databaseBuilder(android.content.Context, Class<T>, String);
+    method public static <T extends androidx.room.RoomDatabase> androidx.room.RoomDatabase.Builder<T> inMemoryDatabaseBuilder(android.content.Context, Class<T>);
+    field public static final String MASTER_TABLE_NAME = "room_master_table";
+  }
+
+  public abstract class RoomDatabase {
+    ctor public RoomDatabase();
+    method @Deprecated public void beginTransaction();
+    method @WorkerThread public abstract void clearAllTables();
+    method public void close();
+    method public androidx.sqlite.db.SupportSQLiteStatement! compileStatement(String);
+    method protected abstract androidx.room.InvalidationTracker createInvalidationTracker();
+    method protected abstract androidx.sqlite.db.SupportSQLiteOpenHelper createOpenHelper(androidx.room.DatabaseConfiguration!);
+    method @Deprecated public void endTransaction();
+    method public androidx.room.InvalidationTracker getInvalidationTracker();
+    method public androidx.sqlite.db.SupportSQLiteOpenHelper getOpenHelper();
+    method public java.util.concurrent.Executor getQueryExecutor();
+    method public boolean inTransaction();
+    method @CallSuper public void init(androidx.room.DatabaseConfiguration);
+    method protected void internalInitInvalidationTracker(androidx.sqlite.db.SupportSQLiteDatabase);
+    method public boolean isOpen();
+    method public android.database.Cursor! query(String!, Object[]?);
+    method public android.database.Cursor! query(androidx.sqlite.db.SupportSQLiteQuery!);
+    method public void runInTransaction(Runnable);
+    method public <V> V! runInTransaction(java.util.concurrent.Callable<V>);
+    method @Deprecated public void setTransactionSuccessful();
+    field @Deprecated protected java.util.List<androidx.room.RoomDatabase.Callback>? mCallbacks;
+    field @Deprecated protected volatile androidx.sqlite.db.SupportSQLiteDatabase! mDatabase;
+  }
+
+  public static class RoomDatabase.Builder<T extends androidx.room.RoomDatabase> {
+    method public androidx.room.RoomDatabase.Builder<T> addCallback(androidx.room.RoomDatabase.Callback);
+    method public androidx.room.RoomDatabase.Builder<T> addMigrations(androidx.room.migration.Migration...);
+    method public androidx.room.RoomDatabase.Builder<T> allowMainThreadQueries();
+    method public T build();
+    method public androidx.room.RoomDatabase.Builder<T> enableMultiInstanceInvalidation();
+    method public androidx.room.RoomDatabase.Builder<T> fallbackToDestructiveMigration();
+    method public androidx.room.RoomDatabase.Builder<T> fallbackToDestructiveMigrationFrom(int...!);
+    method public androidx.room.RoomDatabase.Builder<T> fallbackToDestructiveMigrationOnDowngrade();
+    method public androidx.room.RoomDatabase.Builder<T> openHelperFactory(androidx.sqlite.db.SupportSQLiteOpenHelper.Factory?);
+    method public androidx.room.RoomDatabase.Builder<T> setJournalMode(androidx.room.RoomDatabase.JournalMode);
+    method public androidx.room.RoomDatabase.Builder<T> setQueryExecutor(java.util.concurrent.Executor);
+  }
+
+  public abstract static class RoomDatabase.Callback {
+    ctor public RoomDatabase.Callback();
+    method public void onCreate(androidx.sqlite.db.SupportSQLiteDatabase);
+    method public void onOpen(androidx.sqlite.db.SupportSQLiteDatabase);
+  }
+
+  public enum RoomDatabase.JournalMode {
+    enum_constant public static final androidx.room.RoomDatabase.JournalMode AUTOMATIC;
+    enum_constant public static final androidx.room.RoomDatabase.JournalMode TRUNCATE;
+    enum_constant @RequiresApi(android.os.Build.VERSION_CODES.JELLY_BEAN) public static final androidx.room.RoomDatabase.JournalMode WRITE_AHEAD_LOGGING;
+  }
+
+  public static class RoomDatabase.MigrationContainer {
+    ctor public RoomDatabase.MigrationContainer();
+    method public void addMigrations(androidx.room.migration.Migration...);
+    method public java.util.List<androidx.room.migration.Migration>? findMigrationPath(int, int);
+  }
+
+}
+
+package androidx.room.migration {
+
+  public abstract class Migration {
+    ctor public Migration(int, int);
+    method public abstract void migrate(androidx.sqlite.db.SupportSQLiteDatabase);
+    field public final int endVersion;
+    field public final int startVersion;
+  }
+
+}
+
diff --git a/room/runtime/api/res-2.1.0-alpha06.txt b/room/runtime/api/res-2.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/room/runtime/api/res-2.1.0-alpha06.txt
diff --git a/room/runtime/api/restricted_2.1.0-alpha06.ignore b/room/runtime/api/restricted_2.1.0-alpha06.ignore
new file mode 100644
index 0000000..83c78c1
--- /dev/null
+++ b/room/runtime/api/restricted_2.1.0-alpha06.ignore
@@ -0,0 +1,5 @@
+// Baseline format: 1.0
+RemovedMethod: androidx.room.DatabaseConfiguration#DatabaseConfiguration(android.content.Context, String, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory, androidx.room.RoomDatabase.MigrationContainer, java.util.List<androidx.room.RoomDatabase.Callback>, boolean, androidx.room.RoomDatabase.JournalMode, java.util.concurrent.Executor, boolean, java.util.Set<java.lang.Integer>):
+    Removed constructor androidx.room.DatabaseConfiguration(android.content.Context,String,androidx.sqlite.db.SupportSQLiteOpenHelper.Factory,androidx.room.RoomDatabase.MigrationContainer,java.util.List<androidx.room.RoomDatabase.Callback>,boolean,androidx.room.RoomDatabase.JournalMode,java.util.concurrent.Executor,boolean,java.util.Set<java.lang.Integer>)
+
+
diff --git a/room/runtime/api/restricted_2.1.0-alpha06.txt b/room/runtime/api/restricted_2.1.0-alpha06.txt
new file mode 100644
index 0000000..10b8084
--- /dev/null
+++ b/room/runtime/api/restricted_2.1.0-alpha06.txt
@@ -0,0 +1,183 @@
+// Signature format: 3.0
+package androidx.room {
+
+  public class DatabaseConfiguration {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public DatabaseConfiguration(android.content.Context, String?, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory, androidx.room.RoomDatabase.MigrationContainer, java.util.List<androidx.room.RoomDatabase.Callback>?, boolean, androidx.room.RoomDatabase.JournalMode!, java.util.concurrent.Executor, boolean, boolean, boolean, java.util.Set<java.lang.Integer>?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class EntityDeletionOrUpdateAdapter<T> extends androidx.room.SharedSQLiteStatement {
+    ctor public EntityDeletionOrUpdateAdapter(androidx.room.RoomDatabase!);
+    method protected abstract void bind(androidx.sqlite.db.SupportSQLiteStatement!, T!);
+    method public final int handle(T!);
+    method public final int handleMultiple(Iterable<T>!);
+    method public final int handleMultiple(T[]!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class EntityInsertionAdapter<T> extends androidx.room.SharedSQLiteStatement {
+    ctor public EntityInsertionAdapter(androidx.room.RoomDatabase!);
+    method protected abstract void bind(androidx.sqlite.db.SupportSQLiteStatement!, T!);
+    method public final void insert(T!);
+    method public final void insert(T[]!);
+    method public final void insert(Iterable<T>!);
+    method public final long insertAndReturnId(T!);
+    method public final long[]! insertAndReturnIdsArray(java.util.Collection<T>!);
+    method public final long[]! insertAndReturnIdsArray(T[]!);
+    method public final Long[]! insertAndReturnIdsArrayBox(java.util.Collection<T>!);
+    method public final Long[]! insertAndReturnIdsArrayBox(T[]!);
+    method public final java.util.List<java.lang.Long>! insertAndReturnIdsList(T[]!);
+    method public final java.util.List<java.lang.Long>! insertAndReturnIdsList(java.util.Collection<T>!);
+  }
+
+  public class InvalidationTracker {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public InvalidationTracker(androidx.room.RoomDatabase!, java.lang.String...!);
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public InvalidationTracker(androidx.room.RoomDatabase!, java.util.Map<java.lang.String,java.lang.String>!, java.util.Map<java.lang.String,java.util.Set<java.lang.String>>!, java.lang.String...!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addWeakObserver(androidx.room.InvalidationTracker.Observer!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T> androidx.lifecycle.LiveData<T>! createLiveData(String[]!, java.util.concurrent.Callable<T>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @WorkerThread public void refreshVersionsSync();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MultiInstanceInvalidationService extends android.app.Service {
+    ctor public MultiInstanceInvalidationService();
+    method public android.os.IBinder? onBind(android.content.Intent!);
+  }
+
+  public abstract class RoomDatabase {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void assertNotMainThread();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void assertNotSuspendingTransaction();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int MAX_BIND_PARAMETER_CNT = 999; // 0x3e7
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RoomOpenHelper extends androidx.sqlite.db.SupportSQLiteOpenHelper.Callback {
+    ctor public RoomOpenHelper(androidx.room.DatabaseConfiguration, androidx.room.RoomOpenHelper.Delegate, String, String);
+    ctor public RoomOpenHelper(androidx.room.DatabaseConfiguration, androidx.room.RoomOpenHelper.Delegate, String);
+    method public void onCreate(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method public void onUpgrade(androidx.sqlite.db.SupportSQLiteDatabase!, int, int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract static class RoomOpenHelper.Delegate {
+    ctor public RoomOpenHelper.Delegate(int);
+    method protected abstract void createAllTables(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method protected abstract void dropAllTables(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method protected abstract void onCreate(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method protected abstract void onOpen(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method protected void onPostMigrate(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method protected void onPreMigrate(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method protected abstract void validateMigration(androidx.sqlite.db.SupportSQLiteDatabase!);
+    field public final int version;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RoomSQLiteQuery implements androidx.sqlite.db.SupportSQLiteProgram androidx.sqlite.db.SupportSQLiteQuery {
+    method public static androidx.room.RoomSQLiteQuery! acquire(String!, int);
+    method public void bindBlob(int, byte[]!);
+    method public void bindDouble(int, double);
+    method public void bindLong(int, long);
+    method public void bindNull(int);
+    method public void bindString(int, String!);
+    method public void bindTo(androidx.sqlite.db.SupportSQLiteProgram!);
+    method public void clearBindings();
+    method public void close();
+    method public void copyArgumentsFrom(androidx.room.RoomSQLiteQuery!);
+    method public static androidx.room.RoomSQLiteQuery! copyFrom(androidx.sqlite.db.SupportSQLiteQuery!);
+    method public int getArgCount();
+    method public String! getSql();
+    method public void release();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class SharedSQLiteStatement {
+    ctor public SharedSQLiteStatement(androidx.room.RoomDatabase!);
+    method public androidx.sqlite.db.SupportSQLiteStatement! acquire();
+    method protected void assertNotMainThread();
+    method protected abstract String! createQuery();
+    method public void release(androidx.sqlite.db.SupportSQLiteStatement!);
+  }
+
+}
+
+package androidx.room.paging {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class LimitOffsetDataSource<T> extends androidx.paging.PositionalDataSource<T> {
+    ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase!, androidx.sqlite.db.SupportSQLiteQuery!, boolean, java.lang.String...!);
+    ctor protected LimitOffsetDataSource(androidx.room.RoomDatabase!, androidx.room.RoomSQLiteQuery!, boolean, java.lang.String...!);
+    method protected abstract java.util.List<T>! convertRows(android.database.Cursor!);
+    method public void loadInitial(androidx.paging.PositionalDataSource.LoadInitialParams, androidx.paging.PositionalDataSource.LoadInitialCallback<T>);
+    method public void loadRange(androidx.paging.PositionalDataSource.LoadRangeParams, androidx.paging.PositionalDataSource.LoadRangeCallback<T>);
+  }
+
+}
+
+package androidx.room.util {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CursorUtil {
+    method public static android.database.Cursor copyAndClose(android.database.Cursor);
+    method public static int getColumnIndex(android.database.Cursor, String);
+    method public static int getColumnIndexOrThrow(android.database.Cursor, String);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DBUtil {
+    method public static void dropFtsSyncTriggers(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method public static android.database.Cursor query(androidx.room.RoomDatabase!, androidx.sqlite.db.SupportSQLiteQuery!, boolean);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FtsTableInfo {
+    ctor public FtsTableInfo(String!, java.util.Set<java.lang.String>!, java.util.Set<java.lang.String>!);
+    ctor public FtsTableInfo(String!, java.util.Set<java.lang.String>!, String!);
+    method public static androidx.room.util.FtsTableInfo! read(androidx.sqlite.db.SupportSQLiteDatabase!, String!);
+    field public final java.util.Set<java.lang.String>! columns;
+    field public final String! name;
+    field public final java.util.Set<java.lang.String>! options;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class StringUtil {
+    method public static void appendPlaceholders(StringBuilder!, int);
+    method public static String? joinIntoString(java.util.List<java.lang.Integer>?);
+    method public static StringBuilder! newStringBuilder();
+    method public static java.util.List<java.lang.Integer>? splitToIntList(String?);
+    field public static final String[]! EMPTY_STRING_ARRAY;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TableInfo {
+    ctor public TableInfo(String!, java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column>!, java.util.Set<androidx.room.util.TableInfo.ForeignKey>!, java.util.Set<androidx.room.util.TableInfo.Index>!);
+    ctor public TableInfo(String!, java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column>!, java.util.Set<androidx.room.util.TableInfo.ForeignKey>!);
+    method public static androidx.room.util.TableInfo! read(androidx.sqlite.db.SupportSQLiteDatabase!, String!);
+    field public final java.util.Map<java.lang.String,androidx.room.util.TableInfo.Column>! columns;
+    field public final java.util.Set<androidx.room.util.TableInfo.ForeignKey>! foreignKeys;
+    field public final java.util.Set<androidx.room.util.TableInfo.Index>? indices;
+    field public final String! name;
+  }
+
+  public static class TableInfo.Column {
+    ctor public TableInfo.Column(String!, String!, boolean, int);
+    method public boolean isPrimaryKey();
+    field public final int affinity;
+    field public final String! name;
+    field public final boolean notNull;
+    field public final int primaryKeyPosition;
+    field public final String! type;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class TableInfo.ForeignKey {
+    ctor public TableInfo.ForeignKey(String, String, String, java.util.List<java.lang.String>, java.util.List<java.lang.String>);
+    field public final java.util.List<java.lang.String> columnNames;
+    field public final String onDelete;
+    field public final String onUpdate;
+    field public final java.util.List<java.lang.String> referenceColumnNames;
+    field public final String referenceTable;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class TableInfo.Index {
+    ctor public TableInfo.Index(String!, boolean, java.util.List<java.lang.String>!);
+    field public static final String DEFAULT_PREFIX = "index_";
+    field public final java.util.List<java.lang.String>! columns;
+    field public final String! name;
+    field public final boolean unique;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ViewInfo {
+    ctor public ViewInfo(String!, String!);
+    method public static androidx.room.util.ViewInfo! read(androidx.sqlite.db.SupportSQLiteDatabase!, String!);
+    field public final String! name;
+    field public final String! sql;
+  }
+
+}
+
diff --git a/room/rxjava2/api/2.1.0-alpha06.txt b/room/rxjava2/api/2.1.0-alpha06.txt
new file mode 100644
index 0000000..8a7a0fb
--- /dev/null
+++ b/room/rxjava2/api/2.1.0-alpha06.txt
@@ -0,0 +1,16 @@
+// Signature format: 3.0
+package androidx.room {
+
+  public class EmptyResultSetException extends java.lang.RuntimeException {
+    ctor public EmptyResultSetException(String!);
+  }
+
+  public class RxRoom {
+    ctor @Deprecated public RxRoom();
+    method public static io.reactivex.Flowable<java.lang.Object>! createFlowable(androidx.room.RoomDatabase!, java.lang.String...!);
+    method public static io.reactivex.Observable<java.lang.Object>! createObservable(androidx.room.RoomDatabase!, java.lang.String...!);
+    field public static final Object! NOTHING;
+  }
+
+}
+
diff --git a/room/rxjava2/api/res-2.1.0-alpha06.txt b/room/rxjava2/api/res-2.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/room/rxjava2/api/res-2.1.0-alpha06.txt
diff --git a/room/rxjava2/api/restricted_2.1.0-alpha06.txt b/room/rxjava2/api/restricted_2.1.0-alpha06.txt
new file mode 100644
index 0000000..36290b8
--- /dev/null
+++ b/room/rxjava2/api/restricted_2.1.0-alpha06.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.room {
+
+  public class RxRoom {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Flowable<T>! createFlowable(androidx.room.RoomDatabase!, String[]!, java.util.concurrent.Callable<T>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static <T> io.reactivex.Observable<T>! createObservable(androidx.room.RoomDatabase!, String[]!, java.util.concurrent.Callable<T>!);
+  }
+
+}
+
diff --git a/room/testing/api/2.1.0-alpha06.txt b/room/testing/api/2.1.0-alpha06.txt
new file mode 100644
index 0000000..3d2ed97
--- /dev/null
+++ b/room/testing/api/2.1.0-alpha06.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.room.testing {
+
+  public class MigrationTestHelper extends org.junit.rules.TestWatcher {
+    ctor public MigrationTestHelper(android.app.Instrumentation!, String!);
+    ctor public MigrationTestHelper(android.app.Instrumentation!, String!, androidx.sqlite.db.SupportSQLiteOpenHelper.Factory!);
+    method public void closeWhenFinished(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method public void closeWhenFinished(androidx.room.RoomDatabase!);
+    method public androidx.sqlite.db.SupportSQLiteDatabase! createDatabase(String!, int) throws java.io.IOException;
+    method public androidx.sqlite.db.SupportSQLiteDatabase! runMigrationsAndValidate(String!, int, boolean, androidx.room.migration.Migration...!) throws java.io.IOException;
+  }
+
+}
+
diff --git a/room/testing/api/res-2.1.0-alpha06.txt b/room/testing/api/res-2.1.0-alpha06.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/room/testing/api/res-2.1.0-alpha06.txt
diff --git a/room/testing/api/restricted_2.1.0-alpha06.txt b/room/testing/api/restricted_2.1.0-alpha06.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/room/testing/api/restricted_2.1.0-alpha06.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/samples/Support7Demos/src/main/AndroidManifest.xml b/samples/Support7Demos/src/main/AndroidManifest.xml
index cfeef10..3014c77 100644
--- a/samples/Support7Demos/src/main/AndroidManifest.xml
+++ b/samples/Support7Demos/src/main/AndroidManifest.xml
@@ -161,8 +161,17 @@
         </activity>
 
         <activity android:name=".app.ActionBarUsage"
-                android:label="@string/action_bar_usage"
-                android:theme="@style/Theme.AppCompat">
+            android:label="@string/action_bar_usage"
+            android:theme="@style/Theme.AppCompat">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.example.android.supportv7.SAMPLE_CODE" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".app.ActionBarBackgroundChange"
+            android:label="@string/action_bar_background_change"
+            android:theme="@style/Theme.AppCompat.Light">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.example.android.supportv7.SAMPLE_CODE" />
@@ -251,6 +260,15 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".app.AppCompatWidgetsSwitches"
+            android:label="@string/appcompat_widgets_switches"
+            android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.example.android.supportv7.SAMPLE_CODE" />
+            </intent-filter>
+        </activity>
+
         <activity android:name=".app.AppCompatWidgetsTextInput"
                   android:label="@string/appcompat_widgets_text_input"
                   android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
@@ -318,6 +336,19 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".app.ToolbarBackgroundChange"
+            android:label="@string/toolbar_background_change"
+            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.example.android.supportv7.SAMPLE_CODE" />
+            </intent-filter>
+
+            <meta-data
+                android:name="android.app.default_searchable"
+                android:value=".app.SearchActivity" />
+        </activity>
+
         <activity android:name=".app.DialogUsage"
                   android:label="@string/dialog_usage"
                   android:theme="@style/Theme.AppCompat.Light">
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarBackgroundChange.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarBackgroundChange.java
new file mode 100644
index 0000000..51d18f7
--- /dev/null
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ActionBarBackgroundChange.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.android.supportv7.app;
+
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.example.android.supportv7.R;
+
+/**
+ * This demonstrates changing background and elevation (on supported platforms) of ActionBar.
+ */
+public class ActionBarBackgroundChange extends AppCompatActivity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.action_bar_background_change);
+
+        final ActionBar actionBar = getSupportActionBar();
+        actionBar.setBackgroundDrawable(new ColorDrawable(0x00FFFFFF));
+
+        findViewById(R.id.make_bg_transparent).setOnClickListener(
+                new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        actionBar.setBackgroundDrawable(new ColorDrawable(0x00FFFFFF));
+                        actionBar.setElevation(0);
+                    }
+                });
+
+        findViewById(R.id.make_bg_color).setOnClickListener(
+                new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        actionBar.setBackgroundDrawable(new ColorDrawable(0xFF80FFA0));
+                        actionBar.setElevation(20);
+                    }
+                });
+    }
+}
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsSwitches.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsSwitches.java
new file mode 100644
index 0000000..b134543
--- /dev/null
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/AppCompatWidgetsSwitches.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.android.supportv7.app;
+
+import android.os.Bundle;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.example.android.supportv7.R;
+
+/**
+ * This demonstrates the styled {@link android.widget.Switch} and
+ * {@link androidx.appcompat.widget.SwitchCompat} widgets in AppCompat.
+ */
+public class AppCompatWidgetsSwitches extends AppCompatActivity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.appcompat_widgets_switches);
+    }
+}
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarBackgroundChange.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarBackgroundChange.java
new file mode 100644
index 0000000..8fc939a
--- /dev/null
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/app/ToolbarBackgroundChange.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.android.supportv7.app;
+
+import android.app.SearchManager;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Toast;
+
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.SearchView;
+import androidx.appcompat.widget.Toolbar;
+
+import com.example.android.supportv7.R;
+
+/**
+ * This demonstrates changing background and elevation (on supported platforms) of Toolbar.
+ */
+public class ToolbarBackgroundChange extends AppCompatActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.toolbar_background_change);
+
+        // Retrieve the Toolbar from our content view, and set it as the action bar
+        Toolbar toolbar = findViewById(R.id.toolbar);
+        setSupportActionBar(toolbar);
+
+        final ActionBar actionBar = getSupportActionBar();
+        findViewById(R.id.make_bg_transparent).setOnClickListener(
+                new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        actionBar.setElevation(0);
+                        actionBar.setBackgroundDrawable(new ColorDrawable(0x00FFFFFF));
+                    }
+                });
+
+        findViewById(R.id.make_bg_color).setOnClickListener(
+                new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        actionBar.setElevation(20);
+                        actionBar.setBackgroundDrawable(new ColorDrawable(0xFF80FFA0));
+                    }
+                });
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        MenuInflater inflater = getMenuInflater();
+        inflater.inflate(R.menu.actions, menu);
+
+        // Retrieve the SearchView and plug it into SearchManager
+        final SearchView searchView =
+                (SearchView) menu.findItem(R.id.action_search).getActionView();
+
+        SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
+        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
+
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show();
+        return true;
+    }
+
+}
diff --git a/samples/Support7Demos/src/main/res/drawable/switch_compat_thumb.xml b/samples/Support7Demos/src/main/res/drawable/switch_compat_thumb.xml
new file mode 100644
index 0000000..6e430e1
--- /dev/null
+++ b/samples/Support7Demos/src/main/res/drawable/switch_compat_thumb.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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="#FFFF00" />
+    <size
+        android:width="32dp"
+        android:height="32dp" />
+</shape>
diff --git a/samples/Support7Demos/src/main/res/drawable/switch_compat_track.xml b/samples/Support7Demos/src/main/res/drawable/switch_compat_track.xml
new file mode 100644
index 0000000..bb2775c
--- /dev/null
+++ b/samples/Support7Demos/src/main/res/drawable/switch_compat_track.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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">
+    <solid android:color="#FF0000" />
+    <size
+        android:width="64dp"
+        android:height="32dp" />
+</shape>
diff --git a/samples/Support7Demos/src/main/res/layout/action_bar_background_change.xml b/samples/Support7Demos/src/main/res/layout/action_bar_background_change.xml
new file mode 100644
index 0000000..852c5ff
--- /dev/null
+++ b/samples/Support7Demos/src/main/res/layout/action_bar_background_change.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:padding="12dp">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        android:text="Changing elevation with the buttons below is only relevant on SDK 21+" />
+
+    <Button
+        android:id="@+id/make_bg_transparent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="12dp"
+        android:text="Transparent BG + no elevation" />
+
+    <Button
+        android:id="@+id/make_bg_color"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Color BG + elevation" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/samples/Support7Demos/src/main/res/layout/appcompat_widgets_buttons.xml b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_buttons.xml
index f481406..61bb49d 100644
--- a/samples/Support7Demos/src/main/res/layout/appcompat_widgets_buttons.xml
+++ b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_buttons.xml
@@ -15,144 +15,123 @@
      limitations under the License.
 -->
 
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView
+    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"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    android:layout_height="match_parent">
 
-    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:orientation="vertical"
-                  android:padding="16dp">
-
-        <androidx.appcompat.widget.SwitchCompat
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:text="SwitchCompat"/>
-
-        <androidx.appcompat.widget.SwitchCompat
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:enabled="false"
-                android:text="SwitchCompat disabled"/>
-
-        <Switch
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:text="Switch"/>
-
-        <Switch
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:enabled="false"
-                android:text="Switch disabled"/>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="16dp">
 
         <CheckBox
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="CheckBox"/>
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="CheckBox" />
 
         <RadioGroup
-                android:layout_width="match_parent"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <RadioButton
+                android:id="@+id/radiobutton_1"
+                android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:orientation="horizontal">
+                android:text="RadioButton" />
 
             <RadioButton
-                    android:id="@+id/radiobutton_1"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="RadioButton"/>
-
-            <RadioButton
-                    android:id="@+id/radiobutton_2"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="RadioButton"/>
+                android:id="@+id/radiobutton_2"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="RadioButton" />
 
         </RadioGroup>
 
         <Button
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Button"/>
+            android:text="Button" />
 
         <Button
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:enabled="false"
-            android:text="Button disabled"/>
+            android:text="Button disabled" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Small"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Button (small)"
-            style="@style/Widget.AppCompat.Button.Small"/>
+            android:text="Button (small)" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Small"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:enabled="false"
-            android:text="Button (small) disabled"
-            style="@style/Widget.AppCompat.Button.Small"/>
+            android:text="Button (small) disabled" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Borderless"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Button (borderless)"
-            style="@style/Widget.AppCompat.Button.Borderless"/>
+            android:text="Button (borderless)" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Borderless"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:enabled="false"
-            android:text="Button (borderless) disabled"
-            style="@style/Widget.AppCompat.Button.Borderless"/>
+            android:text="Button (borderless) disabled" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Borderless.Colored"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Button (borderless + colored)"
-            style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
+            android:text="Button (borderless + colored)" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Borderless.Colored"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:enabled="false"
-            android:text="Button (borderless + colored) disabled"
-            style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
+            android:text="Button (borderless + colored) disabled" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Colored"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Button (colored)"
-            style="@style/Widget.AppCompat.Button.Colored"/>
+            android:text="Button (colored)" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Colored"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:enabled="false"
-            android:text="Button (colored) disabled"
-            style="@style/Widget.AppCompat.Button.Colored"/>
+            android:text="Button (colored) disabled" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Colored"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="Button (colored + tinted)"
-            app:backgroundTint="#00FF00"
-            style="@style/Widget.AppCompat.Button.Colored"/>
+            app:backgroundTint="#00FF00" />
 
         <Button
+            style="@style/Widget.AppCompat.Button.Colored"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:enabled="false"
             android:text="Button (colored + tinted) disabled"
-            app:backgroundTint="#00FF00"
-            style="@style/Widget.AppCompat.Button.Colored"/>
+            app:backgroundTint="#00FF00" />
 
         <RatingBar
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"/>
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
 
     </LinearLayout>
 
diff --git a/samples/Support7Demos/src/main/res/layout/appcompat_widgets_switches.xml b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_switches.xml
new file mode 100644
index 0000000..2e24fc6
--- /dev/null
+++ b/samples/Support7Demos/src/main/res/layout/appcompat_widgets_switches.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<ScrollView
+    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:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="16dp">
+
+        <Switch
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Switch" />
+
+        <Switch
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:enabled="false"
+            android:text="Switch disabled" />
+
+        <androidx.appcompat.widget.SwitchCompat
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="SwitchCompat" />
+
+        <androidx.appcompat.widget.SwitchCompat
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:enabled="false"
+            android:text="SwitchCompat disabled" />
+
+        <androidx.appcompat.widget.SwitchCompat
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:thumb="@drawable/switch_compat_thumb"
+            app:track="@drawable/switch_compat_track"
+            android:text="SwitchCompat custom drawables" />
+
+        <androidx.appcompat.widget.SwitchCompat
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:thumb="@drawable/switch_compat_thumb"
+            app:thumbTint="@color/color_sky_day"
+            app:track="@drawable/switch_compat_track"
+            app:trackTint="@color/color_sky_night"
+            android:text="SwitchCompat custom drawables + tint" />
+
+    </LinearLayout>
+
+</ScrollView>
\ No newline at end of file
diff --git a/samples/Support7Demos/src/main/res/layout/toolbar_background_change.xml b/samples/Support7Demos/src/main/res/layout/toolbar_background_change.xml
new file mode 100644
index 0000000..4e12993
--- /dev/null
+++ b/samples/Support7Demos/src/main/res/layout/toolbar_background_change.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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">
+
+    <androidx.appcompat.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="?attr/colorPrimaryDark"
+        android:minHeight="?attr/actionBarSize"
+        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
+        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
+
+    <Button
+        android:id="@+id/make_bg_transparent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        android:text="Transparent BG + no elevation" />
+
+    <Button
+        android:id="@+id/make_bg_color"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Color BG + elevation" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/samples/Support7Demos/src/main/res/values/strings.xml b/samples/Support7Demos/src/main/res/values/strings.xml
index e1bbe81..c9db2ab 100644
--- a/samples/Support7Demos/src/main/res/values/strings.xml
+++ b/samples/Support7Demos/src/main/res/values/strings.xml
@@ -65,6 +65,7 @@
 
     <string name="action_bar_mechanics">AppCompat/Action Bar/Action Bar Mechanics</string>
     <string name="action_bar_usage">AppCompat/Action Bar/Action Bar Usage</string>
+    <string name="action_bar_background_change">AppCompat/Action Bar/Action Bar Background Change</string>
     <string name="action_bar_tabs">AppCompat/Action Bar/Action Bar Tabs</string>
     <string name="action_bar_settings_action_provider">AppCompat/Action Bar/Settings Action Provider</string>
     <string name="action_bar_share_action_provider">AppCompat/Action Bar/ShareActionProvider</string>
@@ -75,6 +76,7 @@
     <string name="action_bar_hide_scroll">AppCompat/Action Bar/Hide on Scroll</string>
     <string name="appcompat_widgets_buttons">AppCompat/Widgets/Buttons</string>
     <string name="appcompat_widgets_spinners">AppCompat/Widgets/Spinners</string>
+    <string name="appcompat_widgets_switches">AppCompat/Widgets/Switches</string>
     <string name="appcompat_widgets_text_input">AppCompat/Widgets/Text Input</string>
     <string name="appcompat_widgets_text_views">AppCompat/Widgets/Text Views</string>
 
@@ -133,6 +135,7 @@
     <string name="toolbar_display_options">AppCompat/Toolbar/Toolbar Display Options</string>
     <string name="toolbar_fragment_pager">AppCompat/Toolbar/Toolbar Fragment ViewPager</string>
     <string name="toolbar_action_mode">AppCompat/Toolbar/Action Mode</string>
+    <string name="toolbar_background_change">AppCompat/Toolbar/Toolbar Background Change</string>
 
     <string name="dialog_usage">AppCompat/Dialog/Dialog Usage</string>
     <string name="dialog_title">My great dialog</string>
diff --git a/samples/SupportCarDemos/src/main/res/layout/tab_bar_view_activity.xml b/samples/SupportCarDemos/src/main/res/layout/tab_bar_view_activity.xml
index c6cb3c3..84d5a7f 100644
--- a/samples/SupportCarDemos/src/main/res/layout/tab_bar_view_activity.xml
+++ b/samples/SupportCarDemos/src/main/res/layout/tab_bar_view_activity.xml
@@ -28,7 +28,8 @@
         android:layout_height="@dimen/car_app_bar_height"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent" >
+        app:layout_constraintEnd_toEndOf="parent"
+        style="@style/Widget.Car.TabLayout" >
 
       <com.google.android.material.tabs.TabItem
           android:icon="@drawable/ic_home"
diff --git a/savedstate/api/1.0.0-alpha03.txt b/savedstate/api/1.0.0-alpha03.txt
new file mode 100644
index 0000000..ff8482b
--- /dev/null
+++ b/savedstate/api/1.0.0-alpha03.txt
@@ -0,0 +1,32 @@
+// Signature format: 3.0
+package androidx.savedstate {
+
+  public final class SavedStateRegistry {
+    method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String);
+    method @MainThread public boolean isRestored();
+    method @MainThread public void registerSavedStateProvider(String, androidx.savedstate.SavedStateRegistry.SavedStateProvider);
+    method @MainThread public void runOnNextRecreation(Class<? extends androidx.savedstate.SavedStateRegistry.AutoRecreated>);
+    method @MainThread public void unregisterSavedStateProvider(String);
+  }
+
+  public static interface SavedStateRegistry.AutoRecreated {
+    method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner);
+  }
+
+  public static interface SavedStateRegistry.SavedStateProvider {
+    method public android.os.Bundle saveState();
+  }
+
+  public final class SavedStateRegistryController {
+    method public static androidx.savedstate.SavedStateRegistryController create(androidx.savedstate.SavedStateRegistryOwner);
+    method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+    method @MainThread public void performRestore(android.os.Bundle?);
+    method @MainThread public void performSave(android.os.Bundle);
+  }
+
+  public interface SavedStateRegistryOwner extends androidx.lifecycle.LifecycleOwner {
+    method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+  }
+
+}
+
diff --git a/savedstate/api/res-1.0.0-alpha03.txt b/savedstate/api/res-1.0.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/savedstate/api/res-1.0.0-alpha03.txt
diff --git a/savedstate/api/restricted_1.0.0-alpha03.txt b/savedstate/api/restricted_1.0.0-alpha03.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/savedstate/api/restricted_1.0.0-alpha03.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/settings.gradle b/settings.gradle
index 4a0298d..31e96e2 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -84,8 +84,10 @@
 includeProject(":jetifier-preprocessor", "jetifier/jetifier/preprocessor")
 includeProject(":leanback", "leanback")
 includeProject(":leanback-preference", "leanback-preference")
-includeProject(":lifecycle:integration-tests:testapp", "lifecycle/integration-tests/testapp")
+includeProject(":lifecycle:integration-tests:lifecycle-testapp", "lifecycle/integration-tests/testapp")
+includeProject(":lifecycle:integration-tests:lifecycle-testapp-kotlin", "lifecycle/integration-tests/kotlintestapp")
 includeProject(":lifecycle:lifecycle-common", "lifecycle/common")
+includeProject(":lifecycle:lifecycle-common-eap", "lifecycle/common/eap")
 includeProject(":lifecycle:lifecycle-common-java8", "lifecycle/common-java8")
 includeProject(":lifecycle:lifecycle-compiler", "lifecycle/compiler")
 includeProject(":lifecycle:lifecycle-extensions", "lifecycle/extensions")
diff --git a/slices/benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics.java b/slices/benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics.java
index 080b552..43143e1 100644
--- a/slices/benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics.java
+++ b/slices/benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics.java
@@ -20,7 +20,6 @@
 import android.content.Context;
 import android.net.Uri;
 
-import androidx.annotation.NonNull;
 import androidx.benchmark.BenchmarkRule;
 import androidx.benchmark.BenchmarkState;
 import androidx.slice.widget.SliceView;
@@ -32,12 +31,9 @@
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.Description;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.junit.runners.model.Statement;
 
-import java.lang.annotation.Annotation;
 import java.util.Arrays;
 
 @RunWith(Parameterized.class)
@@ -47,38 +43,21 @@
 
     private final int mMode;
 
-    @Parameterized.Parameters
+    @Parameterized.Parameters(name = "{1}")
     public static Iterable<? extends Object[]> data() {
-        return Arrays.asList(new Object[][]{{SliceView.MODE_SHORTCUT}, {SliceView.MODE_SMALL},
-                {SliceView.MODE_LARGE}});
+        return Arrays.asList(new Object[][]{
+                {SliceView.MODE_SHORTCUT, "shortcut"},
+                {SliceView.MODE_SMALL, "small"},
+                {SliceView.MODE_LARGE, "large"}
+        });
     }
 
-    public SliceViewMetrics(int mode) {
+    public SliceViewMetrics(int mode, @SuppressWarnings("unused") String ignored) {
         mMode = mode;
     }
 
     @Rule
-    public BenchmarkRule mBenchmarkRule = new BenchmarkRule() {
-        @NonNull
-        @Override
-        public Statement apply(@NonNull Statement base, @NonNull Description description) {
-            return super.apply(base, fixDescription(description));
-        }
-
-        private Description fixDescription(Description description) {
-            // Copies the Description and modifies the method to be compatible with BenchmarkRule.
-            return Description.createTestDescription(description.getClassName(),
-                    fixMethodName(description.getMethodName()),
-                    description.getAnnotations().toArray(new Annotation[0]));
-        }
-
-        private String fixMethodName(String methodName) {
-            // Replace [int] with [string] for BenchmarkRule and readability.
-            return methodName.replace("[0]", "[shortcut]")
-                    .replace("[1]", "[small]")
-                    .replace("[2]", "[large]");
-        }
-    };
+    public BenchmarkRule mBenchmarkRule = new BenchmarkRule();
 
     private final Context mContext = ApplicationProvider.getApplicationContext();
 
diff --git a/slices/core/src/main/java/androidx/slice/SliceProvider.java b/slices/core/src/main/java/androidx/slice/SliceProvider.java
index 397db68..e5144cc 100644
--- a/slices/core/src/main/java/androidx/slice/SliceProvider.java
+++ b/slices/core/src/main/java/androidx/slice/SliceProvider.java
@@ -143,6 +143,7 @@
 
     private SliceProviderCompat mCompat;
 
+    private final Object mPinnedSliceUrisLock = new Object();
     private List<Uri> mPinnedSliceUris;
 
     /**
@@ -200,8 +201,6 @@
     @Override
     public final boolean onCreate() {
         if (Build.VERSION.SDK_INT < 19) return false;
-        mPinnedSliceUris = new ArrayList<>(SliceManager.getInstance(
-                getContext()).getPinnedSlices());
         if (Build.VERSION.SDK_INT < 28) {
             mCompat = new SliceProviderCompat(this,
                     onCreatePermissionManager(mAutoGrantPermissions), getContext());
@@ -361,8 +360,9 @@
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     @RequiresApi(19)
     public void handleSlicePinned(Uri sliceUri) {
-        if (!mPinnedSliceUris.contains(sliceUri)) {
-            mPinnedSliceUris.add(sliceUri);
+        List<Uri> pinnedSlices = getPinnedSlices();
+        if (!pinnedSlices.contains(sliceUri)) {
+            pinnedSlices.add(sliceUri);
         }
     }
 
@@ -372,8 +372,9 @@
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     @RequiresApi(19)
     public void handleSliceUnpinned(Uri sliceUri) {
-        if (mPinnedSliceUris.contains(sliceUri)) {
-            mPinnedSliceUris.remove(sliceUri);
+        List<Uri> pinnedSlices = getPinnedSlices();
+        if (pinnedSlices.contains(sliceUri)) {
+            pinnedSlices.remove(sliceUri);
         }
     }
 
@@ -413,6 +414,12 @@
      */
     @RequiresApi(19)
     @NonNull public List<Uri> getPinnedSlices() {
+        synchronized (mPinnedSliceUrisLock) {
+            if (mPinnedSliceUris == null) {
+                mPinnedSliceUris = new ArrayList<>(SliceManager.getInstance(getContext())
+                        .getPinnedSlices());
+            }
+        }
         return mPinnedSliceUris;
     }
 
diff --git a/slices/view/src/main/java/androidx/slice/widget/GridRowView.java b/slices/view/src/main/java/androidx/slice/widget/GridRowView.java
index 32270a9..fd0cf13 100644
--- a/slices/view/src/main/java/androidx/slice/widget/GridRowView.java
+++ b/slices/view/src/main/java/androidx/slice/widget/GridRowView.java
@@ -149,7 +149,8 @@
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        int height = mGridContent.getHeight(mSliceStyle, mViewPolicy);
+        int height = mGridContent.getHeight(mSliceStyle, mViewPolicy)
+                + mInsetTop + mInsetBottom;
         heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
         mViewContainer.getLayoutParams().height = height;
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
diff --git a/slices/view/src/main/java/androidx/slice/widget/RowView.java b/slices/view/src/main/java/androidx/slice/widget/RowView.java
index a710afb0..c51c901 100644
--- a/slices/view/src/main/java/androidx/slice/widget/RowView.java
+++ b/slices/view/src/main/java/androidx/slice/widget/RowView.java
@@ -235,10 +235,7 @@
     @Override
     public void setInsets(int l, int t, int r, int b) {
         super.setInsets(l, t, r, b);
-        mRootView.setPadding(l, t, r, b);
-        if (mRangeBar != null) {
-            updateRangePadding();
-        }
+        setPadding(l, t, r, b);
     }
 
     /**
@@ -290,18 +287,21 @@
         }
     }
 
+    private void measureChildWithExactHeight(View child, int widthMeasureSpec, int childHeight) {
+        int heightMeasureSpec = MeasureSpec.makeMeasureSpec(childHeight + mInsetTop + mInsetBottom,
+                MeasureSpec.EXACTLY);
+        measureChild(child, widthMeasureSpec, heightMeasureSpec);
+    }
+
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        int totalHeight = mRowContent != null
-                ? mRowContent.getHeight(mSliceStyle, mViewPolicy) : 0;
         int childWidth = 0;
 
         int rowHeight = getRowContentHeight();
         if (rowHeight != 0) {
             // Might be gone if we have range / progress but nothing else
             mRootView.setVisibility(View.VISIBLE);
-            heightMeasureSpec = MeasureSpec.makeMeasureSpec(rowHeight, MeasureSpec.EXACTLY);
-            measureChild(mRootView, widthMeasureSpec, heightMeasureSpec);
+            measureChildWithExactHeight(mRootView, widthMeasureSpec, rowHeight);
 
             childWidth = mRootView.getMeasuredWidth();
         } else {
@@ -310,32 +310,37 @@
         if (mRangeBar != null) {
             // If we're on a platform where SeekBar can't be stretched vertically, find out the
             // exact size it would like to be so we can honor that in onLayout.
-            int rangeMeasureSpec = sCanSpecifyLargerRangeBarHeight
-                    ? MeasureSpec.makeMeasureSpec(mIdealRangeHeight, MeasureSpec.EXACTLY)
-                    : MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-            measureChild(mRangeBar, widthMeasureSpec, rangeMeasureSpec);
+            if (sCanSpecifyLargerRangeBarHeight) {
+                measureChildWithExactHeight(mRangeBar, widthMeasureSpec, mIdealRangeHeight);
+            } else {
+                measureChild(mRangeBar, widthMeasureSpec,
+                        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            }
             // Remember the measured height later for onLayout, since super.onMeasure will overwrite
             // it.
             mMeasuredRangeHeight = mRangeBar.getMeasuredHeight();
             childWidth = Math.max(childWidth, mRangeBar.getMeasuredWidth());
         }
 
-        childWidth = Math.max(childWidth, getSuggestedMinimumWidth());
-        setMeasuredDimension(resolveSizeAndState(childWidth, widthMeasureSpec, 0), totalHeight);
+        childWidth = Math.max(childWidth + mInsetStart + mInsetEnd, getSuggestedMinimumWidth());
+        int totalHeight = mRowContent != null ? mRowContent.getHeight(mSliceStyle, mViewPolicy) : 0;
+        setMeasuredDimension(resolveSizeAndState(childWidth, widthMeasureSpec, 0),
+                totalHeight + mInsetTop + mInsetBottom);
     }
 
     @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        int insets = mInsetStart + mInsetEnd;
-        mRootView.layout(0, 0, mRootView.getMeasuredWidth() + insets, getRowContentHeight());
+        int leftPadding = getPaddingLeft();
+        mRootView.layout(leftPadding, mInsetTop, mRootView.getMeasuredWidth() + leftPadding,
+                getRowContentHeight() + mInsetTop);
         if (mRangeBar != null) {
             // If we're on aa platform where SeekBar can't be stretched vertically, then
             // mMeasuredRangeHeight can (and probably will) be smaller than mIdealRangeHeight, so we
             // need to add some padding to make mRangeBar look like it's the larger size.
             int verticalPadding = (mIdealRangeHeight - mMeasuredRangeHeight) / 2;
-            int top = getRowContentHeight() + verticalPadding;
+            int top = getRowContentHeight() + verticalPadding + mInsetTop;
             int bottom = top + mMeasuredRangeHeight;
-            mRangeBar.layout(0, top, mRangeBar.getMeasuredWidth(), bottom);
+            mRangeBar.layout(leftPadding, top, mRangeBar.getMeasuredWidth() + leftPadding, bottom);
         }
     }
 
@@ -656,28 +661,6 @@
             }
             seekBar.setOnSeekBarChangeListener(mSeekBarChangeListener);
         }
-        updateRangePadding();
-    }
-
-    private void updateRangePadding() {
-        if (mRangeBar != null) {
-            int thumbSize = mRangeBar instanceof SeekBar
-                    ? ((SeekBar) mRangeBar).getThumb().getIntrinsicWidth() : 0;
-            int topInsetPadding = mRowContent != null
-                    ? mRowContent.getLineCount() > 0 ? 0 : mInsetTop
-                    : mInsetTop;
-            // Check if the app defined inset is large enough for the drawable
-            if (thumbSize != 0 && mInsetStart >= thumbSize / 2 && mInsetEnd >= thumbSize / 2) {
-                // If row content has text then the top inset gets applied to mContent layout
-                // not the range layout.
-                mRangeBar.setPadding(mInsetStart, topInsetPadding, mInsetEnd, mInsetBottom);
-            } else {
-                // App defined inset not bug enough; we need to apply one
-                int thumbPadding = thumbSize != 0 ? thumbSize / 2 : 0;
-                mRangeBar.setPadding(mInsetStart + thumbPadding, topInsetPadding,
-                        mInsetEnd + thumbPadding, mInsetBottom);
-            }
-        }
     }
 
     void sendSliderValue() {
diff --git a/slices/view/src/main/java/androidx/slice/widget/SliceView.java b/slices/view/src/main/java/androidx/slice/widget/SliceView.java
index 54060f6..311adea 100644
--- a/slices/view/src/main/java/androidx/slice/widget/SliceView.java
+++ b/slices/view/src/main/java/androidx/slice/widget/SliceView.java
@@ -18,6 +18,8 @@
 
 import static android.app.slice.Slice.SUBTYPE_COLOR;
 import static android.app.slice.SliceItem.FORMAT_INT;
+import static android.view.View.MeasureSpec.EXACTLY;
+import static android.view.View.MeasureSpec.makeMeasureSpec;
 
 import android.app.PendingIntent;
 import android.content.Context;
@@ -227,10 +229,7 @@
         mTouchSlopSquared = slop * slop;
         mHandler = new Handler();
 
-        mCurrentView.setInsets(getPaddingStart(), getPaddingTop(), getPaddingEnd(),
-                getPaddingBottom());
         setClipToPadding(false);
-
         super.setOnClickListener(this);
     }
 
@@ -367,10 +366,8 @@
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         int width = MeasureSpec.getSize(widthMeasureSpec);
-        int childWidth = MeasureSpec.getSize(widthMeasureSpec);
         if (MODE_SHORTCUT == getMode()) {
             // TODO: consider scaling the shortcut to fit if too small
-            childWidth = mShortcutSize;
             width = mShortcutSize + getPaddingLeft() + getPaddingRight();
         }
         final int actionHeight = mActionRow.getVisibility() != View.GONE
@@ -389,7 +386,7 @@
         if (heightAvailable >= sliceHeight + actionHeight
                 || heightMode == MeasureSpec.UNSPECIFIED) {
             // Available space is larger than the slice or we be what we want
-            if (heightMode == MeasureSpec.EXACTLY) {
+            if (heightMode == EXACTLY) {
                 height = Math.min(sliceHeight, height);
             } else {
                 height = sliceHeight;
@@ -407,33 +404,28 @@
             }
         }
 
-        int childHeight = height + getPaddingTop() + getPaddingBottom();
-        childWidth = childWidth + getPaddingLeft() + getPaddingRight();
-        int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY);
-        int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY);
-        measureChild(mCurrentView, childWidthMeasureSpec, childHeightMeasureSpec);
+        // Measure directly instead of calling measureChild as the later substracts padding
+        // from the provided size
+        int childWidthSpec = makeMeasureSpec(width, EXACTLY);
+        int actionRowHeight = actionHeight > 0 ? (actionHeight + getPaddingBottom()) : 0;
+        mActionRow.measure(childWidthSpec, makeMeasureSpec(actionRowHeight, EXACTLY));
 
-        int actionPaddedHeight = actionHeight + getPaddingTop() + getPaddingBottom();
-        int actionHeightSpec = MeasureSpec.makeMeasureSpec(actionPaddedHeight, MeasureSpec.EXACTLY);
-        measureChild(mActionRow, childWidthMeasureSpec, actionHeightSpec);
-
-        // Total height should include action row and our padding
-        height += actionHeight + getPaddingTop() + getPaddingBottom();
-        setMeasuredDimension(width, height);
+        // Include the bottom padding for currentView only if action row is invisible
+        int currentViewHeight = height + getPaddingTop()
+                + (actionHeight > 0 ? 0 : getPaddingBottom());
+        mCurrentView.measure(childWidthSpec, makeMeasureSpec(currentViewHeight, EXACTLY));
+        setMeasuredDimension(width,
+                mCurrentView.getMeasuredHeight() + mActionRow.getMeasuredHeight());
     }
 
     @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         View v = mCurrentView;
-        final int left = 0;
-        final int top = 0;
-        v.layout(left, top, left + v.getMeasuredWidth() + getPaddingRight() + getPaddingLeft(),
-                top + v.getMeasuredHeight());
+        v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
         if (mActionRow.getVisibility() != View.GONE) {
-            mActionRow.layout(left,
-                    top + v.getMeasuredHeight(),
-                    left + mActionRow.getMeasuredWidth(),
-                    top + v.getMeasuredHeight() + mActionRow.getMeasuredHeight());
+            int top = v.getMeasuredHeight();
+            mActionRow.layout(0, top, mActionRow.getMeasuredWidth(),
+                    mActionRow.getMeasuredHeight() + top);
         }
     }
 
@@ -713,8 +705,6 @@
         // If the view changes we should apply any configurations to it
         if (newView) {
             mCurrentView.setPolicy(mViewPolicy);
-            mCurrentView.setInsets(getPaddingStart(), getPaddingTop(), getPaddingEnd(),
-                    getPaddingBottom());
             applyConfigurations();
             if (mListContent != null && mListContent.isValid()) {
                 mCurrentView.setSliceContent(mListContent);
@@ -741,6 +731,8 @@
             // No actions, hide the row, clear out the view
             mActionRow.setVisibility(View.GONE);
             mCurrentView.setSliceActions(null);
+            mCurrentView.setInsets(getPaddingStart(), getPaddingTop(), getPaddingEnd(),
+                    getPaddingBottom());
             return;
         }
         // Sort actions based on priority and set them in action rows.
@@ -750,11 +742,20 @@
             // Show in action row if available
             mActionRow.setActions(sortedActions, getTintColor());
             mActionRow.setVisibility(View.VISIBLE);
+
             // Hide them on the template
             mCurrentView.setSliceActions(null);
+
+            mCurrentView.setInsets(getPaddingStart(), getPaddingTop(), getPaddingEnd(), 0);
+            mActionRow.setPaddingRelative(getPaddingStart(), 0, getPaddingEnd(),
+                    getPaddingBottom());
+
         } else {
             // Otherwise set them on the template
             mCurrentView.setSliceActions(sortedActions);
+            mCurrentView.setInsets(getPaddingStart(), getPaddingTop(), getPaddingEnd(),
+                    getPaddingBottom());
+
             mActionRow.setVisibility(View.GONE);
         }
     }
diff --git a/transition/api/1.1.0-beta01.txt b/transition/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..86a584c
--- /dev/null
+++ b/transition/api/1.1.0-beta01.txt
@@ -0,0 +1,283 @@
+// Signature format: 3.0
+package androidx.transition {
+
+  public class ArcMotion extends androidx.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 androidx.transition.TransitionSet {
+    ctor public AutoTransition();
+    ctor public AutoTransition(android.content.Context!, android.util.AttributeSet!);
+  }
+
+  public class ChangeBounds extends androidx.transition.Transition {
+    ctor public ChangeBounds();
+    ctor public ChangeBounds(android.content.Context!, android.util.AttributeSet!);
+    method public void captureEndValues(androidx.transition.TransitionValues);
+    method public void captureStartValues(androidx.transition.TransitionValues);
+    method public boolean getResizeClip();
+    method public void setResizeClip(boolean);
+  }
+
+  public class ChangeClipBounds extends androidx.transition.Transition {
+    ctor public ChangeClipBounds();
+    ctor public ChangeClipBounds(android.content.Context!, android.util.AttributeSet!);
+    method public void captureEndValues(androidx.transition.TransitionValues);
+    method public void captureStartValues(androidx.transition.TransitionValues);
+  }
+
+  public class ChangeImageTransform extends androidx.transition.Transition {
+    ctor public ChangeImageTransform();
+    ctor public ChangeImageTransform(android.content.Context!, android.util.AttributeSet!);
+    method public void captureEndValues(androidx.transition.TransitionValues);
+    method public void captureStartValues(androidx.transition.TransitionValues);
+  }
+
+  public class ChangeScroll extends androidx.transition.Transition {
+    ctor public ChangeScroll();
+    ctor public ChangeScroll(android.content.Context!, android.util.AttributeSet!);
+    method public void captureEndValues(androidx.transition.TransitionValues);
+    method public void captureStartValues(androidx.transition.TransitionValues);
+  }
+
+  public class ChangeTransform extends androidx.transition.Transition {
+    ctor public ChangeTransform();
+    ctor public ChangeTransform(android.content.Context!, android.util.AttributeSet!);
+    method public void captureEndValues(androidx.transition.TransitionValues);
+    method public void captureStartValues(androidx.transition.TransitionValues);
+    method public boolean getReparent();
+    method public boolean getReparentWithOverlay();
+    method public void setReparent(boolean);
+    method public void setReparentWithOverlay(boolean);
+  }
+
+  public class CircularPropagation extends androidx.transition.VisibilityPropagation {
+    ctor public CircularPropagation();
+    method public long getStartDelay(android.view.ViewGroup!, androidx.transition.Transition!, androidx.transition.TransitionValues!, androidx.transition.TransitionValues!);
+    method public void setPropagationSpeed(float);
+  }
+
+  public class Explode extends androidx.transition.Visibility {
+    ctor public Explode();
+    ctor public Explode(android.content.Context!, android.util.AttributeSet!);
+  }
+
+  public class Fade extends androidx.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 androidx.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 androidx.transition.Scene? getCurrentScene(android.view.ViewGroup);
+    method public static androidx.transition.Scene getSceneForLayout(android.view.ViewGroup, @LayoutRes int, android.content.Context);
+    method public android.view.ViewGroup getSceneRoot();
+    method public void setEnterAction(Runnable?);
+    method public void setExitAction(Runnable?);
+  }
+
+  public class SidePropagation extends androidx.transition.VisibilityPropagation {
+    ctor public SidePropagation();
+    method public long getStartDelay(android.view.ViewGroup!, androidx.transition.Transition!, androidx.transition.TransitionValues!, androidx.transition.TransitionValues!);
+    method public void setPropagationSpeed(float);
+    method public void setSide(int);
+  }
+
+  public class Slide extends androidx.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 androidx.transition.Transition addListener(androidx.transition.Transition.TransitionListener);
+    method public androidx.transition.Transition addTarget(android.view.View);
+    method public androidx.transition.Transition addTarget(@IdRes int);
+    method public androidx.transition.Transition addTarget(String);
+    method public androidx.transition.Transition addTarget(Class);
+    method public abstract void captureEndValues(androidx.transition.TransitionValues);
+    method public abstract void captureStartValues(androidx.transition.TransitionValues);
+    method public androidx.transition.Transition! clone();
+    method public android.animation.Animator? createAnimator(android.view.ViewGroup, androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
+    method public androidx.transition.Transition excludeChildren(android.view.View, boolean);
+    method public androidx.transition.Transition excludeChildren(@IdRes int, boolean);
+    method public androidx.transition.Transition excludeChildren(Class, boolean);
+    method public androidx.transition.Transition excludeTarget(android.view.View, boolean);
+    method public androidx.transition.Transition excludeTarget(@IdRes int, boolean);
+    method public androidx.transition.Transition excludeTarget(String, boolean);
+    method public androidx.transition.Transition excludeTarget(Class, boolean);
+    method public long getDuration();
+    method public android.graphics.Rect? getEpicenter();
+    method public androidx.transition.Transition.EpicenterCallback? getEpicenterCallback();
+    method public android.animation.TimeInterpolator? getInterpolator();
+    method public String getName();
+    method public androidx.transition.PathMotion getPathMotion();
+    method public androidx.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 String[]? getTransitionProperties();
+    method public androidx.transition.TransitionValues? getTransitionValues(android.view.View, boolean);
+    method public boolean isTransitionRequired(androidx.transition.TransitionValues?, androidx.transition.TransitionValues?);
+    method public androidx.transition.Transition removeListener(androidx.transition.Transition.TransitionListener);
+    method public androidx.transition.Transition removeTarget(android.view.View);
+    method public androidx.transition.Transition removeTarget(@IdRes int);
+    method public androidx.transition.Transition removeTarget(String);
+    method public androidx.transition.Transition removeTarget(Class);
+    method public androidx.transition.Transition setDuration(long);
+    method public void setEpicenterCallback(androidx.transition.Transition.EpicenterCallback?);
+    method public androidx.transition.Transition setInterpolator(android.animation.TimeInterpolator?);
+    method public void setMatchOrder(int...!);
+    method public void setPathMotion(androidx.transition.PathMotion?);
+    method public void setPropagation(androidx.transition.TransitionPropagation?);
+    method public androidx.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 abstract static class Transition.EpicenterCallback {
+    ctor public Transition.EpicenterCallback();
+    method public abstract android.graphics.Rect! onGetEpicenter(androidx.transition.Transition);
+  }
+
+  public static interface Transition.TransitionListener {
+    method public void onTransitionCancel(androidx.transition.Transition);
+    method public void onTransitionEnd(androidx.transition.Transition);
+    method public void onTransitionPause(androidx.transition.Transition);
+    method public void onTransitionResume(androidx.transition.Transition);
+    method public void onTransitionStart(androidx.transition.Transition);
+  }
+
+  public class TransitionInflater {
+    method public static androidx.transition.TransitionInflater! from(android.content.Context!);
+    method public androidx.transition.Transition! inflateTransition(int);
+    method public androidx.transition.TransitionManager! inflateTransitionManager(int, android.view.ViewGroup!);
+  }
+
+  public class TransitionListenerAdapter implements androidx.transition.Transition.TransitionListener {
+    ctor public TransitionListenerAdapter();
+    method public void onTransitionCancel(androidx.transition.Transition);
+    method public void onTransitionEnd(androidx.transition.Transition);
+    method public void onTransitionPause(androidx.transition.Transition);
+    method public void onTransitionResume(androidx.transition.Transition);
+    method public void onTransitionStart(androidx.transition.Transition);
+  }
+
+  public class TransitionManager {
+    ctor public TransitionManager();
+    method public static void beginDelayedTransition(android.view.ViewGroup);
+    method public static void beginDelayedTransition(android.view.ViewGroup, androidx.transition.Transition?);
+    method public static void endTransitions(android.view.ViewGroup!);
+    method public static void go(androidx.transition.Scene);
+    method public static void go(androidx.transition.Scene, androidx.transition.Transition?);
+    method public void setTransition(androidx.transition.Scene, androidx.transition.Transition?);
+    method public void setTransition(androidx.transition.Scene, androidx.transition.Scene, androidx.transition.Transition?);
+    method public void transitionTo(androidx.transition.Scene);
+  }
+
+  public abstract class TransitionPropagation {
+    ctor public TransitionPropagation();
+    method public abstract void captureValues(androidx.transition.TransitionValues!);
+    method public abstract String[]! getPropagationProperties();
+    method public abstract long getStartDelay(android.view.ViewGroup!, androidx.transition.Transition!, androidx.transition.TransitionValues!, androidx.transition.TransitionValues!);
+  }
+
+  public class TransitionSet extends androidx.transition.Transition {
+    ctor public TransitionSet();
+    ctor public TransitionSet(android.content.Context!, android.util.AttributeSet!);
+    method public androidx.transition.TransitionSet addListener(androidx.transition.Transition.TransitionListener);
+    method public androidx.transition.TransitionSet addTarget(android.view.View);
+    method public androidx.transition.TransitionSet addTarget(@IdRes int);
+    method public androidx.transition.TransitionSet addTarget(String);
+    method public androidx.transition.TransitionSet addTarget(Class);
+    method public androidx.transition.TransitionSet addTransition(androidx.transition.Transition);
+    method public void captureEndValues(androidx.transition.TransitionValues);
+    method public void captureStartValues(androidx.transition.TransitionValues);
+    method public int getOrdering();
+    method public androidx.transition.Transition? getTransitionAt(int);
+    method public int getTransitionCount();
+    method public androidx.transition.TransitionSet removeListener(androidx.transition.Transition.TransitionListener);
+    method public androidx.transition.TransitionSet removeTarget(@IdRes int);
+    method public androidx.transition.TransitionSet removeTarget(android.view.View);
+    method public androidx.transition.TransitionSet removeTarget(Class);
+    method public androidx.transition.TransitionSet removeTarget(String);
+    method public androidx.transition.TransitionSet removeTransition(androidx.transition.Transition);
+    method public androidx.transition.TransitionSet setDuration(long);
+    method public androidx.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator?);
+    method public androidx.transition.TransitionSet setOrdering(int);
+    method public androidx.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 @Deprecated public TransitionValues();
+    ctor public TransitionValues(android.view.View);
+    field public final java.util.Map<java.lang.String,java.lang.Object>! values;
+    field public android.view.View! view;
+  }
+
+  public abstract class Visibility extends androidx.transition.Transition {
+    ctor public Visibility();
+    ctor public Visibility(android.content.Context!, android.util.AttributeSet!);
+    method public void captureEndValues(androidx.transition.TransitionValues);
+    method public void captureStartValues(androidx.transition.TransitionValues);
+    method public int getMode();
+    method public boolean isVisible(androidx.transition.TransitionValues!);
+    method public android.animation.Animator! onAppear(android.view.ViewGroup!, androidx.transition.TransitionValues!, int, androidx.transition.TransitionValues!, int);
+    method public android.animation.Animator! onAppear(android.view.ViewGroup!, android.view.View!, androidx.transition.TransitionValues!, androidx.transition.TransitionValues!);
+    method public android.animation.Animator! onDisappear(android.view.ViewGroup!, androidx.transition.TransitionValues!, int, androidx.transition.TransitionValues!, int);
+    method public android.animation.Animator! onDisappear(android.view.ViewGroup!, android.view.View!, androidx.transition.TransitionValues!, androidx.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 androidx.transition.TransitionPropagation {
+    ctor public VisibilityPropagation();
+    method public void captureValues(androidx.transition.TransitionValues!);
+    method public String[]! getPropagationProperties();
+    method public int getViewVisibility(androidx.transition.TransitionValues!);
+    method public int getViewX(androidx.transition.TransitionValues!);
+    method public int getViewY(androidx.transition.TransitionValues!);
+  }
+
+}
+
diff --git a/transition/api/res-1.1.0-beta01.txt b/transition/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/transition/api/res-1.1.0-beta01.txt
diff --git a/transition/build.gradle b/transition/build.gradle
index 04e5dfa..7b37abe 100644
--- a/transition/build.gradle
+++ b/transition/build.gradle
@@ -1,16 +1,17 @@
-import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
 
+import static androidx.build.dependencies.DependenciesKt.*
+
 plugins {
     id("SupportAndroidLibraryPlugin")
 }
 
 dependencies {
     api(project(":annotation"))
-    api(project(":core"))
-    implementation(project(":collection"))
-    compileOnly project(':fragment')
+    api("androidx.core:core:1.0.1")
+    implementation("androidx.collection:collection:1.0.0")
+    compileOnly("androidx.fragment:fragment:1.0.0")
 
     androidTestImplementation(TEST_EXT_JUNIT)
     androidTestImplementation(TEST_CORE)
diff --git a/transition/src/main/java/androidx/transition/ArcMotion.java b/transition/src/main/java/androidx/transition/ArcMotion.java
index 7953389..3f97d53 100644
--- a/transition/src/main/java/androidx/transition/ArcMotion.java
+++ b/transition/src/main/java/androidx/transition/ArcMotion.java
@@ -16,6 +16,7 @@
 
 package androidx.transition;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Path;
@@ -64,6 +65,8 @@
     public ArcMotion() {
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public ArcMotion(Context context, AttributeSet attrs) {
         super(context, attrs);
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.ARC_MOTION);
diff --git a/transition/src/main/java/androidx/transition/ChangeBounds.java b/transition/src/main/java/androidx/transition/ChangeBounds.java
index fb621ed..79fefdf 100644
--- a/transition/src/main/java/androidx/transition/ChangeBounds.java
+++ b/transition/src/main/java/androidx/transition/ChangeBounds.java
@@ -21,6 +21,7 @@
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
@@ -169,6 +170,8 @@
     public ChangeBounds() {
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public ChangeBounds(Context context, AttributeSet attrs) {
         super(context, attrs);
 
diff --git a/transition/src/main/java/androidx/transition/ChangeTransform.java b/transition/src/main/java/androidx/transition/ChangeTransform.java
index dd7acbf..426ac64 100644
--- a/transition/src/main/java/androidx/transition/ChangeTransform.java
+++ b/transition/src/main/java/androidx/transition/ChangeTransform.java
@@ -20,6 +20,7 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Matrix;
@@ -107,6 +108,8 @@
     public ChangeTransform() {
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public ChangeTransform(Context context, AttributeSet attrs) {
         super(context, attrs);
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.CHANGE_TRANSFORM);
diff --git a/transition/src/main/java/androidx/transition/Fade.java b/transition/src/main/java/androidx/transition/Fade.java
index 9c4512f..e048166 100644
--- a/transition/src/main/java/androidx/transition/Fade.java
+++ b/transition/src/main/java/androidx/transition/Fade.java
@@ -19,6 +19,7 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
@@ -97,6 +98,8 @@
     public Fade() {
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public Fade(Context context, AttributeSet attrs) {
         super(context, attrs);
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.FADE);
diff --git a/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java b/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
index 41c3e69..f37b133 100644
--- a/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
+++ b/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
@@ -18,6 +18,7 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
+import android.annotation.SuppressLint;
 import android.graphics.Rect;
 import android.view.View;
 import android.view.ViewGroup;
@@ -36,6 +37,8 @@
 // This is instantiated in androidx.fragment.app.FragmentTransition
 @SuppressWarnings("unused")
 @RestrictTo(LIBRARY_GROUP_PREFIX)
+@SuppressLint("RestrictedApi") // remove once fragment lib would be released with the new
+// LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
 public class FragmentTransitionSupport extends FragmentTransitionImpl {
 
     @Override
diff --git a/transition/src/main/java/androidx/transition/PatternPathMotion.java b/transition/src/main/java/androidx/transition/PatternPathMotion.java
index 7f6153d..a7fd84c 100644
--- a/transition/src/main/java/androidx/transition/PatternPathMotion.java
+++ b/transition/src/main/java/androidx/transition/PatternPathMotion.java
@@ -16,6 +16,7 @@
 
 package androidx.transition;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Matrix;
@@ -55,6 +56,8 @@
         mOriginalPatternPath = mPatternPath;
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public PatternPathMotion(Context context, AttributeSet attrs) {
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.PATTERN_PATH_MOTION);
         try {
diff --git a/transition/src/main/java/androidx/transition/Slide.java b/transition/src/main/java/androidx/transition/Slide.java
index f4458a2..fa75a89 100644
--- a/transition/src/main/java/androidx/transition/Slide.java
+++ b/transition/src/main/java/androidx/transition/Slide.java
@@ -20,6 +20,7 @@
 
 import android.animation.Animator;
 import android.animation.TimeInterpolator;
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
@@ -162,6 +163,8 @@
         setSlideEdge(slideEdge);
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public Slide(Context context, AttributeSet attrs) {
         super(context, attrs);
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.SLIDE);
diff --git a/transition/src/main/java/androidx/transition/Transition.java b/transition/src/main/java/androidx/transition/Transition.java
index 285570e..7fe90fe 100644
--- a/transition/src/main/java/androidx/transition/Transition.java
+++ b/transition/src/main/java/androidx/transition/Transition.java
@@ -21,6 +21,7 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.TimeInterpolator;
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
@@ -271,6 +272,8 @@
      *                access the current theme, resources, etc.
      * @param attrs   The attributes of the XML tag that is inflating the transition.
      */
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public Transition(Context context, AttributeSet attrs) {
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.TRANSITION);
         XmlResourceParser parser = (XmlResourceParser) attrs;
diff --git a/transition/src/main/java/androidx/transition/TransitionInflater.java b/transition/src/main/java/androidx/transition/TransitionInflater.java
index 4570fe9..d01d199 100644
--- a/transition/src/main/java/androidx/transition/TransitionInflater.java
+++ b/transition/src/main/java/androidx/transition/TransitionInflater.java
@@ -16,6 +16,7 @@
 
 package androidx.transition;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -218,6 +219,8 @@
         }
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     private void getTargetIds(XmlPullParser parser,
             AttributeSet attrs, Transition transition) throws XmlPullParserException, IOException {
 
@@ -304,6 +307,8 @@
         return transitionManager;
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     private void loadTransition(AttributeSet attrs, XmlPullParser parser, ViewGroup sceneRoot,
             TransitionManager transitionManager) throws Resources.NotFoundException {
 
diff --git a/transition/src/main/java/androidx/transition/TransitionSet.java b/transition/src/main/java/androidx/transition/TransitionSet.java
index d82b832..f0f07fc 100644
--- a/transition/src/main/java/androidx/transition/TransitionSet.java
+++ b/transition/src/main/java/androidx/transition/TransitionSet.java
@@ -19,6 +19,7 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
 import android.animation.TimeInterpolator;
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
@@ -109,6 +110,8 @@
     public TransitionSet() {
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public TransitionSet(Context context, AttributeSet attrs) {
         super(context, attrs);
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.TRANSITION_SET);
diff --git a/transition/src/main/java/androidx/transition/Visibility.java b/transition/src/main/java/androidx/transition/Visibility.java
index c27d93e..ea2180eb 100644
--- a/transition/src/main/java/androidx/transition/Visibility.java
+++ b/transition/src/main/java/androidx/transition/Visibility.java
@@ -100,6 +100,8 @@
     public Visibility() {
     }
 
+    @SuppressLint("RestrictedApi") // remove once core lib would be released with the new
+    // LIBRARY_GROUP_PREFIX restriction. tracking in b/127286008
     public Visibility(Context context, AttributeSet attrs) {
         super(context, attrs);
         TypedArray a = context.obtainStyledAttributes(attrs, Styleable.VISIBILITY_TRANSITION);
diff --git a/viewpager2/api/1.0.0-alpha02.txt b/viewpager2/api/1.0.0-alpha02.txt
index 999596b..5607352 100644
--- a/viewpager2/api/1.0.0-alpha02.txt
+++ b/viewpager2/api/1.0.0-alpha02.txt
@@ -27,24 +27,23 @@
 
 package androidx.viewpager2.widget {
 
-  public class ViewPager2 extends android.view.ViewGroup {
+  public final class ViewPager2 extends android.view.ViewGroup {
     ctor public ViewPager2(android.content.Context);
     ctor public ViewPager2(android.content.Context, android.util.AttributeSet?);
     ctor public ViewPager2(android.content.Context, android.util.AttributeSet?, int);
     ctor @RequiresApi(21) public ViewPager2(android.content.Context, android.util.AttributeSet?, int, int);
-    method public final androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
-    method public final int getCurrentItem();
-    method @androidx.viewpager2.widget.ViewPager2.Orientation public final int getOrientation();
+    method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
+    method public int getCurrentItem();
+    method @androidx.viewpager2.widget.ViewPager2.Orientation public int getOrientation();
     method public boolean isUserInputEnabled();
-    method public final void onViewAdded(android.view.View!);
-    method public final void registerOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
-    method public final void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
-    method public final void setCurrentItem(int);
-    method public final void setCurrentItem(int, boolean);
-    method public final void setOrientation(@androidx.viewpager2.widget.ViewPager2.Orientation int);
-    method public final void setPageTransformer(androidx.viewpager2.widget.ViewPager2.PageTransformer?);
+    method public void registerOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
+    method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+    method public void setCurrentItem(int);
+    method public void setCurrentItem(int, boolean);
+    method public void setOrientation(@androidx.viewpager2.widget.ViewPager2.Orientation int);
+    method public void setPageTransformer(androidx.viewpager2.widget.ViewPager2.PageTransformer?);
     method public void setUserInputEnabled(boolean);
-    method public final void unregisterOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
+    method public void unregisterOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
     field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
     field public static final int ORIENTATION_VERTICAL = 1; // 0x1
     field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
diff --git a/viewpager2/api/1.0.0-alpha03.txt b/viewpager2/api/1.0.0-alpha03.txt
new file mode 100644
index 0000000..5607352
--- /dev/null
+++ b/viewpager2/api/1.0.0-alpha03.txt
@@ -0,0 +1,72 @@
+// Signature format: 3.0
+package androidx.viewpager2.adapter {
+
+  public abstract class FragmentStateAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.viewpager2.adapter.FragmentViewHolder> implements androidx.viewpager2.adapter.StatefulAdapter {
+    ctor public FragmentStateAdapter(androidx.fragment.app.FragmentManager);
+    method public boolean containsItem(long);
+    method public abstract androidx.fragment.app.Fragment getItem(int);
+    method public final void onBindViewHolder(androidx.viewpager2.adapter.FragmentViewHolder, int);
+    method public final androidx.viewpager2.adapter.FragmentViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+    method public final boolean onFailedToRecycleView(androidx.viewpager2.adapter.FragmentViewHolder);
+    method public final void onViewAttachedToWindow(androidx.viewpager2.adapter.FragmentViewHolder);
+    method public final void onViewRecycled(androidx.viewpager2.adapter.FragmentViewHolder);
+    method public void restoreState(android.os.Parcelable);
+    method public android.os.Parcelable saveState();
+    method public final void setHasStableIds(boolean);
+  }
+
+  public final class FragmentViewHolder extends androidx.recyclerview.widget.RecyclerView.ViewHolder {
+  }
+
+  public interface StatefulAdapter {
+    method public void restoreState(android.os.Parcelable);
+    method public android.os.Parcelable saveState();
+  }
+
+}
+
+package androidx.viewpager2.widget {
+
+  public final class ViewPager2 extends android.view.ViewGroup {
+    ctor public ViewPager2(android.content.Context);
+    ctor public ViewPager2(android.content.Context, android.util.AttributeSet?);
+    ctor public ViewPager2(android.content.Context, android.util.AttributeSet?, int);
+    ctor @RequiresApi(21) public ViewPager2(android.content.Context, android.util.AttributeSet?, int, int);
+    method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
+    method public int getCurrentItem();
+    method @androidx.viewpager2.widget.ViewPager2.Orientation public int getOrientation();
+    method public boolean isUserInputEnabled();
+    method public void registerOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
+    method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+    method public void setCurrentItem(int);
+    method public void setCurrentItem(int, boolean);
+    method public void setOrientation(@androidx.viewpager2.widget.ViewPager2.Orientation int);
+    method public void setPageTransformer(androidx.viewpager2.widget.ViewPager2.PageTransformer?);
+    method public void setUserInputEnabled(boolean);
+    method public void unregisterOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
+    field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
+    field public static final int ORIENTATION_VERTICAL = 1; // 0x1
+    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 abstract static class ViewPager2.OnPageChangeCallback {
+    ctor public ViewPager2.OnPageChangeCallback();
+    method public void onPageScrollStateChanged(@androidx.viewpager2.widget.ViewPager2.ScrollState int);
+    method public void onPageScrolled(int, float, @Px int);
+    method public void onPageSelected(int);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL, androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL}) public static @interface ViewPager2.Orientation {
+  }
+
+  public static interface ViewPager2.PageTransformer {
+    method public void transformPage(android.view.View, float);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE, androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING, androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_SETTLING}) public static @interface ViewPager2.ScrollState {
+  }
+
+}
+
diff --git a/viewpager2/api/current.txt b/viewpager2/api/current.txt
index 999596b..5607352 100644
--- a/viewpager2/api/current.txt
+++ b/viewpager2/api/current.txt
@@ -27,24 +27,23 @@
 
 package androidx.viewpager2.widget {
 
-  public class ViewPager2 extends android.view.ViewGroup {
+  public final class ViewPager2 extends android.view.ViewGroup {
     ctor public ViewPager2(android.content.Context);
     ctor public ViewPager2(android.content.Context, android.util.AttributeSet?);
     ctor public ViewPager2(android.content.Context, android.util.AttributeSet?, int);
     ctor @RequiresApi(21) public ViewPager2(android.content.Context, android.util.AttributeSet?, int, int);
-    method public final androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
-    method public final int getCurrentItem();
-    method @androidx.viewpager2.widget.ViewPager2.Orientation public final int getOrientation();
+    method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
+    method public int getCurrentItem();
+    method @androidx.viewpager2.widget.ViewPager2.Orientation public int getOrientation();
     method public boolean isUserInputEnabled();
-    method public final void onViewAdded(android.view.View!);
-    method public final void registerOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
-    method public final void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
-    method public final void setCurrentItem(int);
-    method public final void setCurrentItem(int, boolean);
-    method public final void setOrientation(@androidx.viewpager2.widget.ViewPager2.Orientation int);
-    method public final void setPageTransformer(androidx.viewpager2.widget.ViewPager2.PageTransformer?);
+    method public void registerOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
+    method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+    method public void setCurrentItem(int);
+    method public void setCurrentItem(int, boolean);
+    method public void setOrientation(@androidx.viewpager2.widget.ViewPager2.Orientation int);
+    method public void setPageTransformer(androidx.viewpager2.widget.ViewPager2.PageTransformer?);
     method public void setUserInputEnabled(boolean);
-    method public final void unregisterOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
+    method public void unregisterOnPageChangeCallback(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback);
     field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
     field public static final int ORIENTATION_VERTICAL = 1; // 0x1
     field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
diff --git a/viewpager2/api/res-1.0.0-alpha03.txt b/viewpager2/api/res-1.0.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/viewpager2/api/res-1.0.0-alpha03.txt
diff --git a/viewpager2/api/restricted_1.0.0-alpha03.txt b/viewpager2/api/restricted_1.0.0-alpha03.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/viewpager2/api/restricted_1.0.0-alpha03.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt
index afa6e2a..1e98bbf 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/MutableCollectionsTest.kt
@@ -28,6 +28,7 @@
 import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
 import androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL
 import androidx.viewpager2.widget.swipe.PageView
+import androidx.viewpager2.widget.swipe.SelfChecking
 import org.hamcrest.Matchers.equalTo
 import org.junit.Assert.assertThat
 import org.junit.Test
@@ -133,6 +134,9 @@
 
             assertThat(isPageContentExpected(expectedValue), equalTo(true))
             assertThat(viewPager.currentItem, equalTo(pageIx))
+            if (viewPager.adapter is SelfChecking) {
+                (viewPager.adapter as SelfChecking).selfCheck()
+            }
         }
     }
 
@@ -337,7 +341,25 @@
                 expectedEndItems = listOf("0", "3", "4", "5")
             )
 
-            (1..RANDOM_TESTS_PER_CONFIG).forEach {
+            result += TestConfig(
+                name = "regression3",
+                _items = stringSequence(pageCount = 3),
+                adapterProvider = adapterProvider,
+                actions = listOf(RemoveItem(_position = 0), AddItem(_position = 1, item = "3")),
+                orientation = orientation,
+                expectedEndItems = listOf("1", "3", "2")
+            )
+
+            result += TestConfig(
+                name = "regression4",
+                _items = stringSequence(pageCount = 3),
+                adapterProvider = adapterProvider,
+                actions = listOf(RemoveItem(_position = 0), AddItem(_position = 0, item = "3")),
+                orientation = orientation,
+                expectedEndItems = listOf("3", "1", "2")
+            )
+
+            repeat(RANDOM_TESTS_PER_CONFIG) {
                 result += generateRandomTest(adapterProvider, orientation)
             }
         }
diff --git a/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java b/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
index 1248a80..0af932fc 100644
--- a/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
+++ b/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
@@ -76,7 +76,13 @@
 
     @Override
     public final void onBindViewHolder(final @NonNull FragmentViewHolder holder, int position) {
-        holder.mFragment = getFragment(position);
+        Fragment fragment = getFragment(position);
+        if (holder.mFragment != fragment) {
+            /** There is no guarantee that {@link #onViewRecycled} happened since the last
+             *  {@link #onBindViewHolder}, so performing a clean-up here. */
+            removeFragment(holder);
+        }
+        holder.mFragment = fragment;
 
         /** Special case when {@link RecyclerView} decides to keep the {@link container}
          * attached to the window, but not to the view hierarchy (i.e. parent is null) */
@@ -149,7 +155,6 @@
         // { f:added, v:created, v:attached } -> check if attached to the right container
         if (fragment.isAdded() && view.getParent() != null) {
             if (view.getParent() != container) {
-                ((FrameLayout) view.getParent()).removeAllViews();
                 addViewToContainer(view, container);
             }
             return;
@@ -188,9 +193,22 @@
 
     @SuppressWarnings("WeakerAccess") // to avoid creation of a synthetic accessor
     void addViewToContainer(@NonNull View v, FrameLayout container) {
-        if (container.getChildCount() != 0) {
+        if (container.getChildCount() > 1) {
             throw new IllegalStateException("Design assumption violated.");
         }
+
+        if (v.getParent() == container) {
+            return;
+        }
+
+        if (container.getChildCount() > 0) {
+            container.removeAllViews();
+        }
+
+        if (v.getParent() != null) {
+            ((ViewGroup) v.getParent()).removeView(v);
+        }
+
         container.addView(v);
     }
 
diff --git a/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java b/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
index 6c391db..5c7fb00 100644
--- a/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
+++ b/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
@@ -58,7 +58,7 @@
  *
  * @see androidx.viewpager.widget.ViewPager
  */
-public class ViewPager2 extends ViewGroup {
+public final class ViewPager2 extends ViewGroup {
     @Retention(SOURCE)
     @IntDef({ORIENTATION_HORIZONTAL, ORIENTATION_VERTICAL})
     public @interface Orientation {
@@ -333,16 +333,16 @@
      * @see androidx.viewpager2.adapter.FragmentStateAdapter
      * @see RecyclerView#setAdapter(Adapter)
      */
-    public final void setAdapter(@Nullable Adapter adapter) {
+    public void setAdapter(@Nullable Adapter adapter) {
         mRecyclerView.setAdapter(adapter);
     }
 
-    public final @Nullable Adapter getAdapter() {
+    public @Nullable Adapter getAdapter() {
         return mRecyclerView.getAdapter();
     }
 
     @Override
-    public final void onViewAdded(View child) {
+    public void onViewAdded(View child) {
         // TODO(b/70666620): consider adding a support for Decor views
         throw new IllegalStateException(
                 getClass().getSimpleName() + " does not support direct child views");
@@ -390,11 +390,11 @@
     /**
      * @param orientation @{link {@link ViewPager2.Orientation}}
      */
-    public final void setOrientation(@Orientation int orientation) {
+    public void setOrientation(@Orientation int orientation) {
         mLayoutManager.setOrientation(orientation);
     }
 
-    public final @Orientation int getOrientation() {
+    public @Orientation int getOrientation() {
         return mLayoutManager.getOrientation();
     }
 
@@ -408,7 +408,7 @@
      *
      * @param item Item index to select
      */
-    public final void setCurrentItem(int item) {
+    public void setCurrentItem(int item) {
         setCurrentItem(item, true);
     }
 
@@ -420,7 +420,7 @@
      * @param item Item index to select
      * @param smoothScroll True to smoothly scroll to the new item, false to transition immediately
      */
-    public final void setCurrentItem(int item, boolean smoothScroll) {
+    public void setCurrentItem(int item, boolean smoothScroll) {
         Adapter adapter = getAdapter();
         if (adapter == null || adapter.getItemCount() <= 0) {
             return;
@@ -468,7 +468,7 @@
      *
      * @return Currently selected page
      */
-    public final int getCurrentItem() {
+    public int getCurrentItem() {
         return mCurrentItem;
     }
 
@@ -504,7 +504,7 @@
      *
      * @param callback callback to add
      */
-    public final void registerOnPageChangeCallback(@NonNull OnPageChangeCallback callback) {
+    public void registerOnPageChangeCallback(@NonNull OnPageChangeCallback callback) {
         mExternalPageChangeCallbacks.addOnPageChangeCallback(callback);
     }
 
@@ -514,18 +514,18 @@
      *
      * @param callback callback to remove
      */
-    public final void unregisterOnPageChangeCallback(@NonNull OnPageChangeCallback callback) {
+    public void unregisterOnPageChangeCallback(@NonNull OnPageChangeCallback callback) {
         mExternalPageChangeCallbacks.removeOnPageChangeCallback(callback);
     }
 
     /**
-     * Sets a {@link androidx.viewpager.widget.ViewPager.PageTransformer} that will be called for
-     * each attached page whenever the scroll position is changed. This allows the application to
-     * apply custom property transformations to each page, overriding the default sliding behavior.
+     * Sets a {@link PageTransformer} that will be called for each attached page whenever the
+     * scroll position is changed. This allows the application to apply custom property
+     * transformations to each page, overriding the default sliding behavior.
      *
      * @param transformer PageTransformer that will modify each page's animation properties
      */
-    public final void setPageTransformer(@Nullable PageTransformer transformer) {
+    public void setPageTransformer(@Nullable PageTransformer transformer) {
         // TODO: add support for reverseDrawingOrder: b/112892792
         // TODO: add support for pageLayerType: b/112893074
         mPageTransformerAdapter.setPageTransformer(transformer);
diff --git a/webkit/api/1.1.0-alpha01.txt b/webkit/api/1.1.0-alpha01.txt
index 0febf69..13be4b8 100644
--- a/webkit/api/1.1.0-alpha01.txt
+++ b/webkit/api/1.1.0-alpha01.txt
@@ -1,6 +1,30 @@
 // Signature format: 3.0
 package androidx.webkit {
 
+  public class ProxyConfig {
+    field public static final String DIRECT = "direct://";
+    field public static final String MATCH_ALL_SCHEMES = "*";
+    field public static final String MATCH_HTTP = "http";
+    field public static final String MATCH_HTTPS = "https";
+  }
+
+  public static final class ProxyConfig.Builder {
+    ctor public ProxyConfig.Builder();
+    ctor public ProxyConfig.Builder(androidx.webkit.ProxyConfig);
+    method public androidx.webkit.ProxyConfig.Builder addBypassRule(String);
+    method public androidx.webkit.ProxyConfig.Builder addProxyRule(String);
+    method public androidx.webkit.ProxyConfig.Builder addProxyRule(String, String);
+    method public androidx.webkit.ProxyConfig build();
+    method public androidx.webkit.ProxyConfig.Builder bypassSimpleHostnames();
+    method public androidx.webkit.ProxyConfig.Builder subtractImplicitRules();
+  }
+
+  public abstract class ProxyController {
+    method public abstract void clearProxyOverride(java.util.concurrent.Executor, Runnable);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.PROXY_OVERRIDE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static androidx.webkit.ProxyController getInstance();
+    method public abstract void setProxyOverride(androidx.webkit.ProxyConfig, java.util.concurrent.Executor, Runnable);
+  }
+
   public abstract class SafeBrowsingResponseCompat {
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void backToSafety(boolean);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_RESPONSE_PROCEED, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void proceed(boolean);
@@ -98,6 +122,25 @@
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ENABLE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingEnabled(android.webkit.WebSettings!, boolean);
   }
 
+  public class WebViewAssetLoader {
+    method public android.net.Uri? getAssetsHttpPrefix();
+    method public android.net.Uri getAssetsHttpsPrefix();
+    method public android.net.Uri? getResourcesHttpPrefix();
+    method public android.net.Uri getResourcesHttpsPrefix();
+    method @RequiresApi(21) public android.webkit.WebResourceResponse? shouldInterceptRequest(android.webkit.WebResourceRequest);
+    method public android.webkit.WebResourceResponse? shouldInterceptRequest(String);
+    field public static final String KNOWN_UNUSED_AUTHORITY = "appassets.androidplatform.net";
+  }
+
+  public static final class WebViewAssetLoader.Builder {
+    ctor public WebViewAssetLoader.Builder(android.content.Context);
+    method public androidx.webkit.WebViewAssetLoader.Builder allowHttp();
+    method public androidx.webkit.WebViewAssetLoader build();
+    method public androidx.webkit.WebViewAssetLoader.Builder setAssetsHostingPath(String);
+    method public androidx.webkit.WebViewAssetLoader.Builder setDomain(String);
+    method public androidx.webkit.WebViewAssetLoader.Builder setResourcesHostingPath(String);
+  }
+
   public class WebViewClientCompat extends android.webkit.WebViewClient {
     ctor public WebViewClientCompat();
     method @RequiresApi(23) public final void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError);
@@ -135,6 +178,7 @@
     field public static final String GET_WEB_VIEW_RENDERER = "GET_WEB_VIEW_RENDERER";
     field public static final String OFF_SCREEN_PRERASTER = "OFF_SCREEN_PRERASTER";
     field public static final String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
+    field public static final String PROXY_OVERRIDE = "PROXY_OVERRIDE";
     field public static final String RECEIVE_HTTP_ERROR = "RECEIVE_HTTP_ERROR";
     field public static final String RECEIVE_WEB_RESOURCE_ERROR = "RECEIVE_WEB_RESOURCE_ERROR";
     field public static final String SAFE_BROWSING_ENABLE = "SAFE_BROWSING_ENABLE";
diff --git a/webkit/api/current.txt b/webkit/api/current.txt
index 0febf69..13be4b8 100644
--- a/webkit/api/current.txt
+++ b/webkit/api/current.txt
@@ -1,6 +1,30 @@
 // Signature format: 3.0
 package androidx.webkit {
 
+  public class ProxyConfig {
+    field public static final String DIRECT = "direct://";
+    field public static final String MATCH_ALL_SCHEMES = "*";
+    field public static final String MATCH_HTTP = "http";
+    field public static final String MATCH_HTTPS = "https";
+  }
+
+  public static final class ProxyConfig.Builder {
+    ctor public ProxyConfig.Builder();
+    ctor public ProxyConfig.Builder(androidx.webkit.ProxyConfig);
+    method public androidx.webkit.ProxyConfig.Builder addBypassRule(String);
+    method public androidx.webkit.ProxyConfig.Builder addProxyRule(String);
+    method public androidx.webkit.ProxyConfig.Builder addProxyRule(String, String);
+    method public androidx.webkit.ProxyConfig build();
+    method public androidx.webkit.ProxyConfig.Builder bypassSimpleHostnames();
+    method public androidx.webkit.ProxyConfig.Builder subtractImplicitRules();
+  }
+
+  public abstract class ProxyController {
+    method public abstract void clearProxyOverride(java.util.concurrent.Executor, Runnable);
+    method @RequiresFeature(name=androidx.webkit.WebViewFeature.PROXY_OVERRIDE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static androidx.webkit.ProxyController getInstance();
+    method public abstract void setProxyOverride(androidx.webkit.ProxyConfig, java.util.concurrent.Executor, Runnable);
+  }
+
   public abstract class SafeBrowsingResponseCompat {
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void backToSafety(boolean);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_RESPONSE_PROCEED, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void proceed(boolean);
@@ -98,6 +122,25 @@
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ENABLE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingEnabled(android.webkit.WebSettings!, boolean);
   }
 
+  public class WebViewAssetLoader {
+    method public android.net.Uri? getAssetsHttpPrefix();
+    method public android.net.Uri getAssetsHttpsPrefix();
+    method public android.net.Uri? getResourcesHttpPrefix();
+    method public android.net.Uri getResourcesHttpsPrefix();
+    method @RequiresApi(21) public android.webkit.WebResourceResponse? shouldInterceptRequest(android.webkit.WebResourceRequest);
+    method public android.webkit.WebResourceResponse? shouldInterceptRequest(String);
+    field public static final String KNOWN_UNUSED_AUTHORITY = "appassets.androidplatform.net";
+  }
+
+  public static final class WebViewAssetLoader.Builder {
+    ctor public WebViewAssetLoader.Builder(android.content.Context);
+    method public androidx.webkit.WebViewAssetLoader.Builder allowHttp();
+    method public androidx.webkit.WebViewAssetLoader build();
+    method public androidx.webkit.WebViewAssetLoader.Builder setAssetsHostingPath(String);
+    method public androidx.webkit.WebViewAssetLoader.Builder setDomain(String);
+    method public androidx.webkit.WebViewAssetLoader.Builder setResourcesHostingPath(String);
+  }
+
   public class WebViewClientCompat extends android.webkit.WebViewClient {
     ctor public WebViewClientCompat();
     method @RequiresApi(23) public final void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError);
@@ -135,6 +178,7 @@
     field public static final String GET_WEB_VIEW_RENDERER = "GET_WEB_VIEW_RENDERER";
     field public static final String OFF_SCREEN_PRERASTER = "OFF_SCREEN_PRERASTER";
     field public static final String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
+    field public static final String PROXY_OVERRIDE = "PROXY_OVERRIDE";
     field public static final String RECEIVE_HTTP_ERROR = "RECEIVE_HTTP_ERROR";
     field public static final String RECEIVE_WEB_RESOURCE_ERROR = "RECEIVE_WEB_RESOURCE_ERROR";
     field public static final String SAFE_BROWSING_ENABLE = "SAFE_BROWSING_ENABLE";
diff --git a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/ProxyOverrideActivity.java b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/ProxyOverrideActivity.java
index 88d4368..279d00e 100644
--- a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/ProxyOverrideActivity.java
+++ b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/ProxyOverrideActivity.java
@@ -102,7 +102,8 @@
     private void setProxyOverride(String proxyUrl) {
         ProxyController proxyController = ProxyController.getInstance();
         ProxyConfig proxyConfig = new ProxyConfig.Builder().addProxyRule(proxyUrl).build();
-        proxyController.setProxyOverride(proxyConfig, () -> onProxyOverrideComplete());
+        proxyController.setProxyOverride(proxyConfig, (Runnable r) -> r.run(),
+                () -> onProxyOverrideComplete());
     }
 
     private void onProxyOverrideComplete() {
diff --git a/webkit/src/androidTest/java/androidx/webkit/ProxyControllerTest.java b/webkit/src/androidTest/java/androidx/webkit/ProxyControllerTest.java
index 841a555..dd91e2a 100644
--- a/webkit/src/androidTest/java/androidx/webkit/ProxyControllerTest.java
+++ b/webkit/src/androidTest/java/androidx/webkit/ProxyControllerTest.java
@@ -30,6 +30,7 @@
 import org.junit.runner.RunWith;
 
 import java.io.IOException;
+import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
 
 import okhttp3.mockwebserver.MockWebServer;
@@ -103,7 +104,7 @@
         // Localhost should use proxy with loopback rule
         setProxyOverrideSync(new ProxyConfig.Builder()
                 .addProxyRule(proxyUrl)
-                .doProxyLoopbackRequests()
+                .subtractImplicitRules()
                 .build());
         mWebViewOnUiThread.loadUrl(contentUrl);
         assertNotNull(mProxyServer.takeRequest(WebkitUtils.TEST_TIMEOUT_MS,
@@ -223,19 +224,20 @@
 
     private void setProxyOverrideSync(final ProxyConfig proxyRules) {
         final ResolvableFuture<Void> future = ResolvableFuture.create();
-        ProxyController.getInstance().setProxyOverride(proxyRules, new Runnable() {
-            @Override
-            public void run() {
-                future.set(null);
-            }
-        });
+        ProxyController.getInstance().setProxyOverride(proxyRules, new SynchronousExecutor(),
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        future.set(null);
+                    }
+                });
         // This future is used to ensure that setProxyOverride's callback was called
         WebkitUtils.waitForFuture(future);
     }
 
     private void clearProxyOverrideSync() {
         final ResolvableFuture<Void> future = ResolvableFuture.create();
-        ProxyController.getInstance().clearProxyOverride(new Runnable() {
+        ProxyController.getInstance().clearProxyOverride(new SynchronousExecutor(), new Runnable() {
             @Override
             public void run() {
                 future.set(null);
@@ -244,4 +246,11 @@
         // This future is used to ensure that clearProxyOverride's callback was called
         WebkitUtils.waitForFuture(future);
     }
+
+    static class SynchronousExecutor implements Executor {
+        @Override
+        public void execute(Runnable r) {
+            r.run();
+        }
+    }
 }
diff --git a/webkit/src/androidTest/java/androidx/webkit/WebViewRendererClientTest.java b/webkit/src/androidTest/java/androidx/webkit/WebViewRendererClientTest.java
index fac2ad3..e6fdc76 100644
--- a/webkit/src/androidTest/java/androidx/webkit/WebViewRendererClientTest.java
+++ b/webkit/src/androidTest/java/androidx/webkit/WebViewRendererClientTest.java
@@ -21,7 +21,6 @@
 import android.webkit.WebView;
 
 import androidx.concurrent.futures.ResolvableFuture;
-import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.LargeTest;
 import androidx.test.runner.AndroidJUnit4;
 
@@ -86,7 +85,7 @@
     }
 
     private void blockRenderer(final JSBlocker blocker) {
-        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+        WebkitUtils.onMainThreadSync(new Runnable() {
             @Override
             public void run() {
                 WebView webView = mWebViewOnUiThread.getWebViewOnCurrentThread();
@@ -101,7 +100,7 @@
     }
 
     private void addJsBlockerInterface(final JSBlocker blocker) {
-        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+        WebkitUtils.onMainThreadSync(new Runnable() {
             @Override
             public void run() {
                 WebView webView = mWebViewOnUiThread.getWebViewOnCurrentThread();
diff --git a/webkit/src/main/java/androidx/webkit/ProxyConfig.java b/webkit/src/main/java/androidx/webkit/ProxyConfig.java
index 4f42391..5585cb4 100644
--- a/webkit/src/main/java/androidx/webkit/ProxyConfig.java
+++ b/webkit/src/main/java/androidx/webkit/ProxyConfig.java
@@ -21,27 +21,26 @@
 import androidx.annotation.StringDef;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.Executor;
 
 /**
  * Config for {@link ProxyController#setProxyOverride(ProxyConfig, Executor, Runnable)}.
  * <p>
  * Proxy rules should be added using {@code addProxyRule} methods. Multiple rules can be used as
- * fallback if a proxy fails to respond (e.g. the proxy server is down). Bypass rules can be set
- * for URLs that should not use these settings.
+ * fallback if a proxy fails to respond (for example, the proxy server is down). Bypass rules can
+ * be set for URLs that should not use these settings.
  * <p>
- * For instance, the following code means that WebView would first try to use proxy1.com for all
- * URLs, if that fails, proxy2.com, and if that fails, it would make a direct connection.
+ * For instance, the following code means that WebView would first try to use {@code proxy1.com}
+ * for all URLs, if that fails, {@code proxy2.com}, and if that fails, it would make a direct
+ * connection.
  * <pre class="prettyprint">
  * ProxyConfig proxyConfig = new ProxyConfig.Builder().addProxyRule("proxy1.com")
  *                                                    .addProxyRule("proxy2.com")
  *                                                    .addProxyRule(ProxyConfig.DIRECT)
  *                                                    .build();
  * </pre>
- * TODO(laisminchillo): unhide this when we're ready to expose this
- * @hide
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class ProxyConfig {
     /**
      * Connect to URLs directly instead of using a proxy server.
@@ -50,30 +49,30 @@
     /**
      * HTTP scheme.
      */
-    public static final String HTTP = "http";
+    public static final String MATCH_HTTP = "http";
     /**
      * HTTPS scheme.
      */
-    public static final String HTTPS = "https";
+    public static final String MATCH_HTTPS = "https";
     /**
      * Matches all schemes.
      */
     public static final String MATCH_ALL_SCHEMES = "*";
     /** @hide */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-    @StringDef({HTTP, HTTPS, MATCH_ALL_SCHEMES})
+    @StringDef({MATCH_HTTP, MATCH_HTTPS, MATCH_ALL_SCHEMES})
     public @interface ProxyScheme {}
-    private static final String BYPASS_RULE_LOCAL = "<local>";
-    private static final String BYPASS_RULE_LOOPBACK = "<-loopback>";
+    private static final String BYPASS_RULE_SIMPLE_NAMES = "<local>";
+    private static final String BYPASS_RULE_SUBTRACT_IMPLICIT = "<-loopback>";
 
-    private String[][] mProxyRules;
-    private String[] mBypassRules;
+    private List<String[]> mProxyRules;
+    private List<String> mBypassRules;
 
     /**
      * @hide Internal use only
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-    public ProxyConfig(String[][] proxyRules, String[] bypassRules) {
+    public ProxyConfig(List<String[]> proxyRules, List<String> bypassRules) {
         mProxyRules = proxyRules;
         mBypassRules = bypassRules;
     }
@@ -83,7 +82,7 @@
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @NonNull
-    public String[][] proxyRules() {
+    public List<String[]> proxyRules() {
         return mProxyRules;
     }
 
@@ -92,54 +91,60 @@
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @NonNull
-    public String[] bypassRules() {
+    public List<String> bypassRules() {
         return mBypassRules;
     }
 
     /**
      * ProxyConfig builder. Use {@link Builder#addProxyRule(String)} or
-     * {@link Builder#addProxyRule(String, String)} to add proxy rules. Note that if
-     * you don't add any proxy rules, all connections will be made directly. Use
-     * {@link Builder#addBypassRule(String)} to add bypass rules. Use
-     * {@link Builder#build()} to build this into a {@link ProxyConfig} object.
+     * {@link Builder#addProxyRule(String, String)} to add proxy rules. Use
+     * {@link Builder#addBypassRule(String)} to add bypass rules. Use {@link Builder#build()} to
+     * build this into a {@link ProxyConfig} object.
+     *
+     * <p class="note"><b>Note:</b> applying a {@code ProxyConfig} with no rules will cause all
+     * connections to be made directly.
      */
-    public static class Builder {
-        private ArrayList<String[]> mProxyRules;
-        private ArrayList<String> mBypassRules;
+    public static final class Builder {
+        private List<String[]> mProxyRules;
+        private List<String> mBypassRules;
 
+        /**
+         * Create an empty ProxyConfig Builder.
+         */
         public Builder() {
             mProxyRules = new ArrayList<>();
             mBypassRules = new ArrayList<>();
         }
 
         /**
+         * Create a ProxyConfig Builder from an existing ProxyConfig object.
+         */
+        public Builder(@NonNull ProxyConfig proxyConfig) {
+            mProxyRules = proxyConfig.proxyRules();
+            mBypassRules = proxyConfig.bypassRules();
+        }
+
+        /**
          * Builds the current rules into a ProxyConfig object.
          */
         @NonNull
         public ProxyConfig build() {
-            return new ProxyConfig(buildProxyRules(), buildBypassRules());
+            return new ProxyConfig(proxyRules(), bypassRules());
         }
 
         /**
          * Adds a proxy to be used for all URLs.
          * <p>Proxy is either {@link ProxyConfig#DIRECT} or a string in the format
-         * {@code [scheme://]host[:port]}. Scheme is optional and defaults to HTTP; host is one
-         * of an IPv6 literal with brackets, an IPv4 literal or one or more labels separated by
-         * a period; port number is optional and defaults to {@code 80} for {@code HTTP},
-         * {@code 443} for {@code HTTPS} and {@code 1080} for {@code SOCKS}.
+         * {@code [scheme://]host[:port]}. Scheme is optional, if present must be {@code HTTP},
+         * {@code HTTPS} or <a href="https://tools.ietf.org/html/rfc1928">SOCKS</a> and defaults to
+         * {@code HTTP}. Host is one of an IPv6 literal with brackets, an IPv4 literal or one or
+         * more labels separated by a period. Port number is optional and defaults to {@code 80} for
+         * {@code HTTP}, {@code 443} for {@code HTTPS} and {@code 1080} for {@code SOCKS}.
          * <p>
          * The correct syntax for hosts is defined by
-         * <a  href="https://tools.ietf.org/html/rfc3986#section-3.2.2">RFC 3986</a>
+         * <a href="https://tools.ietf.org/html/rfc3986#section-3.2.2">RFC 3986</a>
          * <p>
-         * Host examples:
-         * <table>
-         * <tr><th> Type </th> <th> Example </th></tr>
-         * <tr><td> IPv4 literal</td> <td> 192.168.1.1 </td></tr>
-         * <tr><td> IPv6 literal with brackets</td> <td> [10:20:30:40:50:60:70:80] </td></tr>
-         * <tr><td> Labels </td> <td> example.com </td></tr>
-         * </table>
-         * <p>
-         * Proxy URL examples:
+         * Examples:
          * <table>
          * <tr><th> Scheme </th> <th> Host </th> <th> Port </th> <th> Proxy URL </th></tr>
          * <tr><td></td> <td>example.com</td> <td></td> <td>example.com</td> </tr>
@@ -162,7 +167,7 @@
         /**
          * This does everything that {@link Builder#addProxyRule(String)} does,
          * but only applies to URLs using {@code schemeFilter}. Scheme filter must be one of
-         * {@link ProxyConfig#HTTP}, {@link ProxyConfig#HTTPS} or
+         * {@link ProxyConfig#MATCH_HTTP}, {@link ProxyConfig#MATCH_HTTPS} or
          * {@link ProxyConfig#MATCH_ALL_SCHEMES}.
          *
          * @param proxyUrl Proxy URL
@@ -192,30 +197,45 @@
         }
 
         /**
-         * Matches hostnames without a period in them (and are not IP literals).
+         * Hostnames without a period in them (and that are not IP literals) will skip proxy
+         * settings and be connected to directly instead. Examples: {@code "abc"}, {@code "local"},
+         * {@code "some-domain"}.
+         * <p>
+         * Hostnames with a trailing dot are not considered simple by this definition.
          */
         @NonNull
-        public Builder doNotProxyLocalNetworkRequests() {
-            return addBypassRule(BYPASS_RULE_LOCAL);
+        public Builder bypassSimpleHostnames() {
+            return addBypassRule(BYPASS_RULE_SIMPLE_NAMES);
         }
 
         /**
-         * Subtracts the implicit proxy bypass rules (localhost and link local addresses), so they
-         * are no longer bypassed.
+         * By default, certain hostnames implicitly bypass the proxy if they are link-local IPs, or
+         * localhost addresses. For instance hostnames matching any of (non-exhaustive list):
+         * <ul>
+         * <li>localhost</li>
+         * <li>*.localhost</li>
+         * <li>[::1]</li>
+         * <li>127.0.0.1/8</li>
+         * <li>169.254/16</li>
+         * <li>[FE80::]/10</li>
+         * </ul>
+         * <p>
+         * Call this function to override the default behavior and force localhost and link-local
+         * URLs to be sent through the proxy.
          */
         @NonNull
-        public Builder doProxyLoopbackRequests() {
-            return addBypassRule(BYPASS_RULE_LOOPBACK);
+        public Builder subtractImplicitRules() {
+            return addBypassRule(BYPASS_RULE_SUBTRACT_IMPLICIT);
         }
 
         @NonNull
-        private String[][] buildProxyRules() {
-            return mProxyRules.toArray(new String[0][]);
+        private List<String[]> proxyRules() {
+            return mProxyRules;
         }
 
         @NonNull
-        private String[] buildBypassRules() {
-            return mBypassRules.toArray(new String[mBypassRules.size()]);
+        private List<String> bypassRules() {
+            return mBypassRules;
         }
     }
 }
diff --git a/webkit/src/main/java/androidx/webkit/ProxyController.java b/webkit/src/main/java/androidx/webkit/ProxyController.java
index 14892fe..cd6b76a 100644
--- a/webkit/src/main/java/androidx/webkit/ProxyController.java
+++ b/webkit/src/main/java/androidx/webkit/ProxyController.java
@@ -17,7 +17,6 @@
 package androidx.webkit;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.RequiresFeature;
 import androidx.annotation.RestrictTo;
 import androidx.webkit.internal.ProxyControllerImpl;
@@ -49,11 +48,7 @@
  * ...
  * ProxyController.getInstance().clearProxyOverride(executor, listener);
  * </pre>
- *
- * TODO(laisminchillo): unhide this when we're ready to expose this
- * @hide
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public abstract class ProxyController {
     /**
      * @hide Don't allow apps to sub-class this class.
@@ -83,38 +78,23 @@
     }
 
     /**
-     * Does everything that
-     * {@link ProxyController#setProxyOverride(ProxyConfig, Executor, Runnable)} does, but this
-     * listener will be called in the same thread this method was called from.
-     *
-     * @param proxyConfig Proxy config to be applied
-     * @param listener Optional listener called when the proxy setting change has been applied
-     */
-    public abstract void setProxyOverride(@NonNull ProxyConfig proxyConfig,
-            @Nullable Runnable listener);
-
-    /**
      * Sets {@link ProxyConfig} which will be used by all WebViews in the app. URLs that match
      * patterns in the bypass list will not be directed to any proxy. Instead, the request will be
      * made directly to the origin specified by the URL. Network connections are not guaranteed to
      * immediately use the new proxy setting; wait for the listener before loading a page. This
      * listener will be called in the provided executor.
      *
+     * <p class="note"><b>Note:</b> calling setProxyOverride will cause any existing system wide
+     * setting to be ignored.
+     *
      * @param proxyConfig Proxy config to be applied
      * @param executor Executor for the listener to be executed in
-     * @param listener Optional listener called when the proxy setting change has been applied
+     * @param listener Listener called when the proxy setting change has been applied
+     *
+     * @throws IllegalArgumentException If the proxyConfig is invalid
      */
     public abstract void setProxyOverride(@NonNull ProxyConfig proxyConfig,
-            @NonNull Executor executor, @Nullable Runnable listener);
-
-    /**
-     * Does everything that {@link ProxyController#clearProxyOverride(Executor, Runnable)} does,
-     * but this listener will be called in the same thread this method was called from.
-     *
-     * @param listener Optional listener called when the proxy setting change has been applied
-     */
-    public abstract void clearProxyOverride(@Nullable Runnable listener);
-
+            @NonNull Executor executor, @NonNull Runnable listener);
 
     /**
      * Clears the proxy settings. Network connections are not guaranteed to immediately use the
@@ -122,8 +102,8 @@
      * in the provided executor.
      *
      * @param executor Executor for the listener to be executed in
-     * @param listener Optional listener called when the proxy setting change has been applied
+     * @param listener Listener called when the proxy setting change has been applied
      */
     public abstract void clearProxyOverride(@NonNull Executor executor,
-            @Nullable Runnable listener);
+            @NonNull Runnable listener);
 }
diff --git a/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java b/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java
index 7286c8f..59b0299 100644
--- a/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java
+++ b/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java
@@ -25,7 +25,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
-import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
 import androidx.webkit.internal.AssetHelper;
 
@@ -33,19 +32,34 @@
 import java.net.URLConnection;
 
 /**
- * Helper class meant to be used with the android.webkit.WebView class to enable hosting assets,
- * resources and other data on 'virtual' http(s):// URL.
- * Hosting assets and resources on http(s):// URLs is desirable as it is compatible with the
- * Same-Origin policy.
+ * Helper class to enable accessing the application's static assets and resources under an
+ * http(s):// URL to be loaded by {@link android.webkit.WebView} class.
+ * Hosting assets and resources this way is desirable as it is compatible with the Same-Origin
+ * policy.
  *
- * This class is intended to be used from within the
- * {@link android.webkit.WebViewClient#shouldInterceptRequest(android.webkit.WebView,
- * android.webkit.WebResourceRequest)}
- * methods.
- * <pre>
- *     WebViewAssetLoader assetLoader = new WebViewAssetLoader(this);
- *     // For security WebViewAssetLoader uses a unique subdomain by default.
- *     assetLoader.hostAssets();
+ * <p>
+ * For more context about application's assets and resources and how to normally access them please
+ * refer to <a href="https://developer.android.com/guide/topics/resources/providing-resources">
+ * Android Developer Docs: App resources overview</a>.
+ *
+ * <p class='note'>
+ * This class is expected to be used within
+ * {@link android.webkit.WebViewClient#shouldInterceptRequest}, which is not invoked on the
+ * application's main thread. Although instances are themselves thread-safe (and may be safely
+ * constructed on the application's main thread), exercise caution when accessing private data or
+ * the view system.
+ *
+ * <p>
+ * Using http(s):// URLs to access local resources may conflict with a real website. This means
+ * that local resources should only be hosted on domains your organization owns (at paths reserved
+ * for this purpose) or the default domain Google has reserved for this:
+ * {@code appassets.androidplatform.net}.
+ *
+ * <p>
+ * A typical usage would be like:
+ * <pre class="prettyprint">
+ *     WebViewAssetLoader.Builder assetLoaderBuilder = new WebViewAssetLoader.Builder(this);
+ *     final WebViewAssetLoader assetLoader = assetLoaderBuilder.build();
  *     webView.setWebViewClient(new WebViewClient() {
  *         @Override
  *         public WebResourceResponse shouldInterceptRequest(WebView view,
@@ -53,31 +67,25 @@
  *             return assetLoader.shouldInterceptRequest(request);
  *         }
  *     });
- *     // If your application's assets are in the "main/assets" folder this will read the file
+ *     // Assets are hosted under http(s)://appassets.androidplatform.net/assets/... by default.
+ *     // If the application's assets are in the "main/assets" folder this will read the file
  *     // from "main/assets/www/index.html" and load it as if it were hosted on:
  *     // https://appassets.androidplatform.net/assets/www/index.html
- *     assetLoader.hostAssets();
- *     webview.loadUrl(assetLoader.getAssetsHttpsPrefix().buildUpon().appendPath("www/index.html")
- *                              .build().toString());
+ *     webview.loadUrl(assetLoader.getAssetsHttpsPrefix().buildUpon()
+ *                                      .appendPath("www")
+ *                                      .appendPath("index.html")
+ *                                      .build().toString());
  *
  * </pre>
- *
- * @hide
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class WebViewAssetLoader {
     private static final String TAG = "WebViewAssetLoader";
 
     /**
-     * Using http(s):// URL to access local resources may conflict with a real website. This means
-     * that local resources should only be hosted on domains that the user has control of or which
-     * have been dedicated for this purpose.
-     *
-     * The androidplatform.net domain currently belongs to Google and has been reserved for the
-     * purpose of Android applications intercepting navigations/requests directed there. It'll be
-     * used by default unless the user specified a different domain.
-     *
-     * A subdomain "appassets" will be used to even make sure no such collisons would happen.
+     * An unused domain reserved by Google for Android applications to intercept requests
+     * for app assets.
+     * <p>
+     * It'll be used by default unless the user specified a different domain.
      */
     public static final String KNOWN_UNUSED_AUTHORITY = "appassets.androidplatform.net";
 
@@ -90,9 +98,12 @@
     /**
      * A handler that produces responses for the registered paths.
      *
+     * Matches URIs on the form: {@code "http(s)://authority/path/**"}, HTTPS is always enabled.
+     *
+     * <p>
      * Methods of this handler will be invoked on a background thread and care must be taken to
      * correctly synchronize access to any shared state.
-     *
+     * <p>
      * On Android KitKat and above these methods may be called on more than one thread. This thread
      * may be different than the thread on which the shouldInterceptRequest method was invoked.
      * This means that on Android KitKat and above it is possible to block in this method without
@@ -108,12 +119,9 @@
         @NonNull final String mPath;
 
         /**
-         * Add a URI to match, and the handler to return when this URI is
-         * matched. Matches URIs on the form: "scheme://authority/path/**"
-         *
-         * @param authority the authority to match (For example example.com)
-         * @param path the prefix path to match. Should start and end with a slash "/".
-         * @param httpEnabled whether to enable hosting using the http scheme.
+         * @param authority the authority to match (For instance {@code "example.com"})
+         * @param path the prefix path to match, it should start and end with a {@code "/"}.
+         * @param httpEnabled enable hosting under the HTTP scheme, HTTPS is always enabled.
          */
         PathHandler(@NonNull final String authority, @NonNull final String path,
                             boolean httpEnabled) {
@@ -128,19 +136,33 @@
             this.mHttpEnabled = httpEnabled;
         }
 
+        /**
+         * Open an {@link InputStream} for the requested URL.
+         * <p>
+         * This method should be called if {@code match(Uri)} returns true in order to
+         * open the file requested by this URL.
+         *
+         * @param url path that has been matched.
+         * @return {@link InputStream} for the requested URL, {@code null} if an error happens
+         *         while opening the file or file doesn't exist.
+         */
         @Nullable
         public abstract InputStream handle(@NonNull Uri url);
 
         /**
-         * Match happens when:
-         *      - Scheme is "https" or the scheme is "http" and http is enabled.
-         *      - AND authority exact matches the given URI's authority.
-         *      - AND path is a prefix of the given URI's path.
-         * @param uri The URI whose path we will match against.
+         * Match against registered scheme, authority and path prefix.
          *
-         * @return  true if match happens, false otherwise.
+         * Match happens when:
+         * <ul>
+         *      <li>Scheme is "https" <b>or</b> the scheme is "http" and http is enabled.</li>
+         *      <li>Authority exact matches the given URI's authority.</li>
+         *      <li>Path is a prefix of the given URI's path.</li>
+         * </ul>
+         *
+         * @param uri the URI whose path we will match against.
+         *
+         * @return {@code true} if a match happens, {@code false} otherwise.
          */
-        @Nullable
         public boolean match(@NonNull Uri uri) {
             // Only match HTTP_SCHEME if caller enabled HTTP matches.
             if (uri.getScheme().equals(HTTP_SCHEME) && !mHttpEnabled) {
@@ -199,7 +221,7 @@
 
 
     /**
-     * A builder class for constructing WebViewAssetLoader objects.
+     * A builder class for constructing {@link WebViewAssetLoader} objects.
      */
     public static final class Builder {
         private final Context mContext;
@@ -208,6 +230,9 @@
         @NonNull Uri mAssetsUri;
         @NonNull Uri mResourcesUri;
 
+        /**
+         * @param context {@link Context} used to resolve resources/assets.
+         */
         public Builder(@NonNull Context context) {
             mContext = context;
             mAllowHttp = false;
@@ -219,9 +244,10 @@
          * Set the domain under which app assets and resources can be accessed.
          * The default domain is {@code "appassets.androidplatform.net"}
          *
-         * @param domain the domain on which app assets are hosted.
-         * @return builder object.
+         * @param domain the domain on which app assets should be hosted.
+         * @return {@link Builder} object.
          */
+        @NonNull
         public Builder setDomain(@NonNull String domain) {
             mAssetsUri = createUriPrefix(domain, mAssetsUri.getPath());
             mResourcesUri = createUriPrefix(domain, mResourcesUri.getPath());
@@ -229,24 +255,34 @@
         }
 
         /**
-         * Set the prefix path under which app assets are hosted.
-         * The default path for assets is {@code "/assets/"}
+         * Set the prefix path under which app assets should be hosted.
+         * The default path for assets is {@code "/assets/"}. The path must start and end with
+         * {@code "/"}.
+         * <p>
+         * A custom prefix path can be used in conjunction with a custom domain, to
+         * avoid conflicts with real paths which may be hosted at that domain.
          *
-         * @param path the path under which app assets are hosted.
-         * @return builder object.
+         * @param path the path under which app assets should be hosted.
+         * @return {@link Builder} object.
+         * @throws IllegalArgumentException if the path is invalid.
          */
+        @NonNull
         public Builder setAssetsHostingPath(@NonNull String path) {
             mAssetsUri = createUriPrefix(mAssetsUri.getAuthority(), path);
             return this;
         }
 
         /**
-         * Set the prefix path under which app resources are hosted.
-         * the default path for resources is {@code "/res/"}
+         * Set the prefix path under which app resources should be hosted.
+         * The default path for resources is {@code "/res/"}. The path must start and end with
+         * {@code "/"}. A custom prefix path can be used in conjunction with a custom domain, to
+         * avoid conflicts with real paths which may be hosted at that domain.
          *
-         * @param path the path under which app resources are hosted.
-         * @return builder object.
+         * @param path the path under which app resources should be hosted.
+         * @return {@link Builder} object.
+         * @throws IllegalArgumentException if the path is invalid.
          */
+        @NonNull
         public Builder setResourcesHostingPath(@NonNull String path) {
             mResourcesUri = createUriPrefix(mResourcesUri.getAuthority(), path);
             return this;
@@ -256,20 +292,33 @@
          * Allow using the HTTP scheme in addition to HTTPS.
          * The default is to not allow HTTP.
          *
-         * @return builder object.
+         * @return {@link Builder} object.
          */
+        @NonNull
         public Builder allowHttp() {
             this.mAllowHttp = true;
             return this;
         }
 
         /**
-         * Build and return WebViewAssetLoader object.
+         * Build and return a {@link WebViewAssetLoader} object.
          *
-         * @return immutable WebViewAssetLoader object.
+         * @return immutable {@link WebViewAssetLoader} object.
+         * @throws IllegalArgumentException if the {@code Builder} received conflicting inputs.
          */
         @NonNull
         public WebViewAssetLoader build() {
+            String assetsPath = mAssetsUri.getPath();
+            String resourcesPath = mResourcesUri.getPath();
+            if (assetsPath.startsWith(resourcesPath)) {
+                throw new
+                    IllegalArgumentException("Resources path cannot be prefix of assets path");
+            }
+            if (resourcesPath.startsWith(assetsPath)) {
+                throw new
+                    IllegalArgumentException("Assets path cannot be prefix of resources path");
+            }
+
             AssetHelper assetHelper = new AssetHelper(mContext);
             PathHandler assetHandler = new AssetsPathHandler(mAssetsUri.getAuthority(),
                                                 mAssetsUri.getPath(), mAllowHttp, assetHelper);
@@ -324,12 +373,6 @@
         }
     }
 
-    /**
-     * Creates a new instance of the WebView asset loader.
-     * Will use a default domain on the form of: appassets.androidplatform.net
-     *
-     * @param context context used to resolve resources/assets.
-     */
     /*package*/ WebViewAssetLoader(@NonNull PathHandler assetHandler,
                                         @NonNull PathHandler resourceHandler) {
         this.mAssetsHandler = assetHandler;
@@ -355,30 +398,51 @@
     }
 
     /**
-     * Attempt to retrieve the WebResourceResponse associated with the given <code>request</code>.
+     * Attempt to resolve the {@link WebResourceRequest} to an application resource or
+     * asset, and return a {@link WebResourceResponse} for the content.
+     * <p>
+     * The prefix path used shouldn't be a prefix of a real web path. Thus, in case of having a URL
+     * that matches a registered prefix path but the requested asset cannot be found or opened a
+     * {@link WebResourceResponse} object with a {@code null} {@link InputStream} will be returned
+     * instead of {@code null}. This saves the time of falling back to network and trying to
+     * resolve a path that doesn't exist. A {@link WebResourceResponse} with {@code null}
+     * {@link InputStream} will be received as an HTTP response with status code {@code 404} and
+     * no body.
+     * <p>
      * This method should be invoked from within
-     * {@link android.webkit.WebViewClient#shouldInterceptRequest(android.webkit.WebView,
-     * android.webkit.WebResourceRequest)}.
+     * {@link android.webkit.WebViewClient#shouldInterceptRequest(android.webkit.WebView, WebResourceRequest)}.
      *
-     * @param request the request to process.
-     * @return a response if the request URL had a matching registered url, null otherwise.
+     * @param request the {@link WebResourceRequest} to process.
+     * @return {@link WebResourceResponse} if the request URL matches a registered url,
+     *         {@code null} otherwise.
      */
     @RequiresApi(21)
     @Nullable
-    public WebResourceResponse shouldInterceptRequest(WebResourceRequest request) {
+    public WebResourceResponse shouldInterceptRequest(@NonNull WebResourceRequest request) {
         return shouldInterceptRequestImpl(request.getUrl());
     }
 
     /**
-     * Attempt to retrieve the WebResourceResponse associated with the given <code>url</code>.
+     * Attempt to resolve the {@code url} to an application resource or asset, and return
+     * a {@link WebResourceResponse} for the content.
+     * <p>
+     * The prefix path used shouldn't be a prefix of a real web path. Thus, in case of having a URL
+     * that matches a registered prefix path but the requested asset cannot be found or opened a
+     * {@link WebResourceResponse} object with a {@code null} {@link InputStream} will be returned
+     * instead of {@code null}. This saves the time of falling back to network and trying to
+     * resolve a path that doesn't exist. A {@link WebResourceResponse} with {@code null}
+     * {@link InputStream} will be received as an HTTP response with status code {@code 404} and
+     * no body.
+     * <p>
      * This method should be invoked from within
      * {@link android.webkit.WebViewClient#shouldInterceptRequest(android.webkit.WebView, String)}.
      *
-     * @param url the url to process.
-     * @return a response if the request URL had a matching registered url, null otherwise.
+     * @param url the URL string to process.
+     * @return {@link WebResourceResponse} if the request URL matches a registered URL,
+     *         {@code null} otherwise.
      */
     @Nullable
-    public WebResourceResponse shouldInterceptRequest(@Nullable String url) {
+    public WebResourceResponse shouldInterceptRequest(@NonNull String url) {
         PathHandler handler = null;
         Uri uri = parseAndVerifyUrl(url);
         if (uri == null) {
@@ -405,8 +469,14 @@
     }
 
     /**
-     * Gets the http: scheme prefix at which assets are hosted.
-     * @return  the http: scheme prefix at which assets are hosted. Can return null.
+     * Get the HTTP URL prefix under which assets are hosted.
+     * <p>
+     * If HTTP is allowed, the prefix will be on the format:
+     * {@code "http://<domain>/<prefix-path>/"}, for example:
+     * {@code "http://appassets.androidplatform.net/assets/"}.
+     *
+     * @return the HTTP URL prefix under which assets are hosted, or {@code null} if HTTP is not
+     *         enabled.
      */
     @Nullable
     public Uri getAssetsHttpPrefix() {
@@ -423,8 +493,12 @@
     }
 
     /**
-     * Gets the https: scheme prefix at which assets are hosted.
-     * @return  the https: scheme prefix at which assets are hosted. Can return null.
+     * Get the HTTPS URL prefix under which assets are hosted.
+     * <p>
+     * The prefix will be on the format: {@code "https://<domain>/<prefix-path>/"}, if the default
+     * values are used then it will be: {@code "https://appassets.androidplatform.net/assets/"}.
+     *
+     * @return the HTTPS URL prefix under which assets are hosted.
      */
     @NonNull
     public Uri getAssetsHttpsPrefix() {
@@ -437,8 +511,14 @@
     }
 
     /**
-     * Gets the http: scheme prefix at which resources are hosted.
-     * @return  the http: scheme prefix at which resources are hosted. Can return null.
+     * Get the HTTP URL prefix under which resources are hosted.
+     * <p>
+     * If HTTP is allowed, the prefix will be on the format:
+     * {@code "http://<domain>/<prefix-path>/"}, for example
+     * {@code "http://appassets.androidplatform.net/res/"}.
+     *
+     * @return the HTTP URL prefix under which resources are hosted, or {@code null} if HTTP is not
+     *         enabled.
      */
     @Nullable
     public Uri getResourcesHttpPrefix() {
@@ -455,8 +535,12 @@
     }
 
     /**
-     * Gets the https: scheme prefix at which resources are hosted.
-     * @return  the https: scheme prefix at which resources are hosted. Can return null.
+     * Get the HTTPS URL prefix under which resources are hosted.
+     * <p>
+     * The prefix will be on the format: {@code "https://<domain>/<prefix-path>/"}, if the default
+     * values are used then it will be: {@code "https://appassets.androidplatform.net/res/"}.
+     *
+     * @return the HTTPs URL prefix under which resources are hosted.
      */
     @NonNull
     public Uri getResourcesHttpsPrefix() {
diff --git a/webkit/src/main/java/androidx/webkit/WebViewCompat.java b/webkit/src/main/java/androidx/webkit/WebViewCompat.java
index 0904aee..1e66dc4 100644
--- a/webkit/src/main/java/androidx/webkit/WebViewCompat.java
+++ b/webkit/src/main/java/androidx/webkit/WebViewCompat.java
@@ -38,7 +38,6 @@
 import androidx.webkit.internal.WebViewProviderFactory;
 
 import org.chromium.support_lib_boundary.WebViewProviderBoundaryInterface;
-import org.chromium.support_lib_boundary.util.Features;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -441,7 +440,7 @@
             enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
     public static @NonNull WebViewClient getWebViewClient(@NonNull WebView webview) {
         final WebViewFeatureInternal feature =
-                WebViewFeatureInternal.getFeature(Features.GET_WEB_VIEW_CLIENT);
+                WebViewFeatureInternal.getFeature(WebViewFeature.GET_WEB_VIEW_CLIENT);
         if (feature.isSupportedByFramework()) {
             return webview.getWebViewClient();
         } else if (feature.isSupportedByWebView()) {
diff --git a/webkit/src/main/java/androidx/webkit/WebViewFeature.java b/webkit/src/main/java/androidx/webkit/WebViewFeature.java
index 9fa1d36..86a8250 100644
--- a/webkit/src/main/java/androidx/webkit/WebViewFeature.java
+++ b/webkit/src/main/java/androidx/webkit/WebViewFeature.java
@@ -30,8 +30,6 @@
 import androidx.annotation.StringDef;
 import androidx.webkit.internal.WebViewFeatureInternal;
 
-import org.chromium.support_lib_boundary.util.Features;
-
 import java.io.OutputStream;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -101,7 +99,7 @@
      * WebViewClientCompat#onPageCommitVisible(
      * android.webkit.WebView, String)}.
      */
-    public static final String VISUAL_STATE_CALLBACK = Features.VISUAL_STATE_CALLBACK;
+    public static final String VISUAL_STATE_CALLBACK = "VISUAL_STATE_CALLBACK";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -109,7 +107,7 @@
      * {@link androidx.webkit.WebSettingsCompat#getOffscreenPreRaster(WebSettings)}, and
      * {@link androidx.webkit.WebSettingsCompat#setOffscreenPreRaster(WebSettings, boolean)}.
      */
-    public static final String OFF_SCREEN_PRERASTER = Features.OFF_SCREEN_PRERASTER;
+    public static final String OFF_SCREEN_PRERASTER = "OFF_SCREEN_PRERASTER";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -117,7 +115,7 @@
      * {@link androidx.webkit.WebSettingsCompat#getSafeBrowsingEnabled(WebSettings)}, and
      * {@link androidx.webkit.WebSettingsCompat#setSafeBrowsingEnabled(WebSettings, boolean)}.
      */
-    public static final String SAFE_BROWSING_ENABLE = Features.SAFE_BROWSING_ENABLE;
+    public static final String SAFE_BROWSING_ENABLE = "SAFE_BROWSING_ENABLE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -126,21 +124,21 @@
      * {@link androidx.webkit.WebSettingsCompat#setDisabledActionModeMenuItems(WebSettings, int)}.
      */
     public static final String DISABLED_ACTION_MODE_MENU_ITEMS =
-            Features.DISABLED_ACTION_MODE_MENU_ITEMS;
+            "DISABLED_ACTION_MODE_MENU_ITEMS";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers
      * {@link androidx.webkit.WebViewCompat#startSafeBrowsing(Context, ValueCallback)}.
      */
-    public static final String START_SAFE_BROWSING = Features.START_SAFE_BROWSING;
+    public static final String START_SAFE_BROWSING = "START_SAFE_BROWSING";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers
      * {@link androidx.webkit.WebViewCompat#setSafeBrowsingWhitelist(List, ValueCallback)}.
      */
-    public static final String SAFE_BROWSING_WHITELIST = Features.SAFE_BROWSING_WHITELIST;
+    public static final String SAFE_BROWSING_WHITELIST = "SAFE_BROWSING_WHITELIST";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -148,14 +146,14 @@
      * {@link WebViewCompat#getSafeBrowsingPrivacyPolicyUrl()}.
      */
     public static final String SAFE_BROWSING_PRIVACY_POLICY_URL =
-            Features.SAFE_BROWSING_PRIVACY_POLICY_URL;
+            "SAFE_BROWSING_PRIVACY_POLICY_URL";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers
      * {@link ServiceWorkerControllerCompat#getInstance()}.
      */
-    public static final String SERVICE_WORKER_BASIC_USAGE = Features.SERVICE_WORKER_BASIC_USAGE;
+    public static final String SERVICE_WORKER_BASIC_USAGE = "SERVICE_WORKER_BASIC_USAGE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -163,7 +161,7 @@
      * {@link ServiceWorkerWebSettingsCompat#getCacheMode()}, and
      * {@link ServiceWorkerWebSettingsCompat#setCacheMode(int)}.
      */
-    public static final String SERVICE_WORKER_CACHE_MODE = Features.SERVICE_WORKER_CACHE_MODE;
+    public static final String SERVICE_WORKER_CACHE_MODE = "SERVICE_WORKER_CACHE_MODE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -172,7 +170,7 @@
      * {@link ServiceWorkerWebSettingsCompat#setAllowContentAccess(boolean)}.
      */
     public static final String SERVICE_WORKER_CONTENT_ACCESS =
-            Features.SERVICE_WORKER_CONTENT_ACCESS;
+            "SERVICE_WORKER_CONTENT_ACCESS";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -180,7 +178,7 @@
      * {@link ServiceWorkerWebSettingsCompat#getAllowFileAccess()}, and
      * {@link ServiceWorkerWebSettingsCompat#setAllowFileAccess(boolean)}.
      */
-    public static final String SERVICE_WORKER_FILE_ACCESS = Features.SERVICE_WORKER_FILE_ACCESS;
+    public static final String SERVICE_WORKER_FILE_ACCESS = "SERVICE_WORKER_FILE_ACCESS";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -189,7 +187,7 @@
      * {@link ServiceWorkerWebSettingsCompat#setBlockNetworkLoads(boolean)}.
      */
     public static final String SERVICE_WORKER_BLOCK_NETWORK_LOADS =
-            Features.SERVICE_WORKER_BLOCK_NETWORK_LOADS;
+            "SERVICE_WORKER_BLOCK_NETWORK_LOADS";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -197,7 +195,7 @@
      * {@link ServiceWorkerClientCompat#shouldInterceptRequest(WebResourceRequest)}.
      */
     public static final String SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST =
-            Features.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST;
+            "SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -205,7 +203,7 @@
      * {@link WebViewClientCompat#onReceivedError(android.webkit.WebView, WebResourceRequest,
      * WebResourceErrorCompat)}.
      */
-    public static final String RECEIVE_WEB_RESOURCE_ERROR = Features.RECEIVE_WEB_RESOURCE_ERROR;
+    public static final String RECEIVE_WEB_RESOURCE_ERROR = "RECEIVE_WEB_RESOURCE_ERROR";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -213,7 +211,7 @@
      * {@link WebViewClientCompat#onReceivedHttpError(android.webkit.WebView, WebResourceRequest,
      * WebResourceResponse)}.
      */
-    public static final String RECEIVE_HTTP_ERROR = Features.RECEIVE_HTTP_ERROR;
+    public static final String RECEIVE_HTTP_ERROR = "RECEIVE_HTTP_ERROR";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -222,7 +220,7 @@
      * WebResourceRequest)}.
      */
     public static final String SHOULD_OVERRIDE_WITH_REDIRECTS =
-            Features.SHOULD_OVERRIDE_WITH_REDIRECTS;
+            "SHOULD_OVERRIDE_WITH_REDIRECTS";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -230,7 +228,7 @@
      * {@link WebViewClientCompat#onSafeBrowsingHit(android.webkit.WebView,
      * WebResourceRequest, int, SafeBrowsingResponseCompat)}.
      */
-    public static final String SAFE_BROWSING_HIT = Features.SAFE_BROWSING_HIT;
+    public static final String SAFE_BROWSING_HIT = "SAFE_BROWSING_HIT";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -241,7 +239,7 @@
      * {@link TracingController#stop(OutputStream, Executor)}.
      */
     public static final String TRACING_CONTROLLER_BASIC_USAGE =
-            Features.TRACING_CONTROLLER_BASIC_USAGE;
+            "TRACING_CONTROLLER_BASIC_USAGE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -249,7 +247,7 @@
      * {@link WebResourceRequestCompat#isRedirect(WebResourceRequest)}.
      */
     public static final String WEB_RESOURCE_REQUEST_IS_REDIRECT =
-            Features.WEB_RESOURCE_REQUEST_IS_REDIRECT;
+            "WEB_RESOURCE_REQUEST_IS_REDIRECT";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -257,7 +255,7 @@
      * {@link WebResourceErrorCompat#getDescription()}.
      */
     public static final String WEB_RESOURCE_ERROR_GET_DESCRIPTION =
-            Features.WEB_RESOURCE_ERROR_GET_DESCRIPTION;
+            "WEB_RESOURCE_ERROR_GET_DESCRIPTION";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -265,7 +263,7 @@
      * {@link WebResourceErrorCompat#getErrorCode()}.
      */
     public static final String WEB_RESOURCE_ERROR_GET_CODE =
-            Features.WEB_RESOURCE_ERROR_GET_CODE;
+            "WEB_RESOURCE_ERROR_GET_CODE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -273,7 +271,7 @@
      * {@link SafeBrowsingResponseCompat#backToSafety(boolean)}.
      */
     public static final String SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY =
-            Features.SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY;
+            "SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -281,7 +279,7 @@
      * {@link SafeBrowsingResponseCompat#proceed(boolean)}.
      */
     public static final String SAFE_BROWSING_RESPONSE_PROCEED =
-            Features.SAFE_BROWSING_RESPONSE_PROCEED;
+            "SAFE_BROWSING_RESPONSE_PROCEED";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -289,7 +287,7 @@
      * {@link SafeBrowsingResponseCompat#showInterstitial(boolean)}.
      */
     public static final String SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL =
-            Features.SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL;
+            "SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -297,14 +295,14 @@
      * {@link androidx.webkit.WebMessagePortCompat#postMessage(WebMessageCompat)}.
      */
     public static final String WEB_MESSAGE_PORT_POST_MESSAGE =
-            Features.WEB_MESSAGE_PORT_POST_MESSAGE;
+            "WEB_MESSAGE_PORT_POST_MESSAGE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers
      * {@link androidx.webkit.WebMessagePortCompat#close()}.
      */
-    public static final String WEB_MESSAGE_PORT_CLOSE = Features.WEB_MESSAGE_PORT_CLOSE;
+    public static final String WEB_MESSAGE_PORT_CLOSE = "WEB_MESSAGE_PORT_CLOSE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -315,21 +313,21 @@
      * WebMessagePortCompat.WebMessageCallbackCompat)}.
      */
     public static final String WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK =
-            Features.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK;
+            "WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers
      * {@link WebViewCompat#createWebMessageChannel(WebView)}.
      */
-    public static final String CREATE_WEB_MESSAGE_CHANNEL = Features.CREATE_WEB_MESSAGE_CHANNEL;
+    public static final String CREATE_WEB_MESSAGE_CHANNEL = "CREATE_WEB_MESSAGE_CHANNEL";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers
      * {@link WebViewCompat#postWebMessage(WebView, WebMessageCompat, Uri)}.
      */
-    public static final String POST_WEB_MESSAGE = Features.POST_WEB_MESSAGE;
+    public static final String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -338,31 +336,31 @@
      * WebMessageCompat)}.
      */
     public static final String WEB_MESSAGE_CALLBACK_ON_MESSAGE =
-            Features.WEB_MESSAGE_CALLBACK_ON_MESSAGE;
+            "WEB_MESSAGE_CALLBACK_ON_MESSAGE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers {@link WebViewCompat#getWebViewClient(WebView)}
      */
-    public static final String GET_WEB_VIEW_CLIENT = Features.GET_WEB_VIEW_CLIENT;
+    public static final String GET_WEB_VIEW_CLIENT = "GET_WEB_VIEW_CLIENT";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers {@link WebViewCompat#getWebChromeClient(WebView)}
      */
-    public static final String GET_WEB_CHROME_CLIENT = Features.GET_WEB_CHROME_CLIENT;
+    public static final String GET_WEB_CHROME_CLIENT = "GET_WEB_CHROME_CLIENT";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers {@link WebViewCompat#getWebViewRenderer(WebView)}
      */
-    public static final String GET_WEB_VIEW_RENDERER = Features.GET_WEB_VIEW_RENDERER;
+    public static final String GET_WEB_VIEW_RENDERER = "GET_WEB_VIEW_RENDERER";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers {@link WebViewRenderer#terminate()}
      */
-    public static final String WEB_VIEW_RENDERER_TERMINATE = Features.WEB_VIEW_RENDERER_TERMINATE;
+    public static final String WEB_VIEW_RENDERER_TERMINATE = "WEB_VIEW_RENDERER_TERMINATE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -373,7 +371,7 @@
      * {@link WebViewRendererClient#onRendererResponsive(WebView,WebViewRenderer)}
      */
     public static final String WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE =
-            Features.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE;
+            "WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE";
 
     /**
      * Feature for {@link #isFeatureSupported(String)}.
@@ -382,11 +380,8 @@
      * {@link ProxyController#setProxyOverride(ProxyConfig, Runnable)},
      * {@link ProxyController#clearProxyOverride(Executor, Runnable)}, and
      * {@link ProxyController#clearProxyOverride(Runnable)}.
-     * TODO(laisminchillo): unhide this when we're ready to expose this
-     * @hide
      */
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-    public static final String PROXY_OVERRIDE = Features.PROXY_OVERRIDE;
+    public static final String PROXY_OVERRIDE = "PROXY_OVERRIDE";
 
     /**
      * Return whether a feature is supported at run-time. On devices running Android version {@link
diff --git a/webkit/src/main/java/androidx/webkit/internal/ProxyControllerImpl.java b/webkit/src/main/java/androidx/webkit/internal/ProxyControllerImpl.java
index d5212d9..1b61f33 100644
--- a/webkit/src/main/java/androidx/webkit/internal/ProxyControllerImpl.java
+++ b/webkit/src/main/java/androidx/webkit/internal/ProxyControllerImpl.java
@@ -17,7 +17,6 @@
 package androidx.webkit.internal;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.webkit.ProxyConfig;
 import androidx.webkit.ProxyController;
 import androidx.webkit.WebViewFeature;
@@ -33,30 +32,21 @@
     private ProxyControllerBoundaryInterface mBoundaryInterface;
 
     @Override
-    public void setProxyOverride(@NonNull ProxyConfig proxyConfig, @Nullable Runnable listener) {
-        setProxyOverride(proxyConfig, new SynchronousExecutor(), listener);
-    }
-
-    @Override
     public void setProxyOverride(@NonNull ProxyConfig proxyConfig, @NonNull Executor executor,
-            @Nullable Runnable listener) {
+            @NonNull Runnable listener) {
         WebViewFeatureInternal webViewFeature =
                 WebViewFeatureInternal.getFeature(WebViewFeature.PROXY_OVERRIDE);
         if (webViewFeature.isSupportedByWebView()) {
-            getBoundaryInterface().setProxyOverride(proxyConfig.proxyRules(),
-                    proxyConfig.bypassRules(), listener, executor);
+            getBoundaryInterface().setProxyOverride(
+                    proxyConfig.proxyRules().toArray(new String[0][]),
+                    proxyConfig.bypassRules().toArray(new String[0]), listener, executor);
         } else {
             throw WebViewFeatureInternal.getUnsupportedOperationException();
         }
     }
 
     @Override
-    public void clearProxyOverride(@Nullable Runnable listener) {
-        clearProxyOverride(new SynchronousExecutor(), listener);
-    }
-
-    @Override
-    public void clearProxyOverride(@NonNull Executor executor, @Nullable Runnable listener) {
+    public void clearProxyOverride(@NonNull Executor executor, @NonNull Runnable listener) {
         WebViewFeatureInternal webViewFeature =
                 WebViewFeatureInternal.getFeature(WebViewFeature.PROXY_OVERRIDE);
         if (webViewFeature.isSupportedByWebView()) {
@@ -72,11 +62,4 @@
         }
         return mBoundaryInterface;
     }
-
-    static class SynchronousExecutor implements Executor {
-        @Override
-        public void execute(Runnable r) {
-            r.run();
-        }
-    }
 }
diff --git a/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java b/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
index 768387a..aa1a9be 100644
--- a/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
+++ b/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
@@ -26,6 +26,7 @@
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 
+import androidx.annotation.NonNull;
 import androidx.webkit.ProxyConfig;
 import androidx.webkit.ProxyController;
 import androidx.webkit.SafeBrowsingResponseCompat;
@@ -60,21 +61,24 @@
      * androidx.webkit.WebViewCompat.VisualStateCallback)}, and
      * {@link WebViewClientCompat#onPageCommitVisible(android.webkit.WebView, String)}.
      */
-    VISUAL_STATE_CALLBACK_FEATURE(WebViewFeature.VISUAL_STATE_CALLBACK, Build.VERSION_CODES.M),
+    VISUAL_STATE_CALLBACK_FEATURE(WebViewFeature.VISUAL_STATE_CALLBACK,
+            Features.VISUAL_STATE_CALLBACK, Build.VERSION_CODES.M),
 
     /**
      * This feature covers
      * {@link androidx.webkit.WebSettingsCompat#getOffscreenPreRaster(WebSettings)}, and
      * {@link androidx.webkit.WebSettingsCompat#setOffscreenPreRaster(WebSettings, boolean)}.
      */
-    OFF_SCREEN_PRERASTER(WebViewFeature.OFF_SCREEN_PRERASTER, Build.VERSION_CODES.M),
+    OFF_SCREEN_PRERASTER(WebViewFeature.OFF_SCREEN_PRERASTER, Features.OFF_SCREEN_PRERASTER,
+            Build.VERSION_CODES.M),
 
     /**
      * This feature covers
      * {@link androidx.webkit.WebSettingsCompat#getSafeBrowsingEnabled(WebSettings)}, and
      * {@link androidx.webkit.WebSettingsCompat#setSafeBrowsingEnabled(WebSettings, boolean)}.
      */
-    SAFE_BROWSING_ENABLE(WebViewFeature.SAFE_BROWSING_ENABLE, Build.VERSION_CODES.O),
+    SAFE_BROWSING_ENABLE(WebViewFeature.SAFE_BROWSING_ENABLE, Features.SAFE_BROWSING_ENABLE,
+            Build.VERSION_CODES.O),
 
     /**
      * This feature covers
@@ -82,39 +86,43 @@
      * {@link androidx.webkit.WebSettingsCompat#setDisabledActionModeMenuItems(WebSettings, int)}.
      */
     DISABLED_ACTION_MODE_MENU_ITEMS(WebViewFeature.DISABLED_ACTION_MODE_MENU_ITEMS,
-                                    Build.VERSION_CODES.N),
+            Features.DISABLED_ACTION_MODE_MENU_ITEMS, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
      * {@link androidx.webkit.WebViewCompat#startSafeBrowsing(Context, ValueCallback)}.
      */
-    START_SAFE_BROWSING(WebViewFeature.START_SAFE_BROWSING, Build.VERSION_CODES.O_MR1),
+    START_SAFE_BROWSING(WebViewFeature.START_SAFE_BROWSING, Features.START_SAFE_BROWSING,
+            Build.VERSION_CODES.O_MR1),
 
     /**
      * This feature covers
      * {@link androidx.webkit.WebViewCompat#setSafeBrowsingWhitelist(List, ValueCallback)}.
      */
-    SAFE_BROWSING_WHITELIST(WebViewFeature.SAFE_BROWSING_WHITELIST, Build.VERSION_CODES.O_MR1),
+    SAFE_BROWSING_WHITELIST(WebViewFeature.SAFE_BROWSING_WHITELIST,
+            Features.SAFE_BROWSING_WHITELIST, Build.VERSION_CODES.O_MR1),
 
     /**
      * This feature covers
      * {@link WebViewCompat#getSafeBrowsingPrivacyPolicyUrl()}.
      */
     SAFE_BROWSING_PRIVACY_POLICY_URL(WebViewFeature.SAFE_BROWSING_PRIVACY_POLICY_URL,
-            Build.VERSION_CODES.O_MR1),
+            Features.SAFE_BROWSING_PRIVACY_POLICY_URL, Build.VERSION_CODES.O_MR1),
 
     /**
      * This feature covers
      * {@link androidx.webkit.ServiceWorkerControllerCompat#getInstance()}.
      */
-    SERVICE_WORKER_BASIC_USAGE(WebViewFeature.SERVICE_WORKER_BASIC_USAGE, Build.VERSION_CODES.N),
+    SERVICE_WORKER_BASIC_USAGE(WebViewFeature.SERVICE_WORKER_BASIC_USAGE,
+            Features.SERVICE_WORKER_BASIC_USAGE, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
      * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#getCacheMode()}, and
      * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#setCacheMode(int)}.
      */
-    SERVICE_WORKER_CACHE_MODE(WebViewFeature.SERVICE_WORKER_CACHE_MODE, Build.VERSION_CODES.N),
+    SERVICE_WORKER_CACHE_MODE(WebViewFeature.SERVICE_WORKER_CACHE_MODE,
+            Features.SERVICE_WORKER_CACHE_MODE, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
@@ -122,14 +130,15 @@
      * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#setAllowContentAccess(boolean)}.
      */
     SERVICE_WORKER_CONTENT_ACCESS(WebViewFeature.SERVICE_WORKER_CONTENT_ACCESS,
-            Build.VERSION_CODES.N),
+            Features.SERVICE_WORKER_CONTENT_ACCESS, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
      * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#getAllowFileAccess()}, and
      * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#setAllowFileAccess(boolean)}.
      */
-    SERVICE_WORKER_FILE_ACCESS(WebViewFeature.SERVICE_WORKER_FILE_ACCESS, Build.VERSION_CODES.N),
+    SERVICE_WORKER_FILE_ACCESS(WebViewFeature.SERVICE_WORKER_FILE_ACCESS,
+            Features.SERVICE_WORKER_FILE_ACCESS, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
@@ -137,28 +146,30 @@
      * {@link androidx.webkit.ServiceWorkerWebSettingsCompat#setBlockNetworkLoads(boolean)}.
      */
     SERVICE_WORKER_BLOCK_NETWORK_LOADS(WebViewFeature.SERVICE_WORKER_BLOCK_NETWORK_LOADS,
-            Build.VERSION_CODES.N),
+            Features.SERVICE_WORKER_BLOCK_NETWORK_LOADS, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
      * {@link ServiceWorkerClientCompat#shouldInterceptRequest(WebResourceRequest)}.
      */
     SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST(WebViewFeature.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST,
-            Build.VERSION_CODES.N),
+            Features.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
      * {@link WebViewClientCompat#onReceivedError(android.webkit.WebView, WebResourceRequest,
      * WebResourceErrorCompat)}.
      */
-    RECEIVE_WEB_RESOURCE_ERROR(WebViewFeature.RECEIVE_WEB_RESOURCE_ERROR, Build.VERSION_CODES.M),
+    RECEIVE_WEB_RESOURCE_ERROR(WebViewFeature.RECEIVE_WEB_RESOURCE_ERROR,
+            Features.RECEIVE_WEB_RESOURCE_ERROR, Build.VERSION_CODES.M),
 
     /**
      * This feature covers
      * {@link WebViewClientCompat#onReceivedHttpError(android.webkit.WebView, WebResourceRequest,
      * WebResourceResponse)}.
      */
-    RECEIVE_HTTP_ERROR(WebViewFeature.RECEIVE_HTTP_ERROR, Build.VERSION_CODES.M),
+    RECEIVE_HTTP_ERROR(WebViewFeature.RECEIVE_HTTP_ERROR, Features.RECEIVE_HTTP_ERROR,
+            Build.VERSION_CODES.M),
 
     /**
      * This feature covers
@@ -166,49 +177,50 @@
      * WebResourceRequest)}.
      */
     SHOULD_OVERRIDE_WITH_REDIRECTS(WebViewFeature.SHOULD_OVERRIDE_WITH_REDIRECTS,
-            Build.VERSION_CODES.N),
+            Features.SHOULD_OVERRIDE_WITH_REDIRECTS, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
      * {@link WebViewClientCompat#onSafeBrowsingHit(android.webkit.WebView,
      * WebResourceRequest, int, SafeBrowsingResponseCompat)}.
      */
-    SAFE_BROWSING_HIT(WebViewFeature.SAFE_BROWSING_HIT, Build.VERSION_CODES.O_MR1),
+    SAFE_BROWSING_HIT(WebViewFeature.SAFE_BROWSING_HIT, Features.SAFE_BROWSING_HIT,
+            Build.VERSION_CODES.O_MR1),
 
     /**
      * This feature covers
      * {@link WebResourceRequestCompat#isRedirect(WebResourceRequest)}.
      */
     WEB_RESOURCE_REQUEST_IS_REDIRECT(WebViewFeature.WEB_RESOURCE_REQUEST_IS_REDIRECT,
-            Build.VERSION_CODES.N),
+            Features.WEB_RESOURCE_REQUEST_IS_REDIRECT, Build.VERSION_CODES.N),
 
     /**
      * This feature covers
      * {@link WebResourceErrorCompat#getDescription()}.
      */
     WEB_RESOURCE_ERROR_GET_DESCRIPTION(WebViewFeature.WEB_RESOURCE_ERROR_GET_DESCRIPTION,
-            Build.VERSION_CODES.M),
+            Features.WEB_RESOURCE_ERROR_GET_DESCRIPTION, Build.VERSION_CODES.M),
 
     /**
      * This feature covers
      * {@link WebResourceErrorCompat#getErrorCode()}.
      */
     WEB_RESOURCE_ERROR_GET_CODE(WebViewFeature.WEB_RESOURCE_ERROR_GET_CODE,
-            Build.VERSION_CODES.M),
+            Features.WEB_RESOURCE_ERROR_GET_CODE, Build.VERSION_CODES.M),
 
     /**
      * This feature covers
      * {@link SafeBrowsingResponseCompat#backToSafety(boolean)}.
      */
     SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY(WebViewFeature.SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY,
-            Build.VERSION_CODES.O_MR1),
+            Features.SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY, Build.VERSION_CODES.O_MR1),
 
     /**
      * This feature covers
      * {@link SafeBrowsingResponseCompat#proceed(boolean)}.
      */
     SAFE_BROWSING_RESPONSE_PROCEED(WebViewFeature.SAFE_BROWSING_RESPONSE_PROCEED,
-            Build.VERSION_CODES.O_MR1),
+            Features.SAFE_BROWSING_RESPONSE_PROCEED, Build.VERSION_CODES.O_MR1),
 
     /**
      * This feature covers
@@ -216,20 +228,20 @@
      */
     SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL(
             WebViewFeature.SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL,
-            Build.VERSION_CODES.O_MR1),
+            Features.SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL, Build.VERSION_CODES.O_MR1),
 
     /**
      * This feature covers
      * {@link WebMessagePortCompat#postMessage(WebMessageCompat)}.
      */
     WEB_MESSAGE_PORT_POST_MESSAGE(WebViewFeature.WEB_MESSAGE_PORT_POST_MESSAGE,
-            Build.VERSION_CODES.M),
+            Features.WEB_MESSAGE_PORT_POST_MESSAGE, Build.VERSION_CODES.M),
 
     /**
      * * This feature covers
      * {@link androidx.webkit.WebMessagePortCompat#close()}.
      */
-    WEB_MESSAGE_PORT_CLOSE(WebViewFeature.WEB_MESSAGE_PORT_CLOSE,
+    WEB_MESSAGE_PORT_CLOSE(WebViewFeature.WEB_MESSAGE_PORT_CLOSE, Features.WEB_MESSAGE_PORT_CLOSE,
             Build.VERSION_CODES.M),
 
     /**
@@ -240,20 +252,20 @@
      * WebMessagePortCompat.WebMessageCallbackCompat)}.
      */
      WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK(WebViewFeature.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK,
-            Build.VERSION_CODES.M),
+            Features.WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK, Build.VERSION_CODES.M),
 
     /**
      * This feature covers
      * {@link WebViewCompat#createWebMessageChannel(WebView)}.
      */
     CREATE_WEB_MESSAGE_CHANNEL(WebViewFeature.CREATE_WEB_MESSAGE_CHANNEL,
-            Build.VERSION_CODES.M),
+            Features.CREATE_WEB_MESSAGE_CHANNEL, Build.VERSION_CODES.M),
 
     /**
      * This feature covers
      * {@link WebViewCompat#postWebMessage(WebView, WebMessageCompat, Uri)}.
      */
-    POST_WEB_MESSAGE(WebViewFeature.POST_WEB_MESSAGE,
+    POST_WEB_MESSAGE(WebViewFeature.POST_WEB_MESSAGE, Features.POST_WEB_MESSAGE,
             Build.VERSION_CODES.M),
 
     /**
@@ -261,20 +273,23 @@
      * {@link WebViewCompat#postWebMessage(WebView, WebMessageCompat, Uri)}.
      */
     WEB_MESSAGE_CALLBACK_ON_MESSAGE(WebViewFeature.WEB_MESSAGE_CALLBACK_ON_MESSAGE,
-            Build.VERSION_CODES.M),
+            Features.WEB_MESSAGE_CALLBACK_ON_MESSAGE, Build.VERSION_CODES.M),
 
     /**
      * This feature covers {@link WebViewCompat#getWebViewClient(WebView)}.
      */
-    GET_WEB_VIEW_CLIENT(Features.GET_WEB_VIEW_CLIENT, Build.VERSION_CODES.O),
+    GET_WEB_VIEW_CLIENT(WebViewFeature.GET_WEB_VIEW_CLIENT, Features.GET_WEB_VIEW_CLIENT,
+            Build.VERSION_CODES.O),
 
     /**
      * This feature covers {@link WebViewCompat#getWebChromeClient(WebView)}.
      */
-    GET_WEB_CHROME_CLIENT(WebViewFeature.GET_WEB_CHROME_CLIENT, Build.VERSION_CODES.O),
+    GET_WEB_CHROME_CLIENT(WebViewFeature.GET_WEB_CHROME_CLIENT, Features.GET_WEB_CHROME_CLIENT,
+            Build.VERSION_CODES.O),
 
-    GET_WEB_VIEW_RENDERER(WebViewFeature.GET_WEB_VIEW_RENDERER),
-    WEB_VIEW_RENDERER_TERMINATE(WebViewFeature.WEB_VIEW_RENDERER_TERMINATE),
+    GET_WEB_VIEW_RENDERER(WebViewFeature.GET_WEB_VIEW_RENDERER, Features.GET_WEB_VIEW_RENDERER),
+    WEB_VIEW_RENDERER_TERMINATE(WebViewFeature.WEB_VIEW_RENDERER_TERMINATE,
+            Features.WEB_VIEW_RENDERER_TERMINATE),
 
     /**
      * This feature covers
@@ -284,7 +299,7 @@
      * {@link TracingController#stop(OutputStream, Executor)}.
      */
     TRACING_CONTROLLER_BASIC_USAGE(WebViewFeature.TRACING_CONTROLLER_BASIC_USAGE,
-                                   Build.VERSION_CODES.P),
+            Features.TRACING_CONTROLLER_BASIC_USAGE, Build.VERSION_CODES.P),
 
     /**
      * This feature covers
@@ -293,7 +308,8 @@
      * {@link WebViewRendererClient#onRendererUnresponsive(WebView,WebViewRenderer)},
      * {@link WebViewRendererClient#onRendererResponsive(WebView,WebViewRenderer)}
      */
-    WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE(WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE),
+    WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE(WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE,
+            Features.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE),
 
     /**
      * This feature covers
@@ -302,12 +318,13 @@
      * {@link ProxyController#clearProxyOverride(Executor, Runnable)}, and
      * {@link ProxyController#clearProxyOverride(Runnable)}.
      */
-    PROXY_OVERRIDE(WebViewFeature.PROXY_OVERRIDE),
+    PROXY_OVERRIDE(WebViewFeature.PROXY_OVERRIDE, Features.PROXY_OVERRIDE),
 
     ;  // This semicolon ends the enum. Add new features with a trailing comma above this line.
 
     private static final int NOT_SUPPORTED_BY_FRAMEWORK = -1;
-    private final String mFeatureValue;
+    private final String mPublicFeatureValue;
+    private final String mInternalFeatureValue;
     private final int mOsVersion;
 
     /**
@@ -316,33 +333,42 @@
      * <p>Features constructed with this constructor can be later converted to use the
      * other constructor if framework support is added.
      *
-     * @param featureValue The feature string denoting this feature
+     * @param publicFeatureValue   The public facing feature string denoting this feature
+     * @param internalFeatureValue The internal feature string denoting this feature
      */
-    WebViewFeatureInternal(String featureValue) {
-        this(featureValue, NOT_SUPPORTED_BY_FRAMEWORK);
+    WebViewFeatureInternal(@NonNull @WebViewFeature.WebViewSupportFeature String publicFeatureValue,
+            @NonNull String internalFeatureValue) {
+        this(publicFeatureValue, internalFeatureValue, NOT_SUPPORTED_BY_FRAMEWORK);
     }
 
     /**
      * Creates a WebViewFeatureInternal that is implemented in the framework.
      *
-     * @param featureValue The feature string denoting this feature
-     * @param osVersion    The Android SDK level after which this feature is implemented in the
-     *                     framework.
+     * @param publicFeatureValue   The public facing feature string denoting this feature
+     * @param internalFeatureValue The internal feature string denoting this feature
+     * @param osVersion            The Android SDK level after which this feature is implemented
+     *                             in the framework.
      */
-    WebViewFeatureInternal(String featureValue, int osVersion) {
-        assert !featureValue.endsWith(Features.DEV_SUFFIX);
-        mFeatureValue = featureValue;
+    WebViewFeatureInternal(@NonNull @WebViewFeature.WebViewSupportFeature String publicFeatureValue,
+            @NonNull String internalFeatureValue, int osVersion) {
+        assert !publicFeatureValue.endsWith(Features.DEV_SUFFIX);
+        assert !internalFeatureValue.endsWith(Features.DEV_SUFFIX);
+        mPublicFeatureValue = publicFeatureValue;
+        mInternalFeatureValue = internalFeatureValue;
         mOsVersion = osVersion;
     }
 
     /**
      * Return the {@link WebViewFeatureInternal} corresponding to {@param feature}.
      */
-    public static WebViewFeatureInternal getFeature(String feature) {
+    public static WebViewFeatureInternal getFeature(@NonNull @WebViewFeature.WebViewSupportFeature
+            String publicFeatureValue) {
         for (WebViewFeatureInternal internalFeature : WebViewFeatureInternal.values()) {
-            if (internalFeature.mFeatureValue.equals(feature)) return internalFeature;
+            if (internalFeature.mPublicFeatureValue.equals(publicFeatureValue)) {
+                return internalFeature;
+            }
         }
-        throw new RuntimeException("Unknown feature " + feature);
+        throw new RuntimeException("Unknown feature " + publicFeatureValue);
     }
 
     /**
@@ -361,7 +387,7 @@
      */
     public boolean isSupportedByWebView() {
         return BoundaryInterfaceReflectionUtil.containsFeature(
-                LAZY_HOLDER.WEBVIEW_APK_FEATURES, mFeatureValue);
+                LAZY_HOLDER.WEBVIEW_APK_FEATURES, mInternalFeatureValue);
     }
 
     private static class LAZY_HOLDER {
diff --git a/work/integration-tests/testapp/build.gradle b/work/integration-tests/testapp/build.gradle
index 02db71a..3991ec5 100644
--- a/work/integration-tests/testapp/build.gradle
+++ b/work/integration-tests/testapp/build.gradle
@@ -35,14 +35,24 @@
 }
 
 dependencies {
-    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+    // Using -PuseMaxDepVersions does not use the right version of the annotation processor
+    // Remove this workaround after b/127495641 is fixed
+    if (project.hasProperty('useMaxDepVersions')) {
+        annotationProcessor(project(":room:room-compiler"))
+        implementation(project(":room:room-runtime"))
+    } else {
+        annotationProcessor(ARCH_ROOM_COMPILER)
+        implementation(ARCH_ROOM_RUNTIME)
+    }
+
+    implementation(CONSTRAINT_LAYOUT)
     implementation project(':work:work-runtime-ktx')
-    implementation "android.arch.lifecycle:extensions:1.1.0"
-    implementation "android.arch.persistence.room:runtime:1.1.1"
-    annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
-    implementation "com.android.support:recyclerview-v7:27.1.1"
-    implementation "com.android.support:appcompat-v7:27.1.1"
-    implementation "com.android.support:design:27.1.1"
+    implementation(ARCH_CORE_RUNTIME)
+    implementation(ARCH_LIFECYCLE_EXTENSIONS)
+    implementation(ANDROIDX_RECYCLERVIEW)
+    implementation(SUPPORT_APPCOMPAT)
+    // SUPPORT_DESIGN has a @aar. So it needs { transitive = true }
+    implementation(SUPPORT_DESIGN) { transitive = true }
 }
 
 tasks['check'].dependsOn(tasks['connectedCheck'])
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/InfiniteWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/InfiniteWorker.java
index bee296c..9ecb6ab 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/InfiniteWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/InfiniteWorker.java
@@ -16,9 +16,9 @@
 package androidx.work.integration.testapp;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
index fa79f17..d95d7e1 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
@@ -19,18 +19,18 @@
 import static androidx.work.ExistingWorkPolicy.KEEP;
 import static androidx.work.ExistingWorkPolicy.REPLACE;
 
-import android.arch.lifecycle.Observer;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
 import android.provider.MediaStore;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.View;
 import android.widget.CheckBox;
 import android.widget.EditText;
 
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.Observer;
 import androidx.work.Constraints;
 import androidx.work.Data;
 import androidx.work.ExistingWorkPolicy;
@@ -306,5 +306,17 @@
             }
         });
 
+        findViewById(R.id.run_recursive_worker).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                OneTimeWorkRequest request =
+                        new OneTimeWorkRequest.Builder(RecursiveWorker.class)
+                                .addTag(RecursiveWorker.TAG)
+                                .build();
+
+                WorkManager.getInstance().enqueue(request);
+            }
+        });
+
     }
 }
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RecursiveWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RecursiveWorker.java
new file mode 100644
index 0000000..de274a3
--- /dev/null
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RecursiveWorker.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.work.integration.testapp;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.work.OneTimeWorkRequest;
+import androidx.work.WorkManager;
+import androidx.work.Worker;
+import androidx.work.WorkerParameters;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A {@link androidx.work.Worker} which requests itself to be scheduled.
+ */
+public class RecursiveWorker extends Worker {
+
+    public static String TAG = "RecursiveWorker";
+
+    public RecursiveWorker(@NonNull Context context, @NonNull WorkerParameters parameters) {
+        super(context, parameters);
+    }
+
+    @NonNull
+    @Override
+    public Result doWork() {
+        OneTimeWorkRequest newRequest = new OneTimeWorkRequest.Builder(RecursiveWorker.class)
+                .addTag(TAG)
+                .setInitialDelay(100, TimeUnit.MILLISECONDS)
+                .build();
+        WorkManager.getInstance().enqueue(newRequest);
+        return Result.success();
+    }
+}
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryActivity.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryActivity.java
index dd9dc74..4fc9c0d 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryActivity.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryActivity.java
@@ -16,17 +16,17 @@
 
 package androidx.work.integration.testapp;
 
-import android.arch.lifecycle.Observer;
 import android.content.Context;
 import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.Observer;
 import androidx.work.BackoffPolicy;
 import androidx.work.Constraints;
 import androidx.work.Data;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryWorker.java
index 7d39c4b..3cf48e4 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryWorker.java
@@ -33,9 +33,9 @@
 package androidx.work.integration.testapp;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/SleepWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/SleepWorker.java
index e012d28..d6122f5 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/SleepWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/SleepWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.integration.testapp;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestWorker.java
index 573d1dd..b9798b6 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestWorker.java
@@ -16,8 +16,8 @@
 package androidx.work.integration.testapp;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ToastWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ToastWorker.java
index 2fada74..bf2d789 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ToastWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ToastWorker.java
@@ -18,10 +18,10 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.NonNull;
 import android.util.Log;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.work.Data;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.Worker;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/Image.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/Image.java
index 07f456a..5bdbf93 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/Image.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/Image.java
@@ -15,11 +15,12 @@
  */
 package androidx.work.integration.testapp.db;
 
-import android.arch.persistence.room.Entity;
-import android.arch.persistence.room.Ignore;
-import android.arch.persistence.room.PrimaryKey;
 import android.graphics.Bitmap;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
+import androidx.room.Entity;
+import androidx.room.Ignore;
+import androidx.room.PrimaryKey;
 
 /**
  * A POJO for a processed image
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/ImageDao.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/ImageDao.java
index 7dd6284..bb1cd37 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/ImageDao.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/ImageDao.java
@@ -15,10 +15,10 @@
  */
 package androidx.work.integration.testapp.db;
 
-import android.arch.lifecycle.LiveData;
-import android.arch.persistence.room.Dao;
-import android.arch.persistence.room.Insert;
-import android.arch.persistence.room.Query;
+import androidx.lifecycle.LiveData;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.Query;
 
 import java.util.List;
 
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/TestDatabase.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/TestDatabase.java
index 8eceed0..edff2e2 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/TestDatabase.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/TestDatabase.java
@@ -15,11 +15,12 @@
  */
 package androidx.work.integration.testapp.db;
 
-import android.arch.persistence.room.Database;
-import android.arch.persistence.room.Room;
-import android.arch.persistence.room.RoomDatabase;
 import android.content.Context;
 
+import androidx.room.Database;
+import androidx.room.Room;
+import androidx.room.RoomDatabase;
+
 /**
  * A test database.
  */
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCount.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCount.java
index ebbc12c..78f4d86 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCount.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCount.java
@@ -15,9 +15,9 @@
  */
 package androidx.work.integration.testapp.db;
 
-import android.arch.persistence.room.Entity;
-import android.arch.persistence.room.PrimaryKey;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
 
 /**
  * A POJO for a word and its count.
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCountDao.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCountDao.java
index c5c26c8..94898c2 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCountDao.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/db/WordCountDao.java
@@ -15,10 +15,10 @@
  */
 package androidx.work.integration.testapp.db;
 
-import android.arch.lifecycle.LiveData;
-import android.arch.persistence.room.Dao;
-import android.arch.persistence.room.Insert;
-import android.arch.persistence.room.Query;
+import androidx.lifecycle.LiveData;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.Query;
 
 import java.util.List;
 
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageCleanupWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageCleanupWorker.java
index 89ef1b6..1d68a91 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageCleanupWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageCleanupWorker.java
@@ -17,10 +17,10 @@
 package androidx.work.integration.testapp.imageprocessing;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 import androidx.work.integration.testapp.db.Image;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingActivity.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingActivity.java
index 54df558..5b159d2 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingActivity.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingActivity.java
@@ -16,17 +16,17 @@
 
 package androidx.work.integration.testapp.imageprocessing;
 
-import android.arch.lifecycle.Observer;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
 import android.provider.MediaStore;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
 import android.util.Log;
 import android.view.View;
 
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.Observer;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.WorkManager;
 import androidx.work.integration.testapp.R;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingWorker.java
index 11b89d5..a9eaabd 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingWorker.java
@@ -20,10 +20,10 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
-import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Data;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.Worker;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageRecyclerViewAdapter.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageRecyclerViewAdapter.java
index 2eeace2..8cbb23e 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageRecyclerViewAdapter.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageRecyclerViewAdapter.java
@@ -19,7 +19,6 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.os.AsyncTask;
-import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -29,6 +28,7 @@
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import androidx.recyclerview.widget.RecyclerView;
 import androidx.work.integration.testapp.R;
 import androidx.work.integration.testapp.db.Image;
 
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageSetupWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageSetupWorker.java
index 537410ac..be0cc69 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageSetupWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageSetupWorker.java
@@ -17,10 +17,10 @@
 package androidx.work.integration.testapp.imageprocessing;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Data;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.Worker;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/AnalyzeSherlockHolmesActivity.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/AnalyzeSherlockHolmesActivity.java
index 45819b70..cba2df6 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/AnalyzeSherlockHolmesActivity.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/AnalyzeSherlockHolmesActivity.java
@@ -20,12 +20,12 @@
 import static androidx.work.WorkInfo.State.SUCCEEDED;
 
 import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import androidx.appcompat.app.AppCompatActivity;
 import androidx.work.ArrayCreatingInputMerger;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.WorkManager;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextMappingWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextMappingWorker.java
index c92c09e..08bde6e 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextMappingWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextMappingWorker.java
@@ -17,8 +17,8 @@
 
 import android.content.Context;
 import android.content.res.AssetManager;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Data;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.Worker;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextReducingWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextReducingWorker.java
index 3150172..a0c9622 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextReducingWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextReducingWorker.java
@@ -16,8 +16,8 @@
 package androidx.work.integration.testapp.sherlockholmes;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Data;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextStartupWorker.java b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextStartupWorker.java
index 2d29d5e..f2add48 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextStartupWorker.java
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/TextStartupWorker.java
@@ -16,9 +16,9 @@
 package androidx.work.integration.testapp.sherlockholmes;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 import androidx.work.integration.testapp.db.TestDatabase;
diff --git a/work/integration-tests/testapp/src/main/res/layout/activity_image_processing.xml b/work/integration-tests/testapp/src/main/res/layout/activity_image_processing.xml
index 51afe20..fc48977 100644
--- a/work/integration-tests/testapp/src/main/res/layout/activity_image_processing.xml
+++ b/work/integration-tests/testapp/src/main/res/layout/activity_image_processing.xml
@@ -15,23 +15,23 @@
   ~ limitations under the License.
   -->
 
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context="androidx.work.integration.testapp.imageprocessing.ImageProcessingActivity">
 
-    <android.support.v7.widget.RecyclerView
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:id="@+id/image_recycler_view"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintTop_toTopOf="parent"/>
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/image_recycler_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 
-    <android.support.design.widget.FloatingActionButton
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
         android:id="@+id/add_image"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -42,7 +42,7 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:srcCompat="@drawable/ic_image_white_24dp" />
 
-    <android.support.design.widget.FloatingActionButton
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
         android:id="@+id/clear_all"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
@@ -53,4 +53,4 @@
         app:layout_constraintEnd_toStartOf="@+id/add_image"
         app:srcCompat="@drawable/ic_clear_white_24dp" />
 
-</android.support.constraint.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/work/integration-tests/testapp/src/main/res/layout/activity_main.xml b/work/integration-tests/testapp/src/main/res/layout/activity_main.xml
index 1da89a0..04bc823 100644
--- a/work/integration-tests/testapp/src/main/res/layout/activity_main.xml
+++ b/work/integration-tests/testapp/src/main/res/layout/activity_main.xml
@@ -191,5 +191,13 @@
             android:layout_marginLeft="16dp"
             android:layout_marginStart="16dp"/>
 
+        <Button android:text="@string/run_recursive_worker"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/run_recursive_worker"
+            android:layout_marginTop="12dp"
+            android:layout_marginLeft="16dp"
+            android:layout_marginStart="16dp"/>
+
     </LinearLayout>
 </ScrollView>
diff --git a/work/integration-tests/testapp/src/main/res/values/strings.xml b/work/integration-tests/testapp/src/main/res/values/strings.xml
index e836218..8f26b5e 100644
--- a/work/integration-tests/testapp/src/main/res/values/strings.xml
+++ b/work/integration-tests/testapp/src/main/res/values/strings.xml
@@ -23,5 +23,6 @@
     <string name="exploding_work">Test Exploding Work</string>
     <string name="replace_completed_work">Test Replacing Completed Work</string>
     <string name="run_retry_worker">Run Retry Worker</string>
+    <string name="run_recursive_worker">Run Recursive Worker</string>
     <string name="keep">Use KEEP</string>
 </resources>
\ No newline at end of file
diff --git a/work/workmanager-ktx/api/2.0.0-rc01.txt b/work/workmanager-ktx/api/2.0.0-rc01.txt
new file mode 100644
index 0000000..d76133a
--- /dev/null
+++ b/work/workmanager-ktx/api/2.0.0-rc01.txt
@@ -0,0 +1,42 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+    ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+    method public abstract suspend Object? doWork(kotlin.coroutines.experimental.Continuation<? super androidx.work.ListenableWorker.Result> p);
+    method public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+    method public final void onStopped();
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+    property public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+  }
+
+  public final class DataKt {
+    ctor public DataKt();
+    method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class ListenableFutureKt {
+    ctor public ListenableFutureKt();
+  }
+
+  public final class OneTimeWorkRequestKt {
+    ctor public OneTimeWorkRequestKt();
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder! OneTimeWorkRequestBuilder();
+    method public static inline androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+  }
+
+  public final class OperationKt {
+    ctor public OperationKt();
+    method public static suspend inline Object! await(androidx.work.Operation, kotlin.coroutines.experimental.Continuation<? super androidx.work.Operation.State.SUCCESS>! p);
+  }
+
+  public final class PeriodicWorkRequestKt {
+    ctor public PeriodicWorkRequestKt();
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit! repeatIntervalTimeUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration! repeatInterval);
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit! repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit! flexTimeIntervalUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration! repeatInterval, java.time.Duration! flexTimeInterval);
+  }
+
+}
+
diff --git a/work/workmanager-ktx/api/res-2.0.0-rc01.txt b/work/workmanager-ktx/api/res-2.0.0-rc01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-ktx/api/res-2.0.0-rc01.txt
diff --git a/work/workmanager-ktx/api/restricted_2.0.0-rc01.txt b/work/workmanager-ktx/api/restricted_2.0.0-rc01.txt
new file mode 100644
index 0000000..bdec7f9
--- /dev/null
+++ b/work/workmanager-ktx/api/restricted_2.0.0-rc01.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.work {
+
+  @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public enum DirectExecutor implements java.util.concurrent.Executor {
+    method public void execute(Runnable command);
+    enum_constant public static final androidx.work.DirectExecutor INSTANCE;
+  }
+
+  public final class ListenableFutureKt {
+    method @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.experimental.Continuation<? super R>! p);
+  }
+
+}
+
diff --git a/work/workmanager-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt b/work/workmanager-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
index 902a5ff..79a8825 100644
--- a/work/workmanager-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
+++ b/work/workmanager-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
@@ -16,9 +16,10 @@
 
 package androidx.work
 
-import android.arch.core.executor.ArchTaskExecutor
 import android.content.Context
 import android.util.Log
+import androidx.arch.core.executor.ArchTaskExecutor
+
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
@@ -48,7 +49,7 @@
     @Before
     fun setUp() {
         ArchTaskExecutor.getInstance()
-            .setDelegate(object : android.arch.core.executor.TaskExecutor() {
+            .setDelegate(object : androidx.arch.core.executor.TaskExecutor() {
                 override fun executeOnDiskIO(runnable: Runnable) {
                     runnable.run()
                 }
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/DirectExecutor.kt b/work/workmanager-ktx/src/main/java/androidx/work/DirectExecutor.kt
index 59d3748..969acf9 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/DirectExecutor.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/DirectExecutor.kt
@@ -16,7 +16,7 @@
 
 package androidx.work
 
-import android.support.annotation.RestrictTo
+import androidx.annotation.RestrictTo
 import java.util.concurrent.Executor
 
 /**
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt b/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt
index a663a02..51504ab 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt
@@ -18,7 +18,7 @@
 
 package androidx.work
 
-import android.support.annotation.RestrictTo
+import androidx.annotation.RestrictTo
 import com.google.common.util.concurrent.ListenableFuture
 import kotlinx.coroutines.suspendCancellableCoroutine
 import java.util.concurrent.CancellationException
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/OneTimeWorkRequest.kt b/work/workmanager-ktx/src/main/java/androidx/work/OneTimeWorkRequest.kt
index 61df5c8..e161c11 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/OneTimeWorkRequest.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/OneTimeWorkRequest.kt
@@ -19,7 +19,7 @@
 
 package androidx.work
 
-import android.support.annotation.NonNull
+import androidx.annotation.NonNull
 import kotlin.reflect.KClass
 
 /**
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/PeriodicWorkRequest.kt b/work/workmanager-ktx/src/main/java/androidx/work/PeriodicWorkRequest.kt
index 6c38896..752ce197 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/PeriodicWorkRequest.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/PeriodicWorkRequest.kt
@@ -16,7 +16,7 @@
 
 package androidx.work
 
-import android.support.annotation.RequiresApi
+import androidx.annotation.RequiresApi
 import java.time.Duration
 import java.util.concurrent.TimeUnit
 
@@ -27,8 +27,9 @@
  * @param repeatIntervalTimeUnit @see [androidx.work.PeriodicWorkRequest.Builder]
  */
 inline fun <reified W : ListenableWorker> PeriodicWorkRequestBuilder(
-        repeatInterval: Long,
-        repeatIntervalTimeUnit: TimeUnit): PeriodicWorkRequest.Builder {
+    repeatInterval: Long,
+    repeatIntervalTimeUnit: TimeUnit
+): PeriodicWorkRequest.Builder {
     return PeriodicWorkRequest.Builder(W::class.java, repeatInterval, repeatIntervalTimeUnit)
 }
 
@@ -39,7 +40,8 @@
  */
 @RequiresApi(26)
 inline fun <reified W : ListenableWorker> PeriodicWorkRequestBuilder(
-        repeatInterval: Duration): PeriodicWorkRequest.Builder {
+    repeatInterval: Duration
+): PeriodicWorkRequest.Builder {
     return PeriodicWorkRequest.Builder(W::class.java, repeatInterval)
 }
 
@@ -52,10 +54,11 @@
  * @param flexIntervalTimeUnit @see [androidx.work.PeriodicWorkRequest.Builder]
  */
 inline fun <reified W : ListenableWorker> PeriodicWorkRequestBuilder(
-        repeatInterval: Long,
-        repeatIntervalTimeUnit: TimeUnit,
-        flexTimeInterval: Long,
-        flexTimeIntervalUnit: TimeUnit): PeriodicWorkRequest.Builder {
+    repeatInterval: Long,
+    repeatIntervalTimeUnit: TimeUnit,
+    flexTimeInterval: Long,
+    flexTimeIntervalUnit: TimeUnit
+): PeriodicWorkRequest.Builder {
 
     return PeriodicWorkRequest.Builder(
             W::class.java,
@@ -73,7 +76,8 @@
  */
 @RequiresApi(26)
 inline fun <reified W : ListenableWorker> PeriodicWorkRequestBuilder(
-        repeatInterval: Duration,
-        flexTimeInterval: Duration): PeriodicWorkRequest.Builder {
+    repeatInterval: Duration,
+    flexTimeInterval: Duration
+): PeriodicWorkRequest.Builder {
     return PeriodicWorkRequest.Builder(W::class.java, repeatInterval, flexTimeInterval)
 }
diff --git a/work/workmanager-rxjava2/api/2.0.0-rc01.txt b/work/workmanager-rxjava2/api/2.0.0-rc01.txt
new file mode 100644
index 0000000..fc1c405
--- /dev/null
+++ b/work/workmanager-rxjava2/api/2.0.0-rc01.txt
@@ -0,0 +1,12 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class RxWorker extends androidx.work.ListenableWorker {
+    ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+    method @MainThread public abstract io.reactivex.Single<androidx.work.ListenableWorker.Result>! createWork();
+    method protected io.reactivex.Scheduler! getBackgroundScheduler();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+  }
+
+}
+
diff --git a/work/workmanager-rxjava2/api/res-2.0.0-rc01.txt b/work/workmanager-rxjava2/api/res-2.0.0-rc01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-rxjava2/api/res-2.0.0-rc01.txt
diff --git a/work/workmanager-rxjava2/api/restricted_2.0.0-rc01.txt b/work/workmanager-rxjava2/api/restricted_2.0.0-rc01.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-rxjava2/api/restricted_2.0.0-rc01.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-rxjava2/src/main/java/androidx/work/RxWorker.java b/work/workmanager-rxjava2/src/main/java/androidx/work/RxWorker.java
index 4af549e..0d6e8d0 100644
--- a/work/workmanager-rxjava2/src/main/java/androidx/work/RxWorker.java
+++ b/work/workmanager-rxjava2/src/main/java/androidx/work/RxWorker.java
@@ -17,10 +17,10 @@
 package androidx.work;
 
 import android.content.Context;
-import android.support.annotation.MainThread;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 
+import androidx.annotation.MainThread;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.work.impl.utils.SynchronousExecutor;
 import androidx.work.impl.utils.futures.SettableFuture;
 
diff --git a/work/workmanager-testing/api/2.0.0-rc01.txt b/work/workmanager-testing/api/2.0.0-rc01.txt
new file mode 100644
index 0000000..4754b0d
--- /dev/null
+++ b/work/workmanager-testing/api/2.0.0-rc01.txt
@@ -0,0 +1,22 @@
+// Signature format: 3.0
+package androidx.work.testing {
+
+  public class SynchronousExecutor implements java.util.concurrent.Executor {
+    ctor public SynchronousExecutor();
+    method public void execute(Runnable);
+  }
+
+  public interface TestDriver {
+    method public void setAllConstraintsMet(java.util.UUID);
+    method public void setInitialDelayMet(java.util.UUID);
+    method public void setPeriodDelayMet(java.util.UUID);
+  }
+
+  public final class WorkManagerTestInitHelper {
+    method public static androidx.work.testing.TestDriver! getTestDriver();
+    method public static void initializeTestWorkManager(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+  }
+
+}
+
diff --git a/work/workmanager-testing/api/res-2.0.0-rc01.txt b/work/workmanager-testing/api/res-2.0.0-rc01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-testing/api/res-2.0.0-rc01.txt
diff --git a/work/workmanager-testing/api/restricted_2.0.0-rc01.txt b/work/workmanager-testing/api/restricted_2.0.0-rc01.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-testing/api/restricted_2.0.0-rc01.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-testing/build.gradle b/work/workmanager-testing/build.gradle
index dca9b89..13c5338 100644
--- a/work/workmanager-testing/build.gradle
+++ b/work/workmanager-testing/build.gradle
@@ -26,14 +26,12 @@
 }
 
 dependencies {
-    // @aar and { transitive = true } are needed as a workaround for
-    // https://github.com/gradle/gradle/issues/3170
     implementation(project(':work:work-runtime'))
-    implementation("android.arch.lifecycle:livedata-core:1.1.0@aar") { transitive = true }
-    implementation("android.arch.persistence.room:runtime:1.1.1@aar") { transitive = true }
-    annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
+    implementation(ARCH_LIFECYCLE_LIVEDATA_CORE)
+    implementation(ARCH_ROOM_RUNTIME)
+    annotationProcessor(ARCH_ROOM_COMPILER)
 
-    androidTestImplementation "android.arch.core:core-testing:1.1.0"
+    androidTestImplementation(ARCH_CORE_TESTING)
     androidTestImplementation(TEST_EXT_JUNIT)
     androidTestImplementation(TEST_CORE)
     androidTestImplementation(TEST_RUNNER)
diff --git a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/CountingTestWorker.java b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/CountingTestWorker.java
index f9be524..b07246d 100644
--- a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/CountingTestWorker.java
+++ b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/CountingTestWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.testing.workers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/TestWorker.java b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/TestWorker.java
index a9e96b6..2423096 100644
--- a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/TestWorker.java
+++ b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/workers/TestWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.testing.workers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Logger;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
diff --git a/work/workmanager-testing/src/main/java/androidx/work/testing/SynchronousExecutor.java b/work/workmanager-testing/src/main/java/androidx/work/testing/SynchronousExecutor.java
index d652f17..4d6612c 100644
--- a/work/workmanager-testing/src/main/java/androidx/work/testing/SynchronousExecutor.java
+++ b/work/workmanager-testing/src/main/java/androidx/work/testing/SynchronousExecutor.java
@@ -16,7 +16,7 @@
 
 package androidx.work.testing;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.concurrent.Executor;
 
diff --git a/work/workmanager-testing/src/main/java/androidx/work/testing/TestDriver.java b/work/workmanager-testing/src/main/java/androidx/work/testing/TestDriver.java
index bf15a96..7295f11c 100644
--- a/work/workmanager-testing/src/main/java/androidx/work/testing/TestDriver.java
+++ b/work/workmanager-testing/src/main/java/androidx/work/testing/TestDriver.java
@@ -16,7 +16,7 @@
 
 package androidx.work.testing;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.UUID;
 
diff --git a/work/workmanager-testing/src/main/java/androidx/work/testing/TestScheduler.java b/work/workmanager-testing/src/main/java/androidx/work/testing/TestScheduler.java
index d6c7902..48640f4 100644
--- a/work/workmanager-testing/src/main/java/androidx/work/testing/TestScheduler.java
+++ b/work/workmanager-testing/src/main/java/androidx/work/testing/TestScheduler.java
@@ -17,9 +17,8 @@
 package androidx.work.testing;
 
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Worker;
 import androidx.work.impl.ExecutionListener;
 import androidx.work.impl.Scheduler;
diff --git a/work/workmanager-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.java b/work/workmanager-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.java
index cdfcf71..873ad26 100644
--- a/work/workmanager-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.java
+++ b/work/workmanager-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.java
@@ -17,9 +17,9 @@
 package androidx.work.testing;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Configuration;
 import androidx.work.WorkManager;
 import androidx.work.impl.WorkManagerImpl;
diff --git a/work/workmanager-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java b/work/workmanager-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
index 775ff6e0..1e09b60 100644
--- a/work/workmanager-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
+++ b/work/workmanager-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
@@ -17,8 +17,8 @@
 package androidx.work.testing;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Configuration;
 import androidx.work.impl.Scheduler;
 import androidx.work.impl.WorkManagerImpl;
diff --git a/work/workmanager/api/2.0.0-rc01.txt b/work/workmanager/api/2.0.0-rc01.txt
new file mode 100644
index 0000000..a616da8
--- /dev/null
+++ b/work/workmanager/api/2.0.0-rc01.txt
@@ -0,0 +1,284 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public final class ArrayCreatingInputMerger extends androidx.work.InputMerger {
+    ctor public ArrayCreatingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data>);
+  }
+
+  public enum BackoffPolicy {
+    enum_constant public static final androidx.work.BackoffPolicy EXPONENTIAL;
+    enum_constant public static final androidx.work.BackoffPolicy LINEAR;
+  }
+
+  public final class Configuration {
+    method public java.util.concurrent.Executor getExecutor();
+    method public int getMaxJobSchedulerId();
+    method public int getMinJobSchedulerId();
+    method public androidx.work.WorkerFactory getWorkerFactory();
+    field public static final int MIN_SCHEDULER_LIMIT = 20; // 0x14
+  }
+
+  public static final class Configuration.Builder {
+    ctor public Configuration.Builder();
+    method public androidx.work.Configuration build();
+    method public androidx.work.Configuration.Builder setExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setJobSchedulerJobIdRange(int, int);
+    method public androidx.work.Configuration.Builder setMaxSchedulerLimit(int);
+    method public androidx.work.Configuration.Builder setMinimumLoggingLevel(int);
+    method public androidx.work.Configuration.Builder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public final class Constraints {
+    ctor public Constraints(androidx.work.Constraints);
+    method public androidx.work.NetworkType getRequiredNetworkType();
+    method public boolean requiresBatteryNotLow();
+    method public boolean requiresCharging();
+    method @RequiresApi(23) public boolean requiresDeviceIdle();
+    method public boolean requiresStorageNotLow();
+    field public static final androidx.work.Constraints! NONE;
+  }
+
+  public static final class Constraints.Builder {
+    ctor public Constraints.Builder();
+    method @RequiresApi(24) public androidx.work.Constraints.Builder addContentUriTrigger(android.net.Uri, boolean);
+    method public androidx.work.Constraints build();
+    method public androidx.work.Constraints.Builder setRequiredNetworkType(androidx.work.NetworkType);
+    method public androidx.work.Constraints.Builder setRequiresBatteryNotLow(boolean);
+    method public androidx.work.Constraints.Builder setRequiresCharging(boolean);
+    method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean);
+    method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration!);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration!);
+  }
+
+  public final class Data {
+    ctor public Data(androidx.work.Data);
+    method public boolean getBoolean(String, boolean);
+    method public boolean[]? getBooleanArray(String);
+    method public double getDouble(String, double);
+    method public double[]? getDoubleArray(String);
+    method public float getFloat(String, float);
+    method public float[]? getFloatArray(String);
+    method public int getInt(String, int);
+    method public int[]? getIntArray(String);
+    method public java.util.Map<java.lang.String,java.lang.Object> getKeyValueMap();
+    method public long getLong(String, long);
+    method public long[]? getLongArray(String);
+    method public String? getString(String);
+    method public String[]? getStringArray(String);
+    field public static final androidx.work.Data! EMPTY;
+    field public static final int MAX_DATA_BYTES = 10240; // 0x2800
+  }
+
+  public static final class Data.Builder {
+    ctor public Data.Builder();
+    method public androidx.work.Data build();
+    method public androidx.work.Data.Builder putAll(androidx.work.Data);
+    method public androidx.work.Data.Builder putAll(java.util.Map<java.lang.String,java.lang.Object>);
+    method public androidx.work.Data.Builder putBoolean(String, boolean);
+    method public androidx.work.Data.Builder putBooleanArray(String, boolean[]);
+    method public androidx.work.Data.Builder putDouble(String, double);
+    method public androidx.work.Data.Builder putDoubleArray(String, double[]);
+    method public androidx.work.Data.Builder putFloat(String, float);
+    method public androidx.work.Data.Builder putFloatArray(String, float[]);
+    method public androidx.work.Data.Builder putInt(String, int);
+    method public androidx.work.Data.Builder putIntArray(String, int[]);
+    method public androidx.work.Data.Builder putLong(String, long);
+    method public androidx.work.Data.Builder putLongArray(String, long[]);
+    method public androidx.work.Data.Builder putString(String, String?);
+    method public androidx.work.Data.Builder putStringArray(String, String[]);
+  }
+
+  public enum ExistingPeriodicWorkPolicy {
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy REPLACE;
+  }
+
+  public enum ExistingWorkPolicy {
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND;
+    enum_constant public static final androidx.work.ExistingWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
+  }
+
+  public abstract class InputMerger {
+    ctor public InputMerger();
+    method public abstract androidx.work.Data merge(java.util.List<androidx.work.Data>);
+  }
+
+  public abstract class ListenableWorker {
+    ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
+    method public final android.content.Context getApplicationContext();
+    method public final java.util.UUID getId();
+    method public final androidx.work.Data getInputData();
+    method @RequiresApi(28) public final android.net.Network? getNetwork();
+    method public final int getRunAttemptCount();
+    method public final java.util.Set<java.lang.String> getTags();
+    method @RequiresApi(24) public final java.util.List<java.lang.String> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public final java.util.List<android.net.Uri> getTriggeredContentUris();
+    method public final boolean isStopped();
+    method public void onStopped();
+    method @MainThread public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+  }
+
+  public abstract static class ListenableWorker.Result {
+    method public static androidx.work.ListenableWorker.Result failure();
+    method public static androidx.work.ListenableWorker.Result failure(androidx.work.Data);
+    method public static androidx.work.ListenableWorker.Result retry();
+    method public static androidx.work.ListenableWorker.Result success();
+    method public static androidx.work.ListenableWorker.Result success(androidx.work.Data);
+  }
+
+  public enum NetworkType {
+    enum_constant public static final androidx.work.NetworkType CONNECTED;
+    enum_constant public static final androidx.work.NetworkType METERED;
+    enum_constant public static final androidx.work.NetworkType NOT_REQUIRED;
+    enum_constant public static final androidx.work.NetworkType NOT_ROAMING;
+    enum_constant public static final androidx.work.NetworkType UNMETERED;
+  }
+
+  public final class OneTimeWorkRequest extends androidx.work.WorkRequest {
+    method public static androidx.work.OneTimeWorkRequest from(Class<? extends androidx.work.ListenableWorker>);
+    method public static java.util.List<androidx.work.OneTimeWorkRequest> from(java.util.List<java.lang.Class<? extends androidx.work.ListenableWorker>>);
+  }
+
+  public static final class OneTimeWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.OneTimeWorkRequest.Builder,androidx.work.OneTimeWorkRequest> {
+    ctor public OneTimeWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>);
+    method public androidx.work.OneTimeWorkRequest.Builder setInitialDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.OneTimeWorkRequest.Builder setInitialDelay(java.time.Duration);
+    method public androidx.work.OneTimeWorkRequest.Builder setInputMerger(Class<? extends androidx.work.InputMerger>);
+  }
+
+  public interface Operation {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS> getResult();
+    method public androidx.lifecycle.LiveData<androidx.work.Operation.State> getState();
+  }
+
+  public abstract static class Operation.State {
+  }
+
+  public static final class Operation.State.FAILURE extends androidx.work.Operation.State {
+    ctor public Operation.State.FAILURE(Throwable);
+    method public Throwable getThrowable();
+  }
+
+  public static final class Operation.State.IN_PROGRESS extends androidx.work.Operation.State {
+  }
+
+  public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
+  }
+
+  public final class OverwritingInputMerger extends androidx.work.InputMerger {
+    ctor public OverwritingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data>);
+  }
+
+  public final class PeriodicWorkRequest extends androidx.work.WorkRequest {
+    field public static final long MIN_PERIODIC_FLEX_MILLIS = 300000L; // 0x493e0L
+    field public static final long MIN_PERIODIC_INTERVAL_MILLIS = 900000L; // 0xdbba0L
+  }
+
+  public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration);
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration, java.time.Duration);
+  }
+
+  public abstract class WorkContinuation {
+    ctor public WorkContinuation();
+    method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation>);
+    method public abstract androidx.work.Operation enqueue();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfos();
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosLiveData();
+    method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest>);
+  }
+
+  public final class WorkInfo {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getOutputData();
+    method public androidx.work.WorkInfo.State getState();
+    method public java.util.Set<java.lang.String> getTags();
+  }
+
+  public enum WorkInfo.State {
+    method public boolean isFinished();
+    enum_constant public static final androidx.work.WorkInfo.State BLOCKED;
+    enum_constant public static final androidx.work.WorkInfo.State CANCELLED;
+    enum_constant public static final androidx.work.WorkInfo.State ENQUEUED;
+    enum_constant public static final androidx.work.WorkInfo.State FAILED;
+    enum_constant public static final androidx.work.WorkInfo.State RUNNING;
+    enum_constant public static final androidx.work.WorkInfo.State SUCCEEDED;
+  }
+
+  public abstract class WorkManager {
+    method public final androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest>);
+    method public final androidx.work.WorkContinuation beginWith(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginWith(java.util.List<androidx.work.OneTimeWorkRequest>);
+    method public abstract androidx.work.Operation cancelAllWork();
+    method public abstract androidx.work.Operation cancelAllWorkByTag(String);
+    method public abstract androidx.work.Operation cancelUniqueWork(String);
+    method public abstract androidx.work.Operation cancelWorkById(java.util.UUID);
+    method public final androidx.work.Operation enqueue(androidx.work.WorkRequest);
+    method public abstract androidx.work.Operation enqueue(java.util.List<? extends androidx.work.WorkRequest>);
+    method public abstract androidx.work.Operation enqueueUniquePeriodicWork(String, androidx.work.ExistingPeriodicWorkPolicy, androidx.work.PeriodicWorkRequest);
+    method public androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest>);
+    method public static androidx.work.WorkManager getInstance();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long> getLastCancelAllTimeMillis();
+    method public abstract androidx.lifecycle.LiveData<java.lang.Long> getLastCancelAllTimeMillisLiveData();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo> getWorkInfoById(java.util.UUID);
+    method public abstract androidx.lifecycle.LiveData<androidx.work.WorkInfo> getWorkInfoByIdLiveData(java.util.UUID);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfosByTag(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosByTagLiveData(String);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfosForUniqueWork(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosForUniqueWorkLiveData(String);
+    method public static void initialize(android.content.Context, androidx.work.Configuration);
+    method public abstract androidx.work.Operation pruneWork();
+  }
+
+  public abstract class WorkRequest {
+    method public java.util.UUID getId();
+    field public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; // 0x7530L
+    field public static final long MAX_BACKOFF_MILLIS = 18000000L; // 0x112a880L
+    field public static final long MIN_BACKOFF_MILLIS = 10000L; // 0x2710L
+  }
+
+  public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder, W extends androidx.work.WorkRequest> {
+    method public final B addTag(String);
+    method public final W build();
+    method public final B keepResultsForAtLeast(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration);
+    method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
+    method public final B setConstraints(androidx.work.Constraints);
+    method public final B setInputData(androidx.work.Data);
+  }
+
+  public abstract class Worker extends androidx.work.ListenableWorker {
+    ctor @Keep public Worker(android.content.Context, androidx.work.WorkerParameters);
+    method @WorkerThread public abstract androidx.work.ListenableWorker.Result doWork();
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+  }
+
+  public abstract class WorkerFactory {
+    ctor public WorkerFactory();
+    method public abstract androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public final class WorkerParameters {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getInputData();
+    method @RequiresApi(28) public android.net.Network? getNetwork();
+    method public int getRunAttemptCount();
+    method public java.util.Set<java.lang.String> getTags();
+    method @RequiresApi(24) public java.util.List<java.lang.String> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public java.util.List<android.net.Uri> getTriggeredContentUris();
+  }
+
+}
+
diff --git a/work/workmanager/api/current.txt b/work/workmanager/api/current.txt
index bc7e240..a616da8 100644
--- a/work/workmanager/api/current.txt
+++ b/work/workmanager/api/current.txt
@@ -153,7 +153,7 @@
 
   public interface Operation {
     method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS> getResult();
-    method public android.arch.lifecycle.LiveData<androidx.work.Operation.State> getState();
+    method public androidx.lifecycle.LiveData<androidx.work.Operation.State> getState();
   }
 
   public abstract static class Operation.State {
@@ -192,7 +192,7 @@
     method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation>);
     method public abstract androidx.work.Operation enqueue();
     method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfos();
-    method public abstract android.arch.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosLiveData();
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosLiveData();
     method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
     method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest>);
   }
@@ -230,13 +230,13 @@
     method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest>);
     method public static androidx.work.WorkManager getInstance();
     method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long> getLastCancelAllTimeMillis();
-    method public abstract android.arch.lifecycle.LiveData<java.lang.Long> getLastCancelAllTimeMillisLiveData();
+    method public abstract androidx.lifecycle.LiveData<java.lang.Long> getLastCancelAllTimeMillisLiveData();
     method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo> getWorkInfoById(java.util.UUID);
-    method public abstract android.arch.lifecycle.LiveData<androidx.work.WorkInfo> getWorkInfoByIdLiveData(java.util.UUID);
+    method public abstract androidx.lifecycle.LiveData<androidx.work.WorkInfo> getWorkInfoByIdLiveData(java.util.UUID);
     method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfosByTag(String);
-    method public abstract android.arch.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosByTagLiveData(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosByTagLiveData(String);
     method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo>> getWorkInfosForUniqueWork(String);
-    method public abstract android.arch.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosForUniqueWorkLiveData(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo>> getWorkInfosForUniqueWorkLiveData(String);
     method public static void initialize(android.content.Context, androidx.work.Configuration);
     method public abstract androidx.work.Operation pruneWork();
   }
diff --git a/work/workmanager/api/res-2.0.0-rc01.txt b/work/workmanager/api/res-2.0.0-rc01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager/api/res-2.0.0-rc01.txt
diff --git a/work/workmanager/build.gradle b/work/workmanager/build.gradle
index f140803..4232d45 100644
--- a/work/workmanager/build.gradle
+++ b/work/workmanager/build.gradle
@@ -42,21 +42,27 @@
 }
 
 dependencies {
-    // @aar and { transitive = true } are needed as a workaround for
-    // https://github.com/gradle/gradle/issues/3170
-    api("android.arch.lifecycle:extensions:1.1.0@aar") { transitive = true }
+    // Using -PuseMaxDepVersions does not use the right version of the annotation processor
+    // Remove this workaround after b/127495641 is fixed
+    if (project.hasProperty('useMaxDepVersions')) {
+        annotationProcessor(project(":room:room-compiler"))
+        implementation(project(":room:room-runtime"))
+        androidTestImplementation(project(":room:room-testing"))
+    } else {
+        annotationProcessor(ARCH_ROOM_COMPILER)
+        implementation(ARCH_ROOM_RUNTIME)
+        androidTestImplementation(ARCH_ROOM_TESTING)
+    }
+
+    api(ARCH_LIFECYCLE_EXTENSIONS)
     api(GUAVA_LISTENABLE_FUTURE)
-    implementation("android.arch.persistence.room:runtime:1.1.1@aar") { transitive = true }
-    annotationProcessor("android.arch.persistence.room:compiler:1.1.1")
-    androidTestImplementation("android.arch.core:core-testing:1.1.0")
-    androidTestImplementation("android.arch.persistence.room:testing:1.1.1")
     androidTestImplementation(TEST_EXT_JUNIT)
     androidTestImplementation(TEST_CORE)
+    androidTestImplementation(ARCH_CORE_TESTING)
     androidTestImplementation(TEST_RUNNER)
     androidTestImplementation(ESPRESSO_CORE)
     androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has its own MockMaker
     androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has its own MockMaker
-
     testImplementation(JUNIT)
 }
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/TestLifecycleOwner.java b/work/workmanager/src/androidTest/java/androidx/work/TestLifecycleOwner.java
index 0c70d6a..336a52d 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/TestLifecycleOwner.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/TestLifecycleOwner.java
@@ -16,9 +16,9 @@
 
 package androidx.work;
 
-import android.arch.lifecycle.Lifecycle;
-import android.arch.lifecycle.LifecycleOwner;
-import android.arch.lifecycle.LifecycleRegistry;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.LifecycleRegistry;
 
 /**
  * Test Lifecycle Owner that begins in ON_START state.
diff --git a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
index 65556e8..3d853b7 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
@@ -29,16 +29,16 @@
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import android.arch.persistence.db.SupportSQLiteDatabase;
-import android.arch.persistence.db.framework.FrameworkSQLiteOpenHelperFactory;
-import android.arch.persistence.room.testing.MigrationTestHelper;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteException;
 import android.os.Build;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
+import androidx.room.testing.MigrationTestHelper;
+import androidx.sqlite.db.SupportSQLiteDatabase;
+import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/ObserveForeverTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/ObserveForeverTest.java
index 65e629e..5c7541e 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/ObserveForeverTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/ObserveForeverTest.java
@@ -14,180 +14,190 @@
  * limitations under the License.
  */
 
-package androidx.work.impl;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
+//package androidx.work.impl;
+//
+//import static org.hamcrest.CoreMatchers.is;
+//import static org.hamcrest.CoreMatchers.notNullValue;
+//import static org.hamcrest.MatcherAssert.assertThat;
+//
+//import androidx.annotation.Nullable;
+//import androidx.lifecycle.Observer;
+//import androidx.test.ext.junit.runners.AndroidJUnit4;
+//import androidx.test.filters.MediumTest;
+//import androidx.test.platform.app.InstrumentationRegistry;
+//import androidx.work.Configuration;
+//import androidx.work.ExistingWorkPolicy;
+//import androidx.work.OneTimeWorkRequest;
+//import androidx.work.WorkContinuation;
+//import androidx.work.WorkInfo;
+//import androidx.work.impl.utils.SynchronousExecutor;
+//import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor;
+//import androidx.work.worker.TestWorker;
+//
+//import org.junit.After;
+//import org.junit.Before;
+//import org.junit.Ignore;
+//import org.junit.Test;
+//import org.junit.runner.RunWith;
+//
+//import java.util.Collections;
+//import java.util.List;
+//import java.util.concurrent.CountDownLatch;
+//import java.util.concurrent.ExecutionException;
+//import java.util.concurrent.TimeUnit;
+//
+///**
+// * TODO remove after moving to Room 2.1.x.
+// * see: b/74477406 for details.
+// *
+// * This test suite is being @Ignored because observeForever() can no longer be called on a
+// * background thread after the move to 2.x.
+// */
+//@RunWith(AndroidJUnit4.class)
+//@MediumTest
+//@Ignore
+//public class ObserveForeverTest {
+//    private WorkManagerImpl mWorkManagerImpl;
+//    private final OneTimeWorkRequest mWork = new OneTimeWorkRequest.Builder(TestWorker.class)
+//            .addTag("foo")
+//            .setInitialDelay(1, TimeUnit.HOURS)
+//            .build();
+//
+//    @Before
+//    public void init() {
+//        Configuration configuration = new Configuration.Builder()
+//                .setExecutor(new SynchronousExecutor())
+//                .build();
+//        mWorkManagerImpl = new WorkManagerImpl(
+//                InstrumentationRegistry.getInstrumentation().getTargetContext(),
+//                configuration, new InstantWorkTaskExecutor());
+//        WorkManagerImpl.setDelegate(mWorkManagerImpl);
+//    }
+//
+//    @After
+//    public void tearDown() {
+//        WorkManagerImpl.setDelegate(null);
+//    }
+//
+//    @Test
+//    @Ignore
+//    public void observeForever_byTags() throws InterruptedException {
+//        LoggingObserver<List<WorkInfo>> observer = new LoggingObserver<>();
+//        observer.expectValue();
+//
+//        mWorkManagerImpl
+//                .getWorkInfosByTagLiveData("foo")
+//                .observeForever(observer);
+//        assertThat(observer.awaitNextValue(), is(Collections.<WorkInfo>emptyList()));
+//
+//        forceGc();
+//        observer.expectValue();
+//        mWorkManagerImpl.enqueue(mWork);
+//
+//        List<WorkInfo> received = observer.awaitNextValue();
+//        assertThat(received.size(), is(1));
+//        assertThat(received.get(0).getState(), is(WorkInfo.State.ENQUEUED));
+//    }
+//
+//    @Test
+//    @Ignore
+//    public void observeForever_byId() throws InterruptedException, ExecutionException {
+//        LoggingObserver<WorkInfo> observer = new LoggingObserver<>();
+//        observer.expectValue();
+//
+//        mWorkManagerImpl
+//                .getWorkInfoByIdLiveData(mWork.getId())
+//                .observeForever(observer);
+//
+//        mWorkManagerImpl.enqueue(mWork);
+//
+//        WorkInfo received = observer.awaitNextValue();
+//        assertThat(received, is(notNullValue()));
+//        assertThat(received.getState(), is(WorkInfo.State.ENQUEUED));
+//
+//        observer.expectValue();
+//        forceGc();
+//        mWorkManagerImpl.cancelAllWork().getResult().get();
+//
+//        assertThat(observer.awaitNextValue().getState(), is(WorkInfo.State.CANCELLED));
+//    }
+//
+//    @Test
+//    @Ignore
+//    public void observeForever_uniqueWork() throws InterruptedException {
+//        LoggingObserver<List<WorkInfo>> observer = new LoggingObserver<>();
+//        observer.expectValue();
+//
+//        mWorkManagerImpl
+//                .getWorkInfosForUniqueWorkLiveData("custom-id")
+//                .observeForever(observer);
+//        assertThat(observer.awaitNextValue(), is(Collections.<WorkInfo>emptyList()));
+//
+//        forceGc();
+//        observer.expectValue();
+//        mWorkManagerImpl.beginUniqueWork("custom-id",
+//                ExistingWorkPolicy.REPLACE,
+//                mWork).enqueue();
+//
+//        List<WorkInfo> received = observer.awaitNextValue();
+//        assertThat(received.size(), is(1));
+//        assertThat(received.get(0).getState(), is(WorkInfo.State.ENQUEUED));
+//    }
+//
+//    @Test
+//    @Ignore
+//    public void observeForever_workContinuation() throws InterruptedException {
+//        LoggingObserver<List<WorkInfo>> observer = new LoggingObserver<>();
+//        observer.expectValue();
+//
+//        WorkContinuation workContinuation = mWorkManagerImpl.beginWith(mWork);
+//        workContinuation.getWorkInfosLiveData().observeForever(observer);
+//
+//        assertThat(observer.awaitNextValue(), is(Collections.<WorkInfo>emptyList()));
+//
+//        forceGc();
+//
+//        observer.expectValue();
+//        workContinuation.enqueue();
+//
+//        List<WorkInfo> received = observer.awaitNextValue();
+//        assertThat(received.size(), is(1));
+//        assertThat(received.get(0).getState(), is(WorkInfo.State.ENQUEUED));
+//    }
+//
+//    private void forceGc() {
+//        Runtime.getRuntime().gc();
+//        Runtime.getRuntime().runFinalization();
+//        Runtime.getRuntime().gc();
+//        Runtime.getRuntime().runFinalization();
+//    }
+//
+//    static class LoggingObserver<T> implements Observer<T> {
+//        CountDownLatch mLatch;
+//        private T mValue;
+//
+//        void expectValue() {
+//            if (mLatch != null) {
+//                throw new IllegalStateException("You've not consumed previous value yet");
+//            }
+//            mLatch = new CountDownLatch(1);
+//        }
+//
+//        T awaitNextValue() throws InterruptedException {
+//            assertThat(mLatch.await(10, TimeUnit.SECONDS), is(true));
+//            mLatch = null;
+//            return mValue;
+//        }
+//
+//        @Override
+//        public void onChanged(@Nullable T t) {
+//            if (mLatch == null) {
+//                throw new IllegalStateException("Not expecting a value yet");
+//            }
+//            mValue = t;
+//            mLatch.countDown();
+//        }
+//    }
+//}
 
-import android.arch.lifecycle.Observer;
-import android.support.annotation.Nullable;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.MediumTest;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.work.Configuration;
-import androidx.work.ExistingWorkPolicy;
-import androidx.work.OneTimeWorkRequest;
-import androidx.work.WorkContinuation;
-import androidx.work.WorkInfo;
-import androidx.work.impl.utils.SynchronousExecutor;
-import androidx.work.impl.utils.taskexecutor.InstantWorkTaskExecutor;
-import androidx.work.worker.TestWorker;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-
-/**
- * TODO remove after moving to AndroidX.
- * see: b/74477406 for details.
- */
-@RunWith(AndroidJUnit4.class)
-@MediumTest
-public class ObserveForeverTest {
-    private WorkManagerImpl mWorkManagerImpl;
-    private final OneTimeWorkRequest mWork = new OneTimeWorkRequest.Builder(TestWorker.class)
-            .addTag("foo")
-            .setInitialDelay(1, TimeUnit.HOURS)
-            .build();
-
-    @Before
-    public void init() {
-        Configuration configuration = new Configuration.Builder()
-                .setExecutor(new SynchronousExecutor())
-                .build();
-        mWorkManagerImpl = new WorkManagerImpl(
-                InstrumentationRegistry.getInstrumentation().getTargetContext(),
-                configuration, new InstantWorkTaskExecutor());
-        WorkManagerImpl.setDelegate(mWorkManagerImpl);
-    }
-
-    @After
-    public void tearDown() {
-        WorkManagerImpl.setDelegate(null);
-    }
-
-    @Test
-    public void observeForever_byTags() throws InterruptedException {
-        LoggingObserver<List<WorkInfo>> observer = new LoggingObserver<>();
-        observer.expectValue();
-
-        mWorkManagerImpl
-                .getWorkInfosByTagLiveData("foo")
-                .observeForever(observer);
-        assertThat(observer.awaitNextValue(), is(Collections.<WorkInfo>emptyList()));
-
-        forceGc();
-        observer.expectValue();
-        mWorkManagerImpl.enqueue(mWork);
-
-        List<WorkInfo> received = observer.awaitNextValue();
-        assertThat(received.size(), is(1));
-        assertThat(received.get(0).getState(), is(WorkInfo.State.ENQUEUED));
-    }
-
-    @Test
-    public void observeForever_byId() throws InterruptedException, ExecutionException {
-        LoggingObserver<WorkInfo> observer = new LoggingObserver<>();
-        observer.expectValue();
-
-        mWorkManagerImpl
-                .getWorkInfoByIdLiveData(mWork.getId())
-                .observeForever(observer);
-
-        mWorkManagerImpl.enqueue(mWork);
-
-        WorkInfo received = observer.awaitNextValue();
-        assertThat(received, is(notNullValue()));
-        assertThat(received.getState(), is(WorkInfo.State.ENQUEUED));
-
-        observer.expectValue();
-        forceGc();
-        mWorkManagerImpl.cancelAllWork().getResult().get();
-
-        assertThat(observer.awaitNextValue().getState(), is(WorkInfo.State.CANCELLED));
-    }
-
-    @Test
-    public void observeForever_uniqueWork() throws InterruptedException {
-        LoggingObserver<List<WorkInfo>> observer = new LoggingObserver<>();
-        observer.expectValue();
-
-        mWorkManagerImpl
-                .getWorkInfosForUniqueWorkLiveData("custom-id")
-                .observeForever(observer);
-        assertThat(observer.awaitNextValue(), is(Collections.<WorkInfo>emptyList()));
-
-        forceGc();
-        observer.expectValue();
-        mWorkManagerImpl.beginUniqueWork("custom-id",
-                ExistingWorkPolicy.REPLACE,
-                mWork).enqueue();
-
-        List<WorkInfo> received = observer.awaitNextValue();
-        assertThat(received.size(), is(1));
-        assertThat(received.get(0).getState(), is(WorkInfo.State.ENQUEUED));
-    }
-
-    @Test
-    public void observeForever_workContinuation() throws InterruptedException {
-        LoggingObserver<List<WorkInfo>> observer = new LoggingObserver<>();
-        observer.expectValue();
-
-        WorkContinuation workContinuation = mWorkManagerImpl.beginWith(mWork);
-        workContinuation.getWorkInfosLiveData().observeForever(observer);
-
-        assertThat(observer.awaitNextValue(), is(Collections.<WorkInfo>emptyList()));
-
-        forceGc();
-
-        observer.expectValue();
-        workContinuation.enqueue();
-
-        List<WorkInfo> received = observer.awaitNextValue();
-        assertThat(received.size(), is(1));
-        assertThat(received.get(0).getState(), is(WorkInfo.State.ENQUEUED));
-    }
-
-    private void forceGc() {
-        Runtime.getRuntime().gc();
-        Runtime.getRuntime().runFinalization();
-        Runtime.getRuntime().gc();
-        Runtime.getRuntime().runFinalization();
-    }
-
-    static class LoggingObserver<T> implements Observer<T> {
-        CountDownLatch mLatch;
-        private T mValue;
-
-        void expectValue() {
-            if (mLatch != null) {
-                throw new IllegalStateException("You've not consumed previous value yet");
-            }
-            mLatch = new CountDownLatch(1);
-        }
-
-        T awaitNextValue() throws InterruptedException {
-            assertThat(mLatch.await(10, TimeUnit.SECONDS), is(true));
-            mLatch = null;
-            return mValue;
-        }
-
-        @Override
-        public void onChanged(@Nullable T t) {
-            if (mLatch == null) {
-                throw new IllegalStateException("Not expecting a value yet");
-            }
-            mValue = t;
-            mLatch.countDown();
-        }
-    }
-}
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkContinuationImplTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkContinuationImplTest.java
index 8cda6bc..3cdf2d8 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkContinuationImplTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkContinuationImplTest.java
@@ -30,11 +30,12 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.arch.core.executor.ArchTaskExecutor;
-import android.arch.lifecycle.Lifecycle;
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
+import androidx.arch.core.executor.ArchTaskExecutor;
+import androidx.arch.core.executor.TaskExecutor;
+import androidx.lifecycle.Lifecycle;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
@@ -80,7 +81,7 @@
 
     @Before
     public void setUp() {
-        ArchTaskExecutor.getInstance().setDelegate(new android.arch.core.executor.TaskExecutor() {
+        ArchTaskExecutor.getInstance().setDelegate(new TaskExecutor() {
             @Override
             public void executeOnDiskIO(@NonNull Runnable runnable) {
                 runnable.run();
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java
index b355ccd..3f56c07 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplLargeExecutorTest.java
@@ -25,13 +25,13 @@
 
 import static java.util.concurrent.TimeUnit.SECONDS;
 
-import android.arch.core.executor.ArchTaskExecutor;
-import android.arch.core.executor.TaskExecutor;
-import android.arch.lifecycle.Observer;
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.arch.core.executor.ArchTaskExecutor;
+import androidx.arch.core.executor.TaskExecutor;
+import androidx.lifecycle.Observer;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
index 2fa41ad..47615a0 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
@@ -49,12 +49,6 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
-import android.arch.core.executor.ArchTaskExecutor;
-import android.arch.core.executor.TaskExecutor;
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.Observer;
-import android.arch.persistence.db.SupportSQLiteDatabase;
-import android.arch.persistence.db.SupportSQLiteOpenHelper;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.ContextWrapper;
@@ -62,9 +56,15 @@
 import android.net.Uri;
 import android.os.Build;
 import android.provider.MediaStore;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.arch.core.executor.ArchTaskExecutor;
+import androidx.arch.core.executor.TaskExecutor;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.Observer;
+import androidx.sqlite.db.SupportSQLiteDatabase;
+import androidx.sqlite.db.SupportSQLiteOpenHelper;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
index 3a29aed..a8d7147 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java
@@ -35,7 +35,6 @@
 import static org.mockito.Mockito.atLeast;
 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;
 
@@ -110,7 +109,7 @@
                 .setMinimumLoggingLevel(Log.VERBOSE)
                 .build();
         mWorkTaskExecutor = new InstantWorkTaskExecutor();
-        mWorkSpecDao = spy(mDatabase.workSpecDao());
+        mWorkSpecDao = mDatabase.workSpecDao();
         mDependencyDao = mDatabase.dependencyDao();
         mMockScheduler = mock(Scheduler.class);
     }
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
index 89b94e0..a7bedd4 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcherTest.java
@@ -32,10 +32,10 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
@@ -650,6 +650,12 @@
         assertThat(numExecutionCompleted, is(2));
     }
 
+    @Test
+    public void tearDownTest() {
+        mDispatcher.onDestroy();
+        assertThat(mDispatcher.getWorkTimer().getExecutorService().isShutdown(), is(true));
+    }
+
     // Marking it public for mocking
     public static class CommandInterceptingSystemDispatcher extends SystemAlarmDispatcher {
         private final List<Intent> mCommands;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java
index 0b211b4..f67ea77 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java
@@ -22,8 +22,7 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
-import android.support.annotation.NonNull;
-
+import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java
index da750bf..1f27fac 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java
@@ -28,15 +28,15 @@
 import static org.mockito.Mockito.when;
 
 import android.app.job.JobParameters;
-import android.arch.core.executor.ArchTaskExecutor;
-import android.arch.core.executor.TaskExecutor;
 import android.content.Context;
 import android.net.Network;
 import android.net.Uri;
 import android.os.Build;
 import android.os.PersistableBundle;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
+import androidx.arch.core.executor.ArchTaskExecutor;
+import androidx.arch.core.executor.TaskExecutor;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.java
index 391c554..711f1e67 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/WorkConstraintsTrackerTest.java
@@ -26,8 +26,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.support.annotation.NonNull;
-
+import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 import androidx.work.impl.constraints.controllers.ConstraintController;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java
index 68947aa..5e48bef 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/controllers/ConstraintControllerTest.java
@@ -24,8 +24,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyZeroInteractions;
 
-import android.support.annotation.NonNull;
-
+import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java
index 5861668..5203451 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/constraints/trackers/BatteryChargingTrackerTest.java
@@ -34,8 +34,8 @@
 import android.content.IntentFilter;
 import android.os.BatteryManager;
 import android.os.Build;
-import android.support.annotation.RequiresApi;
 
+import androidx.annotation.RequiresApi;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SdkSuppress;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/utils/LiveDataUtilsTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/utils/LiveDataUtilsTest.java
index 7d533daf..49deb61 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/utils/LiveDataUtilsTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/utils/LiveDataUtilsTest.java
@@ -20,13 +20,12 @@
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import android.arch.core.executor.testing.InstantTaskExecutorRule;
-import android.arch.core.util.Function;
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.MutableLiveData;
-import android.arch.lifecycle.Observer;
-import android.support.annotation.Nullable;
-
+import androidx.annotation.Nullable;
+import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
+import androidx.arch.core.util.Function;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.Observer;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 import androidx.work.TestLifecycleOwner;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/utils/RepeatRule.java b/work/workmanager/src/androidTest/java/androidx/work/impl/utils/RepeatRule.java
index 300bedc..ea74196 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/utils/RepeatRule.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/utils/RepeatRule.java
@@ -16,7 +16,7 @@
 
 package androidx.work.impl.utils;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/utils/taskexecutor/InstantWorkTaskExecutor.java b/work/workmanager/src/androidTest/java/androidx/work/impl/utils/taskexecutor/InstantWorkTaskExecutor.java
index 9f0b3e6..84b4abc 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/utils/taskexecutor/InstantWorkTaskExecutor.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/utils/taskexecutor/InstantWorkTaskExecutor.java
@@ -16,8 +16,7 @@
 
 package androidx.work.impl.utils.taskexecutor;
 
-import android.support.annotation.NonNull;
-
+import androidx.annotation.NonNull;
 import androidx.work.impl.utils.SynchronousExecutor;
 
 import java.util.concurrent.Executor;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
index e6e48dd..3224b6b 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
@@ -26,8 +26,8 @@
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SdkSuppress;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/ChainedArgumentWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/ChainedArgumentWorker.java
index 225e018..3d3d84b 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/ChainedArgumentWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/ChainedArgumentWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Data;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/EchoingWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/EchoingWorker.java
index ba6c722..b175651 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/EchoingWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/EchoingWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/ExceptionWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/ExceptionWorker.java
index af691c3..72327f3 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/ExceptionWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/ExceptionWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/FailureWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/FailureWorker.java
index b89c3d5..393537b 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/FailureWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/FailureWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/InfiniteTestWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/InfiniteTestWorker.java
index 22b5609..d03b900 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/InfiniteTestWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/InfiniteTestWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
index 4c7afff..cca8f3d 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/InterruptionAwareWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/LatchWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/LatchWorker.java
index d5ab0a4..f52cde1 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/LatchWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/LatchWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/RandomSleepTestWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/RandomSleepTestWorker.java
index 67e7cfc..fee507f 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/RandomSleepTestWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/RandomSleepTestWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/RetryWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/RetryWorker.java
index 674f59a..e2c95e2 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/RetryWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/RetryWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/ReturnNullResultWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/ReturnNullResultWorker.java
index 7502e6c..809bebf 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/ReturnNullResultWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/ReturnNullResultWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/SleepTestWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/SleepTestWorker.java
index 2e8a9a8..3522e88 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/SleepTestWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/SleepTestWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/StopAwareWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/StopAwareWorker.java
index 4edd9ca..941fb0d 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/StopAwareWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/StopAwareWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/TestWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/TestWorker.java
index 60a6e09..084fa74 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/TestWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/TestWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/androidTest/java/androidx/work/worker/UsedWorker.java b/work/workmanager/src/androidTest/java/androidx/work/worker/UsedWorker.java
index 8de2bd0..9f2bd0f 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/worker/UsedWorker.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/worker/UsedWorker.java
@@ -17,8 +17,8 @@
 package androidx.work.worker;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/main/java/androidx/work/ArrayCreatingInputMerger.java b/work/workmanager/src/main/java/androidx/work/ArrayCreatingInputMerger.java
index 4d6b3b9..caf4f1d 100644
--- a/work/workmanager/src/main/java/androidx/work/ArrayCreatingInputMerger.java
+++ b/work/workmanager/src/main/java/androidx/work/ArrayCreatingInputMerger.java
@@ -16,7 +16,7 @@
 
 package androidx.work;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.lang.reflect.Array;
 import java.util.HashMap;
diff --git a/work/workmanager/src/main/java/androidx/work/Configuration.java b/work/workmanager/src/main/java/androidx/work/Configuration.java
index 6d54d4b..625e860 100644
--- a/work/workmanager/src/main/java/androidx/work/Configuration.java
+++ b/work/workmanager/src/main/java/androidx/work/Configuration.java
@@ -20,11 +20,11 @@
 
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 import android.util.Log;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.impl.Scheduler;
 import androidx.work.impl.utils.IdGenerator;
 
diff --git a/work/workmanager/src/main/java/androidx/work/Constraints.java b/work/workmanager/src/main/java/androidx/work/Constraints.java
index f471dfc..ad6d5d0 100644
--- a/work/workmanager/src/main/java/androidx/work/Constraints.java
+++ b/work/workmanager/src/main/java/androidx/work/Constraints.java
@@ -18,13 +18,14 @@
 
 import static androidx.work.NetworkType.NOT_REQUIRED;
 
-import android.arch.persistence.room.ColumnInfo;
 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 androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.room.ColumnInfo;
 
 import java.time.Duration;
 import java.util.concurrent.TimeUnit;
diff --git a/work/workmanager/src/main/java/androidx/work/ContentUriTriggers.java b/work/workmanager/src/main/java/androidx/work/ContentUriTriggers.java
index 8bfcf5d..a903dd0 100644
--- a/work/workmanager/src/main/java/androidx/work/ContentUriTriggers.java
+++ b/work/workmanager/src/main/java/androidx/work/ContentUriTriggers.java
@@ -17,8 +17,9 @@
 package androidx.work;
 
 import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 import java.util.HashSet;
 import java.util.Set;
diff --git a/work/workmanager/src/main/java/androidx/work/Data.java b/work/workmanager/src/main/java/androidx/work/Data.java
index c3dfd88..de75009 100644
--- a/work/workmanager/src/main/java/androidx/work/Data.java
+++ b/work/workmanager/src/main/java/androidx/work/Data.java
@@ -16,13 +16,14 @@
 
 package androidx.work;
 
-import android.arch.persistence.room.TypeConverter;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.room.TypeConverter;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
diff --git a/work/workmanager/src/main/java/androidx/work/InputMerger.java b/work/workmanager/src/main/java/androidx/work/InputMerger.java
index 51e6e5f..993ea10 100644
--- a/work/workmanager/src/main/java/androidx/work/InputMerger.java
+++ b/work/workmanager/src/main/java/androidx/work/InputMerger.java
@@ -16,8 +16,8 @@
 
 package androidx.work;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 import java.util.List;
 
diff --git a/work/workmanager/src/main/java/androidx/work/ListenableWorker.java b/work/workmanager/src/main/java/androidx/work/ListenableWorker.java
index a419cac..7726f1a 100644
--- a/work/workmanager/src/main/java/androidx/work/ListenableWorker.java
+++ b/work/workmanager/src/main/java/androidx/work/ListenableWorker.java
@@ -20,13 +20,13 @@
 import android.content.Context;
 import android.net.Network;
 import android.net.Uri;
-import android.support.annotation.Keep;
-import android.support.annotation.MainThread;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.Keep;
+import androidx.annotation.MainThread;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
 import androidx.work.impl.utils.taskexecutor.TaskExecutor;
 
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/work/workmanager/src/main/java/androidx/work/Logger.java b/work/workmanager/src/main/java/androidx/work/Logger.java
index b7dd644..a9fe640 100644
--- a/work/workmanager/src/main/java/androidx/work/Logger.java
+++ b/work/workmanager/src/main/java/androidx/work/Logger.java
@@ -16,10 +16,11 @@
 
 package androidx.work;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
 /**
  * The class that handles logging requests for {@link WorkManager}.  Currently, this class is not
  * accessible and has only one default implementation, {@link LogcatLogger}, that writes to logcat
diff --git a/work/workmanager/src/main/java/androidx/work/OneTimeWorkRequest.java b/work/workmanager/src/main/java/androidx/work/OneTimeWorkRequest.java
index 500b7ea..90c5eed 100644
--- a/work/workmanager/src/main/java/androidx/work/OneTimeWorkRequest.java
+++ b/work/workmanager/src/main/java/androidx/work/OneTimeWorkRequest.java
@@ -17,8 +17,9 @@
 package androidx.work;
 
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 
 import java.time.Duration;
 import java.util.ArrayList;
diff --git a/work/workmanager/src/main/java/androidx/work/Operation.java b/work/workmanager/src/main/java/androidx/work/Operation.java
index e37455a..05c16ec 100644
--- a/work/workmanager/src/main/java/androidx/work/Operation.java
+++ b/work/workmanager/src/main/java/androidx/work/Operation.java
@@ -17,11 +17,12 @@
 package androidx.work;
 
 import android.annotation.SuppressLint;
-import android.arch.lifecycle.LifecycleOwner;
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.Observer;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.Observer;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
diff --git a/work/workmanager/src/main/java/androidx/work/OverwritingInputMerger.java b/work/workmanager/src/main/java/androidx/work/OverwritingInputMerger.java
index ed945238..a87b51c 100644
--- a/work/workmanager/src/main/java/androidx/work/OverwritingInputMerger.java
+++ b/work/workmanager/src/main/java/androidx/work/OverwritingInputMerger.java
@@ -16,7 +16,7 @@
 
 package androidx.work;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.HashMap;
 import java.util.List;
diff --git a/work/workmanager/src/main/java/androidx/work/PeriodicWorkRequest.java b/work/workmanager/src/main/java/androidx/work/PeriodicWorkRequest.java
index d599574..374c375 100644
--- a/work/workmanager/src/main/java/androidx/work/PeriodicWorkRequest.java
+++ b/work/workmanager/src/main/java/androidx/work/PeriodicWorkRequest.java
@@ -16,8 +16,9 @@
 package androidx.work;
 
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 
 import java.time.Duration;
 import java.util.concurrent.TimeUnit;
diff --git a/work/workmanager/src/main/java/androidx/work/WorkContinuation.java b/work/workmanager/src/main/java/androidx/work/WorkContinuation.java
index d36a43a..d625c93 100644
--- a/work/workmanager/src/main/java/androidx/work/WorkContinuation.java
+++ b/work/workmanager/src/main/java/androidx/work/WorkContinuation.java
@@ -15,11 +15,11 @@
  */
 package androidx.work;
 
-import android.arch.lifecycle.LifecycleOwner;
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.Observer;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.Observer;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
@@ -90,7 +90,7 @@
      * Returns a {@link LiveData} list of {@link WorkInfo}s that provide information about the
      * status of each {@link OneTimeWorkRequest} in this {@link WorkContinuation}, as well as their
      * prerequisites.  If the state or outputs of any of the work changes, any attached
-     * {@link android.arch.lifecycle.Observer}s will trigger.
+     * {@link Observer}s will trigger.
      *
      * @return A {@link LiveData} containing a list of {@link WorkInfo}s; you must use
      *         {@link LiveData#observe(LifecycleOwner, Observer)} to receive updates
diff --git a/work/workmanager/src/main/java/androidx/work/WorkInfo.java b/work/workmanager/src/main/java/androidx/work/WorkInfo.java
index 047c2951..c60fc570 100644
--- a/work/workmanager/src/main/java/androidx/work/WorkInfo.java
+++ b/work/workmanager/src/main/java/androidx/work/WorkInfo.java
@@ -16,8 +16,8 @@
 
 package androidx.work;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 import java.util.HashSet;
 import java.util.List;
diff --git a/work/workmanager/src/main/java/androidx/work/WorkManager.java b/work/workmanager/src/main/java/androidx/work/WorkManager.java
index a5a85bf7..e0cedd1 100644
--- a/work/workmanager/src/main/java/androidx/work/WorkManager.java
+++ b/work/workmanager/src/main/java/androidx/work/WorkManager.java
@@ -16,11 +16,11 @@
 
 package androidx.work;
 
-import android.arch.lifecycle.LiveData;
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.lifecycle.LiveData;
 import androidx.work.impl.WorkManagerImpl;
 
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/work/workmanager/src/main/java/androidx/work/WorkRequest.java b/work/workmanager/src/main/java/androidx/work/WorkRequest.java
index 42cb68b..96f9f85 100644
--- a/work/workmanager/src/main/java/androidx/work/WorkRequest.java
+++ b/work/workmanager/src/main/java/androidx/work/WorkRequest.java
@@ -15,11 +15,10 @@
  */
 package androidx.work;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.impl.model.WorkSpec;
 
 import java.time.Duration;
diff --git a/work/workmanager/src/main/java/androidx/work/Worker.java b/work/workmanager/src/main/java/androidx/work/Worker.java
index 7bba996..e414b35 100644
--- a/work/workmanager/src/main/java/androidx/work/Worker.java
+++ b/work/workmanager/src/main/java/androidx/work/Worker.java
@@ -18,10 +18,10 @@
 
 import android.annotation.SuppressLint;
 import android.content.Context;
-import android.support.annotation.Keep;
-import android.support.annotation.NonNull;
-import android.support.annotation.WorkerThread;
 
+import androidx.annotation.Keep;
+import androidx.annotation.NonNull;
+import androidx.annotation.WorkerThread;
 import androidx.work.impl.utils.futures.SettableFuture;
 
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/work/workmanager/src/main/java/androidx/work/WorkerFactory.java b/work/workmanager/src/main/java/androidx/work/WorkerFactory.java
index 9f067d5..dfc45c7 100644
--- a/work/workmanager/src/main/java/androidx/work/WorkerFactory.java
+++ b/work/workmanager/src/main/java/androidx/work/WorkerFactory.java
@@ -17,9 +17,10 @@
 package androidx.work;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
 
 import java.lang.reflect.Constructor;
 
diff --git a/work/workmanager/src/main/java/androidx/work/WorkerParameters.java b/work/workmanager/src/main/java/androidx/work/WorkerParameters.java
index e40ad48..c5256d8 100644
--- a/work/workmanager/src/main/java/androidx/work/WorkerParameters.java
+++ b/work/workmanager/src/main/java/androidx/work/WorkerParameters.java
@@ -18,11 +18,11 @@
 
 import android.net.Network;
 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 androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
 import androidx.work.impl.utils.taskexecutor.TaskExecutor;
 
 import java.util.Collection;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/ExecutionListener.java b/work/workmanager/src/main/java/androidx/work/impl/ExecutionListener.java
index 8474047..e37d803 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/ExecutionListener.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/ExecutionListener.java
@@ -16,9 +16,8 @@
 
 package androidx.work.impl;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Worker;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/OperationImpl.java b/work/workmanager/src/main/java/androidx/work/impl/OperationImpl.java
index 0f150d6..aff0c38 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/OperationImpl.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/OperationImpl.java
@@ -16,11 +16,10 @@
 
 package androidx.work.impl;
 
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.MutableLiveData;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
 import androidx.work.Operation;
 import androidx.work.impl.utils.futures.SettableFuture;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/Processor.java b/work/workmanager/src/main/java/androidx/work/impl/Processor.java
index c241bd4..5558b22 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/Processor.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/Processor.java
@@ -16,9 +16,9 @@
 package androidx.work.impl;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Configuration;
 import androidx.work.Logger;
 import androidx.work.WorkerParameters;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/Scheduler.java b/work/workmanager/src/main/java/androidx/work/impl/Scheduler.java
index 436d573..03274f0 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/Scheduler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/Scheduler.java
@@ -15,9 +15,8 @@
  */
 package androidx.work.impl;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.impl.model.WorkSpec;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java b/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java
index 22a4be5..2de246d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/Schedulers.java
@@ -21,9 +21,9 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Configuration;
 import androidx.work.Logger;
 import androidx.work.impl.background.systemalarm.SystemAlarmScheduler;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkContinuationImpl.java b/work/workmanager/src/main/java/androidx/work/impl/WorkContinuationImpl.java
index 92ba9eb..103be77 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkContinuationImpl.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkContinuationImpl.java
@@ -16,12 +16,12 @@
 
 package androidx.work.impl;
 
-import android.arch.lifecycle.LiveData;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
 import android.text.TextUtils;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.lifecycle.LiveData;
 import androidx.work.ArrayCreatingInputMerger;
 import androidx.work.ExistingWorkPolicy;
 import androidx.work.Logger;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java
index 429e91e..86983c6 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabase.java
@@ -24,15 +24,15 @@
 import static androidx.work.impl.model.WorkTypeConverters.StateIds.ENQUEUED;
 import static androidx.work.impl.model.WorkTypeConverters.StateIds.RUNNING;
 
-import android.arch.persistence.db.SupportSQLiteDatabase;
-import android.arch.persistence.room.Database;
-import android.arch.persistence.room.Room;
-import android.arch.persistence.room.RoomDatabase;
-import android.arch.persistence.room.TypeConverters;
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.room.Database;
+import androidx.room.Room;
+import androidx.room.RoomDatabase;
+import androidx.room.TypeConverters;
+import androidx.sqlite.db.SupportSQLiteDatabase;
 import androidx.work.Data;
 import androidx.work.impl.model.Dependency;
 import androidx.work.impl.model.DependencyDao;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
index 8b41ccc..b0a055c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
@@ -16,13 +16,13 @@
 
 package androidx.work.impl;
 
-import android.arch.persistence.db.SupportSQLiteDatabase;
-import android.arch.persistence.room.migration.Migration;
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.room.migration.Migration;
+import androidx.sqlite.db.SupportSQLiteDatabase;
 import androidx.work.impl.model.WorkSpec;
 import androidx.work.impl.model.WorkTypeConverters;
 import androidx.work.impl.utils.Preferences;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkManagerImpl.java b/work/workmanager/src/main/java/androidx/work/impl/WorkManagerImpl.java
index 7e12ab4..3b8768b 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkManagerImpl.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkManagerImpl.java
@@ -16,15 +16,15 @@
 
 package androidx.work.impl;
 
-import android.arch.core.util.Function;
-import android.arch.lifecycle.LiveData;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.arch.core.util.Function;
+import androidx.lifecycle.LiveData;
 import androidx.work.Configuration;
 import androidx.work.ExistingPeriodicWorkPolicy;
 import androidx.work.ExistingWorkPolicy;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkManagerInitializer.java b/work/workmanager/src/main/java/androidx/work/impl/WorkManagerInitializer.java
index 4d88a57..7caf8063 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkManagerInitializer.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkManagerInitializer.java
@@ -20,10 +20,10 @@
 import android.content.ContentValues;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
 import androidx.work.Configuration;
 import androidx.work.WorkManager;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkManagerLiveDataTracker.java b/work/workmanager/src/main/java/androidx/work/impl/WorkManagerLiveDataTracker.java
index 9ea44c3..2357429 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkManagerLiveDataTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkManagerLiveDataTracker.java
@@ -16,11 +16,11 @@
 
 package androidx.work.impl;
 
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.MediatorLiveData;
-import android.arch.lifecycle.Observer;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MediatorLiveData;
+import androidx.lifecycle.Observer;
 
 import java.util.Collections;
 import java.util.IdentityHashMap;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java b/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java
index 11db087..7a2a18e 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java
@@ -27,12 +27,12 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
-import android.support.annotation.WorkerThread;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.annotation.WorkerThread;
 import androidx.work.Configuration;
 import androidx.work.Data;
 import androidx.work.InputMerger;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java b/work/workmanager/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
index 88f3fbe..f68cc0b 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/greedy/GreedyScheduler.java
@@ -18,11 +18,11 @@
 
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.Logger;
 import androidx.work.WorkInfo;
 import androidx.work.impl.ExecutionListener;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/background/package-info.java
index 55774a1..70dbcaa 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.background;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java
index c80fe5c..3e480cd 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/Alarms.java
@@ -23,9 +23,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 import androidx.work.impl.WorkDatabase;
 import androidx.work.impl.WorkManagerImpl;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java
index 3f40ac5d..1ae162d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/CommandHandler.java
@@ -19,11 +19,11 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.WorkerThread;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.WorkerThread;
 import androidx.work.Logger;
 import androidx.work.impl.ExecutionListener;
 import androidx.work.impl.WorkDatabase;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java
index 869209e..ef12d58 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/ConstraintsCommandHandler.java
@@ -18,10 +18,10 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.WorkerThread;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.WorkerThread;
 import androidx.work.Logger;
 import androidx.work.impl.constraints.WorkConstraintsTracker;
 import androidx.work.impl.model.WorkSpec;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
index fc5e814..87f4c9c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
@@ -19,11 +19,11 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.PowerManager;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.WorkerThread;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.WorkerThread;
 import androidx.work.Logger;
 import androidx.work.impl.ExecutionListener;
 import androidx.work.impl.constraints.WorkConstraintsCallback;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
index f4724e6..6772d3a 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
@@ -21,13 +21,13 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.PowerManager;
-import android.support.annotation.MainThread;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
 
+import androidx.annotation.MainThread;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.Logger;
 import androidx.work.impl.ExecutionListener;
 import androidx.work.impl.Processor;
@@ -93,6 +93,7 @@
 
     void onDestroy() {
         mProcessor.removeExecutionListener(this);
+        mWorkTimer.onDestroy();
         mCompletedListener = null;
     }
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmScheduler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmScheduler.java
index c3b995b..ef37ab0 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmScheduler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmScheduler.java
@@ -18,9 +18,9 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 import androidx.work.impl.Scheduler;
 import androidx.work.impl.model.WorkSpec;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmService.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmService.java
index 2d10e3f..cb5f4c3 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmService.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmService.java
@@ -17,11 +17,11 @@
 package androidx.work.impl.background.systemalarm;
 
 import android.app.Service;
-import android.arch.lifecycle.LifecycleService;
 import android.content.Intent;
-import android.support.annotation.MainThread;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.MainThread;
+import androidx.annotation.RestrictTo;
+import androidx.lifecycle.LifecycleService;
 import androidx.work.Logger;
 import androidx.work.impl.utils.WakeLocks;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/WorkTimer.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/WorkTimer.java
index 6a1d8ae..3496ee5 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/WorkTimer.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/WorkTimer.java
@@ -16,10 +16,9 @@
 
 package androidx.work.impl.background.systemalarm;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.Logger;
 import androidx.work.WorkRequest;
 
@@ -94,6 +93,12 @@
         }
     }
 
+    void onDestroy() {
+        // Calling shutdown() waits for pending scheduled WorkTimerRunnable's which is not
+        // something we care about. Hence call shutdownNow().
+        mExecutorService.shutdownNow();
+    }
+
     @VisibleForTesting
     synchronized Map<String, WorkTimerRunnable> getTimerMap() {
         return mTimerMap;
@@ -104,6 +109,11 @@
         return mListeners;
     }
 
+    @VisibleForTesting
+    ScheduledExecutorService getExecutorService() {
+        return mExecutorService;
+    }
+
     /**
      * The actual runnable scheduled on the scheduled executor.
      */
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/package-info.java
index 138a6f3..c2c0369 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.background.systemalarm;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java
index 901300a..d662d9c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java
@@ -16,18 +16,18 @@
 
 package androidx.work.impl.background.systemjob;
 
-import static android.support.annotation.VisibleForTesting.PACKAGE_PRIVATE;
+import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE;
 
 import android.app.job.JobInfo;
 import android.content.ComponentName;
 import android.content.Context;
 import android.os.Build;
 import android.os.PersistableBundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.BackoffPolicy;
 import androidx.work.Constraints;
 import androidx.work.ContentUriTriggers;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
index b5b3e40..665e3c1 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
@@ -20,11 +20,11 @@
 import android.content.Context;
 import android.os.Build;
 import android.os.PersistableBundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.Logger;
 import androidx.work.WorkInfo;
 import androidx.work.impl.Scheduler;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
index 93915a72..1330d1d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
@@ -21,11 +21,11 @@
 import android.app.job.JobService;
 import android.os.Build;
 import android.os.PersistableBundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
 import android.text.TextUtils;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 import androidx.work.WorkerParameters;
 import androidx.work.impl.ExecutionListener;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/package-info.java
index 23972bc..d0fd0c1 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.background.systemjob;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/ConstraintListener.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/ConstraintListener.java
index 8fbc40a..c4616a2 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/ConstraintListener.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/ConstraintListener.java
@@ -15,7 +15,7 @@
  */
 package androidx.work.impl.constraints;
 
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
 
 /**
  * The listener for constraint changes.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.java
index 31a7c4b..89f10b6 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsCallback.java
@@ -15,8 +15,7 @@
  */
 package androidx.work.impl.constraints;
 
-import android.support.annotation.NonNull;
-
+import androidx.annotation.NonNull;
 import androidx.work.impl.model.WorkSpec;
 
 import java.util.List;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.java
index 6ec9f53..8e6dfa6 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.java
@@ -16,10 +16,10 @@
 package androidx.work.impl.constraints;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.Constraints;
 import androidx.work.Logger;
 import androidx.work.impl.constraints.controllers.BatteryChargingController;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryChargingController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryChargingController.java
index 9e73d20..ce8ebf5 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryChargingController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryChargingController.java
@@ -16,8 +16,8 @@
 package androidx.work.impl.constraints.controllers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.impl.constraints.trackers.Trackers;
 import androidx.work.impl.model.WorkSpec;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryNotLowController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryNotLowController.java
index 40bdd20..07e5149 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryNotLowController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/BatteryNotLowController.java
@@ -16,8 +16,8 @@
 package androidx.work.impl.constraints.controllers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.impl.constraints.trackers.Trackers;
 import androidx.work.impl.model.WorkSpec;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.java
index 0d5782b..72b4ae5 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/ConstraintController.java
@@ -15,9 +15,8 @@
  */
 package androidx.work.impl.constraints.controllers;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.work.impl.constraints.ConstraintListener;
 import androidx.work.impl.constraints.trackers.ConstraintTracker;
 import androidx.work.impl.model.WorkSpec;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkConnectedController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkConnectedController.java
index ff7a0a9..9514d44 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkConnectedController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkConnectedController.java
@@ -20,8 +20,8 @@
 
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.impl.constraints.NetworkState;
 import androidx.work.impl.constraints.trackers.Trackers;
 import androidx.work.impl.model.WorkSpec;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkMeteredController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkMeteredController.java
index 12ea923..2c323a0 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkMeteredController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkMeteredController.java
@@ -20,8 +20,8 @@
 
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Logger;
 import androidx.work.impl.constraints.NetworkState;
 import androidx.work.impl.constraints.trackers.Trackers;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkNotRoamingController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkNotRoamingController.java
index 5d2dba7..890980b 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkNotRoamingController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkNotRoamingController.java
@@ -20,8 +20,8 @@
 
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Logger;
 import androidx.work.impl.constraints.NetworkState;
 import androidx.work.impl.constraints.trackers.Trackers;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkUnmeteredController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkUnmeteredController.java
index 9d053d7..085af4d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkUnmeteredController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/NetworkUnmeteredController.java
@@ -19,8 +19,8 @@
 import static androidx.work.NetworkType.UNMETERED;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.impl.constraints.NetworkState;
 import androidx.work.impl.constraints.trackers.Trackers;
 import androidx.work.impl.model.WorkSpec;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/StorageNotLowController.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/StorageNotLowController.java
index 4be488e..6c1d40a 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/StorageNotLowController.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/StorageNotLowController.java
@@ -16,8 +16,8 @@
 package androidx.work.impl.constraints.controllers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.impl.constraints.trackers.Trackers;
 import androidx.work.impl.model.WorkSpec;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/package-info.java
index 7fe5540..9915f4c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/controllers/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.constraints.controllers;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/package-info.java
index 8e989ed..2cda5a4 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.constraints;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.java
index 622ef64..6241a14 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.java
@@ -20,9 +20,9 @@
 import android.content.IntentFilter;
 import android.os.BatteryManager;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.java
index bc4f479..0a74b0f 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryNotLowTracker.java
@@ -19,9 +19,9 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.BatteryManager;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker.java
index 501bc75..3ddc44a 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker.java
@@ -20,9 +20,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.java
index 2049fb0..9dc2f07 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/ConstraintTracker.java
@@ -16,8 +16,8 @@
 package androidx.work.impl.constraints.trackers;
 
 import android.content.Context;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 import androidx.work.impl.constraints.ConstraintListener;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.java
index 91455f1..920a9ac 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/NetworkStateTracker.java
@@ -25,10 +25,10 @@
 import android.net.NetworkCapabilities;
 import android.net.NetworkInfo;
 import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RestrictTo;
-import android.support.v4.net.ConnectivityManagerCompat;
 
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.core.net.ConnectivityManagerCompat;
 import androidx.work.Logger;
 import androidx.work.impl.constraints.NetworkState;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.java
index 6c27ba6..e484bc6 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/StorageNotLowTracker.java
@@ -18,9 +18,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/Trackers.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/Trackers.java
index 2838f6b..e4e7af8 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/Trackers.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/Trackers.java
@@ -16,9 +16,10 @@
 package androidx.work.impl.constraints.trackers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 
 /**
  * A singleton class to hold an instance of each {@link ConstraintTracker}.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/package-info.java
index 2c4bf95..ef0678d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.constraints.trackers;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/Dependency.java b/work/workmanager/src/main/java/androidx/work/impl/model/Dependency.java
index 42997a8..e927b11 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/Dependency.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/Dependency.java
@@ -16,12 +16,12 @@
 
 package androidx.work.impl.model;
 
-import android.arch.persistence.room.ColumnInfo;
-import android.arch.persistence.room.Entity;
-import android.arch.persistence.room.ForeignKey;
-import android.arch.persistence.room.Index;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.room.ColumnInfo;
+import androidx.room.Entity;
+import androidx.room.ForeignKey;
+import androidx.room.Index;
 
 /**
  * Database entity that defines a dependency between two {@link WorkSpec}s.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/DependencyDao.java b/work/workmanager/src/main/java/androidx/work/impl/model/DependencyDao.java
index 602aba9..8cc6b48 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/DependencyDao.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/DependencyDao.java
@@ -16,11 +16,11 @@
 
 package androidx.work.impl.model;
 
-import static android.arch.persistence.room.OnConflictStrategy.IGNORE;
+import static androidx.room.OnConflictStrategy.IGNORE;
 
-import android.arch.persistence.room.Dao;
-import android.arch.persistence.room.Insert;
-import android.arch.persistence.room.Query;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.Query;
 
 import java.util.List;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfo.java b/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfo.java
index cd97958..99136e3 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfo.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfo.java
@@ -16,12 +16,12 @@
 
 package androidx.work.impl.model;
 
-import android.arch.persistence.room.ColumnInfo;
-import android.arch.persistence.room.Entity;
-import android.arch.persistence.room.ForeignKey;
-import android.arch.persistence.room.PrimaryKey;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.room.ColumnInfo;
+import androidx.room.Entity;
+import androidx.room.ForeignKey;
+import androidx.room.PrimaryKey;
 
 /**
  * Stores system ids for a {@link WorkSpec} id.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfoDao.java b/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfoDao.java
index 383e516..fced5ee 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfoDao.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/SystemIdInfoDao.java
@@ -16,13 +16,13 @@
 
 package androidx.work.impl.model;
 
-import static android.arch.persistence.room.OnConflictStrategy.REPLACE;
+import static androidx.room.OnConflictStrategy.REPLACE;
 
-import android.arch.persistence.room.Dao;
-import android.arch.persistence.room.Insert;
-import android.arch.persistence.room.Query;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.Query;
 
 /**
  * A Data Access Object for {@link SystemIdInfo}.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/WorkName.java b/work/workmanager/src/main/java/androidx/work/impl/model/WorkName.java
index 96510d5..e62f88d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/WorkName.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/WorkName.java
@@ -16,12 +16,12 @@
 
 package androidx.work.impl.model;
 
-import android.arch.persistence.room.ColumnInfo;
-import android.arch.persistence.room.Entity;
-import android.arch.persistence.room.ForeignKey;
-import android.arch.persistence.room.Index;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.room.ColumnInfo;
+import androidx.room.Entity;
+import androidx.room.ForeignKey;
+import androidx.room.Index;
 
 /**
  * Database entity that defines a mapping from a name to a {@link WorkSpec} id.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/WorkNameDao.java b/work/workmanager/src/main/java/androidx/work/impl/model/WorkNameDao.java
index f6ed812..659cd6e 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/WorkNameDao.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/WorkNameDao.java
@@ -16,11 +16,11 @@
 
 package androidx.work.impl.model;
 
-import static android.arch.persistence.room.OnConflictStrategy.IGNORE;
+import static androidx.room.OnConflictStrategy.IGNORE;
 
-import android.arch.persistence.room.Dao;
-import android.arch.persistence.room.Insert;
-import android.arch.persistence.room.Query;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.Query;
 
 import java.util.List;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpec.java b/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpec.java
index f01f1f1..24fd6e8 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpec.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpec.java
@@ -22,17 +22,17 @@
 import static androidx.work.WorkRequest.MAX_BACKOFF_MILLIS;
 import static androidx.work.WorkRequest.MIN_BACKOFF_MILLIS;
 
-import android.arch.core.util.Function;
-import android.arch.persistence.room.ColumnInfo;
-import android.arch.persistence.room.Embedded;
-import android.arch.persistence.room.Entity;
-import android.arch.persistence.room.Index;
-import android.arch.persistence.room.PrimaryKey;
-import android.arch.persistence.room.Relation;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.arch.core.util.Function;
+import androidx.room.ColumnInfo;
+import androidx.room.Embedded;
+import androidx.room.Entity;
+import androidx.room.Index;
+import androidx.room.PrimaryKey;
+import androidx.room.Relation;
 import androidx.work.BackoffPolicy;
 import androidx.work.Constraints;
 import androidx.work.Data;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpecDao.java b/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpecDao.java
index 9756b5e..9aff4db 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpecDao.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/WorkSpecDao.java
@@ -16,17 +16,15 @@
 
 package androidx.work.impl.model;
 
-import static android.arch.persistence.room.OnConflictStrategy.IGNORE;
-
+import static androidx.room.OnConflictStrategy.IGNORE;
 import static androidx.work.impl.model.WorkTypeConverters.StateIds.COMPLETED_STATES;
 
-import android.arch.lifecycle.LiveData;
-import android.arch.persistence.room.Dao;
-import android.arch.persistence.room.Insert;
-import android.arch.persistence.room.Query;
-import android.arch.persistence.room.Transaction;
-import android.support.annotation.NonNull;
-
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LiveData;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.Query;
+import androidx.room.Transaction;
 import androidx.work.Data;
 import androidx.work.WorkInfo;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/WorkTag.java b/work/workmanager/src/main/java/androidx/work/impl/model/WorkTag.java
index 9e539f0..412c6e7 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/WorkTag.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/WorkTag.java
@@ -16,12 +16,12 @@
 
 package androidx.work.impl.model;
 
-import android.arch.persistence.room.ColumnInfo;
-import android.arch.persistence.room.Entity;
-import android.arch.persistence.room.ForeignKey;
-import android.arch.persistence.room.Index;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.room.ColumnInfo;
+import androidx.room.Entity;
+import androidx.room.ForeignKey;
+import androidx.room.Index;
 
 /**
  * Database entity that defines a mapping from a tag to a {@link WorkSpec} id.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/WorkTagDao.java b/work/workmanager/src/main/java/androidx/work/impl/model/WorkTagDao.java
index 275c9de..e99de4e 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/WorkTagDao.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/WorkTagDao.java
@@ -16,11 +16,11 @@
 
 package androidx.work.impl.model;
 
-import static android.arch.persistence.room.OnConflictStrategy.IGNORE;
+import static androidx.room.OnConflictStrategy.IGNORE;
 
-import android.arch.persistence.room.Dao;
-import android.arch.persistence.room.Insert;
-import android.arch.persistence.room.Query;
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.Query;
 
 import java.util.List;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/WorkTypeConverters.java b/work/workmanager/src/main/java/androidx/work/impl/model/WorkTypeConverters.java
index 3f7eb90..be044f6 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/WorkTypeConverters.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/WorkTypeConverters.java
@@ -25,9 +25,9 @@
 import static androidx.work.WorkInfo.State.RUNNING;
 import static androidx.work.WorkInfo.State.SUCCEEDED;
 
-import android.arch.persistence.room.TypeConverter;
 import android.net.Uri;
 
+import androidx.room.TypeConverter;
 import androidx.work.BackoffPolicy;
 import androidx.work.ContentUriTriggers;
 import androidx.work.NetworkType;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/model/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/model/package-info.java
index 753a09b..c872afd 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/model/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/model/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.model;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/package-info.java
index e68ec18..3f9ab0d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/CancelWorkRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/CancelWorkRunnable.java
index 5dcd0d0..aaa98acd 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/CancelWorkRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/CancelWorkRunnable.java
@@ -20,10 +20,9 @@
 import static androidx.work.WorkInfo.State.FAILED;
 import static androidx.work.WorkInfo.State.SUCCEEDED;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.WorkerThread;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.WorkerThread;
 import androidx.work.Operation;
 import androidx.work.WorkInfo;
 import androidx.work.impl.OperationImpl;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/EnqueueRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/EnqueueRunnable.java
index a3f5cf6..2be0df1 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/EnqueueRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/EnqueueRunnable.java
@@ -28,11 +28,11 @@
 
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.Constraints;
 import androidx.work.Data;
 import androidx.work.ExistingWorkPolicy;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
index adc4d48..002b5f7 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
@@ -28,10 +28,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.Logger;
 import androidx.work.impl.Schedulers;
 import androidx.work.impl.WorkDatabase;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/IdGenerator.java b/work/workmanager/src/main/java/androidx/work/impl/utils/IdGenerator.java
index 96ac2be..01533f8 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/IdGenerator.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/IdGenerator.java
@@ -20,7 +20,8 @@
 
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.support.annotation.RestrictTo;
+
+import androidx.annotation.RestrictTo;
 
 /**
  * Generates unique IDs that are persisted in {@link SharedPreferences}.
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/LiveDataUtils.java b/work/workmanager/src/main/java/androidx/work/impl/utils/LiveDataUtils.java
index 2e59bed..5c6f68c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/LiveDataUtils.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/LiveDataUtils.java
@@ -16,14 +16,14 @@
 
 package androidx.work.impl.utils;
 
-import android.arch.core.util.Function;
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.MediatorLiveData;
-import android.arch.lifecycle.Observer;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.arch.core.util.Function;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MediatorLiveData;
+import androidx.lifecycle.Observer;
 import androidx.work.impl.utils.taskexecutor.TaskExecutor;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/PackageManagerHelper.java b/work/workmanager/src/main/java/androidx/work/impl/utils/PackageManagerHelper.java
index 3ddecd5..c5a5947 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/PackageManagerHelper.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/PackageManagerHelper.java
@@ -18,8 +18,8 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.PackageManager;
-import android.support.annotation.NonNull;
 
+import androidx.annotation.NonNull;
 import androidx.work.Logger;
 
 /**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/Preferences.java b/work/workmanager/src/main/java/androidx/work/impl/utils/Preferences.java
index 7bf3538..bdb83fa 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/Preferences.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/Preferences.java
@@ -16,13 +16,14 @@
 
 package androidx.work.impl.utils;
 
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.MutableLiveData;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
 
 /**
  * Preferences for WorkManager.
@@ -103,7 +104,7 @@
     }
 
     /**
-     * A {@link android.arch.lifecycle.LiveData} that responds to changes in
+     * A {@link LiveData} that responds to changes in
      * {@link SharedPreferences} for the {@code lastCancelAllTime} value.
      */
     private static class LastCancelAllLiveData extends MutableLiveData<Long>
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/PruneWorkRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/PruneWorkRunnable.java
index 3783fcf..be42162 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/PruneWorkRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/PruneWorkRunnable.java
@@ -16,8 +16,7 @@
 
 package androidx.work.impl.utils;
 
-import android.support.annotation.RestrictTo;
-
+import androidx.annotation.RestrictTo;
 import androidx.work.Operation;
 import androidx.work.impl.OperationImpl;
 import androidx.work.impl.WorkDatabase;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java
index 2316b79..6e245b8 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/StartWorkRunnable.java
@@ -16,8 +16,7 @@
 
 package androidx.work.impl.utils;
 
-import android.support.annotation.RestrictTo;
-
+import androidx.annotation.RestrictTo;
 import androidx.work.WorkerParameters;
 import androidx.work.impl.WorkManagerImpl;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/StatusRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/StatusRunnable.java
index ef275e5..cd0ce6c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/StatusRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/StatusRunnable.java
@@ -16,10 +16,9 @@
 
 package androidx.work.impl.utils;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.WorkerThread;
-
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.WorkerThread;
 import androidx.work.WorkInfo;
 import androidx.work.impl.WorkDatabase;
 import androidx.work.impl.WorkManagerImpl;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java
index 3243f7e..2fa2adf 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/StopWorkRunnable.java
@@ -16,8 +16,7 @@
 
 package androidx.work.impl.utils;
 
-import android.support.annotation.RestrictTo;
-
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 import androidx.work.WorkInfo;
 import androidx.work.impl.WorkDatabase;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/SynchronousExecutor.java b/work/workmanager/src/main/java/androidx/work/impl/utils/SynchronousExecutor.java
index 4bc3725..afdd32a 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/SynchronousExecutor.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/SynchronousExecutor.java
@@ -16,8 +16,8 @@
 
 package androidx.work.impl.utils;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 import java.util.concurrent.Executor;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/WakeLocks.java b/work/workmanager/src/main/java/androidx/work/impl/utils/WakeLocks.java
index acae4b0..f82869d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/WakeLocks.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/WakeLocks.java
@@ -20,9 +20,9 @@
 
 import android.content.Context;
 import android.os.PowerManager;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Logger;
 
 import java.util.HashMap;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/AbstractFuture.java b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/AbstractFuture.java
index 708ce46..f7b4881 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/AbstractFuture.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/AbstractFuture.java
@@ -18,9 +18,9 @@
 
 import static java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/DirectExecutor.java b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/DirectExecutor.java
index 22eb124..a0cf357 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/DirectExecutor.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/DirectExecutor.java
@@ -16,7 +16,7 @@
 
 package androidx.work.impl.utils.futures;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
 
 import java.util.concurrent.Executor;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/SettableFuture.java b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/SettableFuture.java
index 8507960..c888995 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/SettableFuture.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/SettableFuture.java
@@ -16,8 +16,8 @@
 
 package androidx.work.impl.utils.futures;
 
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/package-info.java
index 2ab0302..923635c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/futures/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/futures/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.utils.futures;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/utils/package-info.java
index 00318b8..f2b1e04 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.utils;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/TaskExecutor.java b/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/TaskExecutor.java
index 0a90108..056442d 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/TaskExecutor.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/TaskExecutor.java
@@ -16,8 +16,8 @@
 
 package androidx.work.impl.utils.taskexecutor;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 import java.util.concurrent.Executor;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java b/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java
index 0b791b4..ef2eb6a 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java
@@ -18,8 +18,9 @@
 
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/package-info.java b/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/package-info.java
index d9d1cdd..b20f6c7 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/package-info.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/package-info.java
@@ -20,4 +20,4 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 package androidx.work.impl.utils.taskexecutor;
 
-import android.support.annotation.RestrictTo;
+import androidx.annotation.RestrictTo;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/workers/CombineContinuationsWorker.java b/work/workmanager/src/main/java/androidx/work/impl/workers/CombineContinuationsWorker.java
index 7559b54..ef29c98 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/workers/CombineContinuationsWorker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/workers/CombineContinuationsWorker.java
@@ -17,9 +17,9 @@
 package androidx.work.impl.workers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.RestrictTo;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
diff --git a/work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java b/work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java
index 98147a6..d7e0afc 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java
@@ -17,12 +17,12 @@
 package androidx.work.impl.workers;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RestrictTo;
-import android.support.annotation.VisibleForTesting;
 import android.text.TextUtils;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
 import androidx.work.ListenableWorker;
 import androidx.work.Logger;
 import androidx.work.Worker;
diff --git a/work/workmanager/src/test/java/androidx/work/impl/WorkManagerLiveDataTrackerTest.java b/work/workmanager/src/test/java/androidx/work/impl/WorkManagerLiveDataTrackerTest.java
index 23179ee..dbc71a4 100644
--- a/work/workmanager/src/test/java/androidx/work/impl/WorkManagerLiveDataTrackerTest.java
+++ b/work/workmanager/src/test/java/androidx/work/impl/WorkManagerLiveDataTrackerTest.java
@@ -19,8 +19,8 @@
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
-import android.arch.lifecycle.LiveData;
-import android.arch.lifecycle.MutableLiveData;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;