diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index c4a351f..9aac642 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -36,7 +36,7 @@
     val CAR_CLUSTER = Version("1.0.0-alpha5")
     val CAR_MODERATOR = Version("1.0.0-alpha1")
     val CARDVIEW = Version("1.0.0")
-    val COLLECTION = Version("1.1.0-alpha01")
+    val COLLECTION = Version("1.1.0-alpha02")
     val CONTENTPAGER = Version("1.0.0")
     val COORDINATORLAYOUT = Version("1.1.0-alpha02")
     val CORE = Version("1.1.0-alpha03")
@@ -75,7 +75,7 @@
     val PREFERENCE = Version("1.1.0-alpha02")
     val RECOMMENDATION = Version("1.0.0")
     val RECYCLERVIEW = Version("1.1.0-alpha01")
-    val REMOTECALLBACK = Version("1.0.0-alpha01")
+    val REMOTECALLBACK = Version("1.0.0-alpha02")
     val ROOM = Version("2.1.0-alpha03")
     val SAVEDSTATE = Version("1.0.0-alpha01")
     val SLICE = Version("1.1.0-alpha01")
@@ -83,8 +83,8 @@
     val SLICE_BUILDERS_KTX = Version("1.0.0-alpha6")
     val SLIDINGPANELAYOUT = Version("1.0.0")
     val SWIPE_REFRESH_LAYOUT = Version("1.1.0-alpha01")
-    val TEXTCLASSIFIER = Version("1.0.0-alpha01")
-    val TRANSITION = Version("1.1.0-alpha01")
+    val TEXTCLASSIFIER = Version("1.0.0-alpha02")
+    val TRANSITION = Version("1.1.0-alpha02")
     val TVPROVIDER = Version("1.0.0")
     val VECTORDRAWABLE = Version("1.1.0-alpha01")
     val VECTORDRAWABLE_ANIMATED = Version("1.1.0-alpha01")
diff --git a/car/core/api/1.0.0-alpha6.txt b/car/core/api/1.0.0-alpha6.txt
index 88cfd87..6e2e228 100644
--- a/car/core/api/1.0.0-alpha6.txt
+++ b/car/core/api/1.0.0-alpha6.txt
@@ -231,13 +231,13 @@
     ctor public CarToolbar(android.content.Context!, android.util.AttributeSet!);
     ctor public CarToolbar(android.content.Context!, android.util.AttributeSet!, int);
     ctor public CarToolbar(android.content.Context!, android.util.AttributeSet!, int, int);
-    method public CharSequence! getSubtitle();
+    method public CharSequence? getSubtitle();
     method public CharSequence! getTitle();
     method public void setNavigationIcon(android.graphics.drawable.Icon?);
     method public void setNavigationIconContainerWidth(@Px int);
     method public void setNavigationIconOnClickListener(android.view.View.OnClickListener?);
     method public void setSubtitle(@StringRes int);
-    method public void setSubtitle(CharSequence!);
+    method public void setSubtitle(CharSequence?);
     method public void setSubtitleTextAppearance(@StyleRes int);
     method public void setTitle(@StringRes int);
     method public void setTitle(CharSequence!);
diff --git a/car/core/api/current.txt b/car/core/api/current.txt
index 88cfd87..6e2e228 100644
--- a/car/core/api/current.txt
+++ b/car/core/api/current.txt
@@ -231,13 +231,13 @@
     ctor public CarToolbar(android.content.Context!, android.util.AttributeSet!);
     ctor public CarToolbar(android.content.Context!, android.util.AttributeSet!, int);
     ctor public CarToolbar(android.content.Context!, android.util.AttributeSet!, int, int);
-    method public CharSequence! getSubtitle();
+    method public CharSequence? getSubtitle();
     method public CharSequence! getTitle();
     method public void setNavigationIcon(android.graphics.drawable.Icon?);
     method public void setNavigationIconContainerWidth(@Px int);
     method public void setNavigationIconOnClickListener(android.view.View.OnClickListener?);
     method public void setSubtitle(@StringRes int);
-    method public void setSubtitle(CharSequence!);
+    method public void setSubtitle(CharSequence?);
     method public void setSubtitleTextAppearance(@StyleRes int);
     method public void setTitle(@StringRes int);
     method public void setTitle(CharSequence!);
