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;