Merge "Update WorkManager to 2.3.0-beta01." into androidx-master-dev
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index cee2d27..56a1cc3 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -177,7 +177,9 @@
      */
     @Override
     @Nullable
+    @SuppressWarnings("deprecation")
     public final Object onRetainNonConfigurationInstance() {
+        // Maintain backward compatibility.
         Object custom = onRetainCustomNonConfigurationInstance();
 
         ViewModelStore viewModelStore = mViewModelStore;
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index 8bd4720..2340c83 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -258,6 +258,7 @@
         return getDelegate().requestWindowFeature(featureId);
     }
 
+    @SuppressWarnings("deprecation")
     @Override
     public void supportInvalidateOptionsMenu() {
         getDelegate().invalidateOptionsMenu();
@@ -487,6 +488,7 @@
         NavUtils.navigateUpTo(this, upIntent);
     }
 
+    @SuppressWarnings("deprecation")
     @Override
     public void onContentChanged() {
         // Call onSupportContentChanged() for legacy reasons
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index 1353953..61a1936 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -118,6 +118,7 @@
     /**
      * @deprecated Use {@link AppCompatDelegate#MODE_NIGHT_AUTO_TIME} instead
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static final int MODE_NIGHT_AUTO = MODE_NIGHT_AUTO_TIME;
 
@@ -167,6 +168,7 @@
     private static final Object sActiveDelegatesLock = new Object();
 
     /** @hide */
+    @SuppressWarnings("deprecation")
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @IntDef({MODE_NIGHT_NO, MODE_NIGHT_YES, MODE_NIGHT_AUTO_TIME, MODE_NIGHT_FOLLOW_SYSTEM,
             MODE_NIGHT_UNSPECIFIED, MODE_NIGHT_AUTO_BATTERY})
@@ -543,6 +545,7 @@
      * @see #setLocalNightMode(int)
      * @see #getDefaultNightMode()
      */
+    @SuppressWarnings("deprecation")
     public static void setDefaultNightMode(@NightMode int mode) {
         switch (mode) {
             case MODE_NIGHT_NO:
diff --git a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index 95b2cf3..bfa0f2b 100644
--- a/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -2182,6 +2182,7 @@
         return applyDayNight(true, null);
     }
 
+    @SuppressWarnings("deprecation")
     private boolean applyDayNight(final boolean allowRecreation,
             @Nullable Configuration configOverlay) {
         if (mIsDestroyed) {
@@ -2222,6 +2223,7 @@
         return mLocalNightMode;
     }
 
+    @SuppressWarnings("deprecation")
     @ApplyableNightMode
     int mapNightMode(@NightMode final int mode) {
         switch (mode) {
diff --git a/biometric/api/restricted_1.1.0-alpha01.txt b/biometric/api/restricted_1.1.0-alpha01.txt
index cf9f995..7af17fe 100644
--- a/biometric/api/restricted_1.1.0-alpha01.txt
+++ b/biometric/api/restricted_1.1.0-alpha01.txt
@@ -63,6 +63,5 @@
 
 
 
-
 }
 
diff --git a/biometric/api/restricted_current.txt b/biometric/api/restricted_current.txt
index cf9f995..7af17fe 100644
--- a/biometric/api/restricted_current.txt
+++ b/biometric/api/restricted_current.txt
@@ -63,6 +63,5 @@
 
 
 
-
 }
 
diff --git a/biometric/res/values/devices.xml b/biometric/res/values/devices.xml
index 5ddac9e..fdc4460 100644
--- a/biometric/res/values/devices.xml
+++ b/biometric/res/values/devices.xml
@@ -45,9 +45,9 @@
     </string-array>
 
     <!--
-    List of known device models for which FingerprintDialogFragment should always be dismissed
-    instantly. This is intended to improve responsiveness on devices for which this dialog is
-    needed as a workaround but which otherwise display a custom UI, such as an overlay.
+    List of known device models for which FingerprintDialogFragment should be hidden. This is
+    intended to improve the experience on devices for which this dialog is needed as a workaround
+    but which display a custom UI, such as an overlay, when FingerprintManager is invoked.
     -->
     <string-array name="hide_fingerprint_instantly_prefixes">
         <item>SM-G97</item> <!-- Samsung Galaxy S10/S10+ -->
diff --git a/biometric/src/main/AndroidManifest.xml b/biometric/src/main/AndroidManifest.xml
index d61555c..c567445 100644
--- a/biometric/src/main/AndroidManifest.xml
+++ b/biometric/src/main/AndroidManifest.xml
@@ -18,6 +18,7 @@
 
     <uses-permission android:name="android.permission.USE_BIOMETRIC" />
 
+    <!--suppress DeprecatedClassUsageInspection -->
     <uses-permission android:name="android.permission.USE_FINGERPRINT" />
 
     <application>
diff --git a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
index 0ef8f70..6995406 100644
--- a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
+++ b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
@@ -323,10 +323,7 @@
              * {@link DeviceCredentialHandlerActivity}. This lets us handle the result of {@link
              * android.app.KeyguardManager#createConfirmDeviceCredentialIntent(CharSequence,
              * CharSequence)} in order to allow device credentials for <= P.
-             *
-             * @hide
              */
-            @RestrictTo(RestrictTo.Scope.LIBRARY)
             @NonNull
             Builder setHandlingDeviceCredentialResult(boolean isHandling) {
                 mBundle.putBoolean(KEY_HANDLING_DEVICE_CREDENTIAL_RESULT, isHandling);
@@ -750,11 +747,14 @@
 
             mFingerprintDialogFragment.setNegativeButtonListener(mNegativeButtonListener);
             mFingerprintDialogFragment.setBundle(bundle);
-            if (fingerprintDialogFragment == null) {
-                mFingerprintDialogFragment.show(fragmentManager, DIALOG_FRAGMENT_TAG);
-            } else if (mFingerprintDialogFragment.isDetached()) {
-                fragmentManager.beginTransaction().attach(mFingerprintDialogFragment)
-                        .commitAllowingStateLoss();
+
+            if (activity != null && !Utils.shouldHideFingerprintDialog(activity, Build.MODEL)) {
+                if (fingerprintDialogFragment == null) {
+                    mFingerprintDialogFragment.show(fragmentManager, DIALOG_FRAGMENT_TAG);
+                } else if (mFingerprintDialogFragment.isDetached()) {
+                    fragmentManager.beginTransaction().attach(mFingerprintDialogFragment)
+                            .commitAllowingStateLoss();
+                }
             }
 
             // Create the connection to FingerprintManager
diff --git a/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java b/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java
index 821ad7a..0fd3735 100644
--- a/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java
+++ b/biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerBridge.java
@@ -23,7 +23,6 @@
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -33,11 +32,8 @@
  * Singleton class to facilitate communication between the {@link BiometricPrompt} for the client
  * activity and the one attached to {@link DeviceCredentialHandlerActivity} when allowing device
  * credential authentication prior to Q.
- *
- * @hide
  */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-public class DeviceCredentialHandlerBridge {
+class DeviceCredentialHandlerBridge {
     @Nullable
     private static DeviceCredentialHandlerBridge sInstance;
 
diff --git a/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java b/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
index bf7dae2..00d4a78 100644
--- a/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
+++ b/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
@@ -119,7 +119,7 @@
                 case DISPLAYED_FOR_500_MS:
                     final Context context = getContext();
                     mDismissInstantly =
-                            context != null && Utils.shouldAlwaysHideFingerprintDialogInstantly(
+                            context != null && Utils.shouldHideFingerprintDialog(
                                     context, Build.MODEL);
                     break;
             }
@@ -330,7 +330,7 @@
      * the result of {@link Utils#shouldAlwaysHideFingerprintDialogInstantly(String)}.
      */
     static int getHideDialogDelay(Context context) {
-        return context != null && Utils.shouldAlwaysHideFingerprintDialogInstantly(
+        return context != null && Utils.shouldHideFingerprintDialog(
                 context, Build.MODEL) ? 0 : MESSAGE_DISPLAY_TIME_MS;
     }
 
@@ -373,6 +373,11 @@
     }
 
     private void updateFingerprintIcon(int newState) {
+        // May be null if we're intentionally suppressing the dialog.
+        if (mFingerprintIcon == null) {
+            return;
+        }
+
         // Devices older than this do not have FP support (and also do not support SVG), so it's
         // fine for this to be a no-op. An error is returned immediately and the dialog is not
         // shown.
@@ -398,8 +403,12 @@
     private void handleShowHelp(CharSequence msg) {
         updateFingerprintIcon(STATE_FINGERPRINT_ERROR);
         mHandler.removeMessages(MSG_RESET_MESSAGE);
-        mErrorText.setTextColor(mErrorColor);
-        mErrorText.setText(msg);
+
+        // May be null if we're intentionally suppressing the dialog.
+        if (mErrorText != null) {
+            mErrorText.setTextColor(mErrorColor);
+            mErrorText.setText(msg);
+        }
 
         // Reset the text after a delay
         mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_RESET_MESSAGE),
@@ -409,8 +418,12 @@
     private void handleShowError(CharSequence msg) {
         updateFingerprintIcon(STATE_FINGERPRINT_ERROR);
         mHandler.removeMessages(MSG_RESET_MESSAGE);
-        mErrorText.setTextColor(mErrorColor);
-        mErrorText.setText(msg);
+
+        // May be null if we're intentionally suppressing the dialog.
+        if (mErrorText != null) {
+            mErrorText.setTextColor(mErrorColor);
+            mErrorText.setText(msg);
+        }
 
         // Dismiss the dialog after a delay
         mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_DISMISS_DIALOG_ERROR),
@@ -418,11 +431,14 @@
     }
 
     private void dismissAfterDelay(CharSequence msg) {
-        mErrorText.setTextColor(mErrorColor);
-        if (msg != null) {
-            mErrorText.setText(msg);
-        } else {
-            mErrorText.setText(R.string.fingerprint_error_lockout);
+        // May be null if we're intentionally suppressing the dialog.
+        if (mErrorText != null) {
+            mErrorText.setTextColor(mErrorColor);
+            if (msg != null) {
+                mErrorText.setText(msg);
+            } else {
+                mErrorText.setText(R.string.fingerprint_error_lockout);
+            }
         }
 
         mHandler.postDelayed(new Runnable() {
@@ -446,7 +462,11 @@
 
     private void handleResetMessage() {
         updateFingerprintIcon(STATE_FINGERPRINT);
-        mErrorText.setTextColor(mTextColor);
-        mErrorText.setText(mContext.getString(R.string.fingerprint_dialog_touch_sensor));
+
+        // May be null if we're intentionally suppressing the dialog.
+        if (mErrorText != null) {
+            mErrorText.setTextColor(mTextColor);
+            mErrorText.setText(mContext.getString(R.string.fingerprint_dialog_touch_sensor));
+        }
     }
 }
diff --git a/biometric/src/main/java/androidx/biometric/Utils.java b/biometric/src/main/java/androidx/biometric/Utils.java
index f285954..6375220 100644
--- a/biometric/src/main/java/androidx/biometric/Utils.java
+++ b/biometric/src/main/java/androidx/biometric/Utils.java
@@ -27,13 +27,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
-import androidx.annotation.RestrictTo;
 import androidx.fragment.app.FragmentActivity;
 
-/**
- * @hide
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
 class Utils {
     // Private constructor to prevent instantiation.
     private Utils() {
@@ -185,8 +180,7 @@
      * @return true if {@link FingerprintDialogFragment} should always be dismissed immediately, or
      * false otherwise.
      */
-    static boolean shouldAlwaysHideFingerprintDialogInstantly(@NonNull Context context,
-            String model) {
+    static boolean shouldHideFingerprintDialog(@NonNull Context context, String model) {
         if (Build.VERSION.SDK_INT != Build.VERSION_CODES.P) {
             // This workaround is only needed for API 28.
             return false;
diff --git a/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java b/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java
index 451aeb8..8b04a7e 100644
--- a/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java
+++ b/browser/src/main/java/androidx/browser/browseractions/BrowserActionItem.java
@@ -33,6 +33,7 @@
  *
  * @deprecated Browser Actions are deprecated as of release 1.2.0.
  */
+@SuppressWarnings("deprecation")
 @Deprecated
 public class BrowserActionItem {
     private final String mTitle;
diff --git a/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java b/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
index 9ddd684..94e55c9 100644
--- a/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
+++ b/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
@@ -53,6 +53,7 @@
  *
  * @deprecated Browser Actions are deprecated as of release 1.2.0.
  */
+@SuppressWarnings("deprecation")
 @Deprecated
 public class BrowserActionsIntent {
     private static final String TAG = "BrowserActions";
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index 8acd5ed..7d9e81a 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -25,8 +25,8 @@
     build_versions.lint = "27.0.0-alpha01"
 } else {
     build_versions.kotlin = "1.3.41"
-    build_versions.agp = "3.6.0-beta01"
-    build_versions.lint = "26.6.0-beta01"
+    build_versions.agp = "3.6.0-beta02"
+    build_versions.lint = "26.6.0-beta02"
 }
 
 build_versions.dokka = '0.9.17-g002'
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 34ad30a..1464818 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -64,7 +64,7 @@
     val HEIFWRITER = Version("1.1.0-alpha01")
     val INSPECTION = Version("1.0.0-alpha01")
     val INTERPOLATOR = Version("1.1.0-alpha01")
-    val JETIFIER = Version("1.0.0-beta08")
+    val JETIFIER = Version("1.0.0-beta09")
     val LEANBACK = Version("1.1.0-alpha03")
     val LEANBACK_PREFERENCE = Version("1.1.0-alpha03")
     val LEGACY = Version("1.1.0-alpha01")
diff --git a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
index 5a76201..53274b2 100644
--- a/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/PublishDocsRules.kt
@@ -31,22 +31,22 @@
     prebuilts(LibraryGroups.ACTIVITY, "1.1.0-rc02")
     prebuilts(LibraryGroups.ADS, "1.0.0-alpha02")
     prebuilts(LibraryGroups.ANNOTATION, "annotation", "1.1.0")
-    prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental", "1.0.0-rc01")
-    prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental-lint", "1.0.0-rc01")
+    prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental", "1.0.0")
+    prebuilts(LibraryGroups.ANNOTATION, "annotation-experimental-lint", "1.0.0")
     prebuilts(LibraryGroups.APPCOMPAT, "1.1.0")
     prebuilts(LibraryGroups.ARCH_CORE, "2.1.0")
     prebuilts(LibraryGroups.ASYNCLAYOUTINFLATER, "1.0.0")
     prebuilts(LibraryGroups.AUTOFILL, "1.0.0-rc01")
     ignore(LibraryGroups.BENCHMARK.group, "benchmark-gradle-plugin")
     prebuilts(LibraryGroups.BENCHMARK, "1.0.0-rc01")
-    prebuilts(LibraryGroups.BIOMETRIC, "biometric", "1.0.0-rc02")
+    prebuilts(LibraryGroups.BIOMETRIC, "biometric", "1.0.0")
     prebuilts(LibraryGroups.BROWSER, "1.2.0-alpha09")
     ignore(LibraryGroups.CAMERA.group, "camera-testing")
     ignore(LibraryGroups.CAMERA.group, "camera-extensions-stub")
     ignore(LibraryGroups.CAMERA.group, "camera-testlib-extensions")
-    prebuilts(LibraryGroups.CAMERA, "camera-view", "1.0.0-alpha03")
-    prebuilts(LibraryGroups.CAMERA, "camera-extensions", "1.0.0-alpha03")
-    prebuilts(LibraryGroups.CAMERA, "1.0.0-alpha06")
+    prebuilts(LibraryGroups.CAMERA, "camera-view", "1.0.0-alpha04")
+    prebuilts(LibraryGroups.CAMERA, "camera-extensions", "1.0.0-alpha04")
+    prebuilts(LibraryGroups.CAMERA, "1.0.0-alpha07")
     ignore(LibraryGroups.CAR.group, "car-moderator")
     prebuilts(LibraryGroups.CAR, "car", "1.0.0-alpha7")
             .addStubs("car/stubs/android.car.jar")
@@ -56,10 +56,11 @@
     // branch. There is no reason to push a new release for docs only,
     // so we build docs against the fake prebuilt. This prebuilt is identical
     // to 1.0.0 release modulo changes in docs.
-    prebuilts(LibraryGroups.CONCURRENT, "1.0.0-fixeddocs01")
+    prebuilts(LibraryGroups.CONCURRENT, "concurrent-futures", "1.0.0-fixeddocs01")
+    ignore(LibraryGroups.CONCURRENT.group, "concurrent-futures-ktx")
     prebuilts(LibraryGroups.CONTENTPAGER, "1.0.0")
     prebuilts(LibraryGroups.COORDINATORLAYOUT, "1.1.0-rc01")
-    prebuilts(LibraryGroups.CORE, "core", "1.2.0-beta01")
+    prebuilts(LibraryGroups.CORE, "core", "1.2.0-beta02")
     prebuilts(LibraryGroups.CORE, "core-ktx", "1.2.0-beta01")
     prebuilts(LibraryGroups.CORE, "core-role", "1.0.0-alpha02")
     prebuilts(LibraryGroups.CURSORADAPTER, "1.0.0")
@@ -100,7 +101,7 @@
     ignore(LibraryGroups.NAVIGATION.group, "navigation-dynamic-features-fragment")
     ignore(LibraryGroups.NAVIGATION.group, "navigation-safe-args-generator")
     ignore(LibraryGroups.NAVIGATION.group, "navigation-safe-args-gradle-plugin")
-    prebuilts(LibraryGroups.NAVIGATION, "2.2.0-rc01")
+    prebuilts(LibraryGroups.NAVIGATION, "2.2.0-rc02")
     prebuilts(LibraryGroups.PAGING, "2.1.0")
     prebuilts(LibraryGroups.PALETTE, "1.0.0")
     prebuilts(LibraryGroups.PERCENTLAYOUT, "1.0.0")
@@ -116,7 +117,7 @@
     // TODO: Remove this ignore once androidx.security:security-identity-credential:1.0.0-alpha01 is released
     ignore(LibraryGroups.SECURITY.group, "security-identity-credential")
     prebuilts(LibraryGroups.SECURITY, "1.0.0-alpha02")
-    prebuilts(LibraryGroups.SHARETARGET, "1.0.0-beta01")
+    prebuilts(LibraryGroups.SHARETARGET, "1.0.0-beta02")
     prebuilts(LibraryGroups.SLICE, "slice-builders", "1.1.0-alpha01")
     prebuilts(LibraryGroups.SLICE, "slice-builders-ktx", "1.0.0-alpha07")
     prebuilts(LibraryGroups.SLICE, "slice-core", "1.1.0-alpha01")
@@ -126,7 +127,7 @@
     prebuilts(LibraryGroups.SLICE, "slice-view", "1.1.0-alpha01")
     prebuilts(LibraryGroups.SLIDINGPANELAYOUT, "1.0.0")
     ignore(LibraryGroups.SQLITE.group, "sqlite-inspection")
-    prebuilts(LibraryGroups.SQLITE, "2.0.0")
+    prebuilts(LibraryGroups.SQLITE, "2.1.0-alpha01")
     prebuilts(LibraryGroups.SWIPEREFRESHLAYOUT, "1.1.0-alpha03")
     prebuilts(LibraryGroups.TEXTCLASSIFIER, "1.0.0-alpha02")
     prebuilts(LibraryGroups.TRANSITION, "1.3.0-rc01")
@@ -138,7 +139,7 @@
     prebuilts(LibraryGroups.VIEWPAGER2, "1.0.0-rc01")
     prebuilts(LibraryGroups.WEAR, "1.0.0")
             .addStubs("wear/wear_stubs/com.google.android.wearable-stubs.jar")
-    prebuilts(LibraryGroups.WEBKIT, "1.1.0-rc01")
+    prebuilts(LibraryGroups.WEBKIT, "1.1.0")
     ignore(LibraryGroups.WORK.group, "work-gcm")
     ignore(LibraryGroups.WORK.group, "work-foreground")
     prebuilts(LibraryGroups.WORK, "2.3.0-alpha03")
diff --git a/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt b/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt
index 6ca50ac..66b7805 100644
--- a/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/studio/StudioVersions.kt
@@ -56,9 +56,9 @@
 }
 
 private object RootStudioVersions : StudioVersions() {
-    override val studioVersion = "3.6.0.13"
+    override val studioVersion = "3.6.0.14"
     override val ideaMajorVersion = "192"
-    override val studioBuildNumber = "5916306"
+    override val studioBuildNumber = "5947919"
     override val buildTxtOverride: String = ""
 }
 
diff --git a/busytown/androidx_host_tests_max_dep_versions.sh b/busytown/androidx_host_tests_max_dep_versions.sh
new file mode 100755
index 0000000..0738b58
--- /dev/null
+++ b/busytown/androidx_host_tests_max_dep_versions.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -e
+
+SCRIPT_DIR="$(cd $(dirname $0) && pwd)"
+# TODO(b/141549086): move everything below into a common script once this script (androidx_host_tests_max_dep_versions.sh) is under presubmit testing
+if [ "$DIST_DIR" == "" ]; then
+  DIST_DIR="$SCRIPT_DIR/../../../out/dist"
+fi
+mkdir -p "$DIST_DIR"
+
+cd "$SCRIPT_DIR/../../.."
+
+OUT_DIR=out DIST_DIR=$DIST_DIR ANDROID_HOME=`pwd`/prebuilts/fullsdk-linux frameworks/support/gradlew -p frameworks/support --no-daemon test --info -PuseMaxDepVersions
+OUT_DIR=out/ui DIST_DIR=$DIST_DIR/ui ANDROID_HOME=`pwd`/prebuilts/fullsdk-linux frameworks/support/ui/gradlew -p frameworks/support/ui --no-daemon test --info -PuseMaxDepVersions
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java
index d5ca1b5..fa7fb1b 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/VideoCaptureTest.java
@@ -40,6 +40,7 @@
 import androidx.test.InstrumentationRegistry;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.rule.GrantPermissionRule;
 
@@ -63,6 +64,7 @@
  * <p>TODO(b/112325215): The VideoCapture will be more thoroughly tested via integration
  * tests
  */
+@FlakyTest
 @LargeTest
 @RunWith(AndroidJUnit4.class)
 public final class VideoCaptureTest {
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java
index 86f1dbd..83ce49f 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraControl.java
@@ -38,6 +38,7 @@
 import androidx.camera.core.FlashMode;
 import androidx.camera.core.FocusMeteringAction;
 import androidx.camera.core.SessionConfig;
+import androidx.camera.core.impl.utils.futures.Futures;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -176,12 +177,15 @@
 
     /** {@inheritDoc} */
     @Override
-    public void enableTorch(final boolean torch) {
+    @NonNull
+    public ListenableFuture<Void> enableTorch(final boolean torch) {
         // update isTorchOn immediately so that following isTorchOn() returns correct value.
         mIsTorchOn = torch;
 
         mExecutor.execute(() -> enableTorchInternal(torch));
 
+        // TODO(b/143514107): implement #enableTorch which returns ListenableFuture.
+        return Futures.immediateFuture(null);
     }
 
     /** {@inheritDoc} */
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java
index 4add629..19e3cdf8 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/impl/Camera2CameraInfo.java
@@ -29,6 +29,7 @@
 import androidx.camera.core.CameraOrientationUtil;
 import androidx.camera.core.ImageOutputConfig.RotationValue;
 import androidx.camera.core.LensFacing;
+import androidx.camera.core.TorchState;
 import androidx.core.util.Preconditions;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
@@ -44,7 +45,6 @@
     private static final String TAG = "Camera2CameraInfo";
     private MutableLiveData<Boolean> mFlashAvailability;
 
-
     Camera2CameraInfo(@NonNull CameraManager cameraManager, @NonNull String cameraId,
             @NonNull ZoomControl zoomControl)
             throws CameraInfoUnavailableException {
@@ -164,6 +164,13 @@
 
     @NonNull
     @Override
+    public LiveData<TorchState> getTorchState() {
+        // TODO(b/143514107): implement #getTorchState and return a functional LiveData
+        throw new UnsupportedOperationException("Not implement");
+    }
+
+    @NonNull
+    @Override
     public LiveData<Float> getZoomRatio() {
         return mZoomControl.getZoomRatio();
     }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
index 85e4780..b0cd652 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraControl.java
@@ -30,22 +30,53 @@
  */
 public interface CameraControl {
     /**
-     * Starts a focus and metering action by the {@link FocusMeteringAction}.
+     * Enable the torch or disable the torch.
      *
-     * <p>The {@link FocusMeteringAction} contains the configuration of multiple 3A
-     * {@link MeteringPoint}s, auto-cancel duration and{ @link OnAutoFocusListener} to receive the
-     * auto-focus result. Check {@link FocusMeteringAction} for more details.
+     * <p>{@link CameraInfo#getTorchState()} can be used to query the torch state.
+     * If the camera doesn't have a flash unit or doesn't support torch (see
+     * {@link TorchState#UNAVAILABLE}), then the call will do nothing and the returned
+     * {@link ListenableFuture} will complete immediately with a failed result.
+     *
+     * <p>When the torch is enabled, the torch will remain enabled during photo capture regardless
+     * of {@link FlashMode} setting. When the torch is disabled, flash will function as
+     * {@link FlashMode} set by either {@link ImageCapture#setFlashMode(FlashMode)} or
+     * {@link ImageCaptureConfig.Builder#setFlashMode(FlashMode)}.
+     *
+     * @param torch true to open the torch, false to close it.
+     * @return A {@link ListenableFuture} which is successful when the torch was changed to the
+     * value specified. It fails when it is unable to change the torch state.
+     */
+    @NonNull
+    ListenableFuture<Void> enableTorch(boolean torch);
+
+    /**
+     * Starts a focus and metering action configured by the {@link FocusMeteringAction}.
+     *
+     * <p>It will trigger a auto focus action and enable AF/AE/AWB metering regions. The action
+     * is configured by a {@link FocusMeteringAction} which contains the configuration of
+     * multiple AF/AE/AWB {@link MeteringPoint}s, auto-cancel duration and
+     * {@link OnAutoFocusListener} to receive the auto focus result. Check
+     * {@link FocusMeteringAction}
+     * for more details.
+     *
+     * <p>Only one {@link FocusMeteringAction} is allowed to run at a time. If multiple
+     * {@link FocusMeteringAction} are executed in a row, only the latest one will work and
+     * other actions will be cancelled.
+     *
+     * <p>If the {@link FocusMeteringAction} specifies more AF/AE/AWB regions than what is
+     * supported on current device, only the first AF/AE/AWB regions which are supported on the
+     * device will be enabled.
      *
      * @param action the {@link FocusMeteringAction} to be executed.
      */
     void startFocusAndMetering(@NonNull FocusMeteringAction action);
 
     /**
-     * Cancels current {@link FocusMeteringAction}.
+     * Cancels current {@link FocusMeteringAction} and clears AF/AE/AWB regions.
      *
-     * <p>It clears the 3A regions and update current AF mode to CONTINOUS AF (if supported).
-     * If auto-focus does not complete, it will notify the {@link OnAutoFocusListener} with
-     * isFocusLocked set to false.
+     * <p>Clear the AF/AE/AWB regions and update current AF mode to CONTINUOUS AF (if
+     * supported). If auto-focus does not complete, it will notify the
+     * {@link OnAutoFocusListener} with isFocusLocked set to false.
      */
     void cancelFocusAndMetering();
 
@@ -59,10 +90,10 @@
      * applications' duty to clamp the ratio.
      *
      * @return a {@link ListenableFuture} which is finished when current repeating request
-     *     result contains the requested zoom ratio. It fails with
-     *     {@link OperationCanceledException} if there is newer value being set or camera is closed.
-     *     If ratio is out of range, it fails with
-     *     {@link CameraControl.ArgumentOutOfRangeException}.
+     * result contains the requested zoom ratio. It fails with
+     * {@link OperationCanceledException} if there is newer value being set or camera is closed.
+     * If ratio is out of range, it fails with
+     * {@link CameraControl.ArgumentOutOfRangeException}.
      */
     @NonNull
     ListenableFuture<Void> setZoomRatio(float ratio);
@@ -78,10 +109,10 @@
      * applications' duty to clamp the zoomPercentage within [0..1].
      *
      * @return a {@link ListenableFuture} which is finished when current repeating request
-     *     result contains the requested zoom percentage. It fails with
-     *     {@link OperationCanceledException} if there is newer value being set or camera is closed.
-     *     If percentage is out of range, it fails with
-     *     {@link CameraControl.ArgumentOutOfRangeException}.
+     * result contains the requested zoom percentage. It fails with
+     * {@link OperationCanceledException} if there is newer value being set or camera is closed.
+     * If percentage is out of range, it fails with
+     * {@link CameraControl.ArgumentOutOfRangeException}.
      */
     @NonNull
     ListenableFuture<Void> setZoomPercentage(@FloatRange(from = 0f, to = 1f) float percentage);
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java
index e5e60ee..4718d9c 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraControlInternal.java
@@ -60,14 +60,8 @@
      */
     void setFlashMode(@NonNull FlashMode flashMode);
 
-    /**
-     * Enable the torch or disable the torch
-     *
-     * @param torch true to open the torch, false to close it.
-     */
-    void enableTorch(boolean torch);
-
     /** Returns if current torch is enabled or not. */
+    // TODO(b/143514107): remove this API when CameraInfo#getTorchState implementation is done.
     boolean isTorchOn();
 
     /** Performs a AF trigger. */
@@ -99,8 +93,10 @@
         public void setFlashMode(@NonNull FlashMode flashMode) {
         }
 
+        @NonNull
         @Override
-        public void enableTorch(boolean torch) {
+        public ListenableFuture<Void> enableTorch(boolean torch) {
+            return Futures.immediateFuture(null);
         }
 
         @Override
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
index 20d2990..55c81a4 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraInfo.java
@@ -57,6 +57,20 @@
     LiveData<Boolean> isFlashAvailable();
 
     /**
+     * Returns a {@link LiveData} of current {@link TorchState}.
+     *
+     * <p>The torch state can be enabled or disabled via
+     * {@link CameraControl#enableTorch(boolean)} which will trigger the change event to the
+     * returned {@link LiveData}. Apps can either get immediate value via
+     * {@link LiveData#getValue()} or observe it via
+     * {@link LiveData#observe(LifecycleOwner, Observer)} to update torch UI accordingly.
+     *
+     * @return a {@link LiveData} containing current torch state.
+     */
+    @NonNull
+    LiveData<TorchState> getTorchState();
+
+    /**
      * Returns a {@link LiveData} of current zoom ratio.
      *
      * <p>Apps can either get immediate value via {@link LiveData#getValue()} (The value is never
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
index 4dd5977..2061eff 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraSelector.java
@@ -111,9 +111,10 @@
 
     /** Builder for a {@link CameraSelector}. */
     public static final class Builder {
-        private LinkedHashSet<CameraIdFilter> mCameraFilterSet = new LinkedHashSet<>();
+        private final LinkedHashSet<CameraIdFilter> mCameraFilterSet;
 
         public Builder() {
+            mCameraFilterSet = new LinkedHashSet<>();
         }
 
         private Builder(@NonNull LinkedHashSet<CameraIdFilter> cameraFilterSet) {
@@ -135,6 +136,17 @@
         }
 
         /**
+         * Appends a CameraIdFilter to the current set of filters.
+         * @hide
+         */
+        @RestrictTo(Scope.LIBRARY_GROUP)
+        @NonNull
+        public Builder appendFilter(@NonNull CameraIdFilter cameraFilter) {
+            mCameraFilterSet.add(cameraFilter);
+            return this;
+        }
+
+        /**
          * Generates a Builder from another CameraSelector object.
          *
          * @param cameraSelector An existing CameraSelector.
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java b/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java
index 3850350..61e747a 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/DisplayOrientedMeteringPointFactory.java
@@ -19,21 +19,31 @@
 import android.content.Context;
 import android.graphics.PointF;
 import android.view.Display;
+import android.view.View;
 import android.view.WindowManager;
 
 import androidx.annotation.NonNull;
 
 /**
- * A {@link MeteringPointFactory} that can create {@link MeteringPoint} by display oriented x, y.
+ * A {@link MeteringPointFactory} that can convert a {@link View} (x, y) into a
+ * {@link MeteringPoint} which can then be used to construct a {@link FocusMeteringAction} to
+ * start a focus and metering action.
  *
- * <p>This factory will consider the current display rotation and the lens facing to translate the
- * x/y correctly. Using this factory, apps do not need to handle the device rotation. They
- * can simply pass the x/y retrieved from their View. However if the camera preview is cropped,
- * scaled or rotated, it is apps' duty to transform the coordinates first.
+ * <p>For apps showing full camera preview in a View without any scaling, cropping or
+ * rotating applied, they can simply use view width and height to create the
+ * {@link DisplayOrientedMeteringPointFactory} and then pass {@link View} (x, y) to create a
+ * {@link MeteringPoint}. This factory will convert the (x, y) into the sensor (x, y) based on
+ * display rotation and {@link LensFacing}.
  *
- * <p> The width/height of this factory is the logical width/height of the preview FoV and X/Y
- * is the logical XY inside the FOV. User can set the width and height to 1.0 which will make the
- * XY the normalized coordinates [0..1].
+ * <p>If camera preview is scaled, cropped or rotated in the {@link View}, it is applications'
+ * duty to transform the coordinates properly so that the width and height of this
+ * factory represents the full Preview FOV and also the (x,y) passed to create
+ * {@link MeteringPoint} needs to be adjusted by apps to the  coordinates left-top (0,0) -
+ * right-bottom (width, height). For Example, if the preview is scaled to 2X from the center and
+ * is cropped in a {@link View}. Assuming that the dimension of View is (240, 320), then the
+ * width/height of this {@link DisplayOrientedMeteringPointFactory} should be (480, 640).  And
+ * the (x, y) from the {@link View} should be converted to (x + (480-240)/2, y + (640 - 320)/2)
+ * first.
  */
 public final class DisplayOrientedMeteringPointFactory extends MeteringPointFactory {
     /** The logical width of FoV in current display orientation */
@@ -49,17 +59,22 @@
     private final CameraInfo mCameraInfo;
 
     /**
-     * Creates the {@link MeteringPointFactory} with default display orientation.
+     * Creates a {@link DisplayOrientedMeteringPointFactory} for converting View (x, y) into a
+     * {@link MeteringPoint} based on default display's orientation and {@link LensFacing}.
      *
-     * <p>The width/height is the logical width/height of the preview FoV and X/Y is the logical
-     * XY inside the FOV. User can set the width and height to 1.0 which will make the XY the
-     * normalized coordinates [0..1]. Or user can set the width/height to the View width/height and
-     * then X/Y becomes the X/Y in the view.
+     * <p>The width/height of this factory forms a coordinate left-top (0, 0) - right-bottom
+     * (width, height) which represents the full camera preview FOV in default display's
+     * orientation. The (x, y) passed to {@link MeteringPointFactory#convertPoint(float, float)}
+     * should be adjusted to this coordinate first. For apps showing full camera preview in a
+     * {@link View}, it is as simple as passing View's width/height and passing View (x, y)
+     * directly to create a {@link MeteringPoint}.
      *
      * @param context    context to get the {@link WindowManager} for default display rotation.
      * @param lensFacing current lens facing.
-     * @param width      the logical width of FoV in current display orientation.
-     * @param height     the logical height of FoV in current display orientation.
+     * @param width      the width of the coordinate which are mapped to the full camera preview
+     *                   FOV in default display's orientation.
+     * @param height     the height of the coordinate which are mapped to the full camera preview
+     *                   FOVin default display's orientation.
      */
     public DisplayOrientedMeteringPointFactory(@NonNull Context context,
             @NonNull LensFacing lensFacing, float width, float height) {
@@ -68,18 +83,23 @@
     }
 
     /**
-     * Creates the  {@link MeteringPointFactory}  with custom display orientation. This is used
-     * in multi-display situation.
+     * Creates a {@link DisplayOrientedMeteringPointFactory} for converting View (x, y) into a
+     * {@link MeteringPoint} based on custom display's rotation and {@link LensFacing}. This is
+     * used in multi-display situation.
      *
-     * <p>The width/height is the logical width/height of the preview FoV and X/Y is the logical
-     * XY inside the FOV. User can set the width and height to 1.0 which will make the XY the
-     * normalized coordinates [0..1]. Or user can set the width/height to the View width/height and
-     * then X/Y becomes the X/Y in the view.
-     * {@link Display} is used to dete
+     * <p>The width/height of this factory forms a coordinate left-top (0, 0) - right-bottom
+     * (width, height) which represents the full camera preview FOV in given display's
+     * orientation. The (x, y) passed to {@link MeteringPointFactory#convertPoint(float, float)}
+     * should be adjusted to this coordinate first. For apps showing full camera preview in a
+     * {@link View}, it is as simple as passing View's width/height and passing View (x, y)
+     * directly to create a {@link MeteringPoint}.
+     *
      * @param display    {@link Display} to get the orientation from.
      * @param lensFacing current lens facing.
-     * @param width      the logical width of FoV in current display orientation.
-     * @param height     the logical height of FoV in current display orientation.
+     * @param width      the width of the coordinate which are mapped to the full camera preview
+     *                   FOV in given display's orientation.
+     * @param height     the height of the coordinate which are mapped to the full camera preview
+     *                   FOV in given display's orientation.
      */
     public DisplayOrientedMeteringPointFactory(@NonNull Display display,
             @NonNull LensFacing lensFacing, float width, float height) {
@@ -100,7 +120,7 @@
      */
     @NonNull
     @Override
-    protected PointF translatePoint(float x, float y) {
+    protected PointF convertPoint(float x, float y) {
         float width = mWidth;
         float height = mHeight;
 
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java b/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java
index 18822692..63e76b4 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/FlashMode.java
@@ -16,7 +16,14 @@
 
 package androidx.camera.core;
 
-/** The flash mode options when taking a picture using ImageCapture. */
+/**
+ * The flash mode options when taking a picture using ImageCapture.
+ *
+ * <p>When the torch is enabled via {@link CameraControl#enableTorch(boolean)}, the torch
+ * will remain enabled during photo capture regardless of flash mode setting. When
+ * the torch is disabled, flash will function as specified by
+ * {@link ImageCapture#setFlashMode(FlashMode)}.
+ */
 public enum FlashMode {
     /**
      * Auto flash. The flash will be used according to the camera system's determination when taking
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
index 9445a4b..c0ab509 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCapture.java
@@ -353,6 +353,10 @@
     /**
      * Set the flash mode.
      *
+     * <p>When the torch is enabled via {@link CameraControl#enableTorch(boolean)}, the torch
+     * will remain enabled during photo capture regardless of {@link FlashMode} setting. When
+     * the torch is disabled, flash will function as specified by {@link #setFlashMode(FlashMode)}.
+     *
      * @param flashMode the {@link FlashMode}.
      */
     public void setFlashMode(@NonNull FlashMode flashMode) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java b/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
index 75b34bb..0fd99ec 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/ImageCaptureConfig.java
@@ -812,6 +812,11 @@
         /**
          * Sets the {@link FlashMode}.
          *
+         * <p>When the torch is enabled via {@link CameraControl#enableTorch(boolean)}, the torch
+         * will remain enabled during photo capture regardless of {@link FlashMode} setting. When
+         * the torch is disabled, flash will function as specified by
+         * {@link #setFlashMode(FlashMode)}.
+         *
          * @param flashMode The requested flash mode.
          * @return The current Builder.
          */
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java b/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java
index 4423169..2f4ae8c 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/MeteringPointFactory.java
@@ -51,7 +51,7 @@
      * @return a {@link PointF} consisting of translated normalized crop region x/y,
      */
     @NonNull
-    protected abstract PointF translatePoint(float x, float y);
+    protected abstract PointF convertPoint(float x, float y);
 
     /**
      * Creates a {@link MeteringPoint} by x, y.
@@ -79,8 +79,8 @@
      */
     @NonNull
     public final MeteringPoint createPoint(float x, float y, float size, float weight) {
-        PointF translatedXY = translatePoint(x, y);
-        return new MeteringPoint(translatedXY.x, translatedXY.y, size, weight,
+        PointF convertedPoint = convertPoint(x, y);
+        return new MeteringPoint(convertedPoint.x, convertedPoint.y, size, weight,
                 mFovAspectRatio);
     }
 }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
index 0c4bffe..14d5404 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/Preview.java
@@ -250,11 +250,13 @@
      *
      * @param torch True if turn on torch, otherwise false
      */
+    // TODO(b/143514107): remove this API when CameraControl#enableTorch implementation is done.
     public void enableTorch(boolean torch) {
         getCurrentCameraControl().enableTorch(torch);
     }
 
     /** True if the torch is on */
+    // TODO(b/143514107): remove this API when CameraInfo#getTorchState implementation is done.
     public boolean isTorchOn() {
         return getCurrentCameraControl().isTorchOn();
     }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java b/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java
index 9f9fcef..63688e0 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/SensorOrientedMeteringPointFactory.java
@@ -108,7 +108,7 @@
      */
     @Override
     @NonNull
-    protected PointF translatePoint(float x, float y) {
+    protected PointF convertPoint(float x, float y) {
         PointF pt = new PointF(x / mWidth, y / mHeight);
         return pt;
     }
diff --git a/ui/ui-text/src/main/java/androidx/ui/input/EditorStyle.kt b/camera/camera-core/src/main/java/androidx/camera/core/TorchState.java
similarity index 63%
rename from ui/ui-text/src/main/java/androidx/ui/input/EditorStyle.kt
rename to camera/camera-core/src/main/java/androidx/camera/core/TorchState.java
index 691ba92..69ddc83 100644
--- a/ui/ui-text/src/main/java/androidx/ui/input/EditorStyle.kt
+++ b/camera/camera-core/src/main/java/androidx/camera/core/TorchState.java
@@ -14,18 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.camera.core;
 
-import androidx.ui.graphics.Color
-import androidx.ui.text.TextStyle
-
-/**
- * Data class holding text display attributes used for editors.
- */
-data class EditorStyle(
-    /** The  editor text style */
-    val textStyle: TextStyle? = null,
-
-    /**The selection background color */
-    val selectionColor: Color? = null
-)
+/** The camera flash torch state. */
+public enum TorchState {
+    /** The camera device does not have flash unit or does not support torch mode. */
+    UNAVAILABLE,
+    /** Torch is on. */
+    ENABLED,
+    /** Torch is off. */
+    DISABLED
+}
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java b/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
index 3e79f4a..1f21289 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/CameraSelectorTest.java
@@ -121,4 +121,19 @@
                 LensFacing.FRONT);
         cameraSelectorBuilder.build().getLensFacing();
     }
+
+    @Test
+    public void canAppendFilters() {
+        CameraIdFilter filter0 = mock(CameraIdFilter.class);
+        CameraIdFilter filter1 = mock(CameraIdFilter.class);
+        CameraIdFilter filter2 = mock(CameraIdFilter.class);
+
+        CameraSelector cameraSelector = new CameraSelector.Builder()
+                .appendFilter(filter0)
+                .appendFilter(filter1)
+                .appendFilter(filter2)
+                .build();
+
+        assertThat(cameraSelector.getCameraFilterSet()).containsAtLeast(filter0, filter1, filter2);
+    }
 }
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java b/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java
index 0cbda8f..ec58235 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/ShadowCameraX.java
@@ -43,6 +43,7 @@
 
     private static final CameraInfo DEFAULT_CAMERA_INFO = new CameraInfoInternal() {
         MutableLiveData<Boolean> mFlashAvailability = new MutableLiveData<>(Boolean.TRUE);
+        MutableLiveData<TorchState> mTorchState = new MutableLiveData<>(TorchState.DISABLED);
         MutableLiveData<Float> mZoomRatio = new MutableLiveData<>(1.0f);
         MutableLiveData<Float> mMaxZoomRatio = new MutableLiveData<>(4.0f);
         MutableLiveData<Float> mMinZoomRatio = new MutableLiveData<>(1.0f);
@@ -71,6 +72,12 @@
 
         @NonNull
         @Override
+        public LiveData<TorchState> getTorchState() {
+            return mTorchState;
+        }
+
+        @NonNull
+        @Override
         public LiveData<Float> getZoomRatio() {
             return mZoomRatio;
         }
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java b/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java
index bd8a81f..ee572be 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/impl/utils/CameraSelectorUtilTest.java
@@ -18,9 +18,16 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
 import android.os.Build;
 
 import androidx.camera.core.CameraDeviceConfig;
+import androidx.camera.core.CameraIdFilter;
 import androidx.camera.core.CameraSelector;
 import androidx.camera.core.LensFacing;
 import androidx.test.filters.SmallTest;
@@ -31,12 +38,17 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.annotation.internal.DoNotInstrument;
 
+import java.util.Collections;
+import java.util.Set;
+
 @SmallTest
 @RunWith(RobolectricTestRunner.class)
 @DoNotInstrument
 @Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
 public class CameraSelectorUtilTest {
 
+    private static final Set<String> SINGLE_ID_SET = Collections.singleton("0");
+
     @Test
     public void convertedCameraDeviceConfig_hasFrontLensFacing() {
         CameraSelector cameraSelector =
@@ -65,4 +77,33 @@
 
         convertedConfig.getCameraIdFilter();
     }
+
+    public void convertedCameraDeviceConfig_containsAllFilters() {
+        CameraIdFilter filter0 = createPassThroughMockFilter();
+        CameraIdFilter filter1 = createPassThroughMockFilter();
+        CameraIdFilter filter2 = createPassThroughMockFilter();
+
+        CameraSelector cameraSelector = new CameraSelector.Builder()
+                .appendFilter(filter0)
+                .appendFilter(filter1)
+                .appendFilter(filter2)
+                .build();
+
+        CameraDeviceConfig convertedConfig =
+                CameraSelectorUtil.toCameraDeviceConfig(cameraSelector);
+
+        CameraIdFilter combinedFilter = convertedConfig.getCameraIdFilter();
+
+        combinedFilter.filter(SINGLE_ID_SET);
+
+        verify(filter0, atLeastOnce()).filter(any());
+        verify(filter1, atLeastOnce()).filter(any());
+        verify(filter2, atLeastOnce()).filter(any());
+    }
+
+    private CameraIdFilter createPassThroughMockFilter() {
+        CameraIdFilter mockFilter = mock(CameraIdFilter.class);
+        when(mockFilter.filter(any())).then(i -> i.getArguments()[0]);
+        return mockFilter;
+    }
 }
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java b/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java
index e9c00f0..f18b2e8 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/CameraUtil.java
@@ -264,6 +264,7 @@
      *
      * @return false if no camera
      */
+    @SuppressWarnings("deprecation")
     public static boolean deviceHasCamera() {
         // TODO Think about external camera case,
         //  especially no built in camera but there might be some external camera
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java
index d1dae01..823c6eb 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java
@@ -107,9 +107,11 @@
     }
 
     @Override
-    public void enableTorch(boolean torch) {
+    @NonNull
+    public ListenableFuture<Void> enableTorch(boolean torch) {
         mIsTorchOn = torch;
         Log.d(TAG, "enableTorch(" + torch + ")");
+        return Futures.immediateFuture(null);
     }
 
     @Override
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
index 77fffb2..4b602fc 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeCameraInfoInternal.java
@@ -24,6 +24,7 @@
 import androidx.camera.core.CameraOrientationUtil;
 import androidx.camera.core.ImageOutputConfig.RotationValue;
 import androidx.camera.core.LensFacing;
+import androidx.camera.core.TorchState;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 
@@ -37,10 +38,11 @@
     private final int mSensorRotation;
     private final LensFacing mLensFacing;
     private MutableLiveData<Boolean> mFlashAvailability = new MutableLiveData<>(Boolean.TRUE);
+    private MutableLiveData<TorchState> mTorchState = new MutableLiveData<>(TorchState.DISABLED);
     private MutableLiveData<Float> mMaxZoom = new MutableLiveData<>(4.0f);
     private MutableLiveData<Float> mMinZoom = new MutableLiveData<>(1.0f);
     private MutableLiveData<Float> mZoomRatio = new MutableLiveData<>(1.0f);
-    private MutableLiveData<Float> mZoomPerecentage = new MutableLiveData<>(0f);
+    private MutableLiveData<Float> mZoomPercentage = new MutableLiveData<>(0f);
 
 
 
@@ -86,6 +88,12 @@
 
     @NonNull
     @Override
+    public LiveData<TorchState> getTorchState() {
+        return mTorchState;
+    }
+
+    @NonNull
+    @Override
     public LiveData<Float> getZoomRatio() {
         return mZoomRatio;
     }
@@ -105,6 +113,6 @@
     @NonNull
     @Override
     public LiveData<Float> getZoomPercentage() {
-        return mZoomPerecentage;
+        return mZoomPercentage;
     }
 }
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java b/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java
index dab8a31..55149f4 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/TextureViewMeteringPointFactory.java
@@ -48,7 +48,7 @@
      */
     @NonNull
     @Override
-    protected PointF translatePoint(float x, float y) {
+    protected PointF convertPoint(float x, float y) {
         Matrix transform = new Matrix();
         mTextureView.getTransform(transform);
 
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java
index 57223a2..f770e0b 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/CaptureViewOnTouchListener.java
@@ -222,6 +222,7 @@
 
     private void broadcastPicture(File file) {
         if (Build.VERSION.SDK_INT < 24) {
+            @SuppressWarnings("deprecation")
             Intent intent = new Intent(Camera.ACTION_NEW_PICTURE);
             intent.setData(Uri.fromFile(file));
             mCameraView.getContext().sendBroadcast(intent);
@@ -234,6 +235,7 @@
 
     private void broadcastVideo(File file) {
         if (Build.VERSION.SDK_INT < 24) {
+            @SuppressWarnings("deprecation")
             Intent intent = new Intent(Camera.ACTION_NEW_VIDEO);
             intent.setData(Uri.fromFile(file));
             mCameraView.getContext().sendBroadcast(intent);
diff --git a/concurrent/futures-ktx/api/1.1.0-alpha01.txt b/concurrent/futures-ktx/api/1.1.0-alpha01.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/1.1.0-alpha01.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    ctor public ListenableFutureKt();
+    method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/api/api_lint.ignore b/concurrent/futures-ktx/api/api_lint.ignore
new file mode 100644
index 0000000..0d817eb
--- /dev/null
+++ b/concurrent/futures-ktx/api/api_lint.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+DocumentExceptions: androidx.concurrent.futures.ListenableFutureKt#await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T>):
+    Method ListenableFutureKt.await appears to be throwing java.lang.Throwable; this should be recorded with a @Throws annotation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
+
+
+MissingNullability: androidx.concurrent.futures.ListenableFutureKt#await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T>):
+    Missing nullability on method `await` return
diff --git a/concurrent/futures-ktx/api/current.txt b/concurrent/futures-ktx/api/current.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/current.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    ctor public ListenableFutureKt();
+    method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/api/public_plus_experimental_1.1.0-alpha01.txt b/concurrent/futures-ktx/api/public_plus_experimental_1.1.0-alpha01.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/public_plus_experimental_1.1.0-alpha01.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    ctor public ListenableFutureKt();
+    method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/api/public_plus_experimental_current.txt b/concurrent/futures-ktx/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/public_plus_experimental_current.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    ctor public ListenableFutureKt();
+    method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/api/restricted_1.1.0-alpha01.txt b/concurrent/futures-ktx/api/restricted_1.1.0-alpha01.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/restricted_1.1.0-alpha01.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    ctor public ListenableFutureKt();
+    method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/api/restricted_current.txt b/concurrent/futures-ktx/api/restricted_current.txt
new file mode 100644
index 0000000..b0c8c4b
--- /dev/null
+++ b/concurrent/futures-ktx/api/restricted_current.txt
@@ -0,0 +1,10 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    ctor public ListenableFutureKt();
+    method public static suspend <T> Object! await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/build.gradle b/concurrent/futures-ktx/build.gradle
new file mode 100644
index 0000000..84f44c7
--- /dev/null
+++ b/concurrent/futures-ktx/build.gradle
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import androidx.build.AndroidXExtension
+import androidx.build.LibraryGroups
+import androidx.build.LibraryVersions
+import androidx.build.Publish
+
+import static androidx.build.dependencies.DependenciesKt.*
+
+plugins {
+    id("AndroidXPlugin")
+    id("kotlin")
+}
+
+dependencies {
+    api(project(":concurrent:concurrent-futures"))
+    api(KOTLIN_STDLIB)
+    api(KOTLIN_COROUTINES_CORE)
+
+    testImplementation(JUNIT)
+    testImplementation(KOTLIN_TEST)
+    testImplementation(KOTLIN_COROUTINES_TEST)
+    testImplementation(ANDROIDX_TEST_EXT_JUNIT)
+    testImplementation(ANDROIDX_TEST_CORE)
+}
+
+androidx {
+    name = "AndroidX Futures Kotlin Extensions"
+    publish = Publish.SNAPSHOT_AND_RELEASE
+    mavenVersion = LibraryVersions.FUTURES
+    mavenGroup = LibraryGroups.CONCURRENT
+    inceptionYear = "2019"
+    description = "Kotlin Extensions for Androidx implementation of Guava's ListenableFuture"
+    url = AndroidXExtension.ARCHITECTURE_URL
+}
diff --git a/concurrent/futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt b/concurrent/futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt
new file mode 100644
index 0000000..7328609
--- /dev/null
+++ b/concurrent/futures-ktx/src/main/java/androidx/concurrent/futures/ListenableFuture.kt
@@ -0,0 +1,105 @@
+/*
+ * 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.concurrent.futures
+
+import androidx.concurrent.futures.AbstractResolvableFuture.getUninterruptibly
+import com.google.common.util.concurrent.ListenableFuture
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.suspendCancellableCoroutine
+import java.util.concurrent.ExecutionException
+import java.util.concurrent.Future
+import kotlin.coroutines.resumeWithException
+
+/**
+ * Awaits completion of `this` [ListenableFuture] without blocking a thread.
+ *
+ * This suspend function is cancellable.
+ *
+ * If the [kotlinx.coroutines.Job] of the current coroutine is cancelled or completed while this
+ * suspending function is
+ * waiting, this function stops waiting for the future and immediately resumes with
+ * [CancellationException][kotlinx.coroutines.CancellationException].
+ *
+ * This method is intended to be used with one-shot Futures, so on coroutine cancellation, the
+ * Future is cancelled as well. If cancelling the given future is undesired, use
+ * [kotlinx.coroutines.NonCancellable].
+ */
+suspend fun <T> ListenableFuture<T>.await(): T {
+    try {
+        if (isDone) return getUninterruptibly(this)
+    } catch (e: ExecutionException) {
+        // ExecutionException is the only kind of exception that can be thrown from a gotten
+        // Future, other than CancellationException. Cancellation is propagated upward so that
+        // the coroutine running this suspend function may process it.
+        // Any other Exception showing up here indicates a very fundamental bug in a
+        // Future implementation.
+        throw e.nonNullCause()
+    }
+
+    return suspendCancellableCoroutine { cont: CancellableContinuation<T> ->
+        addListener(
+            ToContinuation(this, cont),
+            DirectExecutor.INSTANCE
+        )
+        cont.invokeOnCancellation {
+            cancel(false)
+        }
+    }
+}
+
+/**
+ * Propagates the outcome of [futureToObserve] to [continuation] on completion.
+ *
+ * Cancellation is propagated as cancelling the continuation. If [futureToObserve] completes
+ * and fails, the cause of the Future will be propagated without a wrapping
+ * [ExecutionException] when thrown.
+ */
+private class ToContinuation<T>(
+    val futureToObserve: ListenableFuture<T>,
+    val continuation: CancellableContinuation<T>
+) : Runnable {
+    override fun run() {
+        if (futureToObserve.isCancelled) {
+            continuation.cancel()
+        } else {
+            try {
+                continuation.resumeWith(
+                    Result.success(getUninterruptibly(futureToObserve))
+                )
+            } catch (e: ExecutionException) {
+                // ExecutionException is the only kind of exception that can be thrown from a gotten
+                // Future. Anything else showing up here indicates a very fundamental bug in a
+                // Future implementation.
+                continuation.resumeWithException(e.nonNullCause())
+            }
+        }
+    }
+}
+
+/**
+ * Returns the cause from an [ExecutionException] thrown by a [Future.get] or similar.
+ *
+ * [ExecutionException] _always_ wraps a non-null cause when Future.get() throws. A Future cannot
+ * fail without a non-null `cause`, because the only way a Future _can_ fail is an uncaught
+ * [Exception].
+ *
+ * If this !! throws [NullPointerException], a Future is breaking its interface contract and losing
+ * state - a serious fundamental bug.
+ */
+private fun ExecutionException.nonNullCause(): Throwable {
+    return this.cause!!
+}
\ No newline at end of file
diff --git a/concurrent/futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt b/concurrent/futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt
new file mode 100644
index 0000000..21a9530
--- /dev/null
+++ b/concurrent/futures-ktx/src/test/java/androidx/concurrent/futures/ListenableFutureTest.kt
@@ -0,0 +1,149 @@
+/*
+ * 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.concurrent.futures
+
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.async
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.test.runBlockingTest
+import kotlinx.coroutines.yield
+import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.CoreMatchers.instanceOf
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicInteger
+import kotlin.test.assertFailsWith
+
+@RunWith(JUnit4::class)
+class ListenableFutureTest {
+    private var actionIndex = AtomicInteger()
+    private var finished = AtomicBoolean()
+
+    @Test
+    fun testFutureWithResult() {
+        val future: ResolvableFuture<Int> = ResolvableFuture.create()
+        val job = GlobalScope.launch {
+            val result = future.await()
+            assertThat(result, `is`(10))
+        }
+        future.set(10)
+        runBlocking {
+            job.join()
+        }
+    }
+
+    @Test
+    fun testFutureWithException() {
+        val future: ResolvableFuture<Int> = ResolvableFuture.create()
+        val exception = RuntimeException("Something bad happened")
+        val job = GlobalScope.launch {
+            try {
+                future.await()
+            } catch (throwable: Throwable) {
+                assertThat(throwable, `is`(instanceOf(RuntimeException::class.java)))
+                assertThat(throwable.message, `is`(exception.message))
+            }
+        }
+        future.setException(exception)
+        runBlocking {
+            job.join()
+        }
+    }
+
+    @Test
+    fun testFutureCancellation() {
+        val future: ResolvableFuture<Int> = ResolvableFuture.create()
+        val job = GlobalScope.launch {
+            future.await()
+        }
+        future.cancel(true)
+        runBlocking {
+            job.join()
+            assertThat(job.isCancelled, `is`(true))
+        }
+    }
+
+    @ExperimentalCoroutinesApi
+    @Test
+    fun testAwaitWithCancellation() = runBlockingTest {
+        val future = ResolvableFuture.create<Int>()
+        val deferred = async {
+            future.await()
+        }
+
+        deferred.cancel(TestCancellationException())
+        assertFailsWith<TestCancellationException> {
+            deferred.await()
+            expectUnreached()
+        }
+    }
+
+    @ExperimentalCoroutinesApi
+    @Test
+    fun testCancellableAwait() = runBlocking {
+        expect(1)
+        val toAwait = ResolvableFuture.create<String>()
+        val job = launch(start = CoroutineStart.UNDISPATCHED) {
+            expect(2)
+            try {
+                toAwait.await() // suspends
+            } catch (e: CancellationException) {
+                expect(5) // should throw cancellation exception
+                throw e
+            }
+        }
+        expect(3)
+        job.cancel() // cancel the job
+        toAwait.set("fail") // too late, the waiting job was already cancelled
+        expect(4) // job processing of cancellation was scheduled, not executed yet
+        yield() // yield main thread to job
+        finish(6)
+    }
+
+    /**
+     * Asserts that this invocation is `index`-th in the execution sequence (counting from one).
+     */
+    private fun expect(index: Int) {
+        val wasIndex = actionIndex.incrementAndGet()
+        check(index == wasIndex) { "Expecting action index $index but it is actually $wasIndex" }
+    }
+
+    /**
+     * Asserts that this it the last action in the test. It must be invoked by any test that used
+     * [expect].
+     */
+    private fun finish(index: Int) {
+        expect(index)
+        check(!finished.getAndSet(true)) { "Should call 'finish(...)' at most once" }
+    }
+
+    /**
+     * Asserts that this line is never executed.
+     */
+    private fun expectUnreached() {
+        error("Should not be reached")
+    }
+
+    private class TestCancellationException : CancellationException()
+}
diff --git a/concurrent/futures/api/restricted_1.0.0-rc01.txt b/concurrent/futures/api/restricted_1.0.0-rc01.txt
index 6dabf0b..3103236 100644
--- a/concurrent/futures/api/restricted_1.0.0-rc01.txt
+++ b/concurrent/futures/api/restricted_1.0.0-rc01.txt
@@ -34,6 +34,11 @@
     method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
   }
 
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public enum DirectExecutor implements java.util.concurrent.Executor {
+    method public void execute(Runnable!);
+    enum_constant public static final androidx.concurrent.futures.DirectExecutor INSTANCE;
+  }
+
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResolvableFuture<V> extends androidx.concurrent.futures.AbstractResolvableFuture<V> {
     method public static <V> androidx.concurrent.futures.ResolvableFuture<V!>! create();
     method public boolean set(V?);
diff --git a/concurrent/futures/api/restricted_1.1.0-alpha01.txt b/concurrent/futures/api/restricted_1.1.0-alpha01.txt
index 6dabf0b..3103236 100644
--- a/concurrent/futures/api/restricted_1.1.0-alpha01.txt
+++ b/concurrent/futures/api/restricted_1.1.0-alpha01.txt
@@ -34,6 +34,11 @@
     method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
   }
 
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public enum DirectExecutor implements java.util.concurrent.Executor {
+    method public void execute(Runnable!);
+    enum_constant public static final androidx.concurrent.futures.DirectExecutor INSTANCE;
+  }
+
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResolvableFuture<V> extends androidx.concurrent.futures.AbstractResolvableFuture<V> {
     method public static <V> androidx.concurrent.futures.ResolvableFuture<V!>! create();
     method public boolean set(V?);
diff --git a/concurrent/futures/api/restricted_current.txt b/concurrent/futures/api/restricted_current.txt
index 6dabf0b..3103236 100644
--- a/concurrent/futures/api/restricted_current.txt
+++ b/concurrent/futures/api/restricted_current.txt
@@ -34,6 +34,11 @@
     method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
   }
 
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public enum DirectExecutor implements java.util.concurrent.Executor {
+    method public void execute(Runnable!);
+    enum_constant public static final androidx.concurrent.futures.DirectExecutor INSTANCE;
+  }
+
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResolvableFuture<V> extends androidx.concurrent.futures.AbstractResolvableFuture<V> {
     method public static <V> androidx.concurrent.futures.ResolvableFuture<V!>! create();
     method public boolean set(V?);
diff --git a/concurrent/futures/lint-baseline.xml b/concurrent/futures/lint-baseline.xml
index 05fdc84..7e9e712 100644
--- a/concurrent/futures/lint-baseline.xml
+++ b/concurrent/futures/lint-baseline.xml
@@ -92,6 +92,17 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        errorLine1="    public void execute(Runnable command) {"
+        errorLine2="                        ~~~~~~~~">
+        <location
+            file="src/main/java/androidx/concurrent/futures/DirectExecutor.java"
+            line="34"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="UnknownNullness"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
         errorLine1="    public static &lt;V> ResolvableFuture&lt;V> create() {"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java b/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java
index 9e6051b..3acecce 100644
--- a/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java
+++ b/concurrent/futures/src/main/java/androidx/concurrent/futures/AbstractResolvableFuture.java
@@ -844,8 +844,11 @@
 
     /**
      * internal dependency on other /util/concurrent classes.
+     *
+     * @hide
      */
-    private static <V> V getUninterruptibly(Future<V> future) throws ExecutionException {
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    static <V> V getUninterruptibly(Future<V> future) throws ExecutionException {
         boolean interrupted = false;
         try {
             while (true) {
diff --git a/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java b/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java
index b12180f..9f1244b 100644
--- a/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java
+++ b/concurrent/futures/src/main/java/androidx/concurrent/futures/DirectExecutor.java
@@ -16,13 +16,18 @@
 
 package androidx.concurrent.futures;
 
+import androidx.annotation.RestrictTo;
+
 import java.util.concurrent.Executor;
 
 /**
  * An {@link Executor} that runs each task in the thread that invokes {@link Executor#execute
  * execute}.
+ *
+ * @hide
  */
-enum DirectExecutor implements Executor {
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public enum DirectExecutor implements Executor {
     INSTANCE;
 
     @Override
diff --git a/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java b/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
index b239e5b..09ef66a 100644
--- a/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
+++ b/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java
@@ -36,7 +36,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
+import androidx.test.filters.MediumTest;
 import androidx.test.rule.ActivityTestRule;
 
 import org.junit.Before;
@@ -47,7 +47,7 @@
 import org.mockito.InOrder;
 
 @SuppressWarnings({"unchecked", "rawtypes"})
-@SmallTest
+@MediumTest
 @RunWith(AndroidJUnit4.class)
 public class CoordinatorLayoutTouchEventTest {
     private static final Touch[] NO_TOUCHES = new Touch[] {};
diff --git a/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java b/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java
index a8214fd..31d258c 100644
--- a/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java
@@ -191,13 +191,13 @@
      * @param packageManager The current package manager
      * @return The localized description.
      */
+    @SuppressWarnings("deprecation")
     @Nullable
     public static String loadDescription(
             @NonNull AccessibilityServiceInfo info, @NonNull PackageManager packageManager) {
         if (Build.VERSION.SDK_INT >= 16) {
             return info.loadDescription(packageManager);
         } else {
-            //noinspection deprecation
             return info.getDescription();
         }
     }
@@ -282,11 +282,11 @@
      * @see #CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY
      * @see #CAPABILITY_CAN_FILTER_KEY_EVENTS
      */
+    @SuppressWarnings("deprecation")
     public static int getCapabilities(@NonNull AccessibilityServiceInfo info) {
         if (Build.VERSION.SDK_INT >= 18) {
             return info.getCapabilities();
         } else {
-            //noinspection deprecation
             if (info.getCanRetrieveWindowContent()) {
                 return CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT;
             }
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompat.java b/core/core/src/main/java/androidx/core/app/NotificationCompat.java
index 162db98..3df4449d 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompat.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompat.java
@@ -764,6 +764,7 @@
          * @param channelId The constructed Notification will be posted on this
          *      NotificationChannel.
          */
+        @SuppressWarnings("deprecation")
         public Builder(@NonNull Context context, @NonNull String channelId) {
             mContext = context;
             mChannelId = channelId;
@@ -772,13 +773,13 @@
             mNotification.when = System.currentTimeMillis();
             mNotification.audioStreamType = Notification.STREAM_DEFAULT;
             mPriority = PRIORITY_DEFAULT;
-            mPeople = new ArrayList<String>();
+            mPeople = new ArrayList<>();
             mAllowSystemGeneratedContextualActions = true;
         }
 
         /**
-         * @deprecated use {@link #NotificationCompat.Builder(Context,String)} instead.
-         * All posted Notifications must specify a NotificationChannel Id.
+         * @deprecated use {@code Builder(Context, String)} instead. All posted notifications must
+         * specify a NotificationChannel ID.
          */
         @Deprecated
         public Builder(Context context) {
@@ -991,6 +992,7 @@
          * @param highPriority Passing true will cause this notification to be sent
          *          even if other notifications are suppressed.
          */
+        @SuppressWarnings("deprecation")
         public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority) {
             mFullScreenIntent = intent;
             setFlag(FLAG_HIGH_PRIORITY, highPriority);
@@ -1282,6 +1284,7 @@
          * @param uri A URI for the person.
          * @see Notification#EXTRA_PEOPLE
          */
+        @SuppressWarnings("deprecation")
         public Builder addPerson(String uri) {
             mPeople.add(uri);
             return this;
@@ -3306,6 +3309,7 @@
         }
 
         // Package private access to avoid adding a SyntheticAccessor for the Action.Builder class.
+        @SuppressWarnings("deprecation")
         Action(@Nullable IconCompat icon, CharSequence title, PendingIntent intent,
                 Bundle extras,
                 RemoteInput[] remoteInputs, RemoteInput[] dataOnlyRemoteInputs,
@@ -3329,6 +3333,7 @@
         /**
          * @deprecated use {@link #getIconCompat()} instead.
          */
+        @SuppressWarnings("deprecation")
         @Deprecated
         public int getIcon() {
             return icon;
@@ -3337,6 +3342,7 @@
         /**
          * Return the icon associated with this Action.
          */
+        @SuppressWarnings("deprecation")
         public @Nullable IconCompat getIconCompat() {
             if (mIcon == null && icon != 0) {
                 mIcon = IconCompat.createWithResource(null, "", icon);
@@ -4120,6 +4126,7 @@
         private int mContentIcon;
         private int mContentIconGravity = DEFAULT_CONTENT_ICON_GRAVITY;
         private int mContentActionIndex = UNSET_ACTION_INDEX;
+        @SuppressWarnings("deprecation")
         private int mCustomSizePreset = SIZE_DEFAULT;
         private int mCustomContentHeight;
         private int mGravity = DEFAULT_GRAVITY;
@@ -4134,6 +4141,7 @@
         public WearableExtender() {
         }
 
+        @SuppressWarnings("deprecation")
         public WearableExtender(Notification notification) {
             Bundle extras = getExtras(notification);
             Bundle wearableBundle = extras != null ? extras.getBundle(EXTRA_WEARABLE_EXTENSIONS)
@@ -4185,6 +4193,7 @@
          * called by the {@link NotificationCompat.Builder#extend} method of
          * {@link NotificationCompat.Builder}.
          */
+        @SuppressWarnings("deprecation")
         @Override
         public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
             Bundle wearableBundle = new Bundle();
@@ -4261,7 +4270,7 @@
                         actionCompat.getActionIntent());
             } else {
                 actionBuilder = new Notification.Action.Builder(
-                        actionCompat.getIcon(), actionCompat.getTitle(),
+                        actionCompat.getIconCompat().getResId(), actionCompat.getTitle(),
                         actionCompat.getActionIntent());
             }
             Bundle actionExtras;
@@ -5755,6 +5764,7 @@
      * @param notification The notification to inspect.
      * @param actionIndex The index of the action to retrieve.
      */
+    @SuppressWarnings("deprecation")
     public static Action getAction(Notification notification, int actionIndex) {
         if (Build.VERSION.SDK_INT >= 20) {
             return getActionCompatFromAction(notification.actions[actionIndex]);
@@ -5791,6 +5801,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     @RequiresApi(20)
     static Action getActionCompatFromAction(Notification.Action action) {
         final RemoteInput[] remoteInputs;
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
index 3711994..aac35da 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
@@ -60,6 +60,7 @@
     // @RequiresApi(21) - uncomment when lint bug is fixed.
     private RemoteViews mHeadsUpContentView;
 
+    @SuppressWarnings("deprecation")
     NotificationCompatBuilder(NotificationCompat.Builder b) {
         mBuilderCompat = b;
         if (Build.VERSION.SDK_INT >= 26) {
@@ -262,14 +263,17 @@
     private void addAction(NotificationCompat.Action action) {
         if (Build.VERSION.SDK_INT >= 20) {
             Notification.Action.Builder actionBuilder;
+            IconCompat iconCompat = action.getIconCompat();
             if (Build.VERSION.SDK_INT >= 23) {
-                IconCompat iconCompat = action.getIconCompat();
                 actionBuilder = new Notification.Action.Builder(
-                        iconCompat == null ? null : iconCompat.toIcon(), action.getTitle(),
-                                action.getActionIntent());
+                        iconCompat != null ? iconCompat.toIcon() : null,
+                        action.getTitle(),
+                        action.getActionIntent());
             } else {
                 actionBuilder = new Notification.Action.Builder(
-                        action.getIcon(), action.getTitle(), action.getActionIntent());
+                        iconCompat != null ? iconCompat.getResId() : 0,
+                        action.getTitle(),
+                        action.getActionIntent());
             }
             if (action.getRemoteInputs() != null) {
                 for (android.app.RemoteInput remoteInput : RemoteInput.fromCompat(
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java b/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java
index 4d07e31..35a7b45 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompatJellybean.java
@@ -24,6 +24,7 @@
 import android.util.SparseArray;
 
 import androidx.annotation.RequiresApi;
+import androidx.core.graphics.drawable.IconCompat;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -137,7 +138,11 @@
 
     public static Bundle writeActionAndGetExtras(
             Notification.Builder builder, NotificationCompat.Action action) {
-        builder.addAction(action.getIcon(), action.getTitle(), action.getActionIntent());
+        IconCompat iconCompat = action.getIconCompat();
+        builder.addAction(
+                iconCompat != null ? iconCompat.getResId() : 0,
+                action.getTitle(),
+                action.getActionIntent());
         Bundle actionExtras = new Bundle(action.getExtras());
         if (action.getRemoteInputs() != null) {
             actionExtras.putParcelableArray(NotificationCompatExtras.EXTRA_REMOTE_INPUTS,
@@ -247,7 +252,8 @@
 
     static Bundle getBundleForAction(NotificationCompat.Action action) {
         Bundle bundle = new Bundle();
-        bundle.putInt(KEY_ICON, action.getIcon());
+        IconCompat icon = action.getIconCompat();
+        bundle.putInt(KEY_ICON, icon != null ? icon.getResId() : 0);
         bundle.putCharSequence(KEY_TITLE, action.getTitle());
         bundle.putParcelable(KEY_ACTION_INTENT, action.getActionIntent());
         Bundle actionExtras;
diff --git a/core/core/src/main/java/androidx/core/content/ContextCompat.java b/core/core/src/main/java/androidx/core/content/ContextCompat.java
index 597f879..6b0af66 100644
--- a/core/core/src/main/java/androidx/core/content/ContextCompat.java
+++ b/core/core/src/main/java/androidx/core/content/ContextCompat.java
@@ -448,6 +448,7 @@
      *           The value 0 is an invalid identifier.
      * @return Drawable An object that can be used to draw this resource.
      */
+    @SuppressWarnings("deprecation")
     @Nullable
     public static Drawable getDrawable(@NonNull Context context, @DrawableRes int id) {
         if (Build.VERSION.SDK_INT >= 21) {
@@ -485,6 +486,7 @@
      * @throws android.content.res.Resources.NotFoundException if the given ID
      *         does not exist.
      */
+    @SuppressWarnings("deprecation")
     @Nullable
     public static ColorStateList getColorStateList(@NonNull Context context,
             @ColorRes int id) {
@@ -508,6 +510,7 @@
      * @throws android.content.res.Resources.NotFoundException if the given ID
      *         does not exist.
      */
+    @SuppressWarnings("deprecation")
     @ColorInt
     public static int getColor(@NonNull Context context, @ColorRes int id) {
         if (Build.VERSION.SDK_INT >= 23) {
diff --git a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
index bcd55b3..b7e7452 100644
--- a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
@@ -30,11 +30,11 @@
      *
      * @see PackageInfo#getLongVersionCode()
      */
+    @SuppressWarnings("deprecation")
     public static long getLongVersionCode(@NonNull PackageInfo info) {
         if (Build.VERSION.SDK_INT >= 28) {
             return info.getLongVersionCode();
         }
-        //noinspection deprecation
         return info.versionCode;
     }
 
diff --git a/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java b/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java
index 5c3401f..642d767 100644
--- a/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/PermissionInfoCompat.java
@@ -67,13 +67,13 @@
     /**
      * Return the base permission type of a {@link PermissionInfo}.
      */
+    @SuppressWarnings("deprecation")
     @SuppressLint("WrongConstant") // for "PermissionInfo.PROTECTION_MASK_BASE"
     @Protection
     public static int getProtection(@NonNull PermissionInfo permissionInfo) {
         if (Build.VERSION.SDK_INT >= 28) {
             return permissionInfo.getProtection();
         } else {
-            //noinspection deprecation
             return permissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
         }
     }
@@ -81,13 +81,13 @@
     /**
      * Return the additional protection flags of a {@link PermissionInfo}.
      */
+    @SuppressWarnings("deprecation")
     @SuppressLint("WrongConstant") // for "~PermissionInfo.PROTECTION_MASK_BASE"
     @ProtectionFlags
     public static int getProtectionFlags(@NonNull PermissionInfo permissionInfo) {
         if (Build.VERSION.SDK_INT >= 28) {
             return permissionInfo.getProtectionFlags();
         } else {
-            //noinspection deprecation
             return permissionInfo.protectionLevel & ~PermissionInfo.PROTECTION_MASK_BASE;
         }
     }
diff --git a/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java b/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java
index 855c25c..01a48df 100644
--- a/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java
+++ b/core/core/src/main/java/androidx/core/database/CursorWindowCompat.java
@@ -36,6 +36,7 @@
      * <p>
      * Prior to Android P, this method will return a CursorWindow of size defined by the platform.
      */
+    @SuppressWarnings("deprecation")
     @NonNull
     public static CursorWindow create(@Nullable String name, long windowSizeBytes) {
         if (Build.VERSION.SDK_INT >= 28) {
@@ -43,7 +44,6 @@
         } else if (Build.VERSION.SDK_INT >= 15) {
             return new CursorWindow(name);
         } else {
-            //noinspection deprecation
             return new CursorWindow(false);
         }
     }
diff --git a/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java b/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
index 423c1fd..e6b4617 100644
--- a/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
+++ b/core/core/src/main/java/androidx/core/os/ConfigurationCompat.java
@@ -35,6 +35,7 @@
      *
      * @return The locale list.
      */
+    @SuppressWarnings("deprecation")
     @NonNull
     public static LocaleListCompat getLocales(@NonNull Configuration configuration) {
         if (SDK_INT >= 24) {
diff --git a/core/core/src/main/java/androidx/core/text/HtmlCompat.java b/core/core/src/main/java/androidx/core/text/HtmlCompat.java
index 8d9b932..b132c00 100644
--- a/core/core/src/main/java/androidx/core/text/HtmlCompat.java
+++ b/core/core/src/main/java/androidx/core/text/HtmlCompat.java
@@ -141,12 +141,12 @@
      * Invokes {@link Html#fromHtml(String, int)} on API 24 and newer, otherwise {@code flags} are
      * ignored and {@link Html#fromHtml(String)} is used.
      */
+    @SuppressWarnings("deprecation")
     @NonNull
     public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags) {
         if (Build.VERSION.SDK_INT >= 24) {
             return Html.fromHtml(source, flags);
         }
-        //noinspection deprecation
         return Html.fromHtml(source);
     }
 
@@ -155,13 +155,13 @@
      * otherwise {@code flags} are ignored and
      * {@link Html#fromHtml(String, ImageGetter, TagHandler)} is used.
      */
+    @SuppressWarnings("deprecation")
     @NonNull
     public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags,
             @Nullable ImageGetter imageGetter, @Nullable TagHandler tagHandler) {
         if (Build.VERSION.SDK_INT >= 24) {
             return Html.fromHtml(source, flags, imageGetter, tagHandler);
         }
-        //noinspection deprecation
         return Html.fromHtml(source, imageGetter, tagHandler);
     }
 
@@ -169,12 +169,12 @@
      * Invokes {@link Html#toHtml(Spanned, int)} on API 24 or newer, otherwise {@code options} are
      * ignored and {@link Html#toHtml(Spanned)} is used.
      */
+    @SuppressWarnings("deprecation")
     @NonNull
     public static String toHtml(@NonNull Spanned text, @ToHtmlOptions int options) {
         if (Build.VERSION.SDK_INT >= 24) {
             return Html.toHtml(text, options);
         }
-        //noinspection deprecation
         return Html.toHtml(text);
     }
 
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
index 9e7c758..93e5a90 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
@@ -238,6 +238,7 @@
      *
      * @deprecated Use {@link AccessibilityEvent#appendRecord(AccessibilityRecord)} directly.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static void appendRecord(AccessibilityEvent event, AccessibilityRecordCompat record) {
         event.appendRecord((AccessibilityRecord) record.getImpl());
@@ -251,6 +252,7 @@
      *
      * @deprecated Use {@link AccessibilityEvent#getRecord(int)} directly.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static AccessibilityRecordCompat getRecord(AccessibilityEvent event, int index) {
         return new AccessibilityRecordCompat(event.getRecord(index));
@@ -271,6 +273,7 @@
      *
      * @deprecated Use the {@link AccessibilityEvent} directly as {@link AccessibilityRecord}.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static AccessibilityRecordCompat asRecord(AccessibilityEvent event) {
         return new AccessibilityRecordCompat(event);
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java
index 432e67c..acdf35e 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityManagerCompat.java
@@ -40,6 +40,7 @@
      * @deprecated Use {@link AccessibilityManager#addAccessibilityStateChangeListener(
      *             AccessibilityManager.AccessibilityStateChangeListener)} directly.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
             AccessibilityStateChangeListener listener) {
@@ -60,6 +61,7 @@
      * @deprecated Use {@link AccessibilityManager#removeAccessibilityStateChangeListener(
      *             AccessibilityManager.AccessibilityStateChangeListener)} directly.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
             AccessibilityStateChangeListener listener) {
@@ -70,6 +72,7 @@
                 new AccessibilityStateChangeListenerWrapper(listener));
     }
 
+    @SuppressWarnings("deprecation")
     private static class AccessibilityStateChangeListenerWrapper
             implements AccessibilityManager.AccessibilityStateChangeListener {
         AccessibilityStateChangeListener mListener;
@@ -232,6 +235,7 @@
      * @deprecated Use {@link AccessibilityManager.AccessibilityStateChangeListener} directly
      * instead of this listener.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static abstract class AccessibilityStateChangeListenerCompat
             implements AccessibilityStateChangeListener {
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
index 1d3090f..48a81ec 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -948,6 +948,7 @@
          * @return If the item is a heading.
          * @deprecated Use {@link AccessibilityNodeInfoCompat#isHeading()}
          */
+        @SuppressWarnings("deprecation")
         @Deprecated
         public boolean isHeading() {
             if (Build.VERSION.SDK_INT >= 19) {
@@ -1612,6 +1613,7 @@
      * @param object The info to wrap.
      * @return A wrapper for if the object is not null, null otherwise.
      */
+    @SuppressWarnings("deprecation")
     static AccessibilityNodeInfoCompat wrapNonNullInstance(Object object) {
         if (object != null) {
             return new AccessibilityNodeInfoCompat(object);
@@ -3817,6 +3819,7 @@
      *
      * @return {@code true} if the node is a heading, {@code false} otherwise.
      */
+    @SuppressWarnings("deprecation")
     public boolean isHeading() {
         if (Build.VERSION.SDK_INT >= 28) {
             return mInfo.isHeading();
@@ -4017,6 +4020,7 @@
         return true;
     }
 
+    @SuppressWarnings("deprecation")
     @NonNull
     @Override
     public String toString() {
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java
index 2e8ced2..e3fe75c 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityRecordCompat.java
@@ -64,6 +64,7 @@
      *
      * @deprecated Use {@link AccessibilityRecord#obtain(AccessibilityRecord)} directly.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static AccessibilityRecordCompat obtain(AccessibilityRecordCompat record) {
         return new AccessibilityRecordCompat(AccessibilityRecord.obtain(record.mRecord));
@@ -77,6 +78,7 @@
      *
      * @deprecated Use {@link AccessibilityRecord#obtain()} directly.
      */
+    @SuppressWarnings("deprecation")
     @Deprecated
     public static AccessibilityRecordCompat obtain() {
         return new AccessibilityRecordCompat(AccessibilityRecord.obtain());
diff --git a/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java b/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java
index 5984051..f0fc461 100644
--- a/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java
+++ b/cursoradapter/src/main/java/androidx/cursoradapter/widget/CursorAdapter.java
@@ -179,6 +179,7 @@
 
     @SuppressWarnings("deprecation")
     void init(Context context, Cursor c, int flags) {
+        // Maintained for compatibility.
         if ((flags & FLAG_AUTO_REQUERY) == FLAG_AUTO_REQUERY) {
             flags |= FLAG_REGISTER_CONTENT_OBSERVER;
             mAutoRequery = true;
diff --git a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
index fc0a595..19e58ae 100644
--- a/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
+++ b/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
@@ -764,6 +764,63 @@
      */
     public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
     /**
+     *  <p>A tag used to record the offset from UTC (the time difference from Universal Time
+     *  Coordinated including daylight saving time) of the time of DateTime tag. The format when
+     *  recording the offset is "±HH:MM". The part of "±" shall be recorded as "+" or "-". When
+     *  the offsets are unknown, all the character spaces except colons (":") should be filled
+     *  with blank characters, or else the Interoperability field should be filled with blank
+     *  characters. The character string length is 7 Bytes including NULL for termination. When
+     *  the field is left blank, it is treated as unknown.</p>
+     *
+     *  <ul>
+     *      <li>Tag = 36880</li>
+     *      <li>Type = String</li>
+     *      <li>Length = 7</li>
+     *      <li>Default = None</li>
+     *  </ul>
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public static final String TAG_OFFSET_TIME = "OffsetTime";
+    /**
+     *  <p>A tag used to record the offset from UTC (the time difference from Universal Time
+     *  Coordinated including daylight saving time) of the time of DateTimeOriginal tag. The format
+     *  when recording the offset is "±HH:MM". The part of "±" shall be recorded as "+" or "-". When
+     *  the offsets are unknown, all the character spaces except colons (":") should be filled
+     *  with blank characters, or else the Interoperability field should be filled with blank
+     *  characters. The character string length is 7 Bytes including NULL for termination. When
+     *  the field is left blank, it is treated as unknown.</p>
+     *
+     *  <ul>
+     *      <li>Tag = 36881</li>
+     *      <li>Type = String</li>
+     *      <li>Length = 7</li>
+     *      <li>Default = None</li>
+     *  </ul>
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public static final String TAG_OFFSET_TIME_ORIGINAL = "OffsetTimeOriginal";
+    /**
+     *  <p>A tag used to record the offset from UTC (the time difference from Universal Time
+     *  Coordinated including daylight saving time) of the time of DateTimeDigitized tag. The format
+     *  when recording the offset is "±HH:MM". The part of "±" shall be recorded as "+" or "-". When
+     *  the offsets are unknown, all the character spaces except colons (":") should be filled
+     *  with blank characters, or else the Interoperability field should be filled with blank
+     *  characters. The character string length is 7 Bytes including NULL for termination. When
+     *  the field is left blank, it is treated as unknown.</p>
+     *
+     *  <ul>
+     *      <li>Tag = 36882</li>
+     *      <li>Type = String</li>
+     *      <li>Length = 7</li>
+     *      <li>Default = None</li>
+     *  </ul>
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY)
+    public static final String TAG_OFFSET_TIME_DIGITIZED = "OffsetTimeDigitized";
+    /**
      *  <p>A tag used to record fractions of seconds for {@link #TAG_DATETIME}.</p>
      *
      *  <ul>
@@ -3467,9 +3524,18 @@
             new ExifTag(TAG_SPECTRAL_SENSITIVITY, 34852, IFD_FORMAT_STRING),
             new ExifTag(TAG_PHOTOGRAPHIC_SENSITIVITY, 34855, IFD_FORMAT_USHORT),
             new ExifTag(TAG_OECF, 34856, IFD_FORMAT_UNDEFINED),
+            new ExifTag(TAG_SENSITIVITY_TYPE, 34864, IFD_FORMAT_USHORT),
+            new ExifTag(TAG_STANDARD_OUTPUT_SENSITIVITY, 34865, IFD_FORMAT_ULONG),
+            new ExifTag(TAG_RECOMMENDED_EXPOSURE_INDEX, 34866, IFD_FORMAT_ULONG),
+            new ExifTag(TAG_ISO_SPEED, 34867, IFD_FORMAT_ULONG),
+            new ExifTag(TAG_ISO_SPEED_LATITUDE_YYY, 34868, IFD_FORMAT_ULONG),
+            new ExifTag(TAG_ISO_SPEED_LATITUDE_ZZZ, 34869, IFD_FORMAT_ULONG),
             new ExifTag(TAG_EXIF_VERSION, 36864, IFD_FORMAT_STRING),
             new ExifTag(TAG_DATETIME_ORIGINAL, 36867, IFD_FORMAT_STRING),
             new ExifTag(TAG_DATETIME_DIGITIZED, 36868, IFD_FORMAT_STRING),
+            new ExifTag(TAG_OFFSET_TIME, 36880, IFD_FORMAT_STRING),
+            new ExifTag(TAG_OFFSET_TIME_ORIGINAL, 36881, IFD_FORMAT_STRING),
+            new ExifTag(TAG_OFFSET_TIME_DIGITIZED, 36882, IFD_FORMAT_STRING),
             new ExifTag(TAG_COMPONENTS_CONFIGURATION, 37121, IFD_FORMAT_UNDEFINED),
             new ExifTag(TAG_COMPRESSED_BITS_PER_PIXEL, 37122, IFD_FORMAT_URATIONAL),
             new ExifTag(TAG_SHUTTER_SPEED_VALUE, 37377, IFD_FORMAT_SRATIONAL),
@@ -3518,6 +3584,12 @@
             new ExifTag(TAG_DEVICE_SETTING_DESCRIPTION, 41995, IFD_FORMAT_UNDEFINED),
             new ExifTag(TAG_SUBJECT_DISTANCE_RANGE, 41996, IFD_FORMAT_USHORT),
             new ExifTag(TAG_IMAGE_UNIQUE_ID, 42016, IFD_FORMAT_STRING),
+            new ExifTag(TAG_CAMERA_OWNER_NAME, 42032, IFD_FORMAT_STRING),
+            new ExifTag(TAG_BODY_SERIAL_NUMBER, 42033, IFD_FORMAT_STRING),
+            new ExifTag(TAG_LENS_SPECIFICATION, 42034, IFD_FORMAT_URATIONAL),
+            new ExifTag(TAG_LENS_MAKE, 42035, IFD_FORMAT_STRING),
+            new ExifTag(TAG_LENS_MODEL, 42036, IFD_FORMAT_STRING),
+            new ExifTag(TAG_GAMMA, 42240, IFD_FORMAT_URATIONAL),
             new ExifTag(TAG_DNG_VERSION, 50706, IFD_FORMAT_BYTE),
             new ExifTag(TAG_DEFAULT_CROP_SIZE, 50720, IFD_FORMAT_USHORT, IFD_FORMAT_ULONG)
     };
@@ -3554,7 +3626,8 @@
             new ExifTag(TAG_GPS_PROCESSING_METHOD, 27, IFD_FORMAT_UNDEFINED),
             new ExifTag(TAG_GPS_AREA_INFORMATION, 28, IFD_FORMAT_UNDEFINED),
             new ExifTag(TAG_GPS_DATESTAMP, 29, IFD_FORMAT_STRING),
-            new ExifTag(TAG_GPS_DIFFERENTIAL, 30, IFD_FORMAT_USHORT)
+            new ExifTag(TAG_GPS_DIFFERENTIAL, 30, IFD_FORMAT_USHORT),
+            new ExifTag(TAG_GPS_H_POSITIONING_ERROR, 31, IFD_FORMAT_URATIONAL)
     };
     // Primary image IFD Interoperability tag (See JEITA CP-3451C Section 4.6.8 Tag Support Levels)
     private static final ExifTag[] IFD_INTEROPERABILITY_TAGS = new ExifTag[] {
@@ -3945,11 +4018,13 @@
      *
      * @param tag the name of the tag.
      */
+    @SuppressWarnings("deprecation")
     @Nullable
     private ExifAttribute getExifAttribute(@NonNull String tag) {
         if (tag == null) {
             throw new NullPointerException("tag shouldn't be null");
         }
+        // Maintain compatibility.
         if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
             if (DEBUG) {
                 Log.d(TAG, "getExifAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
@@ -4064,10 +4139,12 @@
      * @param tag the name of the tag.
      * @param value the value of the tag.
      */
+    @SuppressWarnings("deprecation")
     public void setAttribute(@NonNull String tag, @Nullable String value) {
         if (tag == null) {
             throw new NullPointerException("tag shouldn't be null");
         }
+        // Maintain compatibility.
         if (TAG_ISO_SPEED_RATINGS.equals(tag)) {
             if (DEBUG) {
                 Log.d(TAG, "setAttribute: Replacing TAG_ISO_SPEED_RATINGS with "
diff --git a/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java b/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java
index b7dfc34..2d8f4df 100644
--- a/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java
+++ b/leanback/src/androidTest/java/androidx/leanback/app/DetailsSupportFragmentTest.java
@@ -47,6 +47,7 @@
 import androidx.leanback.widget.ParallaxTarget;
 import androidx.leanback.widget.RecyclerViewParallax;
 import androidx.leanback.widget.VerticalGridView;
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.platform.app.InstrumentationRegistry;
@@ -472,6 +473,7 @@
         fragmentOnStartWithVideoInternal(DetailsSupportFragmentWithVideo2.class);
     }
 
+    @FlakyTest
     @Test
     public void navigateBetweenRowsAndTitle() throws Throwable {
         SingleSupportFragmentTestActivity activity =
diff --git a/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java b/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
index 23b0ef3..574cd15 100644
--- a/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
+++ b/leanback/src/androidTest/java/androidx/leanback/widget/GridWidgetTest.java
@@ -54,6 +54,7 @@
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.platform.app.InstrumentationRegistry;
@@ -4342,6 +4343,7 @@
         assertEquals(0, mGridView.getSelectedPosition());
     }
 
+    @FlakyTest
     @Test
     public void testExtraLayoutSpace() throws Throwable {
         Intent intent = new Intent();
@@ -5389,6 +5391,7 @@
                 mGridView.findViewHolderForAdapterPosition(29).itemView, lastChild);
     }
 
+    @FlakyTest
     @Test
     public void testAnimateOutBlockLayout() throws Throwable {
         Intent intent = new Intent();
diff --git a/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java b/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java
index d02edee..e9e4615 100644
--- a/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java
+++ b/leanback/src/main/java/androidx/leanback/app/BackgroundFragment.java
@@ -21,6 +21,7 @@
 
 /**
  * Fragment used by the background manager.
+ *
  * @hide
  */
 @RestrictTo(LIBRARY_GROUP_PREFIX)
diff --git a/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java b/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java
index 74105c5..ce3ef92 100644
--- a/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java
+++ b/leanback/src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java
@@ -26,7 +26,7 @@
 
 /**
  * An abstract {@link Presenter} for rendering a detailed description of an
- * item. Typically this Presenter will be used in a {@link DetailsOverviewRowPresenter}
+ * item. Typically this Presenter will be used in a {@link FullWidthDetailsOverviewRowPresenter}
  * or {@link PlaybackControlsRowPresenter}.
  *
  * <p>Subclasses must override {@link #onBindDescription} to implement the data
diff --git a/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java b/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java
index c367f35..cd2a421 100644
--- a/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java
+++ b/leanback/src/main/java/androidx/leanback/widget/picker/Picker.java
@@ -99,6 +99,7 @@
      * @return The separator that will be populated between all the Picker columns.
      * @deprecated Use {@link #getSeparators()}
      */
+    @Deprecated
     public final CharSequence getSeparator() {
         return mSeparators.get(0);
     }
diff --git a/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java b/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java
index c0fa895..40d565a 100644
--- a/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java
+++ b/media/src/main/java/android/support/v4/media/session/PlaybackStateCompat.java
@@ -1327,6 +1327,7 @@
          * @return this
          * @deprecated Use {@link #setErrorMessage(int, CharSequence)} instead.
          */
+        @Deprecated
         public Builder setErrorMessage(CharSequence errorMessage) {
             mErrorMessage = errorMessage;
             return this;
diff --git a/media/src/main/java/androidx/media/AudioManagerCompat.java b/media/src/main/java/androidx/media/AudioManagerCompat.java
index 4186245..948aa82 100644
--- a/media/src/main/java/androidx/media/AudioManagerCompat.java
+++ b/media/src/main/java/androidx/media/AudioManagerCompat.java
@@ -75,6 +75,7 @@
      *     AudioManager#AUDIOFOCUS_REQUEST_GRANTED}.
      * @throws NullPointerException if passed a null argument
      */
+    @SuppressWarnings("deprecation")
     public static int requestAudioFocus(
             @NonNull AudioManager audioManager, @NonNull AudioFocusRequestCompat focusRequest) {
         if (audioManager == null) {
@@ -103,6 +104,7 @@
      *     AudioManager#AUDIOFOCUS_REQUEST_GRANTED}
      * @throws IllegalArgumentException if passed a null argument
      */
+    @SuppressWarnings("deprecation")
     public static int abandonAudioFocusRequest(
             @NonNull AudioManager audioManager, @NonNull AudioFocusRequestCompat focusRequest) {
         if (audioManager == null) {
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaUtils.java b/media2/session/src/main/java/androidx/media2/session/MediaUtils.java
index b77bf45..9b74698 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaUtils.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaUtils.java
@@ -753,8 +753,8 @@
     public static MediaController.PlaybackInfo toPlaybackInfo2(
             MediaControllerCompat.PlaybackInfo info) {
         return MediaController.PlaybackInfo.createPlaybackInfo(info.getPlaybackType(),
-                new AudioAttributesCompat.Builder()
-                        .setLegacyStreamType(info.getAudioStream()).build(),
+                new AudioAttributesCompat.Builder().setLegacyStreamType(
+                        info.getAudioAttributes().getLegacyStreamType()).build(),
                 info.getVolumeControl(), info.getMaxVolume(), info.getCurrentVolume());
     }
 
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
index 4535176..5dd2103 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlViewTestActivity.java
@@ -35,6 +35,7 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        TestUtils.setKeepScreenOn(this);
         setContentView(R.layout.mediacontrolviewtest_layout);
         mSurfaceView = findViewById(R.id.surfaceview);
     }
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java
index ef6974c..e9a2912 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithPlayerTest.java
@@ -95,8 +95,6 @@
         Uri fileSchemeUri = Uri.parse("android.resource://" + mContext.getPackageName() + "/"
                 + androidx.media2.widget.test.R.raw.test_file_scheme_video);
         mFileSchemeMediaItem = createTestMediaItem(fileSchemeUri);
-
-        setKeepScreenOn(mActivityRule);
         checkAttachedToWindow(mMediaControlView);
     }
 
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java
index 9f2642a..a4fa4dd 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaControlView_WithoutPlayerTest.java
@@ -61,8 +61,6 @@
         mActivity = mActivityRule.getActivity();
         mMediaControlView = mActivity.findViewById(
                 androidx.media2.widget.test.R.id.mediacontrolview);
-
-        setKeepScreenOn(mActivityRule);
         checkAttachedToWindow(mMediaControlView);
     }
 
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
index dac6636..c96ba43 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
@@ -16,19 +16,12 @@
 
 package androidx.media2.widget;
 
-import static android.content.Context.KEYGUARD_SERVICE;
-
 import static org.junit.Assert.assertTrue;
 
-import android.app.Activity;
-import android.app.Instrumentation;
-import android.app.KeyguardManager;
 import android.content.Context;
 import android.net.Uri;
-import android.os.Build;
 import android.text.TextUtils;
 import android.view.View;
-import android.view.WindowManager;
 
 import androidx.annotation.GuardedBy;
 import androidx.annotation.NonNull;
@@ -43,8 +36,6 @@
 import androidx.media2.session.MediaSession;
 import androidx.media2.widget.test.R;
 import androidx.test.core.app.ApplicationProvider;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.rule.ActivityTestRule;
 
 import org.junit.Before;
 
@@ -82,31 +73,6 @@
         mSessionCallbackExecutor = Executors.newFixedThreadPool(1);
     }
 
-    static <T extends Activity> void setKeepScreenOn(ActivityTestRule<T> activityRule)
-            throws Throwable {
-        final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
-        final Activity activity = activityRule.getActivity();
-        activityRule.runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (Build.VERSION.SDK_INT >= 27) {
-                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-                    activity.setTurnScreenOn(true);
-                    activity.setShowWhenLocked(true);
-                    KeyguardManager keyguardManager = (KeyguardManager)
-                            instrumentation.getTargetContext().getSystemService(KEYGUARD_SERVICE);
-                    keyguardManager.requestDismissKeyguard(activity, null);
-                } else {
-                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
-                            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
-                            | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
-                            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
-                }
-            }
-        });
-        instrumentation.waitForIdleSync();
-    }
-
     static void checkAttachedToWindow(View view) throws Exception {
         if (!view.isAttachedToWindow()) {
             final CountDownLatch latch = new CountDownLatch(1);
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/TestUtils.java b/media2/widget/src/androidTest/java/androidx/media2/widget/TestUtils.java
new file mode 100644
index 0000000..3d2ba52
--- /dev/null
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/TestUtils.java
@@ -0,0 +1,44 @@
+/*
+ * 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.media2.widget;
+
+import static android.content.Context.KEYGUARD_SERVICE;
+
+import android.app.Activity;
+import android.app.KeyguardManager;
+import android.os.Build;
+import android.view.WindowManager;
+
+final class TestUtils {
+    static void setKeepScreenOn(Activity activity) {
+        if (Build.VERSION.SDK_INT >= 27) {
+            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+            activity.setTurnScreenOn(true);
+            activity.setShowWhenLocked(true);
+            KeyguardManager keyguardManager =
+                    (KeyguardManager) activity.getSystemService(KEYGUARD_SERVICE);
+            keyguardManager.requestDismissKeyguard(activity, null);
+        } else {
+            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+                    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
+                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+                    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
+        }
+    }
+
+    private TestUtils() {}
+}
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
index a7be923..cf5955a 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoViewTestActivity.java
@@ -31,6 +31,7 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        TestUtils.setKeepScreenOn(this);
         setContentView(R.layout.videoview_layout);
     }
 }
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java
index dee8015..fe1bb1b 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java
@@ -92,8 +92,6 @@
         mVideoView = mActivity.findViewById(R.id.videoview);
         mMediaItem = createTestMediaItem();
         mPixelCopyHelper = new SynchronousPixelCopy();
-
-        setKeepScreenOn(mActivityRule);
         checkAttachedToWindow(mVideoView);
     }
 
diff --git a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java
index 235a40e..26e3c26 100644
--- a/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java
+++ b/media2/widget/src/androidTest/java/androidx/media2/widget/VideoView_WithoutPlayerTest.java
@@ -47,8 +47,6 @@
     public void setup() throws Throwable {
         mActivity = mActivityRule.getActivity();
         mVideoView = mActivity.findViewById(R.id.videoview);
-
-        setKeepScreenOn(mActivityRule);
         checkAttachedToWindow(mVideoView);
     }
 
diff --git a/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java b/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java
index 9279e58..b4c7773 100644
--- a/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java
+++ b/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteDescriptor.java
@@ -348,7 +348,6 @@
         result.append(", description=").append(getDescription());
         result.append(", iconUri=").append(getIconUri());
         result.append(", isEnabled=").append(isEnabled());
-        result.append(", isConnecting=").append(isConnecting());
         result.append(", connectionState=").append(getConnectionState());
         result.append(", controlFilters=").append(Arrays.toString(getControlFilters().toArray()));
         result.append(", playbackType=").append(getPlaybackType());
diff --git a/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java b/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java
index b8ab169..1a0f419 100644
--- a/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java
+++ b/mediarouter/src/main/java/androidx/mediarouter/media/SystemMediaRouteProvider.java
@@ -770,7 +770,7 @@
             }
 
             if (isConnecting(record)) {
-                builder.setConnecting(true);
+                builder.setConnectionState(MediaRouter.RouteInfo.CONNECTION_STATE_CONNECTING);
             }
 
             Display presentationDisplay =
diff --git a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
index a4d9778..535d317 100644
--- a/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
+++ b/paging/integration-tests/testapp/src/main/java/androidx/paging/integration/testapp/room/CustomerViewModel.java
@@ -85,12 +85,14 @@
                 () -> mDatabase.getCustomerDao().removeAll());
     }
 
+    @SuppressWarnings("deprecation")
     private static <K> LiveData<PagedList<Customer>> getLivePagedList(
             K initialLoadKey, DataSource.Factory<K, Customer> dataSourceFactory) {
         PagedList.Config config = new PagedList.Config.Builder()
                 .setPageSize(10)
                 .setEnablePlaceholders(false)
                 .build();
+        // Maintained for compatibility.
         return new LivePagedListBuilder<>(dataSourceFactory, config)
                 .setInitialLoadKey(initialLoadKey)
                 .build();
diff --git a/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java b/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java
index 016e361..82dfd99 100644
--- a/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java
+++ b/preference/preference/src/main/java/androidx/preference/EditTextPreferenceDialogFragment.java
@@ -28,6 +28,7 @@
 /**
  * @deprecated Use {@link EditTextPreferenceDialogFragmentCompat} instead
  */
+@SuppressWarnings("deprecation")
 @Deprecated
 public class EditTextPreferenceDialogFragment extends PreferenceDialogFragment {
 
diff --git a/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
index 0566df9..5dc4e53 100644
--- a/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
+++ b/samples/Support4Demos/src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java
@@ -143,12 +143,12 @@
      */
     private class FirstLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
         @Override
+        @SuppressWarnings("deprecation")
         public void onGlobalLayout() {
             mActionBar.onFirstLayout();
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                 mSlidingLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
             } else {
-                //noinspection deprecation
                 mSlidingLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
             }
         }
diff --git a/settings.gradle b/settings.gradle
index aebfd08..63f87ac 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -97,6 +97,7 @@
 includeProject(":collection:collection", "collection/collection")
 includeProject(":collection:collection-ktx", "collection/collection-ktx")
 includeProject(":concurrent:concurrent-futures", "concurrent/futures")
+includeProject(":concurrent:concurrent-futures-ktx", "concurrent/futures-ktx")
 includeProject(":contentaccess", "contentaccess")
 includeProject(":contentpager", "contentpager")
 includeProject(":coordinatorlayout", "coordinatorlayout")
diff --git a/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java b/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
index 5578aa9..0a0c856 100644
--- a/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
+++ b/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.java
@@ -1154,7 +1154,7 @@
      */
     @Deprecated
     public void setShadowResource(@DrawableRes int resId) {
-        setShadowDrawable(getResources().getDrawable(resId));
+        setShadowDrawableLeft(getResources().getDrawable(resId));
     }
 
     /**
diff --git a/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java b/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
index ff1a99c..fc74e69 100644
--- a/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
+++ b/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
@@ -116,6 +116,7 @@
      * @return The season display number for the program.
      * @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_SEASON_DISPLAY_NUMBER
      */
+    @SuppressWarnings("deprecation")
     public String getSeasonNumber() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             return mValues.getAsString(Programs.COLUMN_SEASON_DISPLAY_NUMBER);
@@ -128,6 +129,7 @@
      * @return The episode display number for the program.
      * @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_EPISODE_DISPLAY_NUMBER
      */
+    @SuppressWarnings("deprecation")
     public String getEpisodeNumber() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             return mValues.getAsString(Programs.COLUMN_EPISODE_DISPLAY_NUMBER);
@@ -335,6 +337,7 @@
      * @param cursor A row from the TV Input Framework database.
      * @param builder A Builder to set the fields.
      */
+    @SuppressWarnings("deprecation")
     static void setFieldsFromCursor(Cursor cursor, Builder builder) {
         // TODO: Add additional API which does not use costly getColumnIndex().
         int index;
@@ -465,6 +468,7 @@
         }
     }
 
+    @SuppressWarnings("deprecation")
     private static String[] getProjection() {
         String[] baseColumns = new String[] {
                 BaseTvColumns._ID,
@@ -612,6 +616,7 @@
          * @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_SEASON_DISPLAY_NUMBER
          * @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_SEASON_NUMBER
          */
+        @SuppressWarnings("deprecation")
         public T setSeasonNumber(String seasonNumber, int numericalSeasonNumber) {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                 mValues.put(Programs.COLUMN_SEASON_DISPLAY_NUMBER, seasonNumber);
@@ -644,6 +649,7 @@
          * @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_EPISODE_DISPLAY_NUMBER
          * @see androidx.tvprovider.media.tv.TvContractCompat.Programs#COLUMN_EPISODE_NUMBER
          */
+        @SuppressWarnings("deprecation")
         public T setEpisodeNumber(String episodeNumber, int numericalEpisodeNumber) {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                 mValues.put(Programs.COLUMN_EPISODE_DISPLAY_NUMBER, episodeNumber);
diff --git a/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt b/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
index f7b8706..1d3e64e 100644
--- a/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
+++ b/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
@@ -58,8 +58,6 @@
         assertThat(frameworkLayout.getParagraphDirection(0)).isEqualTo(Layout.DIR_LEFT_TO_RIGHT)
         assertThat(frameworkLayout.spacingMultiplier).isEqualTo(1.0f)
         assertThat(frameworkLayout.spacingAdd).isEqualTo(0.0f)
-        // TODO(haoyuchang): Need public API to test includePadding, maxLines,
-        // breakStrategy and hyphenFrequency.
     }
 
     @Test
diff --git a/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt b/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt
index 48f35dd..8337726 100644
--- a/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt
+++ b/ui/ui-android-text/src/main/java/androidx/text/LayoutIntrinsics.kt
@@ -57,9 +57,6 @@
      * of text where no soft line breaks are applied.
      */
     val maxIntrinsicWidth: Float by lazy {
-        // TODO(haoyuchang): we didn't pass the TextDirection to Layout.getDesiredWidth(), check if
-        //  there is any behavior difference from
-        //  Layout.getWidthWithLimits(charSequence, start, end, paint, dir)
         boringMetrics?.width?.toFloat()
             ?: Layout.getDesiredWidth(charSequence, 0, charSequence.length, textPaint)
     }
diff --git a/ui/ui-foundation/api/0.1.0-dev02.txt b/ui/ui-foundation/api/0.1.0-dev02.txt
index b1539e4..fd1e764 100644
--- a/ui/ui-foundation/api/0.1.0-dev02.txt
+++ b/ui/ui-foundation/api/0.1.0-dev02.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/0.1.0-dev03.txt b/ui/ui-foundation/api/0.1.0-dev03.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/0.1.0-dev03.txt
+++ b/ui/ui-foundation/api/0.1.0-dev03.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt
index b1539e4..fd1e764 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev02.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev03.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev02.txt b/ui/ui-foundation/api/restricted_0.1.0-dev02.txt
index b1539e4..fd1e764 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev02.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev02.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev03.txt b/ui/ui-foundation/api/restricted_0.1.0-dev03.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev03.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index 2123312..edd72f5 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -200,15 +200,15 @@
 
   public final class ToggleableKt {
     ctor public ToggleableKt();
-    method public static void Toggleable(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
-    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Toggleable(boolean value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onValueChange = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean value);
+    method public static void TriStateToggleable(androidx.ui.foundation.selection.ToggleableState value = androidx.ui.foundation.selection.ToggleableState.On, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public enum ToggleableState {
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Checked;
     enum_constant public static final androidx.ui.foundation.selection.ToggleableState Indeterminate;
-    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Unchecked;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState Off;
+    enum_constant public static final androidx.ui.foundation.selection.ToggleableState On;
   }
 
 }
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt
index 322e4f2..0bb5a21 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/ui/foundation/demos/PopupActivity.kt
@@ -40,7 +40,6 @@
 import androidx.ui.foundation.shape.RectangleShape
 import androidx.ui.foundation.shape.corner.CircleShape
 import androidx.ui.graphics.Color
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.layout.Column
@@ -597,7 +596,7 @@
                 state.value = it
                 onValueChange(it)
             },
-            editorStyle = EditorStyle(textStyle = TextStyle())
+            textStyle = TextStyle()
         )
     }
 }
\ No newline at end of file
diff --git a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt
index 3da1995..c5141fb 100644
--- a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt
+++ b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ToggleableSamples.kt
@@ -29,7 +29,7 @@
 @Composable
 fun ToggleableSample() {
     var checked by +state { false }
-    Toggleable(checked = checked, onCheckedChange = { checked = it }) {
+    Toggleable(value = checked, onValueChange = { checked = it }) {
         // content that you want to make toggleable
         Text(text = checked.toString())
     }
@@ -43,10 +43,10 @@
         value = checked,
         onToggle = {
             checked =
-                if (checked == ToggleableState.Checked) {
-                    ToggleableState.Unchecked
+                if (checked == ToggleableState.On) {
+                    ToggleableState.Off
                 } else {
-                    ToggleableState.Checked
+                    ToggleableState.On
                 }
         }) {
         // content that you want to make toggleable
diff --git a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt
index bb4705e..db1989b 100644
--- a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt
+++ b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ToggleableTest.kt
@@ -49,12 +49,12 @@
         composeTestRule.setContent {
             Column {
                 TestTag(tag = "checkedToggleable") {
-                    TriStateToggleable(ToggleableState.Checked, onToggle = {}) {
+                    TriStateToggleable(ToggleableState.On, onToggle = {}) {
                         Text("ToggleableText")
                     }
                 }
                 TestTag(tag = "unCheckedToggleable") {
-                    TriStateToggleable(ToggleableState.Unchecked, onToggle = {}) {
+                    TriStateToggleable(ToggleableState.Off, onToggle = {}) {
                         Text("ToggleableText")
                     }
                 }
@@ -70,7 +70,7 @@
             .assertSemanticsIsEqualTo(
                 createFullSemantics(
                     isEnabled = true,
-                    toggleableState = ToggleableState.Checked
+                    toggleableState = ToggleableState.On
                 )
             )
             .assertHasClickAction()
@@ -78,7 +78,7 @@
             .assertSemanticsIsEqualTo(
                 createFullSemantics(
                     isEnabled = true,
-                    toggleableState = ToggleableState.Unchecked
+                    toggleableState = ToggleableState.Off
                 )
             )
             .assertHasClickAction()
@@ -97,12 +97,12 @@
         composeTestRule.setContent {
             Column {
                 TestTag(tag = "checkedToggleable") {
-                    Toggleable(checked = true, onCheckedChange = {}) {
+                    Toggleable(value = true, onValueChange = {}) {
                         Text("ToggleableText")
                     }
                 }
                 TestTag(tag = "unCheckedToggleable") {
-                    Toggleable(checked = false, onCheckedChange = {}) {
+                    Toggleable(value = false, onValueChange = {}) {
                         Text("ToggleableText")
                     }
                 }
@@ -113,7 +113,7 @@
             .assertSemanticsIsEqualTo(
                 createFullSemantics(
                     isEnabled = true,
-                    toggleableState = ToggleableState.Checked
+                    toggleableState = ToggleableState.On
                 )
             )
             .assertHasClickAction()
@@ -121,7 +121,7 @@
             .assertSemanticsIsEqualTo(
                 createFullSemantics(
                     isEnabled = true,
-                    toggleableState = ToggleableState.Unchecked
+                    toggleableState = ToggleableState.Off
                 )
             )
             .assertHasClickAction()
@@ -132,7 +132,7 @@
         composeTestRule.setContent {
             Center {
                 TestTag(tag = "myToggleable") {
-                    TriStateToggleable(value = ToggleableState.Checked) {
+                    TriStateToggleable(value = ToggleableState.On) {
                         Text("ToggleableText")
                     }
                 }
@@ -156,7 +156,7 @@
         composeTestRule.setContent {
             Center {
                 TestTag(tag = "myToggleable") {
-                    Toggleable(checked = checked, onCheckedChange = onCheckedChange) {
+                    Toggleable(value = checked, onValueChange = onCheckedChange) {
                         Text("ToggleableText")
                     }
                 }
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
index 2ceb337..0a96ba7 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
@@ -33,35 +33,36 @@
  *
  * @see [TriStateToggleable] if you require support for an indeterminate state.
  *
- * @param checked whether Toggleable is checked or unchecked
- * @param onCheckedChange callback to be invoked when toggleable is being clicked,
- * therefore the change of checked state in requested.
- * If null, Toggleable will appears in the [checked] state and remains disabled
+ * @param value whether Toggleable is on or off
+ * @param onValueChange callback to be invoked when toggleable is being clicked,
+ * therefore the change of the state in requested.
+ * If null, Toggleable will appear in the [value] state and remains disabled
  */
 @Composable
 fun Toggleable(
-    checked: Boolean,
-    onCheckedChange: ((Boolean) -> Unit)? = null,
+    value: Boolean,
+    onValueChange: ((Boolean) -> Unit)? = null,
     children: @Composable() () -> Unit
 ) {
     TriStateToggleable(
-        value = ToggleableState(checked),
-        onToggle = onCheckedChange?.let { { it(!checked) } },
+        value = ToggleableState(value),
+        onToggle = onValueChange?.let { { it(!value) } },
         children = children
     )
 }
+
 /**
  * Combines [PressReleasedGestureDetector] and [Semantics] for the components with three states
- * like Checkbox.
+ * like TriStateCheckbox.
  *
- * It supports three states: checked, unchecked and indeterminate.
+ * It supports three states: On, Off and Indeterminate.
  *
  * TriStateToggleable should be used when there are
  * dependent Toggleables associated to this component and those can have different values.
  *
  * @sample androidx.ui.foundation.samples.TriStateToggleableSample
  *
- * @see [Toggleable] if you want to support only two states: checked and unchecked
+ * @see [Toggleable] if you want to support only two states: on and off
  *
  * @param value current value for the component
  * @param onToggle will be called when user toggles the toggleable. The children will not be
@@ -69,7 +70,7 @@
  */
 @Composable
 fun TriStateToggleable(
-    value: ToggleableState = ToggleableState.Checked,
+    value: ToggleableState = ToggleableState.On,
     onToggle: (() -> Unit)? = null,
     children: @Composable() () -> Unit
 ) {
@@ -81,8 +82,8 @@
         Semantics(properties = {
             this.accessibilityValue = when (value) {
                 // TODO(ryanmentley): These should be set by Checkbox, Switch, etc.
-                ToggleableState.Checked -> Strings.Checked
-                ToggleableState.Unchecked -> Strings.Unchecked
+                ToggleableState.On -> Strings.Checked
+                ToggleableState.Off -> Strings.Unchecked
                 ToggleableState.Indeterminate -> Strings.Indeterminate
             }
             this.toggleableState = value
@@ -95,14 +96,22 @@
     }
 }
 
-// TODO: These shouldn't use checkbox-specific language
+/**
+ * Enum that represents possible toggleable states.
+ * @property On components is on
+ * @property Off components is off
+ * @property Indeterminate means that on/off value cannot be determined
+ */
 enum class ToggleableState {
-    Checked,
-    Unchecked,
+    On,
+    Off,
     Indeterminate
 }
 
-fun ToggleableState(checked: Boolean) = when (checked) {
-    true -> ToggleableState.Checked
-    false -> ToggleableState.Unchecked
-}
\ No newline at end of file
+/**
+ * Return corresponding ToggleableState based on a Boolean representation
+ *
+ * @param value whether the ToggleableState is on or off
+ */
+fun ToggleableState(value: Boolean) =
+    if (value) ToggleableState.On else ToggleableState.Off
\ No newline at end of file
diff --git a/ui/ui-framework/api/0.1.0-dev03.txt b/ui/ui-framework/api/0.1.0-dev03.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/0.1.0-dev03.txt
+++ b/ui/ui-framework/api/0.1.0-dev03.txt
@@ -64,7 +64,7 @@
 
   public final class PasswordTextFieldKt {
     ctor public PasswordTextFieldKt();
-    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
   }
 
   public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
 
   public final class TextFieldKt {
     ctor public TextFieldKt();
-    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
   }
 
   public final class TextKt {
     ctor public TextKt();
     method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
-    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
-    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
     method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/api_lint.ignore b/ui/ui-framework/api/api_lint.ignore
index 40f9062..802d86c 100644
--- a/ui/ui-framework/api/api_lint.ignore
+++ b/ui/ui-framework/api/api_lint.ignore
@@ -19,11 +19,11 @@
     Method should return Collection<PathNode> (or subclass) instead of raw array; was `androidx.ui.graphics.vector.PathNode[]`
 
 
-AutoBoxing: androidx.ui.core.TextKt#Text(String, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color) parameter #6:
+AutoBoxing: androidx.ui.core.TextKt#Text(String, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer) parameter #6:
     Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit>) parameter #5:
+AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit>) parameter #5:
     Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.text.AnnotatedString, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer, androidx.ui.graphics.Color) parameter #6:
+AutoBoxing: androidx.ui.core.TextKt#Text(androidx.ui.text.AnnotatedString, androidx.ui.core.Modifier, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, boolean, androidx.ui.text.style.TextOverflow, Integer) parameter #6:
     Must avoid boxed primitives (`java.lang.Integer`)
 
 
diff --git a/ui/ui-framework/api/current.txt b/ui/ui-framework/api/current.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/current.txt
+++ b/ui/ui-framework/api/current.txt
@@ -64,7 +64,7 @@
 
   public final class PasswordTextFieldKt {
     ctor public PasswordTextFieldKt();
-    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
   }
 
   public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
 
   public final class TextFieldKt {
     ctor public TextFieldKt();
-    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
   }
 
   public final class TextKt {
     ctor public TextKt();
     method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
-    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
-    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
     method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev03.txt
@@ -64,7 +64,7 @@
 
   public final class PasswordTextFieldKt {
     ctor public PasswordTextFieldKt();
-    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
   }
 
   public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
 
   public final class TextFieldKt {
     ctor public TextFieldKt();
-    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
   }
 
   public final class TextKt {
     ctor public TextKt();
     method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
-    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
-    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
     method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/public_plus_experimental_current.txt b/ui/ui-framework/api/public_plus_experimental_current.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/public_plus_experimental_current.txt
+++ b/ui/ui-framework/api/public_plus_experimental_current.txt
@@ -64,7 +64,7 @@
 
   public final class PasswordTextFieldKt {
     ctor public PasswordTextFieldKt();
-    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
   }
 
   public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
 
   public final class TextFieldKt {
     ctor public TextFieldKt();
-    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
   }
 
   public final class TextKt {
     ctor public TextKt();
     method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
-    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
-    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
     method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/restricted_0.1.0-dev03.txt b/ui/ui-framework/api/restricted_0.1.0-dev03.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-framework/api/restricted_0.1.0-dev03.txt
@@ -64,7 +64,7 @@
 
   public final class PasswordTextFieldKt {
     ctor public PasswordTextFieldKt();
-    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
   }
 
   public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
 
   public final class TextFieldKt {
     ctor public TextFieldKt();
-    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
   }
 
   public final class TextKt {
     ctor public TextKt();
     method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
-    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
-    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
     method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/api/restricted_current.txt b/ui/ui-framework/api/restricted_current.txt
index 2a8753d..7b4517b 100644
--- a/ui/ui-framework/api/restricted_current.txt
+++ b/ui/ui-framework/api/restricted_current.txt
@@ -64,7 +64,7 @@
 
   public final class PasswordTextFieldKt {
     ctor public PasswordTextFieldKt();
-    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
+    method public static void PasswordTextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, char mask = '\u2022', androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {});
   }
 
   public final class PointerInputWrapperKt {
@@ -90,17 +90,17 @@
 
   public final class TextFieldKt {
     ctor public TextFieldKt();
-    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
-    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel value, kotlin.jvm.functions.Function1<? super androidx.ui.core.EditorModel,kotlin.Unit> onValueChange = {}, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
+    method public static void TextField(androidx.ui.core.EditorModel model, androidx.ui.text.TextRange? compositionRange, kotlin.jvm.functions.Function2<? super androidx.ui.core.EditorModel,? super androidx.ui.text.TextRange,kotlin.Unit> onValueChange = { _, _ ->  }, androidx.ui.text.TextStyle? textStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, String? focusIdentifier = null, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation? visualTransformation = null);
   }
 
   public final class TextKt {
     ctor public TextKt();
     method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
-    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
-    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, androidx.ui.graphics.Color selectionColor = DefaultSelectionColor);
+    method public static void Text(androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Text(String text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
+    method public static void Text(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier.None, androidx.ui.text.TextStyle? style = null, androidx.ui.text.ParagraphStyle? paragraphStyle = null, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = androidx.ui.core.TextKt.DefaultOverflow, Integer? maxLines = androidx.ui.core.TextKt.DefaultMaxLines);
     method public static androidx.compose.Effect<androidx.ui.text.TextStyle> currentTextStyle();
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
index 4de305e..8717940 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/autofill/ExplicitAutofillTypesActivity.kt
@@ -35,7 +35,6 @@
 import androidx.ui.core.PxPosition
 import androidx.ui.core.dp
 import androidx.ui.core.setContent
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.layout.Column
@@ -69,7 +68,7 @@
                             onValueChange = { nameState.value = it },
                             onFocus = { autofill?.requestAutofillForNode(autofillNode) },
                             onBlur = { autofill?.cancelAutofillForNode(autofillNode) },
-                            editorStyle = EditorStyle(textStyle = textStyle)
+                            textStyle = textStyle
                         )
                     }
 
@@ -87,7 +86,7 @@
                             onValueChange = { emailState.value = it },
                             onFocus = { autofill?.requestAutofillForNode(autofillNode) },
                             onBlur = { autofill?.cancelAutofillForNode(autofillNode) },
-                            editorStyle = EditorStyle(textStyle = textStyle)
+                            textStyle = textStyle
                         )
                     }
                 }
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt
index cb98f32..98e17a3 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextFieldTest.kt
@@ -27,9 +27,7 @@
 import androidx.ui.core.input.FocusManager
 import androidx.ui.input.CommitTextEditOp
 import androidx.ui.input.EditOperation
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.InputState
-import androidx.ui.input.SetComposingRegionEditOp
 import androidx.ui.input.TextInputService
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.doClick
@@ -39,10 +37,8 @@
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
 import com.nhaarman.mockitokotlin2.atLeastOnce
-import com.nhaarman.mockitokotlin2.clearInvocations
 import com.nhaarman.mockitokotlin2.eq
 import com.nhaarman.mockitokotlin2.mock
-import com.nhaarman.mockitokotlin2.never
 import com.nhaarman.mockitokotlin2.times
 import com.nhaarman.mockitokotlin2.verify
 import com.nhaarman.mockitokotlin2.whenever
@@ -68,8 +64,7 @@
                     TestTag(tag = "textField") {
                         TextField(
                             value = state.value,
-                            onValueChange = { state.value = it },
-                            editorStyle = EditorStyle()
+                            onValueChange = { state.value = it }
                         )
                     }
                 }
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt b/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt
index 45a6089..8c7df92 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/PasswordTextField.kt
@@ -15,16 +15,15 @@
  */
 package androidx.ui.core
 
-import androidx.compose.composer
 import androidx.compose.Composable
 import androidx.compose.memo
 import androidx.compose.unaryPlus
 import androidx.ui.core.input.FocusManager
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.input.PasswordVisualTransformation
 import androidx.ui.input.VisualTransformation
+import androidx.ui.text.TextStyle
 
 /**
  * A user interface element for entering and modifying password text.
@@ -41,7 +40,7 @@
  * @param onValueChange Called when the input service updates the text. When the input service
  * update the text, this callback is called with the updated text. If you want to observe the cursor
  * location or selection range, use [TextField] with [EditorModel] instead.
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
  * @param mask The character shown instead of plaint text.
  * @param imeAction The IME action. This IME action is honored by IME and may show specific icons
  * on the keyboard. For example, search icon may be shown if [ImeAction.Search] is specified.
@@ -56,7 +55,6 @@
  * input service emitted an IME action, this callback is called with the emitted IME action. Note
  * that this IME action may be different from what you specified in [imeAction].
  *
- * @see EditorStyle
  * @see ImeAction
  * @see KeyboardType
  * @see TextField
@@ -66,7 +64,7 @@
 fun PasswordTextField(
     value: String,
     onValueChange: (String) -> Unit = {},
-    editorStyle: EditorStyle? = null,
+    textStyle: TextStyle? = null,
     mask: Char = '\u2022',
     imeAction: ImeAction = ImeAction.Unspecified,
     onFocus: () -> Unit = {},
@@ -78,7 +76,7 @@
     TextField(
         value = value,
         onValueChange = onValueChange,
-        editorStyle = editorStyle,
+        textStyle = textStyle,
         keyboardType = KeyboardType.Password,
         imeAction = imeAction,
         onFocus = onFocus,
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
index 122cfce..853c6e9 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
@@ -65,7 +65,6 @@
  * @param maxLines An optional maximum number of lines for the text to span, wrapping if
  * necessary. If the text exceeds the given number of lines, it will be truncated according to
  * [overflow] and [softWrap]. If it is not null, then it must be greater than zero.
- * @param selectionColor The color used to draw selected region.
  */
 @Composable
 fun Text(
@@ -75,7 +74,6 @@
     softWrap: Boolean = DefaultSoftWrap,
     overflow: TextOverflow = DefaultOverflow,
     maxLines: Int? = DefaultMaxLines,
-    selectionColor: Color = DefaultSelectionColor,
     child: @Composable TextSpanScope.() -> Unit
 ) {
     val rootTextSpan = +memo { TextSpan() }
@@ -90,8 +88,7 @@
         paragraphStyle = paragraphStyle,
         softWrap = softWrap,
         overflow = overflow,
-        maxLines = maxLines,
-        selectionColor = selectionColor
+        maxLines = maxLines
     )
 }
 
@@ -110,7 +107,6 @@
  * @param maxLines An optional maximum number of lines for the text to span, wrapping if
  * necessary. If the text exceeds the given number of lines, it will be truncated according to
  * [overflow] and [softWrap]. If it is not null, then it must be greater than zero.
- * @param selectionColor The color used to draw selected region.
  */
 @Composable
 fun Text(
@@ -120,8 +116,7 @@
     paragraphStyle: ParagraphStyle? = null,
     softWrap: Boolean = DefaultSoftWrap,
     overflow: TextOverflow = DefaultOverflow,
-    maxLines: Int? = DefaultMaxLines,
-    selectionColor: Color = DefaultSelectionColor
+    maxLines: Int? = DefaultMaxLines
 ) {
     Text(
         text = AnnotatedString(text),
@@ -130,8 +125,7 @@
         paragraphStyle = paragraphStyle,
         softWrap = softWrap,
         overflow = overflow,
-        maxLines = maxLines,
-        selectionColor = selectionColor
+        maxLines = maxLines
     )
 }
 
@@ -151,7 +145,6 @@
  * @param maxLines An optional maximum number of lines for the text to span, wrapping if
  * necessary. If the text exceeds the given number of lines, it will be truncated according to
  * [overflow] and [softWrap]. If it is not null, then it must be greater than zero.
- * @param selectionColor The color used to draw selected region.
  */
 @Composable
 fun Text(
@@ -161,8 +154,7 @@
     paragraphStyle: ParagraphStyle? = null,
     softWrap: Boolean = DefaultSoftWrap,
     overflow: TextOverflow = DefaultOverflow,
-    maxLines: Int? = DefaultMaxLines,
-    selectionColor: Color = DefaultSelectionColor
+    maxLines: Int? = DefaultMaxLines
 ) {
     maxLines?.let {
         require(it > 0) { "maxLines should be greater than 0" }
@@ -217,7 +209,7 @@
             Draw { canvas, _ ->
                 selectionRange.value?.let {
                     textDelegate.paintBackground(
-                        it.min, it.max, selectionColor, canvas
+                        it.min, it.max, DefaultSelectionColor, canvas
                     )
                 }
                 textDelegate.paint(canvas)
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
index 8a432f2..14f4327 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextField.kt
@@ -26,7 +26,6 @@
 import androidx.ui.core.gesture.TouchSlopDragGestureDetector
 import androidx.ui.core.input.FocusManager
 import androidx.ui.input.EditProcessor
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.ImeAction
 import androidx.ui.input.InputState
 import androidx.ui.input.KeyboardType
@@ -36,6 +35,7 @@
 import androidx.ui.semantics.onClick
 import androidx.ui.text.TextDelegate
 import androidx.ui.text.TextRange
+import androidx.ui.text.TextStyle
 
 /**
  * A user interface element for entering and modifying text.
@@ -63,7 +63,7 @@
  * @param onValueChange Called when the input service updates the text. When the input service
  * update the text, this callback is called with the updated text. If you want to observe the cursor
  * location or selection range, use [TextField] with [EditorModel] instead.
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
  * @param keyboardType The keyboard type to be used in this text field. Note that this input type
  * is honored by IME and shows corresponding keyboard but this is not guaranteed. For example,
  * some IME may send non-ASCII character even if you set [KeyboardType.Ascii].
@@ -83,7 +83,6 @@
  *
  * @see PasswordTextField
  * @see EditorModel
- * @see EditorStyle
  * @see ImeAction
  * @see KeyboardType
  * @see VisualTransformation
@@ -92,7 +91,7 @@
 fun TextField(
     value: String,
     onValueChange: (String) -> Unit = {},
-    editorStyle: EditorStyle? = null,
+    textStyle: TextStyle? = null,
     keyboardType: KeyboardType = KeyboardType.Text,
     imeAction: ImeAction = ImeAction.Unspecified,
     onFocus: () -> Unit = {},
@@ -122,7 +121,7 @@
                 onValueChange(it.text)
             }
         },
-        editorStyle = editorStyle,
+        textStyle = textStyle,
         keyboardType = keyboardType,
         imeAction = imeAction,
         onFocus = onFocus,
@@ -171,7 +170,7 @@
  * the input service update the text, selection or cursor, this callback is called with the updated
  * [EditorModel]. If you want to observe the composition text, use [TextField] with
  * compositionRange instead.
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
  * @param keyboardType The keyboard type to be used in this text field. Note that this input type
  * is honored by IME and shows corresponding keyboard but this is not guaranteed. For example,
  * some IME may send non-ASCII character even if you set [KeyboardType.Ascii].
@@ -190,7 +189,6 @@
  * @param visualTransformation Optional visual filter for changing visual output of input field.
  *
  * @see EditorModel
- * @see EditorStyle
  * @see ImeAction
  * @see KeyboardType
  * @see VisualTransformation
@@ -199,7 +197,7 @@
 fun TextField(
     value: EditorModel,
     onValueChange: (EditorModel) -> Unit = {},
-    editorStyle: EditorStyle? = null,
+    textStyle: TextStyle? = null,
     keyboardType: KeyboardType = KeyboardType.Text,
     imeAction: ImeAction = ImeAction.Unspecified,
     onFocus: () -> Unit = {},
@@ -229,7 +227,7 @@
                 onValueChange(EditorModel(it.text, it.selection))
             }
         },
-        editorStyle = editorStyle,
+        textStyle = textStyle,
         keyboardType = keyboardType,
         imeAction = imeAction,
         onFocus = onFocus,
@@ -268,7 +266,7 @@
  * @param onValueChange Called when the input service updates the text, selection or cursor. When
  * the input service update the text, selection or cursor, this callback is called with the updated
  * [EditorModel].
- * @param editorStyle The editor style.
+ * @param textStyle Style configuration that applies at character level such as color, font etc.
  * @param keyboardType The keyboard type to be used in this text field. Note that this input type
  * is honored by IME and shows corresponding keyboard but this is not guaranteed. For example,
  * some IME may send non-ASCII character even if you set [KeyboardType.Ascii].
@@ -287,7 +285,6 @@
  * @param visualTransformation Optional visual filter for changing visual output of input field.
  *
  * @see EditorModel
- * @see EditorStyle
  * @see ImeAction
  * @see KeyboardType
  * @see VisualTransformation
@@ -297,7 +294,7 @@
     model: EditorModel,
     compositionRange: TextRange?,
     onValueChange: (EditorModel, TextRange?) -> Unit = { _, _ -> },
-    editorStyle: EditorStyle? = null,
+    textStyle: TextStyle? = null,
     keyboardType: KeyboardType = KeyboardType.Text,
     imeAction: ImeAction = ImeAction.Unspecified,
     onFocus: () -> Unit = {},
@@ -309,7 +306,7 @@
     BaseTextField(
         value = InputState(model.text, model.selection, compositionRange),
         onValueChange = { onValueChange(EditorModel(it.text, it.selection), it.composition) },
-        editorStyle = editorStyle,
+        textStyle = textStyle,
         keyboardType = keyboardType,
         imeAction = imeAction,
         onFocus = onFocus,
@@ -327,7 +324,7 @@
 internal fun BaseTextField(
     value: InputState,
     onValueChange: (InputState) -> Unit = { },
-    editorStyle: EditorStyle? = null,
+    textStyle: TextStyle? = null,
     keyboardType: KeyboardType = KeyboardType.Text,
     imeAction: ImeAction = ImeAction.Unspecified,
     onFocus: () -> Unit = {},
@@ -354,7 +351,7 @@
 
         // Memos
         val processor = +memo { EditProcessor() }
-        val mergedStyle = style.merge(editorStyle?.textStyle)
+        val mergedStyle = style.merge(textStyle)
         val (visualText, offsetMap) = +memo(value, visualTransformation) {
             val transformed = TextFieldDelegate.applyVisualFilter(value, visualTransformation)
             value.composition?.let {
@@ -449,7 +446,7 @@
                             offsetMap,
                             textDelegate,
                             hasFocus.value,
-                            editorStyle?.selectionColor
+                            DefaultSelectionColor
                         )
                     }
                 },
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
index 4789ff5..f4c1d5a 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/TextFieldDelegate.kt
@@ -134,7 +134,7 @@
             offsetMap: OffsetMap,
             textDelegate: TextDelegate,
             hasFocus: Boolean,
-            selectionColor: Color? = null
+            selectionColor: Color
         ) {
             if (value.selection.collapsed) {
                 if (hasFocus) {
@@ -145,7 +145,7 @@
                 textDelegate.paintBackground(
                     offsetMap.originalToTransformed(value.selection.min),
                     offsetMap.originalToTransformed(value.selection.max),
-                    selectionColor ?: DefaultSelectionColor,
+                    selectionColor,
                     canvas
                 )
             }
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
index 206ff8d..8a5d35e 100644
--- a/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/TextFieldDelegateTest.kt
@@ -139,7 +139,8 @@
             textDelegate = mDelegate,
             value = InputState(text = "Hello, World", selection = cursor),
             hasFocus = true,
-            offsetMap = identityOffsetMap
+            offsetMap = identityOffsetMap,
+            selectionColor = Color.Blue
         )
 
         verify(mDelegate, times(1)).paintCursor(eq(cursor.min), eq(canvas))
@@ -156,7 +157,8 @@
             textDelegate = mDelegate,
             value = InputState(text = "Hello, World", selection = cursor),
             hasFocus = false,
-            offsetMap = identityOffsetMap
+            offsetMap = identityOffsetMap,
+            selectionColor = Color.Blue
         )
 
         verify(mDelegate, never()).paintCursor(any(), any())
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
new file mode 100644
index 0000000..c6da7ca5
--- /dev/null
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
@@ -0,0 +1,56 @@
+/*
+ * 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.ui.material.studies.rally
+
+import androidx.compose.Composable
+import androidx.compose.unaryPlus
+import androidx.ui.core.Text
+import androidx.ui.core.dp
+import androidx.ui.foundation.shape.RectangleShape
+import androidx.ui.layout.Column
+import androidx.ui.layout.CrossAxisAlignment
+import androidx.ui.layout.EdgeInsets
+import androidx.ui.layout.Spacing
+import androidx.ui.material.AlertDialog
+import androidx.ui.material.Button
+import androidx.ui.material.Divider
+import androidx.ui.material.TextButtonStyle
+import androidx.ui.material.themeColor
+
+@Composable
+fun RallyAlertDialog(
+    onDismiss: () -> Unit,
+    bodyText: String,
+    buttonText: String
+) {
+    RallyDialogThemeOverlay {
+        AlertDialog(
+            onCloseRequest = onDismiss,
+            text = { Text(bodyText) },
+            buttons = {
+                val style = TextButtonStyle(RectangleShape).copy(paddings = EdgeInsets(16.dp))
+                Column(crossAxisAlignment = CrossAxisAlignment.Stretch) {
+                    Divider(
+                        Spacing(left = 12.dp, right = 12.dp),
+                        color = (+themeColor { onSurface }).copy(alpha = .2f)
+                    )
+                    Button(text = buttonText, onClick = onDismiss, style = style)
+                }
+            }
+        )
+    }
+}
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
index 2d26b16..9b60e8ec 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
@@ -17,10 +17,12 @@
 package androidx.ui.material.studies.rally
 
 import androidx.compose.Composable
+import androidx.compose.state
 import androidx.compose.unaryPlus
 import androidx.ui.core.Alignment
 import androidx.ui.core.Text
 import androidx.ui.core.dp
+import androidx.ui.foundation.Clickable
 import androidx.ui.foundation.ColoredRect
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.graphics.Color
@@ -39,44 +41,65 @@
 import androidx.ui.material.Button
 import androidx.ui.material.Divider
 import androidx.ui.material.TextButtonStyle
+import androidx.ui.material.ripple.Ripple
 import androidx.ui.material.surface.Card
 import androidx.ui.material.themeColor
 import androidx.ui.material.themeTextStyle
+import java.util.Locale
 
 /**
  * The Alerts card within the Rally Overview screen.
  */
 @Composable
 fun RallyAlertCard() {
+    val openDialog = +state { false }
+    val alertMessage = "Heads up, you've used up 90% of your Shopping budget for this month."
+
+    if (openDialog.value) {
+        RallyAlertDialog(
+            onDismiss = {
+                openDialog.value = false
+            },
+            bodyText = alertMessage,
+            buttonText = "Dismiss".toUpperCase(Locale.getDefault())
+        )
+    }
     Card {
-        Column(Spacing(12.dp)) {
-            Row(
-                ExpandedWidth,
-                mainAxisAlignment = MainAxisAlignment.SpaceBetween
-            ) {
-                Text(
-                    text = "Alerts",
-                    style = +themeTextStyle { body1 }
-                )
-                Button(text = "See All", onClick = { }, style = TextButtonStyle())
+        Column {
+            Ripple(bounded = true) {
+                Clickable(onClick = { openDialog.value = true }) {
+                    Container {
+                        Row(
+                            modifier = Spacing(12.dp) wraps ExpandedWidth,
+                            mainAxisAlignment = MainAxisAlignment.SpaceBetween
+                        ) {
+                            Text(text = "Alerts", style = +themeTextStyle { subtitle2 })
+                            Button(text = "See All", onClick = { }, style = TextButtonStyle())
+                        }
+                    }
+                }
             }
             Divider(
-                Spacing(top = 12.dp, bottom = 12.dp),
+                Spacing(left = 12.dp, right = 12.dp),
                 color = +themeColor { background },
                 height = 2.dp
             )
-            Row {
-                val text = "Heads up, you've used up 90% of your " +
-                        "Shopping budget for this month."
-                Text(
-                    style = +themeTextStyle { body1 },
-                    modifier = Flexible(1f),
-                    text = text
-                )
-                // TODO: icons still don't work
-//                        <vectorResource res=context.resources
-//                            resId=androidx.ui.material.studies.R.drawable.sort_icon/>
-                Button(text = "Sort", onClick = { }, style = TextButtonStyle())
+            Ripple(bounded = true) {
+                Clickable(onClick = { openDialog.value = true }) {
+                    Container {
+                        Row(Spacing(12.dp)) {
+                            Text(
+                                style = +themeTextStyle { body1 },
+                                modifier = Flexible(1f),
+                                text = alertMessage
+                            )
+                            // TODO: icons still don't work
+//                            <vectorResource res=context.resources
+//                                resId=androidx.ui.material.studies.R.drawable.sort_icon/>
+                            Button(text = "Sort", onClick = { }, style = TextButtonStyle())
+                        }
+                    }
+                }
             }
         }
     }
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
index 2e2c5882..ad16cb4 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
@@ -17,14 +17,19 @@
 package androidx.ui.material.studies.rally
 
 import androidx.compose.Composable
+import androidx.compose.ambient
+import androidx.compose.unaryPlus
+import androidx.ui.core.em
 import androidx.ui.core.sp
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.FontFamily
 import androidx.ui.graphics.Color
+import androidx.ui.material.Colors
 import androidx.ui.material.MaterialColors
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.MaterialTypography
+import androidx.ui.material.Typography
 import androidx.ui.text.TextStyle
+import androidx.ui.text.font.FontFamily
+import androidx.ui.text.font.FontWeight
 
 val rallyGreen = Color(0xFF1EB980)
 val rallyDarkGreen = Color(0xFF045D56)
@@ -84,7 +89,27 @@
             fontSize = 10.sp)
 
     )
-    MaterialTheme(colors = colors, typography = typography) {
-        children()
-    }
+    MaterialTheme(colors = colors, typography = typography, children = children)
+}
+
+@Composable
+fun RallyDialogThemeOverlay(children: @Composable() () -> Unit) {
+    val dialogColors = (+ambient(Colors)).copy(
+        primary = Color.White,
+        surface = Color(0xFF1E1E1E),
+        onSurface = Color.White
+    )
+    val currentTypography = +ambient(Typography)
+    val dialogTypography = currentTypography.copy(
+        body1 = currentTypography.body1.copy(
+            fontFamily = FontFamily("RobotoCondensed"),
+            fontWeight = FontWeight.Normal,
+            fontSize = 20.sp
+        ),
+        button = currentTypography.button.copy(
+            fontWeight = FontWeight.Bold,
+            letterSpacing = 0.2.em
+        )
+    )
+    MaterialTheme(colors = dialogColors, typography = dialogTypography, children = children)
 }
\ No newline at end of file
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
index e2ac4bc..5f72c4a 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
@@ -44,13 +44,13 @@
 
         // TriStateCheckbox state reflects state of dependent checkboxes
         val parentState = +memo(state, state2) {
-            if (state && state2) ToggleableState.Checked
-            else if (!state && !state2) ToggleableState.Unchecked
+            if (state && state2) ToggleableState.On
+            else if (!state && !state2) ToggleableState.Off
             else ToggleableState.Indeterminate
         }
         // click on TriStateCheckbox can set state for dependent checkboxes
         val onParentClick = {
-            val s = parentState != ToggleableState.Checked
+            val s = parentState != ToggleableState.On
             onStateChange(s)
             onStateChange2(s)
         }
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
index df6d70d2..6315812 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
@@ -22,15 +22,15 @@
 import androidx.ui.core.dp
 import androidx.ui.foundation.Strings
 import androidx.ui.foundation.selection.ToggleableState
-import androidx.ui.foundation.selection.ToggleableState.Checked
+import androidx.ui.foundation.selection.ToggleableState.On
 import androidx.ui.foundation.selection.ToggleableState.Indeterminate
-import androidx.ui.foundation.selection.ToggleableState.Unchecked
+import androidx.ui.foundation.selection.ToggleableState.Off
 import androidx.ui.foundation.semantics.toggleableState
 import androidx.ui.layout.Column
 import androidx.ui.semantics.accessibilityValue
 import androidx.ui.test.assertHasNoClickAction
-import androidx.ui.test.assertIsChecked
-import androidx.ui.test.assertIsUnchecked
+import androidx.ui.test.assertIsOn
+import androidx.ui.test.assertIsOff
 import androidx.ui.test.assertSemanticsIsEqualTo
 import androidx.ui.test.copyWith
 import androidx.ui.test.createComposeRule
@@ -53,12 +53,12 @@
     private val defaultCheckboxCheckedSemantics = createFullSemantics(
         isEnabled = true,
         value = Strings.Checked,
-        toggleableState = Checked
+        toggleableState = On
     )
 
     private val defaultCheckboxUncheckedSemantics = defaultCheckboxCheckedSemantics.copyWith {
         accessibilityValue = Strings.Unchecked
-        toggleableState = Unchecked
+        toggleableState = Off
     }
 
     private val defaultTag = "myCheckbox"
@@ -93,9 +93,9 @@
         }
 
         findByTag(defaultTag)
-            .assertIsUnchecked()
+            .assertIsOff()
             .doClick()
-            .assertIsChecked()
+            .assertIsOn()
     }
 
     @Test
@@ -108,11 +108,11 @@
         }
 
         findByTag(defaultTag)
-            .assertIsUnchecked()
+            .assertIsOff()
             .doClick()
-            .assertIsChecked()
+            .assertIsOn()
             .doClick()
-            .assertIsUnchecked()
+            .assertIsOff()
     }
 
     @Test
@@ -131,12 +131,12 @@
 
     @Test
     fun checkBoxTest_MaterialSize_WhenChecked() {
-        materialSizeTestForValue(Checked)
+        materialSizeTestForValue(On)
     }
 
     @Test
     fun checkBoxTest_MaterialSize_WhenUnchecked() {
-        materialSizeTestForValue(Unchecked)
+        materialSizeTestForValue(Off)
     }
 
     @Test
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
index 3dc299f..6b1e2bd 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
@@ -27,8 +27,8 @@
 import androidx.ui.layout.Column
 import androidx.ui.semantics.accessibilityValue
 import androidx.ui.test.assertHasNoClickAction
-import androidx.ui.test.assertIsChecked
-import androidx.ui.test.assertIsUnchecked
+import androidx.ui.test.assertIsOn
+import androidx.ui.test.assertIsOff
 import androidx.ui.test.assertSemanticsIsEqualTo
 import androidx.ui.test.copyWith
 import androidx.ui.test.createComposeRule
@@ -49,12 +49,12 @@
 
     private val defaultUncheckedSwitchSemantics = createFullSemantics(
         isEnabled = true,
-        toggleableState = ToggleableState.Unchecked,
+        toggleableState = ToggleableState.Off,
         value = Strings.Unchecked // TODO(a11y): Do we still call this checked/unchecked?
     )
 
     private val defaultCheckedSwitchSemantics = defaultUncheckedSwitchSemantics.copyWith {
-        toggleableState = ToggleableState.Checked
+        toggleableState = ToggleableState.On
         accessibilityValue = Strings.Checked
     }
     private val defaultSwitchTag = "switch"
@@ -85,9 +85,9 @@
             }
         }
         findByTag(defaultSwitchTag)
-            .assertIsUnchecked()
+            .assertIsOff()
             .doClick()
-            .assertIsChecked()
+            .assertIsOn()
     }
 
     @Test
@@ -100,11 +100,11 @@
             }
         }
         findByTag(defaultSwitchTag)
-            .assertIsUnchecked()
+            .assertIsOff()
             .doClick()
-            .assertIsChecked()
+            .assertIsOn()
             .doClick()
-            .assertIsUnchecked()
+            .assertIsOff()
     }
 
     @Test
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
index 0c3372f..2d221d7 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
@@ -52,9 +52,10 @@
  * @param onCloseRequest Executes when the user tries to dismiss the Dialog by clicking outside
  * or pressing the back button.
  * @param title The title of the Dialog which should specify the purpose of the Dialog. The title
- * is not mandatory, because there may be sufficient information inside the [text].
- * @param text The text which presents the details regarding
- * the Dialog's purpose.
+ * is not mandatory, because there may be sufficient information inside the [text]. Provided text
+ * style will be [MaterialTypography.h6].
+ * @param text The text which presents the details regarding the Dialog's purpose. Provided text
+ * style will be [MaterialTypography.body1].
  * @param confirmButton A button which is meant to confirm a proposed action, thus resolving
  * what triggered the dialog.
  * @param dismissButton A button which is meant to dismiss the dialog.
@@ -95,9 +96,10 @@
  * @param onCloseRequest Executes when the user tries to dismiss the Dialog by clicking outside
  * or pressing the back button.
  * @param title The title of the Dialog which should specify the purpose of the Dialog. The title
- * is not mandatory, because there may be sufficient information inside the [text].
- * @param text The text which presents the details regarding
- * the Dialog's purpose.
+ * is not mandatory, because there may be sufficient information inside the [text]. Provided text
+ * style will be [MaterialTypography.h6].
+ * @param text The text which presents the details regarding the Dialog's purpose. Provided text
+ * style will be [MaterialTypography.body1].
  * @param buttons Function that emits the layout with the buttons
  */
 @Suppress("USELESS_CAST")
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
index 2108efc..a0a715e 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
@@ -213,13 +213,13 @@
 
 private fun generateTransitionDefinition(color: Color, unselectedColor: Color) =
     transitionDefinition {
-        state(ToggleableState.Checked) {
+        state(ToggleableState.On) {
             this[CheckFractionProp] = 1f
             this[InnerRadiusFractionProp] = 1f
             this[CenterGravitationForCheck] = 0f
             this[BoxColorProp] = color
         }
-        state(ToggleableState.Unchecked) {
+        state(ToggleableState.Off) {
             this[CheckFractionProp] = 0f
             this[InnerRadiusFractionProp] = 0f
             this[CenterGravitationForCheck] = 1f
@@ -231,26 +231,26 @@
             this[CenterGravitationForCheck] = 1f
             this[BoxColorProp] = color
         }
-        transition(fromState = ToggleableState.Unchecked, toState = ToggleableState.Checked) {
+        transition(fromState = ToggleableState.Off, toState = ToggleableState.On) {
             boxTransitionFromUnchecked()
             CenterGravitationForCheck using snap()
         }
-        transition(fromState = ToggleableState.Checked, toState = ToggleableState.Unchecked) {
+        transition(fromState = ToggleableState.On, toState = ToggleableState.Off) {
             boxTransitionToUnchecked()
             CenterGravitationForCheck using tween {
                 duration = CheckStrokeAnimationDuration
             }
         }
-        transition(ToggleableState.Checked to ToggleableState.Indeterminate,
-            ToggleableState.Indeterminate to ToggleableState.Checked) {
+        transition(ToggleableState.On to ToggleableState.Indeterminate,
+            ToggleableState.Indeterminate to ToggleableState.On) {
             CenterGravitationForCheck using tween {
                 duration = CheckStrokeAnimationDuration
             }
         }
-        transition(fromState = ToggleableState.Indeterminate, toState = ToggleableState.Unchecked) {
+        transition(fromState = ToggleableState.Indeterminate, toState = ToggleableState.Off) {
             boxTransitionToUnchecked()
         }
-        transition(fromState = ToggleableState.Unchecked, toState = ToggleableState.Indeterminate) {
+        transition(fromState = ToggleableState.Off, toState = ToggleableState.Indeterminate) {
             boxTransitionFromUnchecked()
         }
     }
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
index f30d563..20881c1 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/DataTable.kt
@@ -366,12 +366,12 @@
                     if (showCheckboxes) {
                         Container(height = headerRowHeight, padding = cellSpacing) {
                             val parentState = when (selectableRows.count { it.selected }) {
-                                selectableRows.size -> ToggleableState.Checked
-                                0 -> ToggleableState.Unchecked
+                                selectableRows.size -> ToggleableState.On
+                                0 -> ToggleableState.Off
                                 else -> ToggleableState.Indeterminate
                             }
                             TriStateCheckbox(value = parentState, onClick = {
-                                val newValue = parentState != ToggleableState.Checked
+                                val newValue = parentState != ToggleableState.On
                                 if (header.onSelectAll != null) {
                                     header.onSelectAll.invoke(newValue)
                                 } else {
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt b/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
index 5ea6cea..5aa29b3 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
@@ -59,7 +59,7 @@
 ) {
     Wrap {
         Ripple(bounded = false) {
-            Toggleable(checked = checked, onCheckedChange = onCheckedChange) {
+            Toggleable(value = checked, onValueChange = onCheckedChange) {
                 Padding(padding = DefaultSwitchPadding) {
                     SwitchImpl(checked, onCheckedChange, color)
                 }
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt b/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
index e92cac8..c5126a7 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
@@ -30,8 +30,6 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 class AndroidFontResourceLoader(private val context: Context) : Font.ResourceLoader {
     override fun load(font: Font): Typeface {
-        // TODO(siyamed): This is an expensive operation and discouraged in the API Docs
-        // remove when alternative resource loading system is defined.
         val resId = context.resources.getIdentifier(
             font.name.substringBefore("."),
             "font",
diff --git a/ui/ui-test/api/0.1.0-dev02.txt b/ui/ui-test/api/0.1.0-dev02.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/0.1.0-dev02.txt
+++ b/ui/ui-test/api/0.1.0-dev02.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/0.1.0-dev03.txt b/ui/ui-test/api/0.1.0-dev03.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/0.1.0-dev03.txt
+++ b/ui/ui-test/api/0.1.0-dev03.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/current.txt b/ui/ui-test/api/current.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/current.txt
+++ b/ui/ui-test/api/current.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt b/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt
+++ b/ui/ui-test/api/public_plus_experimental_0.1.0-dev02.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-test/api/public_plus_experimental_0.1.0-dev03.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/public_plus_experimental_current.txt b/ui/ui-test/api/public_plus_experimental_current.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/ui/ui-test/api/public_plus_experimental_current.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/restricted_0.1.0-dev02.txt b/ui/ui-test/api/restricted_0.1.0-dev02.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev02.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev02.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/restricted_0.1.0-dev03.txt b/ui/ui-test/api/restricted_0.1.0-dev03.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev03.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/api/restricted_current.txt b/ui/ui-test/api/restricted_current.txt
index ea248216..eb9c996 100644
--- a/ui/ui-test/api/restricted_current.txt
+++ b/ui/ui-test/api/restricted_current.txt
@@ -13,11 +13,11 @@
     method public static void assertDoesNotExist(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasClickAction(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertHasNoClickAction(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsChecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsHidden(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsInMutuallyExclusiveGroup(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnchecked(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsVisible(androidx.ui.test.SemanticsNodeInteraction);
     method public static void assertNoLongerExists(androidx.ui.test.SemanticsNodeInteraction);
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
index 7209945..f8c0776 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
@@ -52,11 +52,11 @@
         }
 
         findAll {
-            getOrNull(FoundationSemanticsProperties.ToggleableState) == ToggleableState.Checked
+            getOrNull(FoundationSemanticsProperties.ToggleableState) == ToggleableState.On
         }
             .assertCountEquals(2)
             .forEach {
-                it.assertIsChecked()
+                it.assertIsOn()
             }
     }
 
@@ -85,7 +85,7 @@
             .assertCountEquals(2)
             .forEach {
                 it.doClick()
-                it.assertIsChecked()
+                it.assertIsOn()
             }
     }
 
@@ -103,7 +103,7 @@
         }
 
         findAll {
-            getOrNull(FoundationSemanticsProperties.ToggleableState) != ToggleableState.Checked
+            getOrNull(FoundationSemanticsProperties.ToggleableState) != ToggleableState.On
         }
             .assertCountEquals(0)
     }
@@ -133,9 +133,9 @@
         findAll { isToggleable }.apply {
             get(0)
                 .doClick()
-                .assertIsChecked()
+                .assertIsOn()
             get(1)
-                .assertIsUnchecked()
+                .assertIsOff()
         }.assertCountEquals(2)
     }
 
@@ -171,14 +171,14 @@
 
         findAll { isToggleable }.assertCountEquals(2).apply {
             get(0)
-                .assertIsUnchecked()
+                .assertIsOff()
                 .doClick()
-                .assertIsChecked()
+                .assertIsOn()
         }
 
         findAll { isToggleable }.assertCountEquals(3).apply {
             get(2)
-                .assertIsUnchecked()
+                .assertIsOff()
         }
     }
 
@@ -209,9 +209,9 @@
 
         findAll { isToggleable }.assertCountEquals(2).apply {
             get(0)
-                .assertIsUnchecked()
+                .assertIsOff()
                 .doClick()
-                .assertIsChecked()
+                .assertIsOn()
             get(1)
                 .assertNoLongerExists()
         }
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
index 8b560ea..9c38db3 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
@@ -40,13 +40,13 @@
 
 // TODO: Make this inner class once @Model gets fixed.
 @Model
-class CheckboxState(var value: ToggleableState = ToggleableState.Unchecked) {
+class CheckboxState(var value: ToggleableState = ToggleableState.Off) {
     fun toggle() {
         value =
-            if (value == ToggleableState.Checked) {
-                ToggleableState.Unchecked
+            if (value == ToggleableState.On) {
+                ToggleableState.Off
             } else {
-                ToggleableState.Checked
+                ToggleableState.On
             }
     }
 }
@@ -86,8 +86,8 @@
 
         activity.runOnUiThread(object : Runnable { // Workaround for lambda bug in IR
             override fun run() {
-                val state1 = CheckboxState(value = ToggleableState.Unchecked)
-                val state2 = CheckboxState(value = ToggleableState.Checked)
+                val state1 = CheckboxState(value = ToggleableState.Off)
+                val state2 = CheckboxState(value = ToggleableState.On)
 
                 val linearLayout = LinearLayout(activity)
                     .apply { orientation = LinearLayout.VERTICAL }
@@ -153,22 +153,22 @@
 
         findByTag("checkbox1")
             .doClick()
-            .assertIsChecked()
+            .assertIsOn()
 
         findByTag("checkbox2")
-            .assertIsUnchecked()
+            .assertIsOff()
 
-        Espresso.onView(withText("Compose 1 - Checked")).check(matches(isDisplayed()))
-        Espresso.onView(withText("Compose 2 - Unchecked")).check(matches(isDisplayed()))
+        Espresso.onView(withText("Compose 1 - On")).check(matches(isDisplayed()))
+        Espresso.onView(withText("Compose 2 - Off")).check(matches(isDisplayed()))
 
         findByTag("checkbox2")
             .doClick()
-            .assertIsUnchecked()
+            .assertIsOff()
 
         findByTag("checkbox1")
-            .assertIsChecked()
+            .assertIsOn()
 
-        Espresso.onView(withText("Compose 1 - Checked")).check(matches(isDisplayed()))
-        Espresso.onView(withText("Compose 2 - Unchecked")).check(matches(isDisplayed()))
+        Espresso.onView(withText("Compose 1 - On")).check(matches(isDisplayed()))
+        Espresso.onView(withText("Compose 2 - Off")).check(matches(isDisplayed()))
     }
 }
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
index 1a5b89c..2118d3b 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
@@ -67,6 +67,6 @@
 
         Truth.assertThat(interaction.hadPendingChangesAfterLastAction).isTrue()
 
-        node.assertIsChecked()
+        node.assertIsOn()
     }
 }
\ No newline at end of file
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
index e417c4d3..fc2b54c 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
@@ -76,10 +76,10 @@
  *
  * Throws [AssertionError] if the component is not unchecked, indeterminate, or not toggleable.
  */
-fun SemanticsNodeInteraction.assertIsChecked(): SemanticsNodeInteraction {
+fun SemanticsNodeInteraction.assertIsOn(): SemanticsNodeInteraction {
     assertIsToggleable()
     verify({ "Component is toggled off, expected it to be toggled on" }) {
-        it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.Checked
+        it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.On
     }
     return this
 }
@@ -89,10 +89,10 @@
  *
  * Throws [AssertionError] if the component is checked, indeterminate, or not toggleable.
  */
-fun SemanticsNodeInteraction.assertIsUnchecked(): SemanticsNodeInteraction {
+fun SemanticsNodeInteraction.assertIsOff(): SemanticsNodeInteraction {
     assertIsToggleable()
     verify({ "Component is toggled on, expected it to be toggled off" }) {
-        it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.Unchecked
+        it[FoundationSemanticsProperties.ToggleableState] == ToggleableState.Off
     }
 
     return this
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt b/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
index 64fcc18..78a269e 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
@@ -20,12 +20,12 @@
 
 /**
  * Represents a component with which one can interact with the hierarchy.
- * Examples of interactions include [findByTag], [isToggleable], [assertIsChecked], [doClick]
+ * Examples of interactions include [findByTag], [isToggleable], [assertIsOn], [doClick]
  *
  * Example usage:
  * findByTag("myCheckbox")
  *    .doClick()
- *    .assertIsChecked()
+ *    .assertIsOn()
  */
 class SemanticsNodeInteraction internal constructor(
     internal val semanticsTreeNode: SemanticsTreeNode,
diff --git a/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt b/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
index c3da838..ebe9ff9 100644
--- a/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
+++ b/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
@@ -89,35 +89,35 @@
     }
 
     @Test
-    fun assertIsChecked_forCheckedElement_isOk() {
+    fun assertIsOn_forCheckedElement_isOk() {
         semanticsTreeInteractionFactory = { selector ->
             FakeSemanticsTreeInteraction(selector)
                 .withProperties(SemanticsConfiguration().also {
                     it.testTag = "test"
-                    it.toggleableState = ToggleableState.Checked
+                    it.toggleableState = ToggleableState.On
                 })
         }
 
         findByTag("test")
-            .assertIsChecked()
+            .assertIsOn()
     }
 
     @Test(expected = AssertionError::class)
-    fun assertIsChecked_forUncheckedElement_throwsError() {
+    fun assertIsOn_forUncheckedElement_throwsError() {
         semanticsTreeInteractionFactory = { selector ->
             FakeSemanticsTreeInteraction(selector)
                 .withProperties(SemanticsConfiguration().also {
                     it.testTag = "test"
-                    it.toggleableState = ToggleableState.Unchecked
+                    it.toggleableState = ToggleableState.Off
                 })
         }
 
         findByTag("test")
-            .assertIsChecked()
+            .assertIsOn()
     }
 
     @Test(expected = AssertionError::class)
-    fun assertIsChecked_forNotToggleableElement_throwsError() {
+    fun assertIsOn_forNotToggleableElement_throwsError() {
         semanticsTreeInteractionFactory = { selector ->
             FakeSemanticsTreeInteraction(selector)
                 .withProperties(SemanticsConfiguration().also {
@@ -126,39 +126,39 @@
         }
 
         findByTag("test")
-            .assertIsChecked()
+            .assertIsOn()
     }
 
     @Test(expected = AssertionError::class)
-    fun assertIsUnchecked_forCheckedElement_throwsError() {
+    fun assertIsOff_forCheckedElement_throwsError() {
         semanticsTreeInteractionFactory = { selector ->
             FakeSemanticsTreeInteraction(selector)
                 .withProperties(SemanticsConfiguration().also {
                     it.testTag = "test"
-                    it.toggleableState = ToggleableState.Checked
+                    it.toggleableState = ToggleableState.On
                 })
         }
 
         findByTag("test")
-            .assertIsUnchecked()
+            .assertIsOff()
     }
 
     @Test
-    fun assertIsUnchecked_forUncheckedElement_isOk() {
+    fun assertIsOff_forUncheckedElement_isOk() {
         semanticsTreeInteractionFactory = { selector ->
             FakeSemanticsTreeInteraction(selector)
                 .withProperties(SemanticsConfiguration().also {
                     it.testTag = "test"
-                    it.toggleableState = ToggleableState.Unchecked
+                    it.toggleableState = ToggleableState.Off
                 })
         }
 
         findByTag("test")
-            .assertIsUnchecked()
+            .assertIsOff()
     }
 
     @Test(expected = AssertionError::class)
-    fun assertIsUnchecked_forNotToggleableElement_throwsError() {
+    fun assertIsOff_forNotToggleableElement_throwsError() {
         semanticsTreeInteractionFactory = { selector ->
             FakeSemanticsTreeInteraction(selector)
                 .withProperties(SemanticsConfiguration().also {
@@ -167,7 +167,7 @@
         }
 
         findByTag("test")
-            .assertIsUnchecked()
+            .assertIsOff()
     }
 
     @Test(expected = AssertionError::class)
diff --git a/ui/ui-text/api/0.1.0-dev03.txt b/ui/ui-text/api/0.1.0-dev03.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/0.1.0-dev03.txt
+++ b/ui/ui-text/api/0.1.0-dev03.txt
@@ -1,16 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.input {
 
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    ctor public EditorStyle();
-    method public androidx.ui.text.TextStyle? component1();
-    method public androidx.ui.graphics.Color? component2();
-    method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    method public androidx.ui.graphics.Color? getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
   public enum ImeAction {
     enum_constant public static final androidx.ui.input.ImeAction Done;
     enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
 package androidx.ui.text.font {
 
   public final class Font {
-    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String component1();
     method public androidx.ui.text.font.FontWeight component2();
     method public androidx.ui.text.font.FontStyle component3();
-    method public int component4();
-    method public String component5();
-    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
-    method public String getFontVariationSettings();
+    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String getName();
     method public androidx.ui.text.font.FontStyle getStyle();
-    method public int getTtcIndex();
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
diff --git a/ui/ui-text/api/current.txt b/ui/ui-text/api/current.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/current.txt
+++ b/ui/ui-text/api/current.txt
@@ -1,16 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.input {
 
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    ctor public EditorStyle();
-    method public androidx.ui.text.TextStyle? component1();
-    method public androidx.ui.graphics.Color? component2();
-    method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    method public androidx.ui.graphics.Color? getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
   public enum ImeAction {
     enum_constant public static final androidx.ui.input.ImeAction Done;
     enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
 package androidx.ui.text.font {
 
   public final class Font {
-    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String component1();
     method public androidx.ui.text.font.FontWeight component2();
     method public androidx.ui.text.font.FontStyle component3();
-    method public int component4();
-    method public String component5();
-    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
-    method public String getFontVariationSettings();
+    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String getName();
     method public androidx.ui.text.font.FontStyle getStyle();
-    method public int getTtcIndex();
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
diff --git a/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt b/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
+++ b/ui/ui-text/api/public_plus_experimental_0.1.0-dev03.txt
@@ -1,16 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.input {
 
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    ctor public EditorStyle();
-    method public androidx.ui.text.TextStyle? component1();
-    method public androidx.ui.graphics.Color? component2();
-    method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    method public androidx.ui.graphics.Color? getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
   public enum ImeAction {
     enum_constant public static final androidx.ui.input.ImeAction Done;
     enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
 package androidx.ui.text.font {
 
   public final class Font {
-    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String component1();
     method public androidx.ui.text.font.FontWeight component2();
     method public androidx.ui.text.font.FontStyle component3();
-    method public int component4();
-    method public String component5();
-    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
-    method public String getFontVariationSettings();
+    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String getName();
     method public androidx.ui.text.font.FontStyle getStyle();
-    method public int getTtcIndex();
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
diff --git a/ui/ui-text/api/public_plus_experimental_current.txt b/ui/ui-text/api/public_plus_experimental_current.txt
index 4150384..f6ec67a 100644
--- a/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/ui/ui-text/api/public_plus_experimental_current.txt
@@ -1,16 +1,6 @@
 // Signature format: 3.0
 package androidx.ui.input {
 
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    ctor public EditorStyle();
-    method public androidx.ui.text.TextStyle? component1();
-    method public androidx.ui.graphics.Color? component2();
-    method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    method public androidx.ui.graphics.Color? getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
   public enum ImeAction {
     enum_constant public static final androidx.ui.input.ImeAction Done;
     enum_constant public static final androidx.ui.input.ImeAction Go;
@@ -358,17 +348,13 @@
 package androidx.ui.text.font {
 
   public final class Font {
-    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String component1();
     method public androidx.ui.text.font.FontWeight component2();
     method public androidx.ui.text.font.FontStyle component3();
-    method public int component4();
-    method public String component5();
-    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
-    method public String getFontVariationSettings();
+    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String getName();
     method public androidx.ui.text.font.FontStyle getStyle();
-    method public int getTtcIndex();
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
diff --git a/ui/ui-text/api/restricted_0.1.0-dev03.txt b/ui/ui-text/api/restricted_0.1.0-dev03.txt
index 8899d8b..35a3089 100644
--- a/ui/ui-text/api/restricted_0.1.0-dev03.txt
+++ b/ui/ui-text/api/restricted_0.1.0-dev03.txt
@@ -8,16 +8,6 @@
 
 
 
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    ctor public EditorStyle();
-    method public androidx.ui.text.TextStyle? component1();
-    method public androidx.ui.graphics.Color? component2();
-    method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    method public androidx.ui.graphics.Color? getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
 
   public enum ImeAction {
     enum_constant public static final androidx.ui.input.ImeAction Done;
@@ -386,17 +376,13 @@
 package androidx.ui.text.font {
 
   public final class Font {
-    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String component1();
     method public androidx.ui.text.font.FontWeight component2();
     method public androidx.ui.text.font.FontStyle component3();
-    method public int component4();
-    method public String component5();
-    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
-    method public String getFontVariationSettings();
+    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String getName();
     method public androidx.ui.text.font.FontStyle getStyle();
-    method public int getTtcIndex();
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
diff --git a/ui/ui-text/api/restricted_current.txt b/ui/ui-text/api/restricted_current.txt
index 8899d8b..35a3089 100644
--- a/ui/ui-text/api/restricted_current.txt
+++ b/ui/ui-text/api/restricted_current.txt
@@ -8,16 +8,6 @@
 
 
 
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    ctor public EditorStyle();
-    method public androidx.ui.text.TextStyle? component1();
-    method public androidx.ui.graphics.Color? component2();
-    method public androidx.ui.input.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color? selectionColor);
-    method public androidx.ui.graphics.Color? getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
 
   public enum ImeAction {
     enum_constant public static final androidx.ui.input.ImeAction Done;
@@ -386,17 +376,13 @@
 package androidx.ui.text.font {
 
   public final class Font {
-    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
+    ctor public Font(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String component1();
     method public androidx.ui.text.font.FontWeight component2();
     method public androidx.ui.text.font.FontStyle component3();
-    method public int component4();
-    method public String component5();
-    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style, int ttcIndex, String fontVariationSettings);
-    method public String getFontVariationSettings();
+    method public androidx.ui.text.font.Font copy(String name, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
     method public String getName();
     method public androidx.ui.text.font.FontStyle getStyle();
-    method public int getTtcIndex();
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
index 83cbedb..c55e8dc 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputField.kt
@@ -20,7 +20,6 @@
 import androidx.compose.state
 import androidx.compose.unaryPlus
 import androidx.ui.core.TextField
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.layout.Column
@@ -86,6 +85,6 @@
         keyboardType = keyboardType,
         imeAction = imeAction,
         onValueChange = { state.value = it },
-        editorStyle = EditorStyle(textStyle = TextStyle(fontSize = fontSize8))
+        textStyle = TextStyle(fontSize = fontSize8)
     )
 }
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
index b253b96..8e3ef59 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldFocusTransition.kt
@@ -26,7 +26,6 @@
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.layout.CrossAxisAlignment
 import androidx.ui.graphics.Color
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.ImeAction
 import androidx.ui.layout.Column
 import androidx.ui.text.TextStyle
@@ -57,7 +56,7 @@
     }
     TextField(
         value = state.value,
-        editorStyle = EditorStyle(textStyle = TextStyle(color = color, fontSize = 32.sp)),
+        textStyle = TextStyle(color = color, fontSize = 32.sp),
         onValueChange = {
             state.value = it
         },
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
index 25a6c67..f33a865 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeInputFieldTrickyUseCase.kt
@@ -24,7 +24,6 @@
 import androidx.ui.layout.Column
 import androidx.ui.layout.CrossAxisAlignment
 import androidx.ui.foundation.VerticalScroller
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.KeyboardType
 import androidx.ui.text.TextStyle
 
@@ -46,7 +45,7 @@
     val state = +state { "" }
     TextField(
         value = state.value,
-        editorStyle = EditorStyle(textStyle = TextStyle(fontSize = 32.sp)),
+        textStyle = TextStyle(fontSize = 32.sp),
         onValueChange = {
             if (it.all { it.isDigit() }) {
                 state.value = it
@@ -61,7 +60,7 @@
     val state = +state { "" }
     TextField(
         value = state.value,
-        editorStyle = EditorStyle(textStyle = TextStyle(fontSize = 32.sp)),
+        textStyle = TextStyle(fontSize = 32.sp),
         onValueChange = {
             state.value = it
         }
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
index 7afdd1a..763c5f4 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeVariousInputField.kt
@@ -28,7 +28,6 @@
 import androidx.ui.input.VisualTransformation
 import androidx.ui.core.ipx
 import androidx.ui.graphics.Color
-import androidx.ui.input.EditorStyle
 import androidx.ui.input.ImeAction
 import androidx.ui.input.KeyboardType
 import androidx.ui.layout.Column
@@ -254,7 +253,7 @@
         imeAction = imeAction,
         visualTransformation = visualTransformation,
         onValueChange = { state.value = onValueChange(state.value, it) },
-        editorStyle = EditorStyle(textStyle = TextStyle(fontSize = fontSize8))
+        textStyle = TextStyle(fontSize = fontSize8)
     )
 }
 
@@ -266,7 +265,7 @@
         TextField(
             value = state.value,
             onValueChange = { state.value = it },
-            editorStyle = EditorStyle(textStyle = TextStyle(fontSize = fontSize8))
+            textStyle = TextStyle(fontSize = fontSize8)
         )
     }
 
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
index bb3f6c6..ba93ad2 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
@@ -430,7 +430,6 @@
         }
     }
 
-    // TODO(qqd) on API 23 this test causes test to be blocked and wait indefinitely. Please fix.
     @Suppress
     @Test(expected = java.lang.IndexOutOfBoundsException::class)
     fun getBoundingBox_ltr_textPosition_larger_than_length_throw_exception() {
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt
index 9cc88a5..0999217 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextDelegateIntegrationTest.kt
@@ -51,18 +51,6 @@
     private val context = InstrumentationRegistry.getInstrumentation().context
     private val resourceLoader = TestFontResourceLoader(context)
 
-    // TODO(qqd): The default font size should be 14.0 but it returns 15.0. Need further
-    // investigation. It is being changed in the native level, and probably related to the font.
-//    @Test
-//    fun preferredLineHeight_style_not_set() {
-//        val defaultTextStyle = TextStyle(fontFamily = fontFamily)
-//        val textDelegate = TextDelegate(style = defaultTextStyle)
-//
-//        val prefferedHeight = textDelegate.preferredLineHeight
-//
-//        assertThat(prefferedHeight).isEqualTo(14.0)
-//    }
-
     @Test
     fun minIntrinsicWidth_getter() {
         withDensity(density) {
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
index 9d7cb89..d338f8d 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
@@ -23,7 +23,6 @@
 import androidx.ui.text.font.Font
 import kotlin.math.ceil
 
-// TODO(siyamed): This should return platform independent bitmap but we dont have it yet
 fun Paragraph.bitmap(): Bitmap {
     val bitmap = Bitmap.createBitmap(
         ceil(this.width).toInt(),
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
index 7a4a377..1dff233 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
@@ -61,8 +61,6 @@
 @RunWith(MockitoJUnitRunner::class)
 @SmallTest
 class TypefaceAdapterTest {
-    // TODO(siyamed): These native calls should be removed after the
-    // counterparts are implemented in compose.
     private val context = InstrumentationRegistry.getInstrumentation().context
     private val resourceLoader = TestFontResourceLoader(context)
 
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
index dce606d..8ed2029 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/MultiParagraph.kt
@@ -177,8 +177,6 @@
             paragraphInfo.bottom = (currentHeight + paragraph.height).px
             currentHeight += paragraph.height
 
-            // TODO(haoyuchang): solve the corner case where the ellipsis won't be applied when
-            //  currentLineNum == maxLines but there are still more paragraphs
             if (paragraph.didExceedMaxLines ||
                 (currentLineCount == maxLines && index != this.paragraphInfoList.lastIndex)
             ) {
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt
deleted file mode 100644
index 83a427b..0000000
--- a/ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.ui.text
-
-import androidx.ui.engine.geometry.Rect
-import androidx.ui.text.style.TextDirection
-import androidx.ui.toStringAsFixed
-
-/**
- * A rectangle enclosing a run of text.
- *
- * This is similar to [Rect] but includes an inherent [TextDirection].
- */
-internal data class TextBox(
-    /**
-     * The left edge of the text box, irrespective of direction.
-     * To get the leading edge (which may depend on the [direction]), consider [start].
-     */
-    val left: Float,
-    /** The top edge of the text box. */
-    val top: Float,
-    /**
-     * The right edge of the text box, irrespective of direction.
-     * To get the trailing edge (which may depend on the [direction]), consider [end].
-     */
-    val right: Float,
-    /** The bottom edge of the text box. */
-    val bottom: Float,
-    /** The direction in which text inside this box flows. */
-    val direction: TextDirection
-) {
-
-    /** Returns a rect of the same size as this box. */
-    fun toRect(): Rect {
-        return Rect.fromLTRB(left, top, right, bottom)
-    }
-
-    /**
-     * The [left] edge of the box for left-to-right text; the [right] edge of the box for
-     * right-to-left text.
-     * See also:
-     *  * [direction], which specifies the text direction.
-     */
-    fun start(): Float {
-        return if ((direction == TextDirection.Ltr)) left else right
-    }
-
-    /**
-     * The [right] edge of the box for left-to-right text; the [left] edge of the box for
-     * right-to-left text.
-     * See also:
-     *  * [direction], which specifies the text direction.
-     */
-    fun end(): Float {
-        return if ((direction == TextDirection.Ltr)) right else left
-    }
-
-    override fun toString(): String {
-        return "TextBox.fromLTRBD(${left.toStringAsFixed(1)}, ${top.toStringAsFixed(1)}, " +
-            "${right.toStringAsFixed(1)}, ${bottom.toStringAsFixed(1)}, $direction)"
-    }
-
-    companion object {
-        fun fromLTRBD(
-            left: Float,
-            top: Float,
-            right: Float,
-            bottom: Float,
-            direction: TextDirection
-        ): TextBox {
-            return TextBox(left, top, right, bottom, direction)
-        }
-    }
-}
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt
index 36420a4..ad41e95 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/TextDelegate.kt
@@ -281,8 +281,6 @@
     }
 
     fun layout(constraints: Constraints) {
-        // TODO(haoyuchang): fix that when softWarp is false and overflow is Ellipsis, ellipsis
-        //  doesn't work.
         val minWidth = constraints.minWidth.value.toFloat()
         val widthMatters = softWrap || overflow == TextOverflow.Ellipsis
         val maxWidth = if (widthMatters) {
@@ -382,7 +380,6 @@
     ) = assumeLayout { layoutResult ->
         if (start == end) return
         val selectionPath = layoutResult.multiParagraph.getPathForRange(start, end)
-        // TODO(haoyuchang): check if move this paint to parameter is better
         canvas.drawPath(selectionPath, Paint().apply { this.color = color })
     }
 
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
index 01f24a8..7b36cb9 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
@@ -156,8 +156,6 @@
  * between [start] and [stop]. The interpolation can be extrapolated beyond 0.0 and
  * 1.0, so negative values and values greater than 1.0 are valid.
  */
-// TODO(siyamed): This should not accept nullable values
-// TODO(siyamed): This should be in the file level, not a companon function
 fun lerp(start: TextStyle? = null, stop: TextStyle? = null, fraction: Float): TextStyle? {
     val aIsNull = start == null
     val bIsNull = stop == null
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
index a9aafdf..074121f 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
@@ -16,8 +16,6 @@
 
 package androidx.ui.text.font
 
-// TODO(siyamed): might need nullable defaults for FontWeight and FontStyle which
-//  would mean read the weight and style from the font.
 /**
  * Defines a font to be used while rendering text.
  *
@@ -28,32 +26,13 @@
  * that is given in a `TextStyle`.
  * @param style The style of the font, normal or italic. The system uses this to match a font to a
  * font request that is given in a `TextStyle`.
- * @param ttcIndex The index of the font collection. If the font file is not a font collection the
- * value should not be changed
- * @param fontVariationSettings The TrueType or OpenType font variation settings. Valid only when
- * the font that is used is a variable font. The settings string is constructed from multiple
- * pairs of axis tag and style values. The axis tag must contain four ASCII characters and must
- * be wrapped with single quotes (U+0027) or double quotes (U+0022). Axis strings that are longer
- * or shorter than four characters, or contain characters outside of U+0020..U+007E are invalid.
- * If a specified axis name is not defined in the font, the settings will be ignored.
- * Examples: to set font width to 150: "'wdth' 150", to set the font slant to 20 degrees and ask
- * for italic style: "'slnt' 20, 'ital' 1".
  *
  * @see [FontFamily]
  */
 data class Font(
     val name: String,
     val weight: FontWeight = FontWeight.Normal,
-    val style: FontStyle = FontStyle.Normal,
-    // TODO(siyamed): implement integration and add tests
-    val ttcIndex: Int = 0,
-    // TODO(siyamed): implement integration and add tests
-    // https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview
-    // not sure if this would be here or in the composable properties similar to TextStyle.fontWeight
-    // CSS says: "These descriptors define initial settings that apply when the font defined by an
-    // @font-face rule is rendered. They do not affect font selection"
-    // https://www.w3.org/TR/css-fonts-4/#ref-for-descdef-font-face-font-variation-settings
-    val fontVariationSettings: String = ""
+    val style: FontStyle = FontStyle.Normal
 ) {
     init {
         assert(name.isNotEmpty()) { "Font name cannot be empty" }
@@ -69,7 +48,6 @@
          * @param font [Font] to be loaded
          * @return platform specific font
          */
-        // TODO(siyamed) when expect/actual is enabled return a typealias
         fun load(font: Font): Any
     }
 }
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
index 7c06de5..c2e9a2d 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
@@ -30,8 +30,6 @@
     internal val weight: Int
 ) : Comparable<FontWeight> {
 
-    // TODO(siyamed): This is weird since it should actually be possible to create a font
-    //  weight that is not one of the items here. This decision changes the lerp behavior.
     companion object {
         /** Thin, the minimum thickness */
         val W100 = FontWeight(100)
@@ -110,8 +108,6 @@
  * Values for [fraction] are usually obtained from an [Animation<Float>], such as
  * an `AnimationController`.
  */
-// TODO(siyamed): These should not accept nullable arguments
-// TODO(siyamed): This should be in the file, not a Companion function
 fun lerp(start: FontWeight?, stop: FontWeight?, fraction: Float): FontWeight {
     val index = lerp(
         start?.index ?: FontWeight.Normal.index,
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
index 1363054..bacff45 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
@@ -122,7 +122,6 @@
 
     override val height: Float
         get() = layout.let {
-            // TODO(haoyuchang): Figure out a way to add bottomPadding properly
             val lineCount = it.lineCount
             if (maxLines != null &&
                 maxLines >= 0 &&
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
index 9bf20d7..43dbf60 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
@@ -76,9 +76,6 @@
         textSize *= it
     }
 
-    // TODO(siyamed): This default values are problem here. If the user just gives a single font
-    // in the family, and does not provide any fontWeight, TypefaceAdapter will still get the
-    // call as FontWeight.normal (which is the default value)
     if (style.hasFontAttributes()) {
         typeface = createTypeface(style, typefaceAdapter)
     }
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
index 098a8ca..1d200cb 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
@@ -34,13 +34,10 @@
  *
  * @param resourceLoader [Font.ResourceLoader] for Android.
  */
-// TODO(siyamed): font matcher should be at an upper layer such as Paragraph, whoever
-// will call TypefaceAdapter can know about a single font
 internal open class TypefaceAdapter(
     val fontMatcher: FontMatcher = FontMatcher(),
     val resourceLoader: Font.ResourceLoader
 ) {
-
     data class CacheKey(
         val fontFamily: FontFamily? = null,
         val fontWeight: FontWeight,
@@ -122,9 +119,7 @@
             return Typeface.DEFAULT
         }
 
-        // TODO(siyamed): ideally we should not have platform dependent if's here.
-        // will think more and move to ui-text later.
-        val result = if (Build.VERSION.SDK_INT < 28) {
+        return if (Build.VERSION.SDK_INT < 28) {
             val targetStyle = getTypefaceStyle(fontWeight, fontStyle)
             if (genericFontFamily.isNullOrEmpty()) {
                 Typeface.defaultFromStyle(targetStyle)
@@ -132,11 +127,10 @@
                 Typeface.create(genericFontFamily, targetStyle)
             }
         } else {
-            val familyTypeface: Typeface
-            if (genericFontFamily == null) {
-                familyTypeface = Typeface.DEFAULT
+            val familyTypeface = if (genericFontFamily == null) {
+                Typeface.DEFAULT
             } else {
-                familyTypeface = Typeface.create(genericFontFamily, Typeface.NORMAL)
+                Typeface.create(genericFontFamily, Typeface.NORMAL)
             }
 
             Typeface.create(
@@ -145,8 +139,6 @@
                 fontStyle == FontStyle.Italic
             )
         }
-
-        return result
     }
 
     /**
@@ -167,9 +159,6 @@
         fontFamily: FontFamily,
         fontSynthesis: FontSynthesis = FontSynthesis.All
     ): Typeface {
-        // TODO(siyamed): add genericFontFamily : String? = null for fallback
-        // TODO(siyamed): add support for multiple font families
-
         val font = fontMatcher.matchFont(fontFamily, fontWeight, fontStyle)
 
         val typeface = try {
@@ -187,7 +176,7 @@
         return synthesize(typeface, font, fontWeight, fontStyle, fontSynthesis)
     }
 
-    fun synthesize(
+    private fun synthesize(
         typeface: Typeface,
         font: Font,
         fontWeight: FontWeight,
@@ -238,7 +227,7 @@
         return getTypefaceStyle(fontWeight >= ANDROID_BOLD, fontStyle == FontStyle.Italic)
     }
 
-    fun getTypefaceStyle(isBold: Boolean, isItalic: Boolean): Int {
+    private fun getTypefaceStyle(isBold: Boolean, isItalic: Boolean): Int {
         return if (isItalic && isBold) {
             Typeface.BOLD_ITALIC
         } else if (isBold) {
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
index 867dd28..a35aee7 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
@@ -45,7 +45,6 @@
 /**
  * Linearly interpolate two [BaselineShift]s.
  */
-// TODO(haoyuchang): This should not accept nullables
 fun lerp(start: BaselineShift?, stop: BaselineShift?, fraction: Float): BaselineShift? {
     if (start == null && stop == null) {
         return null
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt
deleted file mode 100644
index 299dc9b..0000000
--- a/ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.ui.text
-
-import androidx.ui.engine.geometry.Rect
-import androidx.ui.text.style.TextDirection
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@RunWith(JUnit4::class)
-class TextBoxTest {
-
-    @Test
-    fun `toRect`() {
-        val textBox = TextBox(
-            1.0f,
-            2.0f,
-            3.0f,
-            4.0f,
-            TextDirection.Ltr
-        )
-        assertThat(textBox.toRect()).isEqualTo(Rect.fromLTRB(1.0f, 2.0f, 3.0f, 4.0f))
-    }
-
-    @Test
-    fun `start for LTR`() {
-        val textBox = TextBox(
-            1.0f,
-            2.0f,
-            3.0f,
-            4.0f,
-            TextDirection.Ltr
-        )
-        assertThat(textBox.start()).isEqualTo(1.0f)
-    }
-
-    @Test
-    fun `start for RTL`() {
-        val textBox = TextBox(
-            1.0f,
-            2.0f,
-            3.0f,
-            4.0f,
-            TextDirection.Rtl
-        )
-        assertThat(textBox.start()).isEqualTo(3.0f)
-    }
-
-    @Test
-    fun `end for LTR`() {
-        val textBox = TextBox(
-            1.0f,
-            2.0f,
-            3.0f,
-            4.0f,
-            TextDirection.Ltr
-        )
-        assertThat(textBox.end()).isEqualTo(3.0f)
-    }
-
-    @Test
-    fun `end for RTL`() {
-        val textBox = TextBox(
-            1.0f,
-            2.0f,
-            3.0f,
-            4.0f,
-            TextDirection.Rtl
-        )
-        assertThat(textBox.end()).isEqualTo(1.0f)
-    }
-
-    @Test
-    fun `fromLTRBD`() {
-        val textBox = TextBox.fromLTRBD(
-            1.0f,
-            2.0f,
-            3.0f,
-            4.0f,
-            TextDirection.Ltr
-        )
-        assertThat(textBox.toRect()).isEqualTo(Rect.fromLTRB(1.0f, 2.0f, 3.0f, 4.0f))
-        assertThat(textBox.direction).isEqualTo(TextDirection.Ltr)
-    }
-
-    @Test
-    fun `toString `() {
-        val textBox = TextBox(
-            1.0f,
-            2.0f,
-            3.0f,
-            4.0f,
-            TextDirection.Ltr
-        )
-        assertThat(textBox.toString())
-            .isEqualTo("TextBox.fromLTRBD(1.0, 2.0, 3.0, 4.0, ${TextDirection.Ltr})")
-    }
-}
\ No newline at end of file
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
index 09dd17d..6455cd0 100644
--- a/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
@@ -34,9 +34,7 @@
             Font(
                 name = "fontName",
                 weight = FontWeight.W900,
-                style = FontStyle.Italic,
-                ttcIndex = 1,
-                fontVariationSettings = "'wdth' 150"
+                style = FontStyle.Italic
             )
         )
 
@@ -44,9 +42,7 @@
             Font(
                 name = "fontName",
                 weight = FontWeight.W900,
-                style = FontStyle.Italic,
-                ttcIndex = 1,
-                fontVariationSettings = "'wdth' 150"
+                style = FontStyle.Italic
             )
         )
 
@@ -59,19 +55,15 @@
             Font(
                 name = "fontName",
                 weight = FontWeight.W900,
-                style = FontStyle.Italic,
-                ttcIndex = 1,
-                fontVariationSettings = "'wdth' 150"
+                style = FontStyle.Italic
             )
         )
 
         val otherFontFamily = FontFamily(
             Font(
                 name = "fontName",
-                weight = FontWeight.W900,
-                style = FontStyle.Italic,
-                ttcIndex = 1,
-                fontVariationSettings = "'wdth' 151" // this is different
+                weight = FontWeight.W800,
+                style = FontStyle.Italic
             )
         )
 
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
index 9070fcc..427f853 100644
--- a/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
@@ -33,8 +33,6 @@
         val font = Font(name = "fontName")
         assertThat(font.weight).isEqualTo(FontWeight.Normal)
         assertThat(font.style).isEqualTo(FontStyle.Normal)
-        assertThat(font.ttcIndex).isEqualTo(0)
-        assertThat(font.fontVariationSettings).isEmpty()
     }
 
     @Test
@@ -42,17 +40,13 @@
         val font = Font(
             name = "fontName",
             weight = FontWeight.W900,
-            style = FontStyle.Italic,
-            ttcIndex = 1,
-            fontVariationSettings = "'wdth' 150"
+            style = FontStyle.Italic
         )
 
         val otherFont = Font(
             name = "fontName",
             weight = FontWeight.W900,
-            style = FontStyle.Italic,
-            ttcIndex = 1,
-            fontVariationSettings = "'wdth' 150"
+            style = FontStyle.Italic
         )
 
         assertThat(font).isEqualTo(otherFont)
@@ -63,17 +57,13 @@
         val font = Font(
             name = "fontName",
             weight = FontWeight.W900,
-            style = FontStyle.Italic,
-            ttcIndex = 1,
-            fontVariationSettings = "'wdth' 150"
+            style = FontStyle.Italic
         )
 
         val otherFont = Font(
             name = "fontName",
-            weight = FontWeight.W900,
-            style = FontStyle.Italic,
-            ttcIndex = 1,
-            fontVariationSettings = "'wdth' 151" // this is different
+            weight = FontWeight.W800,
+            style = FontStyle.Italic
         )
 
         assertThat(font).isNotEqualTo(otherFont)
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
index 9bda79f..0b2c5f9 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
@@ -32,8 +32,6 @@
 internal class LayoutlibFontResourceLoader(private val context: Context) : Font.ResourceLoader {
     @RequiresApi(Build.VERSION_CODES.O)
     override fun load(font: Font): Typeface {
-        // TODO(siyamed): This is an expensive operation and discouraged in the API Docs
-        // remove when alternative resource loading system is defined.
         val resId = context.resources.getIdentifier(
             font.name.substringBefore("."),
             "font",
diff --git a/work/workmanager-ktx/api/2.3.0-alpha02.ignore b/work/workmanager-ktx/api/2.3.0-alpha02.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/2.3.0-alpha02.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+    Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/2.3.0-alpha02.txt b/work/workmanager-ktx/api/2.3.0-alpha02.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/2.3.0-alpha02.txt
+++ b/work/workmanager-ktx/api/2.3.0-alpha02.txt
@@ -18,10 +18,6 @@
     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();
diff --git a/work/workmanager-ktx/api/2.3.0-alpha04.ignore b/work/workmanager-ktx/api/2.3.0-alpha04.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/2.3.0-alpha04.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+    Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/2.3.0-alpha04.txt b/work/workmanager-ktx/api/2.3.0-alpha04.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/2.3.0-alpha04.txt
+++ b/work/workmanager-ktx/api/2.3.0-alpha04.txt
@@ -18,10 +18,6 @@
     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();
diff --git a/work/workmanager-ktx/api/current.txt b/work/workmanager-ktx/api/current.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/current.txt
+++ b/work/workmanager-ktx/api/current.txt
@@ -18,10 +18,6 @@
     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();
diff --git a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt
+++ b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha02.txt
@@ -18,10 +18,6 @@
     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();
diff --git a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
+++ b/work/workmanager-ktx/api/public_plus_experimental_2.3.0-alpha04.txt
@@ -18,10 +18,6 @@
     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();
diff --git a/work/workmanager-ktx/api/public_plus_experimental_current.txt b/work/workmanager-ktx/api/public_plus_experimental_current.txt
index 5873b39..b875ebc 100644
--- a/work/workmanager-ktx/api/public_plus_experimental_current.txt
+++ b/work/workmanager-ktx/api/public_plus_experimental_current.txt
@@ -18,10 +18,6 @@
     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();
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha02.ignore b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+    Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt
index 075851a..1cff0b6 100644
--- a/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha02.txt
@@ -23,11 +23,6 @@
     enum_constant public static final androidx.work.DirectExecutor INSTANCE;
   }
 
-  public final class ListenableFutureKt {
-    ctor public ListenableFutureKt();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.Continuation<? super R> p);
-  }
-
   public final class OneTimeWorkRequestKt {
     ctor public OneTimeWorkRequestKt();
     method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha04.ignore b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.ignore
new file mode 100644
index 0000000..8aff62a
--- /dev/null
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+RemovedClass: androidx.work.ListenableFutureKt:
+    Removed class androidx.work.ListenableFutureKt
diff --git a/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
index 075851a..1cff0b6 100644
--- a/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
+++ b/work/workmanager-ktx/api/restricted_2.3.0-alpha04.txt
@@ -23,11 +23,6 @@
     enum_constant public static final androidx.work.DirectExecutor INSTANCE;
   }
 
-  public final class ListenableFutureKt {
-    ctor public ListenableFutureKt();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.Continuation<? super R> p);
-  }
-
   public final class OneTimeWorkRequestKt {
     ctor public OneTimeWorkRequestKt();
     method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/api/restricted_current.txt b/work/workmanager-ktx/api/restricted_current.txt
index 075851a..1cff0b6 100644
--- a/work/workmanager-ktx/api/restricted_current.txt
+++ b/work/workmanager-ktx/api/restricted_current.txt
@@ -23,11 +23,6 @@
     enum_constant public static final androidx.work.DirectExecutor INSTANCE;
   }
 
-  public final class ListenableFutureKt {
-    ctor public ListenableFutureKt();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static suspend inline <R> Object! await(com.google.common.util.concurrent.ListenableFuture<R>, kotlin.coroutines.Continuation<? super R> p);
-  }
-
   public final class OneTimeWorkRequestKt {
     ctor public OneTimeWorkRequestKt();
     method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder OneTimeWorkRequestBuilder();
diff --git a/work/workmanager-ktx/build.gradle b/work/workmanager-ktx/build.gradle
index 2a279bb..6b74ce6 100644
--- a/work/workmanager-ktx/build.gradle
+++ b/work/workmanager-ktx/build.gradle
@@ -45,8 +45,8 @@
     api project(':work:work-runtime')
     api(KOTLIN_STDLIB)
     api(KOTLIN_COROUTINES_ANDROID)
+    implementation project(':concurrent:concurrent-futures-ktx')
 
-    androidTestImplementation("androidx.concurrent:concurrent-futures:1.0.0")
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
     androidTestImplementation(ANDROIDX_TEST_CORE)
     androidTestImplementation(ANDROIDX_TEST_RUNNER)
diff --git a/work/workmanager-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt b/work/workmanager-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt
deleted file mode 100644
index 1f87734..0000000
--- a/work/workmanager-ktx/src/androidTest/java/androidx/work/ListenableFutureTest.kt
+++ /dev/null
@@ -1,75 +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.work
-
-import androidx.concurrent.futures.ResolvableFuture
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-import org.hamcrest.CoreMatchers.`is`
-import org.hamcrest.CoreMatchers.instanceOf
-import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class ListenableFutureTest {
-    @Test
-    fun testFutureWithResult() {
-        val future: ResolvableFuture<Int> = ResolvableFuture.create()
-        val job = GlobalScope.launch {
-            val result = future.await()
-            assertThat(result, `is`(10))
-        }
-        future.set(10)
-        runBlocking {
-            job.join()
-        }
-    }
-    @Test
-    fun testFutureWithException() {
-        val future: ResolvableFuture<Int> = ResolvableFuture.create()
-        val exception = RuntimeException("Something bad happened")
-        val job = GlobalScope.launch {
-            try {
-                future.await()
-            } catch (throwable: Throwable) {
-                assertThat(throwable, `is`(instanceOf(RuntimeException::class.java)))
-                assertThat(throwable.message, `is`(exception.message))
-            }
-        }
-        future.setException(exception)
-        runBlocking {
-            job.join()
-        }
-    }
-    @Test
-    fun testFutureCancellation() {
-        val future: ResolvableFuture<Int> = ResolvableFuture.create()
-        val job = GlobalScope.launch {
-            future.await()
-        }
-        future.cancel(true)
-        runBlocking {
-            job.join()
-            assertThat(job.isCancelled, `is`(true))
-        }
-    }
-}
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt b/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
index fa05791..e15192f 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/CoroutineWorker.kt
@@ -17,6 +17,7 @@
 package androidx.work
 
 import android.content.Context
+import androidx.concurrent.futures.await
 import androidx.work.impl.utils.futures.SettableFuture
 import com.google.common.util.concurrent.ListenableFuture
 import kotlinx.coroutines.CoroutineScope
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt b/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt
deleted file mode 100644
index 51504ab..0000000
--- a/work/workmanager-ktx/src/main/java/androidx/work/ListenableFuture.kt
+++ /dev/null
@@ -1,59 +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.
- */
-
-@file:Suppress("NOTHING_TO_INLINE")
-
-package androidx.work
-
-import androidx.annotation.RestrictTo
-import com.google.common.util.concurrent.ListenableFuture
-import kotlinx.coroutines.suspendCancellableCoroutine
-import java.util.concurrent.CancellationException
-import java.util.concurrent.ExecutionException
-import kotlin.coroutines.resume
-import kotlin.coroutines.resumeWithException
-
-/**
- * Awaits for the completion of the [ListenableFuture] without blocking a thread.
- *
- * @return R The result from the [ListenableFuture]
- *
- * @hide
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-suspend inline fun <R> ListenableFuture<R>.await(): R {
-    // Fast path
-    if (isDone) {
-        try {
-            return get()
-        } catch (e: ExecutionException) {
-            throw e.cause ?: e
-        }
-    }
-    return suspendCancellableCoroutine { cancellableContinuation ->
-        addListener(Runnable {
-            try {
-                cancellableContinuation.resume(get())
-            } catch (throwable: Throwable) {
-                val cause = throwable.cause ?: throwable
-                when (throwable) {
-                    is CancellationException -> cancellableContinuation.cancel(cause)
-                    else -> cancellableContinuation.resumeWithException(cause)
-                }
-            }
-        }, DirectExecutor.INSTANCE)
-    }
-}
diff --git a/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt b/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt
index c05181c..892cb51 100644
--- a/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt
+++ b/work/workmanager-ktx/src/main/java/androidx/work/Operation.kt
@@ -19,6 +19,8 @@
 
 package androidx.work
 
+import androidx.concurrent.futures.await
+
 /**
  * Awaits an [Operation] without blocking a thread.
  *
diff --git a/work/workmanager-testing/build.gradle b/work/workmanager-testing/build.gradle
index 281b68b..f7566fa 100644
--- a/work/workmanager-testing/build.gradle
+++ b/work/workmanager-testing/build.gradle
@@ -40,6 +40,7 @@
     implementation("androidx.lifecycle:lifecycle-livedata-core:2.1.0")
     implementation("androidx.room:room-runtime:2.2.1")
 
+    androidTestImplementation(project(':concurrent:concurrent-futures-ktx'))
     androidTestImplementation("androidx.arch.core:core-testing:2.1.0")
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
     androidTestImplementation(ANDROIDX_TEST_CORE)
diff --git a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
index b9c085f..51d9286 100644
--- a/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
+++ b/work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt
@@ -18,6 +18,7 @@
 
 import android.content.Context
 import android.net.Uri
+import androidx.concurrent.futures.await
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
@@ -26,7 +27,6 @@
 import androidx.work.OneTimeWorkRequestBuilder
 import androidx.work.WorkerFactory
 import androidx.work.WorkerParameters
-import androidx.work.await
 import androidx.work.testing.workers.TestListenableWorker
 import androidx.work.testing.workers.TestWorker
 import kotlinx.coroutines.runBlocking
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 9ddd4b9..3c730f5 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
@@ -122,7 +122,7 @@
         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         Intent delayMet = CommandHandler.createDelayMetIntent(context, workSpecId);
         PendingIntent pendingIntent = PendingIntent.getService(
-                context, alarmId, delayMet, PendingIntent.FLAG_ONE_SHOT);
+                context, alarmId, delayMet, PendingIntent.FLAG_UPDATE_CURRENT);
         if (alarmManager != null) {
             if (Build.VERSION.SDK_INT >= 19) {
                 alarmManager.setExact(RTC_WAKEUP, triggerAtMillis, pendingIntent);