diff --git a/collection/api/1.1.0-alpha02.txt b/collection/api/1.1.0-alpha02.txt
new file mode 100644
index 0000000..81bb5ce
--- /dev/null
+++ b/collection/api/1.1.0-alpha02.txt
@@ -0,0 +1,183 @@
+// Signature format: 2.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 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 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/ktx/api/1.1.0-alpha02.txt b/collection/ktx/api/1.1.0-alpha02.txt
new file mode 100644
index 0000000..36ae63f
--- /dev/null
+++ b/collection/ktx/api/1.1.0-alpha02.txt
@@ -0,0 +1,52 @@
+// Signature format: 2.0
+package androidx.collection {
+
+  public final class ArrayMapKt {
+    ctor public ArrayMapKt();
+    method public static <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 <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 operator <T> boolean contains(androidx.collection.LongSparseArray<T>, long key);
+    method public static <T> void forEach(androidx.collection.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+    method public static <T> T! getOrDefault(androidx.collection.LongSparseArray<T>, long key, T! defaultValue);
+    method public static <T> T! getOrElse(androidx.collection.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static <T> int getSize(androidx.collection.LongSparseArray<T>);
+    method public static <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 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 <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 operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
+    method public static <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+    method public static <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T! defaultValue);
+    method public static <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static <T> int getSize(androidx.collection.SparseArrayCompat<T>);
+    method public static <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 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/remotecallback/api/1.0.0-alpha02.txt b/remotecallback/api/1.0.0-alpha02.txt
new file mode 100644
index 0000000..ce29789
--- /dev/null
+++ b/remotecallback/api/1.0.0-alpha02.txt
@@ -0,0 +1,57 @@
+// Signature format: 2.0
+package androidx.remotecallback {
+
+  public class AppWidgetProviderWithCallbacks<T extends androidx.remotecallback.CallbackReceiver> extends android.appwidget.AppWidgetProvider implements androidx.remotecallback.CallbackReceiver<T> {
+    ctor public AppWidgetProviderWithCallbacks();
+    method public T! createRemoteCallback(android.content.Context!);
+  }
+
+  public abstract class BroadcastReceiverWithCallbacks<T extends androidx.remotecallback.CallbackReceiver> extends android.content.BroadcastReceiver implements androidx.remotecallback.CallbackReceiver<T> {
+    ctor public BroadcastReceiverWithCallbacks();
+    method public T! createRemoteCallback(android.content.Context!);
+    method public void onReceive(android.content.Context!, android.content.Intent!);
+    field public static final String ACTION_BROADCAST_CALLBACK = "androidx.remotecallback.action.BROADCAST_CALLBACK";
+  }
+
+  public class CallbackHandlerRegistry {
+    ctor public CallbackHandlerRegistry();
+    method public <T extends androidx.remotecallback.CallbackReceiver> void invokeCallback(android.content.Context!, T!, android.content.Intent!);
+    method public <T extends androidx.remotecallback.CallbackReceiver> void invokeCallback(android.content.Context!, T!, android.os.Bundle!);
+    method public static <T extends androidx.remotecallback.CallbackReceiver> void registerCallbackHandler(Class<T>!, String!, androidx.remotecallback.CallbackHandlerRegistry.CallbackHandler<T>!);
+    method public static androidx.remotecallback.RemoteCallback! stubToRemoteCallback(androidx.remotecallback.CallbackReceiver!, Class<? extends androidx.remotecallback.CallbackReceiver>!, android.os.Bundle!, String!);
+  }
+
+  public static interface CallbackHandlerRegistry.CallbackHandler<T extends androidx.remotecallback.CallbackReceiver> {
+    method public void executeCallback(android.content.Context!, T!, android.os.Bundle!);
+  }
+
+  public interface CallbackReceiver<T> {
+    method public T! createRemoteCallback(android.content.Context!);
+  }
+
+  public abstract class ContentProviderWithCallbacks<T extends androidx.remotecallback.ContentProviderWithCallbacks> extends android.content.ContentProvider implements androidx.remotecallback.CallbackReceiver<T> {
+    ctor public ContentProviderWithCallbacks();
+    method public T! createRemoteCallback(android.content.Context!);
+  }
+
+  @java.lang.annotation.Target(java.lang.annotation.ElementType.PARAMETER) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public @interface ExternalInput {
+    method public abstract String value();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface RemoteCallable {
+  }
+
+  public class RemoteCallback {
+    method public static <T extends androidx.remotecallback.CallbackReceiver> T! create(Class<T>!, android.content.Context!);
+    method public android.os.Bundle! getArgumentBundle();
+    method public String! getMethodName();
+    method public String getReceiverClass();
+    method public int getType();
+    method public android.app.PendingIntent! toPendingIntent();
+    field public static final androidx.remotecallback.RemoteCallback! LOCAL;
+    field public static final int TYPE_PROVIDER = 1; // 0x1
+    field public static final int TYPE_RECEIVER = 0; // 0x0
+  }
+
+}
+
diff --git a/remotecallback/api/res-1.0.0-alpha02.txt b/remotecallback/api/res-1.0.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/remotecallback/api/res-1.0.0-alpha02.txt
diff --git a/textclassifier/api/1.0.0-alpha02.txt b/textclassifier/api/1.0.0-alpha02.txt
new file mode 100644
index 0000000..2d0c5d9
--- /dev/null
+++ b/textclassifier/api/1.0.0-alpha02.txt
@@ -0,0 +1,240 @@
+// Signature format: 2.0
+package androidx.textclassifier {
+
+  public final class TextClassification {
+    method public static androidx.textclassifier.TextClassification createFromBundle(android.os.Bundle);
+    method public java.util.List<androidx.core.app.RemoteActionCompat> getActions();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String!);
+    method public String getEntityType(int);
+    method @IntRange(from=0) public int getEntityTypeCount();
+    method public android.os.Bundle getExtras();
+    method public String? getId();
+    method public CharSequence? getText();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static final class TextClassification.Builder {
+    ctor public TextClassification.Builder();
+    method public androidx.textclassifier.TextClassification.Builder addAction(androidx.core.app.RemoteActionCompat);
+    method public androidx.textclassifier.TextClassification build();
+    method public androidx.textclassifier.TextClassification.Builder! setEntityType(String, @FloatRange(from=0.0, to=1.0) float);
+    method public androidx.textclassifier.TextClassification.Builder setExtras(android.os.Bundle?);
+    method public androidx.textclassifier.TextClassification.Builder setId(String?);
+    method public androidx.textclassifier.TextClassification.Builder! setText(CharSequence?);
+  }
+
+  public static final class TextClassification.Request {
+    method public static androidx.textclassifier.TextClassification.Request! createFromBundle(android.os.Bundle);
+    method public androidx.core.os.LocaleListCompat? getDefaultLocales();
+    method @IntRange(from=0) public int getEndIndex();
+    method public android.os.Bundle getExtras();
+    method public Long? getReferenceTime();
+    method @IntRange(from=0) public int getStartIndex();
+    method public CharSequence getText();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static final class TextClassification.Request.Builder {
+    ctor public TextClassification.Request.Builder(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public androidx.textclassifier.TextClassification.Request build();
+    method public androidx.textclassifier.TextClassification.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextClassification.Request.Builder setExtras(android.os.Bundle?);
+    method public androidx.textclassifier.TextClassification.Request.Builder setReferenceTime(Long?);
+  }
+
+  public final class TextClassificationContext {
+    method public static androidx.textclassifier.TextClassificationContext createFromBundle(android.os.Bundle);
+    method public String getPackageName();
+    method public String getWidgetType();
+    method public String? getWidgetVersion();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static final class TextClassificationContext.Builder {
+    ctor public TextClassificationContext.Builder(String, String);
+    method public androidx.textclassifier.TextClassificationContext build();
+    method public androidx.textclassifier.TextClassificationContext.Builder! setWidgetVersion(String?);
+  }
+
+  public final class TextClassificationManager {
+    method public androidx.textclassifier.TextClassifier getDefaultTextClassifier();
+    method public androidx.textclassifier.TextClassifier getTextClassifier();
+    method public static androidx.textclassifier.TextClassificationManager! of(android.content.Context);
+    method public void setTextClassifier(androidx.textclassifier.TextClassifier?);
+  }
+
+  public final class TextClassificationSessionId {
+    method public static androidx.textclassifier.TextClassificationSessionId createFromBundle(android.os.Bundle);
+    method public android.os.Bundle toBundle();
+  }
+
+  public abstract class TextClassifier {
+    ctor public TextClassifier();
+    method @WorkerThread public androidx.textclassifier.TextClassification classifyText(androidx.textclassifier.TextClassification.Request);
+    method @WorkerThread public androidx.textclassifier.TextLinks generateLinks(androidx.textclassifier.TextLinks.Request);
+    method public int getMaxGenerateLinksTextLength();
+    method @WorkerThread public androidx.textclassifier.TextSelection suggestSelection(androidx.textclassifier.TextSelection.Request);
+    field public static final String HINT_TEXT_IS_EDITABLE = "android.text_is_editable";
+    field public static final String HINT_TEXT_IS_NOT_EDITABLE = "android.text_is_not_editable";
+    field public static final androidx.textclassifier.TextClassifier! NO_OP;
+    field public static final String TYPE_ADDRESS = "address";
+    field public static final String TYPE_DATE = "date";
+    field public static final String TYPE_DATE_TIME = "datetime";
+    field public static final String TYPE_EMAIL = "email";
+    field public static final String TYPE_FLIGHT_NUMBER = "flight";
+    field public static final String TYPE_OTHER = "other";
+    field public static final String TYPE_PHONE = "phone";
+    field public static final String TYPE_UNKNOWN = "";
+    field public static final String TYPE_URL = "url";
+    field public static final String WIDGET_TYPE_CUSTOM_EDITTEXT = "customedit";
+    field public static final String WIDGET_TYPE_CUSTOM_TEXTVIEW = "customview";
+    field public static final String WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW = "nosel-customview";
+    field public static final String WIDGET_TYPE_EDITTEXT = "edittext";
+    field public static final String WIDGET_TYPE_EDIT_WEBVIEW = "edit-webview";
+    field public static final String WIDGET_TYPE_TEXTVIEW = "textview";
+    field public static final String WIDGET_TYPE_UNKNOWN = "unknown";
+    field public static final String WIDGET_TYPE_UNSELECTABLE_TEXTVIEW = "nosel-textview";
+    field public static final String WIDGET_TYPE_WEBVIEW = "webview";
+  }
+
+  public static final class TextClassifier.EntityConfig {
+    method public static androidx.textclassifier.TextClassifier.EntityConfig createFromBundle(android.os.Bundle);
+    method public java.util.Collection<java.lang.String> getHints();
+    method public java.util.Collection<java.lang.String>! resolveEntityTypes(java.util.Collection<java.lang.String>?);
+    method public boolean shouldIncludeDefaultEntityTypes();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static final class TextClassifier.EntityConfig.Builder {
+    ctor public TextClassifier.EntityConfig.Builder();
+    method public androidx.textclassifier.TextClassifier.EntityConfig build();
+    method public androidx.textclassifier.TextClassifier.EntityConfig.Builder! setExcludedEntityTypes(java.util.Collection<java.lang.String>?);
+    method public androidx.textclassifier.TextClassifier.EntityConfig.Builder! setHints(java.util.Collection<java.lang.String>?);
+    method public androidx.textclassifier.TextClassifier.EntityConfig.Builder! setIncludeDefaultEntityTypes(boolean);
+    method public androidx.textclassifier.TextClassifier.EntityConfig.Builder! setIncludedEntityTypes(java.util.Collection<java.lang.String>?);
+  }
+
+  public final class TextLinks {
+    method public int apply(android.text.Spannable, androidx.textclassifier.TextClassifier, androidx.textclassifier.TextLinksParams);
+    method public static androidx.textclassifier.TextLinks createFromBundle(android.os.Bundle);
+    method public android.os.Bundle getExtras();
+    method public java.util.Collection<androidx.textclassifier.TextLinks.TextLink> getLinks();
+    method public android.os.Bundle toBundle();
+    field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0
+    field public static final int APPLY_STRATEGY_REPLACE = 1; // 0x1
+    field public static final int STATUS_DIFFERENT_TEXT = 3; // 0x3
+    field public static final int STATUS_LINKS_APPLIED = 0; // 0x0
+    field public static final int STATUS_NO_LINKS_APPLIED = 2; // 0x2
+    field public static final int STATUS_NO_LINKS_FOUND = 1; // 0x1
+    field public static final int STATUS_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class TextLinks.Builder {
+    ctor public TextLinks.Builder(CharSequence);
+    method public androidx.textclassifier.TextLinks.Builder addLink(int, int, java.util.Map<java.lang.String,java.lang.Float>);
+    method public androidx.textclassifier.TextLinks build();
+    method public androidx.textclassifier.TextLinks.Builder clearTextLinks();
+    method public androidx.textclassifier.TextLinks.Builder setExtras(android.os.Bundle?);
+  }
+
+  public static class TextLinks.DefaultTextLinkSpan extends androidx.textclassifier.TextLinks.TextLinkSpan {
+    ctor public TextLinks.DefaultTextLinkSpan(androidx.textclassifier.TextLinks.TextLinkSpanData);
+    method @CallSuper public void onClick(android.view.View);
+    method @UiThread public void onTextClassificationResult(android.widget.TextView, androidx.textclassifier.TextClassification);
+  }
+
+  public static final class TextLinks.Request {
+    method public static androidx.textclassifier.TextLinks.Request createFromBundle(android.os.Bundle);
+    method public androidx.core.os.LocaleListCompat? getDefaultLocales();
+    method public androidx.textclassifier.TextClassifier.EntityConfig getEntityConfig();
+    method public android.os.Bundle getExtras();
+    method public Long? getReferenceTime();
+    method public CharSequence getText();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static final class TextLinks.Request.Builder {
+    ctor public TextLinks.Request.Builder(CharSequence);
+    method public androidx.textclassifier.TextLinks.Request build();
+    method public androidx.textclassifier.TextLinks.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextLinks.Request.Builder setEntityConfig(androidx.textclassifier.TextClassifier.EntityConfig?);
+    method public androidx.textclassifier.TextLinks.Request.Builder setExtras(android.os.Bundle?);
+    method public androidx.textclassifier.TextLinks.Request.Builder setReferenceTime(Long?);
+  }
+
+  public static interface TextLinks.SpanFactory {
+    method public androidx.textclassifier.TextLinks.TextLinkSpan! createSpan(androidx.textclassifier.TextLinks.TextLinkSpanData);
+  }
+
+  public static final class TextLinks.TextLink {
+    method public static androidx.textclassifier.TextLinks.TextLink createFromBundle(android.os.Bundle);
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String!);
+    method public int getEnd();
+    method public String getEntity(int);
+    method public int getEntityCount();
+    method public int getStart();
+    method public android.os.Bundle toBundle();
+  }
+
+  public abstract static class TextLinks.TextLinkSpan extends android.text.style.ClickableSpan {
+    ctor public TextLinks.TextLinkSpan(androidx.textclassifier.TextLinks.TextLinkSpanData);
+    method public final androidx.textclassifier.TextLinks.TextLinkSpanData getTextLinkSpanData();
+  }
+
+  public static class TextLinks.TextLinkSpanData {
+    method public androidx.textclassifier.TextLinks.TextLink getTextLink();
+  }
+
+  public final class TextLinksParams {
+    field public static final androidx.textclassifier.TextLinksParams! DEFAULT_PARAMS;
+  }
+
+  public static final class TextLinksParams.Builder {
+    ctor public TextLinksParams.Builder();
+    method public androidx.textclassifier.TextLinksParams build();
+    method public androidx.textclassifier.TextLinksParams.Builder setApplyStrategy(int);
+    method public androidx.textclassifier.TextLinksParams.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextLinksParams.Builder setEntityConfig(androidx.textclassifier.TextClassifier.EntityConfig?);
+    method public androidx.textclassifier.TextLinksParams.Builder setReferenceTime(Long?);
+    method public androidx.textclassifier.TextLinksParams.Builder setSpanFactory(androidx.textclassifier.TextLinks.SpanFactory?);
+  }
+
+  public final class TextSelection {
+    method public static androidx.textclassifier.TextSelection createFromBundle(android.os.Bundle);
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String!);
+    method public String getEntity(int);
+    method @IntRange(from=0) public int getEntityCount();
+    method public android.os.Bundle getExtras();
+    method public String? getId();
+    method public int getSelectionEndIndex();
+    method public int getSelectionStartIndex();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static final class TextSelection.Builder {
+    ctor public TextSelection.Builder(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public androidx.textclassifier.TextSelection build();
+    method public androidx.textclassifier.TextSelection.Builder setEntityType(String, @FloatRange(from=0.0, to=1.0) float);
+    method public androidx.textclassifier.TextSelection.Builder setExtras(android.os.Bundle?);
+    method public androidx.textclassifier.TextSelection.Builder setId(String?);
+  }
+
+  public static final class TextSelection.Request {
+    method public static androidx.textclassifier.TextSelection.Request createFromBundle(android.os.Bundle);
+    method public androidx.core.os.LocaleListCompat? getDefaultLocales();
+    method @IntRange(from=0) public int getEndIndex();
+    method public android.os.Bundle getExtras();
+    method @IntRange(from=0) public int getStartIndex();
+    method public CharSequence getText();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static final class TextSelection.Request.Builder {
+    ctor public TextSelection.Request.Builder(CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public androidx.textclassifier.TextSelection.Request build();
+    method public androidx.textclassifier.TextSelection.Request.Builder setDefaultLocales(androidx.core.os.LocaleListCompat?);
+    method public androidx.textclassifier.TextSelection.Request.Builder setExtras(android.os.Bundle?);
+  }
+
+}
+
diff --git a/textclassifier/api/res-1.0.0-alpha02.txt b/textclassifier/api/res-1.0.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/textclassifier/api/res-1.0.0-alpha02.txt
diff --git a/transition/api/1.1.0-alpha02.txt b/transition/api/1.1.0-alpha02.txt
new file mode 100644
index 0000000..62fcf63
--- /dev/null
+++ b/transition/api/1.1.0-alpha02.txt
@@ -0,0 +1,283 @@
+// Signature format: 2.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.View);
+    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-alpha02.txt b/transition/api/res-1.1.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/transition/api/res-1.1.0-alpha02.txt
